X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=pbrfrag.glsl;h=1d0f759022b2acf8ee046c209f6ecd50784e95aa;hp=99523ec604f99b0fd7673e56848d14a837328c13;hb=83eb84c159c8ec75cda9fbeb05e3d5746b54ad53;hpb=d80972d96e5fcd444657f937ab2700039efa83d2 diff --git a/pbrfrag.glsl b/pbrfrag.glsl index 99523ec..1d0f759 100644 --- a/pbrfrag.glsl +++ b/pbrfrag.glsl @@ -7,19 +7,23 @@ in vec2 texCoords; uniform vec3 camPos; -uniform sampler2D albedoMap; -uniform sampler2D normalMap; -uniform sampler2D metallicMap; -uniform sampler2D roughnessMap; -uniform sampler2D aoMap; +struct Material { + sampler2D albedoMap; + sampler2D normalMap; + sampler2D metallicRoughnessMap; + sampler2D aoMap; + bool hasAlbedo, hasNormal, hasMetallicRoughness, hasAo; +}; +uniform Material mat; + uniform samplerCube irradianceMap; uniform samplerCube prefilterMap; uniform sampler2D brdfMap; out vec4 fragColor; -uniform vec3 lightPositions[4]; -uniform vec3 lightColors[4]; +uniform vec3 lightPositions[6]; +uniform vec3 lightColors[6]; const float PI = 3.14159265359; @@ -52,7 +56,9 @@ float geometrySmith(vec3 N, vec3 V, vec3 L, float roughness) { } vec3 getNormalFromMap() { - vec3 tangentNormal = texture(normalMap, texCoords).xyz * 2.f - 1.f; + vec3 tangentNormal = vec3(0, 0, 1); + if (mat.hasNormal) + tangentNormal = texture(mat.normalMap, texCoords).xyz * 2.f - 1.f; vec3 Q1 = dFdx(worldPos); vec3 Q2 = dFdy(worldPos); vec2 st1 = dFdx(texCoords); @@ -67,11 +73,18 @@ vec3 getNormalFromMap() { } void main() { - vec3 albedo = pow(texture(albedoMap, texCoords).rgb, vec3(2.2)); + vec3 albedo = vec3(1); + if (mat.hasAlbedo) + albedo = pow(texture(mat.albedoMap, texCoords).rgb, vec3(2.2)); + vec3 normal = getNormalFromMap(); - float metallic = texture(metallicMap, texCoords).r; - float roughness = texture(roughnessMap, texCoords).r; - float ao = texture(aoMap, texCoords).r; + + float metallic = 0, roughness = 1; + if (mat.hasMetallicRoughness) { + metallic = texture(mat.metallicRoughnessMap, texCoords).b; + roughness = texture(mat.metallicRoughnessMap, texCoords).g; + } + float ao = mat.hasAo ? texture(mat.aoMap, texCoords).r : 1; vec3 N = normalize(normal); vec3 V = normalize(camPos - worldPos);