Skip to content

Commit 1902216

Browse files
fix up the MTL fragment shader so its more overridable
1 parent 99ef87c commit 1902216

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

include/nbl/builtin/shader/loader/mtl/fragment_impl.glsl

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return texture(map_bump, uv); }
8484
#include <nbl/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl>
8585
#include <nbl/builtin/glsl/bxdf/brdf/specular/blinn_phong.glsl>
8686

87-
87+
#ifndef _NBL_BUILTIN_GLSL_BUMP_MAPPING_DERIVATIVES_DECLARED_
8888
mat2x3 nbl_glsl_perturbNormal_dPdSomething() {return mat2x3(dFdx(ViewPos),dFdy(ViewPos));}
8989
mat2 nbl_glsl_perturbNormal_dUVdSomething()
9090
{
@@ -95,9 +95,21 @@ mat2 nbl_glsl_perturbNormal_dUVdSomething()
9595
#endif
9696
}
9797
#define _NBL_BUILTIN_GLSL_BUMP_MAPPING_DERIVATIVES_DECLARED_
98+
#endif
9899
#include <nbl/builtin/glsl/bump_mapping/utils.glsl>
99100

100101

102+
#ifndef _NO_UV
103+
#ifndef _NBL_FRAG_GET_UV_DERIVATIVES_FUNCTION_DEFINED_
104+
mat2 nbl_glsl_dUVdScreen()
105+
{
106+
return mat2(dFdx(UV),dFdy(UV));
107+
}
108+
#define _NBL_FRAG_GET_UV_DERIVATIVES_FUNCTION_DEFINED_
109+
#endif
110+
#endif
111+
112+
101113
#ifndef _NBL_BSDF_COS_EVAL_DEFINED_
102114
#define _NBL_BSDF_COS_EVAL_DEFINED_
103115

@@ -109,10 +121,10 @@ mat2 nbl_glsl_perturbNormal_dUVdSomething()
109121
Spectrum nbl_bsdf_cos_eval(in nbl_glsl_LightSample _sample, in nbl_glsl_IsotropicViewSurfaceInteraction inter)
110122
{
111123
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
112-
const mat2 dUV = nbl_glsl_perturbNormal_dUVdSomething();
113124

114125
vec3 Kd;
115126
#ifndef _NO_UV
127+
const mat2 dUV = nbl_glsl_dUVdScreen();
116128
if ((mtParams.extra&(map_Kd_MASK)) == (map_Kd_MASK))
117129
Kd = nbl_sample_Kd(UV, dUV).rgb;
118130
else
@@ -181,13 +193,12 @@ Spectrum nbl_bsdf_cos_eval(in nbl_glsl_LightSample _sample, in nbl_glsl_Isotropi
181193
#ifndef _NBL_COMPUTE_LIGHTING_DEFINED_
182194
#define _NBL_COMPUTE_LIGHTING_DEFINED_
183195

184-
vec3 nbl_computeLighting(out nbl_glsl_IsotropicViewSurfaceInteraction out_interaction)
196+
vec3 nbl_computeLighting(in nbl_glsl_IsotropicViewSurfaceInteraction interaction)
185197
{
186-
nbl_glsl_IsotropicViewSurfaceInteraction interaction = nbl_glsl_calcSurfaceInteraction(vec3(0.0), ViewPos, Normal);
187198
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
188199

189-
const mat2 dUV = nbl_glsl_perturbNormal_dUVdSomething();
190200
#ifndef _NO_UV
201+
const mat2 dUV = nbl_glsl_dUVdScreen();
191202
if ((mtParams.extra&map_bump_MASK) == map_bump_MASK)
192203
{
193204
interaction.N = normalize(interaction.N);
@@ -230,7 +241,6 @@ vec3 nbl_computeLighting(out nbl_glsl_IsotropicViewSurfaceInteraction out_intera
230241
break;
231242
}
232243

233-
out_interaction = interaction;
234244
#define Intensity 1000000.0
235245
return (Intensity/lenL2)*nbl_bsdf_cos_eval(_sample,interaction) + Ka;
236246
#undef Intensity
@@ -244,7 +254,7 @@ vec3 nbl_computeLighting(out nbl_glsl_IsotropicViewSurfaceInteraction out_intera
244254
void main()
245255
{
246256
nbl_glsl_MTLMaterialParameters mtParams = nbl_glsl_getMaterialParameters();
247-
nbl_glsl_IsotropicViewSurfaceInteraction interaction;
257+
nbl_glsl_IsotropicViewSurfaceInteraction interaction = nbl_glsl_calcSurfaceInteraction(vec3(0.0),ViewPos,Normal);
248258
vec3 color = nbl_computeLighting(interaction);
249259

250260
float d = mtParams.d;
@@ -265,7 +275,7 @@ void main()
265275
#ifndef _NO_UV
266276
if ((mtParams.extra&(map_d_MASK)) == (map_d_MASK))
267277
{
268-
d = nbl_sample_d(UV, nbl_glsl_perturbNormal_dUVdSomething()).r;
278+
d = nbl_sample_d(UV,nbl_glsl_dUVdScreen()).r;
269279
color *= d;
270280
}
271281
#endif

0 commit comments

Comments
 (0)