summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorOmniscient <omniscient.oce@gmail.com>2024-06-15 16:38:05 +1000
committerOmniscient <omniscient.oce@gmail.com>2024-06-15 16:38:05 +1000
commitc5808488875484aca814bfc8e526f37f3f447166 (patch)
treee560bc86302fad0c8520140511e1994c2b4800d7 /assets
parent59f67f04d7238453da766218a37b3c78607fb122 (diff)
shinchoku
Diffstat (limited to 'assets')
-rw-r--r--assets/shaders/pbr_params.frag50
-rw-r--r--assets/shaders/pbr_params.vert26
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);
+}