@@ -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_
8888mat2x3 nbl_glsl_perturbNormal_dPdSomething() {return mat2x3 (dFdx (ViewPos),dFdy (ViewPos));}
8989mat2 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()
109121Spectrum 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
244254void 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