Loading shaders/ubershader.frag→shaders/normalMappedObject.frag +15 −12 Original line number Diff line number Diff line Loading @@ -6,12 +6,16 @@ layout(binding = 0, std140) uniform Camera { vec3 position; } camera; layout (binding = 1, std140) uniform Light { struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } light; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; Loading @@ -20,12 +24,11 @@ layout(binding = 2, std140) uniform Material { } material; layout(binding = 0) uniform sampler2D diffuseTexture; layout(binding = 3) uniform sampler2D specularTexture; layout(binding = 3) uniform sampler2D normalTexture; layout(location = 0) uniform mat4 modelMatrix; layout(location = 0) in vec3 fs_Position; layout(location = 1) in vec3 fs_Normal; layout(location = 2) in vec2 fs_TextureCoord; layout(location = 3) in vec3 fs_CameraPosition; layout(location = 4) in vec3 fs_LightPosition; Loading @@ -34,20 +37,20 @@ layout(location = 0) out vec4 finalColor; void main() { vec3 lightVector = fs_LightPosition.xyz - fs_Position * light.position.w; vec3 lightVector = fs_LightPosition - fs_Position * lights[0].position.w; vec3 L = normalize(lightVector); vec3 N = normalize(fs_Normal); vec3 E = normalize(fs_CameraPosition - fs_Position); vec3 H = normalize(L + E); vec3 N = texture(normalTexture, fs_TextureCoord).rgb; N = normalize(N * 2.0 - 1.0); float NdotL = max(dot(N, L), 0.0); float NdotH = max(dot(N, H), 0.0); float distance2 = light.position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; float distance2 = lights[0].position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; vec3 ambient = material.ambientColor.rgb * light.ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * light.diffuseColor.rgb; vec3 specular = material.specularColor.rgb * light.specularColor.rgb; vec3 ambient = material.ambientColor.rgb * lights[0].ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * lights[0].diffuseColor.rgb; vec3 specular = material.specularColor.rgb * lights[0].specularColor.rgb; vec3 color = ambient.rgb + NdotL * diffuse.rgb Loading shaders/ubershader.vert→shaders/normalMappedObject.vert +7 −5 Original line number Diff line number Diff line Loading @@ -6,12 +6,16 @@ layout(binding = 0, std140) uniform Camera { vec3 position; } camera; layout (binding = 1, std140) uniform Light { struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } light; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; Loading @@ -27,7 +31,6 @@ layout(location = 2) in vec2 textureCoord; layout(location = 3) in vec3 tangent; layout(location = 0) out vec3 fs_Position; layout(location = 1) out vec3 fs_Normal; layout(location = 2) out vec2 fs_TextureCoord; layout(location = 3) out vec3 fs_CameraPosition; layout(location = 4) out vec3 fs_LightPosition; Loading @@ -41,9 +44,8 @@ void main() mat3 TBN = transpose(mat3(T,B,N)); fs_CameraPosition = TBN * camera.position; fs_LightPosition = TBN * light.position.xyz; fs_LightPosition = TBN * lights[0].position.xyz; fs_Position = TBN * vec3(modelMatrix * vec4(position, 1.0)); fs_Normal = normalMatrix * normal; fs_TextureCoord = textureCoord; gl_Position = camera.projection * camera.view * modelMatrix * vec4(position, 1.0); Loading shaders/texturedObject.frag 0 → 100644 +66 −0 Original line number Diff line number Diff line #version 450 layout(binding = 0, std140) uniform Camera { mat4 projection; mat4 view; vec3 position; } camera; struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } material; layout(location = 0) uniform mat4 modelMatrix; layout(binding = 0) uniform sampler2D diffuseTexture; layout(location = 0) in vec3 fs_Position; layout(location = 1) in vec3 fs_Normal; layout(location = 2) in vec2 fs_TextureCoord; layout(location = 0) out vec4 finalColor; void main() { vec3 lightsSum = vec3(0.0); for(int i = 0; i < lights.length(); i++) { Light light = lights[i]; vec3 lightVector = light.position.xyz - fs_Position * light.position.w; vec3 L = normalize(lightVector); vec3 N = normalize(fs_Normal); vec3 E = normalize(camera.position - fs_Position); vec3 H = normalize(L + E); float NdotL = max(dot(N, L), 0.0); float NdotH = max(dot(N, H), 0.0); float distance2 = light.position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; vec3 ambient = material.ambientColor.rgb * light.ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * light.diffuseColor.rgb; vec3 specular = material.specularColor.rgb * light.specularColor.rgb; vec3 color = ambient.rgb + NdotL * diffuse.rgb + pow(NdotH, material.specularColor.w) * specular; color /= distance2; lightsSum += color; } finalColor = vec4(lightsSum, 1.0); } shaders/texturedObject.vert 0 → 100644 +43 −0 Original line number Diff line number Diff line #version 450 layout(binding = 0, std140) uniform Camera { mat4 projection; mat4 view; vec3 position; } camera; struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } material; layout(location = 0) uniform mat4 modelMatrix; layout(location = 0) in vec3 position; layout(location = 1) in vec3 normal; layout(location = 2) in vec2 textureCoord; layout(location = 0) out vec3 fs_Position; layout(location = 1) out vec3 fs_Normal; layout(location = 2) out vec2 fs_TextureCoord; void main() { fs_Position = vec3(modelMatrix * vec4(position, 1.0)); fs_Normal = transpose(inverse(mat3(modelMatrix))) * normal; fs_TextureCoord = textureCoord; gl_Position = camera.projection * camera.view * modelMatrix * vec4(position, 1.0); } Loading
shaders/ubershader.frag→shaders/normalMappedObject.frag +15 −12 Original line number Diff line number Diff line Loading @@ -6,12 +6,16 @@ layout(binding = 0, std140) uniform Camera { vec3 position; } camera; layout (binding = 1, std140) uniform Light { struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } light; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; Loading @@ -20,12 +24,11 @@ layout(binding = 2, std140) uniform Material { } material; layout(binding = 0) uniform sampler2D diffuseTexture; layout(binding = 3) uniform sampler2D specularTexture; layout(binding = 3) uniform sampler2D normalTexture; layout(location = 0) uniform mat4 modelMatrix; layout(location = 0) in vec3 fs_Position; layout(location = 1) in vec3 fs_Normal; layout(location = 2) in vec2 fs_TextureCoord; layout(location = 3) in vec3 fs_CameraPosition; layout(location = 4) in vec3 fs_LightPosition; Loading @@ -34,20 +37,20 @@ layout(location = 0) out vec4 finalColor; void main() { vec3 lightVector = fs_LightPosition.xyz - fs_Position * light.position.w; vec3 lightVector = fs_LightPosition - fs_Position * lights[0].position.w; vec3 L = normalize(lightVector); vec3 N = normalize(fs_Normal); vec3 E = normalize(fs_CameraPosition - fs_Position); vec3 H = normalize(L + E); vec3 N = texture(normalTexture, fs_TextureCoord).rgb; N = normalize(N * 2.0 - 1.0); float NdotL = max(dot(N, L), 0.0); float NdotH = max(dot(N, H), 0.0); float distance2 = light.position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; float distance2 = lights[0].position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; vec3 ambient = material.ambientColor.rgb * light.ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * light.diffuseColor.rgb; vec3 specular = material.specularColor.rgb * light.specularColor.rgb; vec3 ambient = material.ambientColor.rgb * lights[0].ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * lights[0].diffuseColor.rgb; vec3 specular = material.specularColor.rgb * lights[0].specularColor.rgb; vec3 color = ambient.rgb + NdotL * diffuse.rgb Loading
shaders/ubershader.vert→shaders/normalMappedObject.vert +7 −5 Original line number Diff line number Diff line Loading @@ -6,12 +6,16 @@ layout(binding = 0, std140) uniform Camera { vec3 position; } camera; layout (binding = 1, std140) uniform Light { struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } light; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; Loading @@ -27,7 +31,6 @@ layout(location = 2) in vec2 textureCoord; layout(location = 3) in vec3 tangent; layout(location = 0) out vec3 fs_Position; layout(location = 1) out vec3 fs_Normal; layout(location = 2) out vec2 fs_TextureCoord; layout(location = 3) out vec3 fs_CameraPosition; layout(location = 4) out vec3 fs_LightPosition; Loading @@ -41,9 +44,8 @@ void main() mat3 TBN = transpose(mat3(T,B,N)); fs_CameraPosition = TBN * camera.position; fs_LightPosition = TBN * light.position.xyz; fs_LightPosition = TBN * lights[0].position.xyz; fs_Position = TBN * vec3(modelMatrix * vec4(position, 1.0)); fs_Normal = normalMatrix * normal; fs_TextureCoord = textureCoord; gl_Position = camera.projection * camera.view * modelMatrix * vec4(position, 1.0); Loading
shaders/texturedObject.frag 0 → 100644 +66 −0 Original line number Diff line number Diff line #version 450 layout(binding = 0, std140) uniform Camera { mat4 projection; mat4 view; vec3 position; } camera; struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } material; layout(location = 0) uniform mat4 modelMatrix; layout(binding = 0) uniform sampler2D diffuseTexture; layout(location = 0) in vec3 fs_Position; layout(location = 1) in vec3 fs_Normal; layout(location = 2) in vec2 fs_TextureCoord; layout(location = 0) out vec4 finalColor; void main() { vec3 lightsSum = vec3(0.0); for(int i = 0; i < lights.length(); i++) { Light light = lights[i]; vec3 lightVector = light.position.xyz - fs_Position * light.position.w; vec3 L = normalize(lightVector); vec3 N = normalize(fs_Normal); vec3 E = normalize(camera.position - fs_Position); vec3 H = normalize(L + E); float NdotL = max(dot(N, L), 0.0); float NdotH = max(dot(N, H), 0.0); float distance2 = light.position.w == 1.0 ? pow(length(lightVector), 2) : 1.0; vec3 ambient = material.ambientColor.rgb * light.ambientColor.rgb; vec3 diffuse = texture(diffuseTexture, fs_TextureCoord).rgb * material.diffuseColor.rgb * light.diffuseColor.rgb; vec3 specular = material.specularColor.rgb * light.specularColor.rgb; vec3 color = ambient.rgb + NdotL * diffuse.rgb + pow(NdotH, material.specularColor.w) * specular; color /= distance2; lightsSum += color; } finalColor = vec4(lightsSum, 1.0); }
shaders/texturedObject.vert 0 → 100644 +43 −0 Original line number Diff line number Diff line #version 450 layout(binding = 0, std140) uniform Camera { mat4 projection; mat4 view; vec3 position; } camera; struct Light { vec4 position; vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; }; layout(binding = 1, std430) buffer Lights { Light lights[]; }; layout(binding = 2, std140) uniform Material { vec4 ambientColor; vec4 diffuseColor; vec4 specularColor; } material; layout(location = 0) uniform mat4 modelMatrix; layout(location = 0) in vec3 position; layout(location = 1) in vec3 normal; layout(location = 2) in vec2 textureCoord; layout(location = 0) out vec3 fs_Position; layout(location = 1) out vec3 fs_Normal; layout(location = 2) out vec2 fs_TextureCoord; void main() { fs_Position = vec3(modelMatrix * vec4(position, 1.0)); fs_Normal = transpose(inverse(mat3(modelMatrix))) * normal; fs_TextureCoord = textureCoord; gl_Position = camera.projection * camera.view * modelMatrix * vec4(position, 1.0); }