@@ -350,6 +350,8 @@ ccl_device_inline void decal_data_read(KernelGlobals kg,
350350 uint decal_map_side ;
351351 uint type = node .y ;
352352 uint out_offset = node .z ;
353+ const bool suppress_for_solid_backface =
354+ ((sd -> object_flag & SD_OBJECT_IS_SOLID ) != 0 ) && ((sd -> flag & SD_BACKFACING ) != 0 );
353355
354356 float3 uv = stack_load_float3 (stack , out_offset );
355357
@@ -411,6 +413,7 @@ ccl_device_inline void decal_data_read(KernelGlobals kg,
411413 decal -> cur_uv .x = uv .x ;
412414 decal -> cur_uv .y = uv .y ;
413415 decal -> data = map_to_uv (data , * decal );
416+ decal -> on_correct_side = !suppress_for_solid_backface ;
414417 }
415418 else {
416419
@@ -449,6 +452,10 @@ ccl_device_inline void decal_data_read(KernelGlobals kg,
449452 } break ;
450453 }
451454 }
455+
456+ if (suppress_for_solid_backface ) {
457+ decal -> on_correct_side = false;
458+ }
452459 }
453460
454461 // stack_store_float(stack, decal_forward_offset, dotp > 0.0f ? 1.0f : -1.0f);
@@ -696,7 +703,9 @@ ccl_device_noinline int svm_rhino_node_tex_coord(KernelGlobals kg,
696703 DecalData decal ;
697704 decal_data_read (kg , sd , stack , node , & offset , & decal , 0 );
698705 data = decal .data ;
699- // data = map_to_uv(data, decal);
706+ if (!decal .on_correct_side ) {
707+ data .z = -1.0f ;
708+ }
700709 break ;
701710 }
702711 case NODE_TEXCO_ENV_DECAL_PLANAR : {
@@ -888,7 +897,9 @@ ccl_device_noinline int svm_node_tex_coord_bump_dx(KernelGlobals kg,
888897 DecalData decal ;
889898 decal_data_read (kg , sd , stack , node , & offset , & decal , 0 );
890899 data = decal .data ;
891- // data = map_to_uv(data, decal);
900+ if (!decal .on_correct_side ) {
901+ data .z = -1.0f ;
902+ }
892903 break ;
893904 }
894905 case NODE_TEXCO_ENV_DECAL_PLANAR : {
@@ -1083,7 +1094,9 @@ ccl_device_noinline int svm_node_tex_coord_bump_dy(KernelGlobals kg,
10831094 DecalData decal ;
10841095 decal_data_read (kg , sd , stack , node , & offset , & decal , 0 );
10851096 data = decal .data ;
1086- // data = map_to_uv(data, decal);
1097+ if (!decal .on_correct_side ) {
1098+ data .z = -1.0f ;
1099+ }
10871100 break ;
10881101 }
10891102 case NODE_TEXCO_ENV_DECAL_PLANAR : {
0 commit comments