From 9c34ceb167d2ec0ff68f097cdcb49184d1e8f97f Mon Sep 17 00:00:00 2001 From: j3oss Date: Wed, 21 Jul 2021 11:07:45 +0200 Subject: [PATCH] added lightObject shader --- assets/meshes/lightSphere_Sphere.mesh | Bin 0 -> 7818 bytes assets/shaders/lightObject.frag | 78 ++++++++++++++++++++++++++ assets/shaders/lightObject.vert | 76 +++++++++++++++++++++++++ scenes/DamagedHelmet.evsc | 32 ++++++++++- scenes/MainScene.evsc | 13 +++++ 5 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 assets/meshes/lightSphere_Sphere.mesh create mode 100644 assets/shaders/lightObject.frag create mode 100644 assets/shaders/lightObject.vert diff --git a/assets/meshes/lightSphere_Sphere.mesh b/assets/meshes/lightSphere_Sphere.mesh new file mode 100644 index 0000000000000000000000000000000000000000..82aeaa2ea09b266650724ca130271cbe6c50d327 GIT binary patch literal 7818 zcmb`L$!{D*6voGa1Tc$%5XWJ_z_13!jx#oy*x+fvSy)UQLkJ)RIV>LV!3lT?C(cNL+H^g!#ViYIpUc6irPr(x-Z!<>#vR z>U~|^b1A&qQ>o*bu_G^ymPTHfE*3{8MkdF~qnW;*on2Y={)ABC6Z7NV(#R?B-Fb7vhYRn5_sRdn z!+N=9Z_Z)8Gx^2-*GiK?{*cEYZ`JgWmcN=+{&b$X9!@;NdK>3qz1~;r+dsn|YIwcJ z^NW>NFOWa(!FaDlk-q2j7+t0Dn7>X)-_I^Qu!0`Z_lpb9ls{V@_F8qb*1vMS-_-`K z@~88jL;s$fANTeCb>WSnf64n)>t7e1sU9}GYPzLB|NHo#-U|Is`pdVqTEWKuByUIg zOko~=westq{oJ{(Jn2`iy!ZYX_L#$5@vXq4Yh~APll>9S zuW_Dvy^ZtW``#CSHLsNOi(3Bb=lzEK(XTeC{K@^y_1gG>esSTM z@@K=VpnvICAF2M8{=)p(_<`hgpnq}R@K0;~>%ueD*M(=QhYfG{xut&k-|MCG@Tc%P z${zlC`A~4pp!fY~asD&$=zkl2ss{bx%9DQT%9DOz%j15b|9$=UF04;KhlDYCHSEFY z)Dn;X{VqQ<@nk(*c&7Eb@MQlsvR?XMl)n?J=aT}ZLi8 z_*g{M8G4-L$@+e{uwcbIuySY_`78K8Z0%;=b74Ka&(-xetVc8_ebna^$C4+XM}+mz zIZ+%l^!iI4zn#3ku^y&ZeLQ*p5!Rz|p1fXu5Y(f7-rjRd6`l`{DStt~@qT*keu25M zIUh)#tgkDNE7Px+{M%)I{JmaZTb`e8sp{v0iPEG`MoHZ-aJ@FyU&%Ao!-dDWg|B$O zy7FW_Y}3?>m~E2^Hl!)ZR&o8^>E?I>m_sP!c)b-5ZA+ohx2%a=Yy$a|0dRp zGfZ&SkN+2=`2Xp#mWSs#f&aCs=NqzrSqmFKkUUurS00|11pbVk2}W0*tZySc`qhQ@=VF~=>?I%p?!HPiw%Lv1SN*bZ%gE`qLAF~{qmo1p8V zyH(6_8`KJIgl<(a$2*`N=tig$N<*8WJ5|i_9_SjV7s@~#&|T0j6?1$9x*fV1x?jZ{ zAB1odn94#ALtCNSpa)dUaW`}el!tiG-vbRmPpX*XL5Lfm4|-I^9EYGTXfN~(^bo`c zL;F)<~x F`WK{G>)!wX literal 0 HcmV?d00001 diff --git a/assets/shaders/lightObject.frag b/assets/shaders/lightObject.frag new file mode 100644 index 0000000..b3a5464 --- /dev/null +++ b/assets/shaders/lightObject.frag @@ -0,0 +1,78 @@ +#version 450 +#extension GL_EXT_nonuniform_qualifier : require + +#include "shaders://_builtins/constants.glsl" +#include "shaders://_builtins/srgb_ops.glsl" +#include "shaders://_builtins/PBR.glsl" + +struct Material { + vec4 baseColor; + uint albedoTexture; + + uint normalTexture; + + float metallicFactor; + float roughnessFactor; + uint metallicRoughnessTexture; +}; + +struct Light { + vec3 color; + uint intensity; +}; + +struct Scene { + uint lightsCount; +}; + +vec3 directional_light = vec3(1.0); + +layout( push_constant ) uniform constants +{ + mat4 render_matrix; + uint indexBufferIndex; + uint vertexBufferIndex; + uint materialBufferIndex; +} PushConstants; + +layout(set = 0, binding = 0) uniform SceneData { + layout(align = 16) Scene mesh; +} SceneBuffers[]; + +layout(set = 0, binding = 1) uniform LightBuffer { + layout(align = 16) Light lights[]; +} LightsBuffers; + +layout (set = 0, binding = 2) uniform samplerCube skybox; + +layout(set = 2, binding = 3) buffer MaterialBuffer { + layout(align = 16) Material materials[]; +} MaterialBuffers; + +layout(set = 2, binding = 4) uniform sampler2D texSampler[]; + +layout(location = 0) in vec2 uv; +layout(location = 1) smooth in mat3 TBN; +layout(location = 4) in vec4 outpos; +layout(location = 5) in vec3 cameraPos; + +layout (location = 0) out vec4 gPosition; +layout (location = 1) out vec4 gNormal; +layout (location = 2) out vec4 gAlbedo; +layout (location = 3) out vec4 gSpecular; + +float near = 0.001; +float far = 50.0; + +float LinearizeDepth(float depth) +{ + float z = depth * 2.0 - 1.0; // back to NDC + return (2.0 * near * far) / (far + near - z * (far - near)); +} + +void main() { + gNormal = vec4(1.0); + gSpecular = vec4(1.0); + gPosition = outpos; + gAlbedo = vec4(1.0); +} diff --git a/assets/shaders/lightObject.vert b/assets/shaders/lightObject.vert new file mode 100644 index 0000000..235caee --- /dev/null +++ b/assets/shaders/lightObject.vert @@ -0,0 +1,76 @@ +#version 450 +#extension GL_EXT_nonuniform_qualifier : require + +struct Material { + vec4 baseColor; + uint albedoTexture; + + uint normalTexture; + + float metallicFactor; + float roughnessFactor; + uint metallicRoughnessTexture; +}; + +struct Vertex { + vec4 position; + vec4 normal; + vec2 uv[2]; + vec4 tangent; + vec4 bitangent; // No longer needed. // TODO remove +}; + +struct Light { + vec3 color; + uint intensity; +}; + +struct Scene { + uint lightsCount; +}; + +struct Mesh { + uint asd; +}; + +layout( push_constant ) uniform constants +{ + mat4 tranformMatrix; + uint indexBufferIndex; + uint vertexBufferIndex; + uint materialBufferIndex; +} PushConstants; + +layout(set = 1, binding = 0) uniform CameraParam { + mat4 projection; + mat4 view; +} Camera; + +layout(set = 2, binding = 0) buffer MeshBuffer { + layout(align = 16) Mesh mesh; +} MeshBuffers[]; + +layout(set = 2, binding = 1) buffer VertexBuffer { + layout(align = 16) Vertex vertices[]; +} VertexBuffers[]; + +layout(set = 2, binding = 2) buffer IndexBuffer { + uint indices[]; +} IndexBuffers[]; + +layout(set = 2, binding = 4) uniform sampler2D texSampler[]; + +layout(location = 0) out vec2 uv; +layout(location = 1) smooth out mat3 TBN; + +layout(location = 4) out vec4 outpos; +layout(location = 5) out vec3 cameraPos; + +void main() +{ + uint index = IndexBuffers[ PushConstants.indexBufferIndex ].indices[gl_VertexIndex]; + Vertex vertex = VertexBuffers[ PushConstants.vertexBufferIndex ].vertices[ index ]; + + gl_Position = Camera.projection * Camera.view * PushConstants.tranformMatrix * vec4(vertex.position.xyz, 1.0); + outpos = PushConstants.tranformMatrix * vec4(vertex.position.xyz, 1.0); +} diff --git a/scenes/DamagedHelmet.evsc b/scenes/DamagedHelmet.evsc index 20d22c9..492709f 100644 --- a/scenes/DamagedHelmet.evsc +++ b/scenes/DamagedHelmet.evsc @@ -20,6 +20,14 @@ "metallicFactor": 1, "pipeline": "DefferedPipeline", "roughnessFactor": 1 + }, + { + "baseColor":[1.0,1.0,1.0,1.0], + "emissiveFactor":[1.0,1.0,1.0], + "id":"LightMaterial", + "metallicFactor":1.0, + "pipeline":"LightSpherePipeline", + "roughnessFactor":1.0 } ], "nodes": [ @@ -59,11 +67,16 @@ { "components": [ { - "position": [ -2, 1, 2], - "rotation": [-180, 0, 0], + "position": [ 0, 1, 0], + "rotation": [0, 0, 0], "scale": [ 1, 1, 1], "type": "TransformComponent" }, + { + "material":"LightMaterial", + "mesh":"assets://meshes/lightSphere_Sphere.mesh", + "type":"RenderComponent" + }, { "color": [1.0, 1.0, 1.0, 1.0], "intensity": 200, @@ -79,6 +92,11 @@ "scale": [ 1, 1, 1], "type": "TransformComponent" }, + { + "material":"LightMaterial", + "mesh":"assets://meshes/lightSphere_Sphere.mesh", + "type":"RenderComponent" + }, { "color": [1.0, 1.0, 1.0, 1.0], "intensity": 200, @@ -94,6 +112,11 @@ "scale": [ 1, 1, 1], "type": "TransformComponent" }, + { + "material":"LightMaterial", + "mesh":"assets://meshes/lightSphere_Sphere.mesh", + "type":"RenderComponent" + }, { "color": [1.0, 1.0, 1.0, 1.0], "intensity": 200, @@ -109,6 +132,11 @@ "scale": [ 1, 1, 1], "type": "TransformComponent" }, + { + "material":"LightMaterial", + "mesh":"assets://meshes/lightSphere_Sphere.mesh", + "type":"RenderComponent" + }, { "color": [1.0, 1.0, 1.0, 1.0], "intensity": 200, diff --git a/scenes/MainScene.evsc b/scenes/MainScene.evsc index 06bcb96..1da1440 100755 --- a/scenes/MainScene.evsc +++ b/scenes/MainScene.evsc @@ -273,6 +273,19 @@ } ] }, + { + "id": "LightSpherePipeline", + "shaderStages": [ + { + "type": "Vertex", + "shaderPath": "shaders://lightObject.vert" + }, + { + "type": "Fragment", + "shaderPath": "shaders://lightObject.frag" + } + ] + }, { "id": "DefferedPipeline", "shaderStages": [