diff options
author | Omniscient <omniscient.oce@gmail.com> | 2024-06-15 16:38:05 +1000 |
---|---|---|
committer | Omniscient <omniscient.oce@gmail.com> | 2024-06-15 16:38:05 +1000 |
commit | c5808488875484aca814bfc8e526f37f3f447166 (patch) | |
tree | e560bc86302fad0c8520140511e1994c2b4800d7 /assets | |
parent | 59f67f04d7238453da766218a37b3c78607fb122 (diff) |
shinchoku
Diffstat (limited to 'assets')
-rw-r--r-- | assets/shaders/pbr_params.frag | 50 | ||||
-rw-r--r-- | assets/shaders/pbr_params.vert | 26 |
2 files changed, 55 insertions, 21 deletions
diff --git a/assets/shaders/pbr_params.frag b/assets/shaders/pbr_params.frag index 06e0f7e..d467aa8 100644 --- a/assets/shaders/pbr_params.frag +++ b/assets/shaders/pbr_params.frag @@ -12,15 +12,21 @@ struct PointLight { }; // --- Uniforms -uniform vec3 viewPos; // Lights data #define NUM_POINT_LIGHTS 4 -uniform PointLight pointLights[NUM_POINT_LIGHTS]; +uniform Scene_Lights { + vec3 viewPos; + PointLight pointLights[NUM_POINT_LIGHTS]; +} scene; // Material properties -uniform vec3 albedo; -uniform float metallic; -uniform float roughness; -uniform float ao; +uniform PBR_Params { + uniform vec3 albedo; + uniform float metallic; + uniform float roughness; + uniform float ao; +} pbr; + +const float PI = 3.14; // Forward declarations vec3 fresnelSchlick(float cosTheta, vec3 F0); @@ -30,20 +36,22 @@ float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness); void main() { vec3 norm = normalize(Normal); - vec3 viewDir = normalize(viewPos - WorldPos); - - vec3 radiance = vec3(0.0); // denoted L in the radiance equation - for (int i = 0; i < 4; i++) { - vec3 lightVec = normalize(pointLights[i].position - WorldPos); - vec3 halfway = normalize(Normal + lightVec); - float distance = length(pointLights[i].position - WorldPos); - float attenuation = 1.0 / (distance * distance); - vec3 radiance = pointLights[i].color * attenuation; - - vec3 F0 = vec3(0.04); - F0 = mix(F0, albedo, metallic); - vec3 F = fresnelSchlick(max(dot(halfway, lightVec), 0.0), F0); - } + vec3 viewDir = normalize(scene.viewPos - WorldPos); + + // vec3 radiance = vec3(0.0); // denoted L in the radiance equation + // for (int i = 0; i < 4; i++) { + // vec3 lightVec = normalize(pointLights[i].position - WorldPos); + // vec3 halfway = normalize(Normal + lightVec); + // float distance = length(pointLights[i].position - WorldPos); + // float attenuation = 1.0 / (distance * distance); + // vec3 radiance = pointLights[i].color * attenuation; + + // vec3 F0 = vec3(0.04); + // F0 = mix(F0, albedo, metallic); + // vec3 F = fresnelSchlick(max(dot(halfway, lightVec), 0.0), F0); + // } + + FragColor = vec4(1.0); } /* The below are from https://learnopengl.com/PBR/Lighting */ @@ -82,4 +90,4 @@ float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) float ggx1 = GeometrySchlickGGX(NdotL, roughness); return ggx1 * ggx2; -}
\ No newline at end of file +} diff --git a/assets/shaders/pbr_params.vert b/assets/shaders/pbr_params.vert new file mode 100644 index 0000000..0908246 --- /dev/null +++ b/assets/shaders/pbr_params.vert @@ -0,0 +1,26 @@ +#version 410 + +// Vertex attributes +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec3 inNormal; +layout(location = 2) in vec2 inTexCoords; + +// Uniforms +uniform MVP_Matrices { + mat4 model; // TODO: make model a push constant/raw uniform + mat4 view; + mat4 proj; +} mvp; + +// Outputs +layout(location = 0) out vec3 fragWorldPos; +layout(location = 1) out vec3 fragNormal; +layout(location = 2) out vec2 fragTexCoords; + +void main() { + fragWorldPos = vec3(mvp.model * vec4(inPosition, 1.0)); + // TODO: fragNormal + fragTexCoords = inTexCoords; + + gl_Position = mvp.proj * mvp.view * mvp.model * vec4(inPosition, 1.0); +} |