Skip to content

Commit 972ce0e

Browse files
committed
Resolved new comments
1 parent 06d70fe commit 972ce0e

File tree

3 files changed

+14
-17
lines changed

3 files changed

+14
-17
lines changed

include/irr/builtin/material_compiler/glsl/common.glsl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -947,19 +947,18 @@ irr_glsl_LightSample irr_bsdf_cos_generate(in MC_precomputed_t precomp, in instr
947947

948948
vec3 localL;
949949
float VdotH = dot(localH, localV);
950-
float VdotH_clamp = irr_glsl_conditionalAbsOrMax(is_bsdf, VdotH, 0.0);
951950
vec3 fr;
952951
bool refraction = false;
953952
#ifdef OP_CONDUCTOR
954953
if (op == OP_CONDUCTOR)
955954
{
956-
fr = irr_glsl_fresnel_conductor(ior[0], ior[1], VdotH_clamp);
955+
fr = irr_glsl_fresnel_conductor(ior[0], ior[1], VdotH);
957956
rem *= fr;
958957
}
959958
else
960959
#endif
961960
{
962-
fr = irr_glsl_fresnel_dielectric_common(ior2[0], VdotH_clamp);
961+
fr = irr_glsl_fresnel_dielectric_common(ior2[0], VdotH);
963962

964963
const float refractionProb = colorToScalar(fr);
965964
float rcpChoiceProb;

include/irr/builtin/material_compiler/glsl/rasterization/impl.glsl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
99
const bool is_bxdf = op_isBXDF(op);
1010
const bool is_bsdf = !op_isBRDF(op); //note it actually tells if op is BSDF or BUMPMAP or SET_GEOM_NORMAL (divergence reasons)
1111
const float cosFactor = irr_glsl_conditionalAbsOrMax(is_bsdf, s.NdotL, 0.0);
12-
const bool positiveCosFactor = cosFactor > FLT_MIN;
12+
const float NdotV = irr_glsl_conditionalAbsOrMax(is_bsdf, currInteraction.isotropic.NdotV, 0.0);
13+
bool is_valid = (NdotV > FLT_MIN);
14+
const bool positiveCosFactor = cosFactor > FLT_MIN && is_valid;
1315
const bool is_bxdf_or_combiner = op_isBXDForCoatOrBlend(op);
1416

1517
uvec3 regs = instr_decodeRegisters(instr);
@@ -19,7 +21,7 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
1921
irr_glsl_AnisotropicMicrofacetCache microfacet;
2022
bsdf_data_t bsdf_data;
2123

22-
const bool run = !skip;
24+
const bool run = !skip && positiveCosFactor;
2325

2426
if (run && is_bxdf_or_combiner)
2527
{
@@ -29,16 +31,13 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
2931
params = instr_getParameters(instr, bsdf_data);
3032
}
3133

32-
bxdf_eval_t bxdf_eval = bxdf_eval_t(0.0);
34+
bxdf_eval_t result = bxdf_eval_t(0.0);
3335

34-
if (run && is_bxdf && positiveCosFactor)
36+
if (run && is_bxdf)
3537
{
3638
const float eta = colorToScalar(ior[0]);
3739
const float rcp_eta = 1.0 / eta;
3840

39-
const float NdotV = irr_glsl_conditionalAbsOrMax(is_bsdf, currInteraction.isotropic.NdotV, 0.0);
40-
41-
bool is_valid = (NdotV > FLT_MIN);
4241
bool refraction = false;
4342
#ifdef OP_DIELECTRIC
4443
if (op == OP_DIELECTRIC && irr_glsl_isTransmissionPath(currInteraction.isotropic.NdotV, s.NdotL))
@@ -59,7 +58,7 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
5958
#if defined(OP_DIFFUSE) || defined(OP_DIFFTRANS)
6059
if (op_isDiffuse(op))
6160
{
62-
bxdf_eval = albedo * irr_glsl_oren_nayar_cos_eval(s, currInteraction.isotropic, a2);
61+
result = albedo * irr_glsl_oren_nayar_cos_eval(s, currInteraction.isotropic, a2);
6362
}
6463
else
6564
#endif
@@ -131,14 +130,13 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
131130
END_CASES
132131

133132
float VdotH = microfacet.isotropic.VdotH;
134-
float VdotH_clamp = irr_glsl_conditionalAbsOrMax(is_bsdf, VdotH, 0.0);
135133
vec3 fr;
136134
#ifdef OP_CONDUCTOR
137135
if (op == OP_CONDUCTOR)
138-
fr = irr_glsl_fresnel_conductor(ior[0], ior[1], VdotH_clamp);
136+
fr = irr_glsl_fresnel_conductor(ior[0], ior[1], VdotH);
139137
else
140138
#endif
141-
fr = irr_glsl_fresnel_dielectric_common(ior2[0], VdotH_clamp);
139+
fr = irr_glsl_fresnel_dielectric_common(ior2[0], VdotH);
142140

143141
#ifdef OP_DIELECTRIC
144142
if (is_bsdf)
@@ -153,13 +151,12 @@ void instr_eval_execute(in instr_t instr, in MC_precomputed_t precomp, inout irr
153151
bxdf_eval_scalar_part = irr_glsl_microfacet_to_light_measure_transform(bxdf_eval_scalar_part, NdotV, refraction, VdotH, LdotH, VdotHLdotH, eta);
154152
}
155153
#endif
156-
bxdf_eval = fr * bxdf_eval_scalar_part;
154+
result = fr * bxdf_eval_scalar_part;
157155
} else
158156
#endif
159157
{}
160158
}
161159

162-
bxdf_eval_t result = bxdf_eval;
163160
if (!is_bxdf)
164161
{
165162
mat2x4 srcs = instr_fetchSrcRegs(instr, regs);

src/irr/ext/MitsubaLoader/CMitsubaLoader.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1194,7 +1194,8 @@ SContext::shape_ass_type CMitsubaLoader::loadBasicShape(SContext& ctx, uint32_t
11941194
for (auto i=0u; i<mesh->getMeshBufferCount(); i++)
11951195
ctx.manipulator->flipSurfaces(mesh->getMeshBuffer(i));
11961196

1197-
#define OPTIMIZE_MESHES
1197+
//turned off by default, it's too slow (works though)
1198+
//#define OPTIMIZE_MESHES
11981199

11991200
auto newMesh = core::make_smart_refctd_ptr<asset::CCPUMesh>();
12001201
for (auto i = 0u; i < mesh->getMeshBufferCount(); ++i)

0 commit comments

Comments
 (0)