@@ -29,8 +29,6 @@ layout(set = 1, binding = 0) uniform Lights {
29
29
30
30
layout (set = 3 , binding = 0 ) uniform StandardMaterial_albedo { vec4 Albedo; };
31
31
32
- layout (set = 3 , binding = 3 ) uniform StandardMaterial_pbr { vec2 pbr; };
33
-
34
32
#ifdef STANDARDMATERIAL_ALBEDO_TEXTURE
35
33
layout (set = 3 , binding = 1 ) uniform texture2D StandardMaterial_albedo_texture;
36
34
layout (set = 3 ,
@@ -39,6 +37,8 @@ layout(set = 3,
39
37
40
38
#ifndef STANDARDMATERIAL_UNLIT
41
39
40
+ layout (set = 3 , binding = 3 ) uniform StandardMaterial_pbr { vec2 pbr; };
41
+
42
42
#define saturate(x) clamp (x, 0.0 , 1.0 )
43
43
const float PI = 3.141592653589793 ;
44
44
@@ -117,6 +117,20 @@ float clampNoV(float NoV) {
117
117
return max (NoV, MIN_N_DOT_V);
118
118
}
119
119
120
+ float perceptualRoughnessToRoughness(float perceptualRoughness) {
121
+ return perceptualRoughness * perceptualRoughness;
122
+ }
123
+
124
+ #if defined(TARGET_MOBILE)
125
+ // min roughness such that (MIN_PERCEPTUAL_ROUGHNESS^4) > 0 in fp16 (i.e.
126
+ // 2^(-14/4), rounded up)
127
+ #define MIN_PERCEPTUAL_ROUGHNESS 0.089
128
+ #define MIN_ROUGHNESS 0.007921
129
+ #else
130
+ #define MIN_PERCEPTUAL_ROUGHNESS 0.045
131
+ #define MIN_ROUGHNESS 0.002025
132
+ #endif
133
+
120
134
#endif
121
135
122
136
void main() {
@@ -128,7 +142,11 @@ void main() {
128
142
#endif
129
143
130
144
#ifndef STANDARDMATERIAL_UNLIT
131
- float roughness = pbr.x;
145
+ float perceptual_roughness = pbr.x;
146
+ perceptual_roughness =
147
+ clamp (perceptual_roughness, MIN_PERCEPTUAL_ROUGHNESS, 1.0 );
148
+ float roughness = perceptualRoughnessToRoughness(perceptual_roughness);
149
+
132
150
float metallic = pbr.y;
133
151
vec3 N = normalize (v_Normal);
134
152
vec3 V = normalize (CameraPos.xyz - v_Position.xyz);
0 commit comments