|
@@ -5,7 +5,7 @@ import {
|
|
|
float, vec3, vec4,
|
|
|
assign, label, mul, bypass, attribute,
|
|
|
positionLocal, skinning, instance, modelViewProjection, lightingContext, colorSpace,
|
|
|
- materialAlphaTest, materialColor, materialOpacity
|
|
|
+ materialAlphaTest, materialColor, materialOpacity, reference, rangeFog, exp2Fog
|
|
|
} from '../shadernode/ShaderNodeElements.js';
|
|
|
|
|
|
class NodeMaterial extends ShaderMaterial {
|
|
@@ -140,7 +140,29 @@ class NodeMaterial extends ShaderMaterial {
|
|
|
|
|
|
// FOG
|
|
|
|
|
|
- if ( builder.fogNode ) outputNode = vec4( vec3( builder.fogNode.mix( outputNode ) ), outputNode.w );
|
|
|
+ let fogNode = builder.fogNode;
|
|
|
+
|
|
|
+ if ( fogNode?.isNode !== true && builder.scene.fog ) {
|
|
|
+
|
|
|
+ const fog = builder.scene.fog;
|
|
|
+
|
|
|
+ if ( fog.isFogExp2 ) {
|
|
|
+
|
|
|
+ fogNode = exp2Fog( reference( 'color', 'color', fog ), reference( 'density', 'float', fog ) );
|
|
|
+
|
|
|
+ } else if ( fog.isFog ) {
|
|
|
+
|
|
|
+ fogNode = rangeFog( reference( 'color', 'color', fog ), reference( 'near', 'float', fog ), reference( 'far', 'float', fog ) );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ console.error( 'NodeMaterial: Unsupported fog configuration.', fog );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( fogNode ) outputNode = vec4( vec3( fogNode.mix( outputNode ) ), outputNode.w );
|
|
|
|
|
|
// RESULT
|
|
|
|