@needle-tools/three 0.153.1 → 0.154.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/build/three.cjs +1260 -1517
  2. package/build/three.js +1267 -1524
  3. package/build/three.min.js +7 -8
  4. package/build/three.module.js +859 -1097
  5. package/build/three.module.min.js +6 -7
  6. package/examples/jsm/controls/ArcballControls.js +2 -1
  7. package/examples/jsm/controls/FlyControls.js +25 -9
  8. package/examples/jsm/controls/OrbitControls.js +7 -1
  9. package/examples/jsm/csm/CSM.js +1 -1
  10. package/examples/jsm/effects/AnaglyphEffect.js +1 -1
  11. package/examples/jsm/effects/OutlineEffect.js +1 -1
  12. package/examples/jsm/effects/ParallaxBarrierEffect.js +1 -1
  13. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  14. package/examples/jsm/lines/LineMaterial.js +1 -1
  15. package/examples/jsm/loaders/3DMLoader.js +1 -1
  16. package/examples/jsm/loaders/3MFLoader.js +5 -1
  17. package/examples/jsm/loaders/AMFLoader.js +5 -1
  18. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  19. package/examples/jsm/loaders/FBXLoader.js +9 -2
  20. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  21. package/examples/jsm/loaders/PLYLoader.js +16 -6
  22. package/examples/jsm/loaders/VRMLLoader.js +16 -4
  23. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  24. package/examples/jsm/math/MeshSurfaceSampler.js +76 -35
  25. package/examples/jsm/nodes/Nodes.js +20 -15
  26. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +21 -8
  27. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  28. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  29. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -4
  30. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  31. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  32. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  33. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  34. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  35. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  36. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  37. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  38. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  40. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  41. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  42. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  43. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  44. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  45. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  46. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  47. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  48. package/examples/jsm/nodes/core/Node.js +12 -15
  49. package/examples/jsm/nodes/core/NodeBuilder.js +24 -5
  50. package/examples/jsm/nodes/core/PropertyNode.js +4 -0
  51. package/examples/jsm/nodes/core/StackNode.js +1 -1
  52. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  53. package/examples/jsm/nodes/core/VarNode.js +1 -3
  54. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  55. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  56. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  57. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  58. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -8
  59. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  60. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  61. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -5
  62. package/examples/jsm/nodes/display/ViewportTextureNode.js +23 -15
  63. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  64. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  65. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  66. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  67. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  68. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  69. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  70. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  71. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  72. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  73. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +129 -18
  74. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  75. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  76. package/examples/jsm/nodes/geometry/RangeNode.js +1 -1
  77. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  78. package/examples/jsm/nodes/lighting/EnvironmentNode.js +91 -62
  79. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  80. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  81. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  82. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  83. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  84. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  85. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  86. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  87. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  88. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  89. package/examples/jsm/nodes/materials/NodeMaterial.js +79 -28
  90. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  91. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  92. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  93. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  94. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  95. package/examples/jsm/nodes/math/MathNode.js +6 -0
  96. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  97. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  98. package/examples/jsm/nodes/shadernode/ShaderNode.js +24 -4
  99. package/examples/jsm/nodes/utils/LoopNode.js +1 -1
  100. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  101. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +1 -1
  103. package/examples/jsm/objects/Refractor.js +1 -1
  104. package/examples/jsm/objects/Sky.js +1 -1
  105. package/examples/jsm/objects/Water.js +1 -1
  106. package/examples/jsm/objects/Water2.js +1 -1
  107. package/examples/jsm/offscreen/scene.js +1 -0
  108. package/examples/jsm/postprocessing/EffectComposer.js +2 -0
  109. package/examples/jsm/postprocessing/OutlinePass.js +1 -3
  110. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -12
  111. package/examples/jsm/postprocessing/SavePass.js +3 -1
  112. package/examples/jsm/postprocessing/TAARenderPass.js +14 -2
  113. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  114. package/examples/jsm/postprocessing/UnrealBloomPass.js +9 -10
  115. package/examples/jsm/renderers/common/Backend.js +2 -0
  116. package/examples/jsm/renderers/common/Background.js +7 -6
  117. package/examples/jsm/renderers/common/Pipelines.js +26 -14
  118. package/examples/jsm/renderers/common/RenderObject.js +18 -0
  119. package/examples/jsm/renderers/common/RenderObjects.js +29 -29
  120. package/examples/jsm/renderers/common/Renderer.js +48 -6
  121. package/examples/jsm/renderers/common/nodes/Nodes.js +1 -1
  122. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  123. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  124. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +123 -41
  125. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +29 -9
  126. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -0
  127. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +8 -13
  128. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +85 -3
  129. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +5 -1
  130. package/examples/jsm/shaders/BlendShader.js +1 -2
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/CopyShader.js +2 -2
  133. package/examples/jsm/shaders/ToonShader.js +4 -4
  134. package/examples/jsm/shaders/WaterRefractionShader.js +1 -1
  135. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  136. package/package.json +2 -1
  137. package/src/Three.Legacy.js +0 -228
  138. package/src/animation/PropertyBinding.js +1 -1
  139. package/src/constants.js +1 -1
  140. package/src/core/BufferAttribute.js +0 -24
  141. package/src/core/BufferGeometry.js +0 -7
  142. package/src/loaders/Loader.js +2 -0
  143. package/src/loaders/MaterialLoader.js +1 -0
  144. package/src/materials/Material.js +3 -0
  145. package/src/objects/Skeleton.js +0 -2
  146. package/src/renderers/WebGLRenderer.js +9 -21
  147. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  148. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  149. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  150. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  151. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +9 -1
  152. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +1 -1
  153. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +1 -1
  154. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +1 -1
  155. package/src/renderers/shaders/ShaderChunk.js +10 -6
  156. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  157. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  158. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  159. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  160. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  161. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  162. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  163. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  164. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  165. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  166. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  167. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  168. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  169. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  170. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  171. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  172. package/src/renderers/webgl/WebGLObjects.js +23 -3
  173. package/src/renderers/webgl/WebGLProgram.js +24 -5
  174. package/src/renderers/webgl/WebGLPrograms.js +3 -0
  175. package/src/renderers/webxr/WebXRManager.js +11 -33
  176. package/src/scenes/Scene.js +0 -14
  177. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -45
  178. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  179. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
  180. /package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +0 -0
@@ -1,11 +1,11 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
  import { cache } from '../core/CacheNode.js';
3
3
  import { context } from '../core/ContextNode.js';
4
- import { roughness } from '../core/PropertyNode.js';
4
+ import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
5
5
  import { equirectUV } from '../utils/EquirectUVNode.js';
6
6
  import { specularMIPLevel } from '../utils/SpecularMIPLevelNode.js';
7
7
  import { cameraViewMatrix } from '../accessors/CameraNode.js';
8
- import { transformedNormalView, transformedNormalWorld } from '../accessors/NormalNode.js';
8
+ import { transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld } from '../accessors/NormalNode.js';
9
9
  import { positionViewDirection } from '../accessors/PositionNode.js';
10
10
  import { addNodeClass } from '../core/Node.js';
11
11
  import { float, vec2 } from '../shadernode/ShaderNode.js';
@@ -39,113 +39,142 @@ class EnvironmentNode extends LightingNode {
39
39
 
40
40
  }
41
41
 
42
- let reflectVec;
43
- let radianceTextureUVNode;
44
- let irradianceTextureUVNode;
42
+ //
45
43
 
46
- const radianceContext = context( envNode, {
47
- getUVNode: ( textureNode ) => {
44
+ const intensity = reference( 'envMapIntensity', 'float', builder.material ); // @TODO: Add materialEnvIntensity in MaterialNode
48
45
 
49
- let node = null;
46
+ const radiance = context( envNode, createRadianceContext( roughness, transformedNormalView ) ).mul( intensity );
47
+ const irradiance = context( envNode, createIrradianceContext( transformedNormalWorld ) ).mul( Math.PI ).mul( intensity );
50
48
 
51
- if ( reflectVec === undefined ) {
49
+ const isolateRadiance = cache( radiance );
52
50
 
53
- reflectVec = positionViewDirection.negate().reflect( transformedNormalView );
54
- reflectVec = roughness.mul( roughness ).mix( reflectVec, transformedNormalView ).normalize();
55
- reflectVec = reflectVec.transformDirection( cameraViewMatrix );
51
+ //
56
52
 
57
- }
53
+ builder.context.radiance.addAssign( isolateRadiance );
58
54
 
59
- if ( textureNode.isCubeTextureNode ) {
55
+ builder.context.iblIrradiance.addAssign( irradiance );
60
56
 
61
- node = reflectVec;
57
+ //
62
58
 
63
- } else if ( textureNode.isTextureNode ) {
59
+ let isolateClearcoatRadiance = null;
64
60
 
65
- if ( radianceTextureUVNode === undefined ) {
61
+ if ( builder.context.clearcoatRadiance  ) {
66
62
 
67
- // @TODO: Needed PMREM
63
+ const clearcoatRadiance = context( envNode, createRadianceContext( clearcoatRoughness, transformedClearcoatNormalView ) ).mul( intensity );
68
64
 
69
- radianceTextureUVNode = equirectUV( reflectVec );
65
+ isolateClearcoatRadiance = cache( clearcoatRadiance );
70
66
 
71
- }
67
+ builder.context.clearcoatRadiance.addAssign( isolateClearcoatRadiance );
72
68
 
73
- node = radianceTextureUVNode;
69
+ }
74
70
 
75
- }
71
+ //
76
72
 
77
- return node;
73
+ properties.radiance = isolateRadiance;
74
+ properties.clearcoatRadiance = isolateClearcoatRadiance;
75
+ properties.irradiance = irradiance;
78
76
 
79
- },
80
- getSamplerLevelNode: () => {
77
+ }
81
78
 
82
- return roughness;
79
+ }
83
80
 
84
- },
85
- getMIPLevelAlgorithmNode: ( textureNode, levelNode ) => {
81
+ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
86
82
 
87
- return specularMIPLevel( textureNode, levelNode );
83
+ let reflectVec = null;
84
+ let textureUVNode = null;
88
85
 
89
- }
90
- } );
86
+ return {
87
+ getUVNode: ( textureNode ) => {
91
88
 
92
- const irradianceContext = context( envNode, {
93
- getUVNode: ( textureNode ) => {
89
+ let node = null;
94
90
 
95
- let node = null;
91
+ if ( reflectVec === null ) {
96
92
 
97
- if ( textureNode.isCubeTextureNode ) {
93
+ reflectVec = positionViewDirection.negate().reflect( normalViewNode );
94
+ reflectVec = roughnessNode.mul( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
95
+ reflectVec = reflectVec.transformDirection( cameraViewMatrix );
98
96
 
99
- node = transformedNormalWorld;
97
+ }
100
98
 
101
- } else if ( textureNode.isTextureNode ) {
99
+ if ( textureNode.isCubeTextureNode ) {
102
100
 
103
- if ( irradianceTextureUVNode === undefined ) {
101
+ node = reflectVec;
104
102
 
105
- // @TODO: Needed PMREM
103
+ } else if ( textureNode.isTextureNode ) {
106
104
 
107
- irradianceTextureUVNode = equirectUV( transformedNormalWorld );
108
- irradianceTextureUVNode = vec2( irradianceTextureUVNode.x, irradianceTextureUVNode.y.oneMinus() );
105
+ if ( textureUVNode === null ) {
109
106
 
110
- }
107
+ // @TODO: Needed PMREM
111
108
 
112
- node = irradianceTextureUVNode;
109
+ textureUVNode = equirectUV( reflectVec );
113
110
 
114
111
  }
115
112
 
116
- return node;
113
+ node = textureUVNode;
117
114
 
118
- },
119
- getSamplerLevelNode: () => {
115
+ }
120
116
 
121
- return float( 1 );
117
+ return node;
122
118
 
123
- },
124
- getMIPLevelAlgorithmNode: ( textureNode, levelNode ) => {
119
+ },
120
+ getSamplerLevelNode: () => {
125
121
 
126
- return specularMIPLevel( textureNode, levelNode );
122
+ return roughnessNode;
127
123
 
128
- }
129
- } );
124
+ },
125
+ getMIPLevelAlgorithmNode: ( textureNode, levelNode ) => {
130
126
 
131
- //
127
+ return specularMIPLevel( textureNode, levelNode );
132
128
 
133
- const isolateRadianceFlowContext = cache( radianceContext );
129
+ }
130
+ };
134
131
 
135
- //
132
+ };
136
133
 
137
- const intensity = reference( 'envMapIntensity', 'float', builder.material );
134
+ const createIrradianceContext = ( normalWorldNode ) => {
138
135
 
139
- builder.context.radiance.addAssign( isolateRadianceFlowContext.mul( intensity ) );
136
+ let textureUVNode = null;
140
137
 
141
- builder.context.iblIrradiance.addAssign( irradianceContext.mul( Math.PI ).mul( intensity ) );
138
+ return {
139
+ getUVNode: ( textureNode ) => {
142
140
 
143
- properties.radianceContext = isolateRadianceFlowContext;
144
- properties.irradianceContext = irradianceContext;
141
+ let node = null;
145
142
 
146
- }
143
+ if ( textureNode.isCubeTextureNode ) {
147
144
 
148
- }
145
+ node = normalWorldNode;
146
+
147
+ } else if ( textureNode.isTextureNode ) {
148
+
149
+ if ( textureUVNode === null ) {
150
+
151
+ // @TODO: Needed PMREM
152
+
153
+ textureUVNode = equirectUV( normalWorldNode );
154
+ textureUVNode = vec2( textureUVNode.x, textureUVNode.y.oneMinus() );
155
+
156
+ }
157
+
158
+ node = textureUVNode;
159
+
160
+ }
161
+
162
+ return node;
163
+
164
+ },
165
+ getSamplerLevelNode: () => {
166
+
167
+ return float( 1 );
168
+
169
+ },
170
+ getMIPLevelAlgorithmNode: ( textureNode, levelNode ) => {
171
+
172
+ return specularMIPLevel( textureNode, levelNode );
173
+
174
+ }
175
+ };
176
+
177
+ };
149
178
 
150
179
  export default EnvironmentNode;
151
180
 
@@ -1,6 +1,6 @@
1
- import { ShaderNode } from '../shadernode/ShaderNode.js';
1
+ import { tslFn } from '../shadernode/ShaderNode.js';
2
2
 
3
- export const getDistanceAttenuation = new ShaderNode( ( inputs ) => {
3
+ export const getDistanceAttenuation = tslFn( ( inputs ) => {
4
4
 
5
5
  const { lightDistance, cutoffDistance, decayExponent } = inputs;
6
6
 
@@ -1,5 +1,4 @@
1
1
  import ContextNode from '../core/ContextNode.js';
2
- import { temp } from '../core/VarNode.js';
3
2
  import { add } from '../math/OperatorNode.js';
4
3
  import { mix } from '../math/MathNode.js';
5
4
  import { addNodeClass } from '../core/Node.js';
@@ -30,10 +29,10 @@ class LightingContextNode extends ContextNode {
30
29
  const context = this.context = {}; // reset context
31
30
  const properties = builder.getNodeProperties( this );
32
31
 
33
- const directDiffuse = temp( vec3() ),
34
- directSpecular = temp( vec3() ),
35
- indirectDiffuse = temp( vec3() ),
36
- indirectSpecular = temp( vec3() );
32
+ const directDiffuse = vec3().temp(),
33
+ directSpecular = vec3().temp(),
34
+ indirectDiffuse = vec3().temp(),
35
+ indirectSpecular = vec3().temp();
37
36
 
38
37
  let totalDiffuse = add( directDiffuse, indirectDiffuse );
39
38
 
@@ -44,7 +43,7 @@ class LightingContextNode extends ContextNode {
44
43
  }
45
44
 
46
45
  const totalSpecular = add( directSpecular, indirectSpecular );
47
- const total = add( totalDiffuse, totalSpecular );
46
+ const total = add( totalDiffuse, totalSpecular ).temp();
48
47
 
49
48
  const reflectedLight = {
50
49
  directDiffuse,
@@ -55,21 +54,24 @@ class LightingContextNode extends ContextNode {
55
54
  };
56
55
 
57
56
  const lighting = {
58
- radiance: temp( vec3() ),
59
- irradiance: temp( vec3() ),
60
- iblIrradiance: temp( vec3() ),
61
- ambientOcclusion: temp( float( 1 ) )
57
+ radiance: vec3().temp(),
58
+ irradiance: vec3().temp(),
59
+ iblIrradiance: vec3().temp(),
60
+ ambientOcclusion: float( 1 ).temp()
62
61
  };
63
62
 
63
+ context.reflectedLight = reflectedLight;
64
+ context.lightingModelNode = lightingModelNode || context.lightingModelNode;
65
+
64
66
  Object.assign( properties, reflectedLight, lighting );
65
67
  Object.assign( context, lighting );
66
68
 
67
- context.reflectedLight = reflectedLight;
68
- context.lightingModelNode = lightingModelNode || context.lightingModelNode;
69
+ // @TODO: Call needed return a new node ( or rename the ShaderNodeInternal.call() function ), it's not moment to run
70
+ if ( lightingModelNode && lightingModelNode.init ) lightingModelNode.init( context, builder.stack, builder );
69
71
 
70
- if ( lightingModelNode && lightingModelNode.indirectDiffuse ) lightingModelNode.indirectDiffuse.call( context );
71
- if ( lightingModelNode && lightingModelNode.indirectSpecular ) lightingModelNode.indirectSpecular.call( context );
72
- if ( lightingModelNode && lightingModelNode.ambientOcclusion ) lightingModelNode.ambientOcclusion.call( context );
72
+ if ( lightingModelNode && lightingModelNode.indirectDiffuse ) lightingModelNode.indirectDiffuse( context, builder.stack, builder );
73
+ if ( lightingModelNode && lightingModelNode.indirectSpecular ) lightingModelNode.indirectSpecular( context, builder.stack, builder );
74
+ if ( lightingModelNode && lightingModelNode.ambientOcclusion ) lightingModelNode.ambientOcclusion( context, builder.stack, builder );
73
75
 
74
76
  return super.construct( builder );
75
77
 
@@ -39,7 +39,7 @@ class PointLightNode extends AnalyticLightNode {
39
39
  const lightDirection = lVector.normalize();
40
40
  const lightDistance = lVector.length();
41
41
 
42
- const lightAttenuation = getDistanceAttenuation.call( {
42
+ const lightAttenuation = getDistanceAttenuation( {
43
43
  lightDistance,
44
44
  cutoffDistance: cutoffDistanceNode,
45
45
  decayExponent: decayExponentNode
@@ -52,11 +52,11 @@ class PointLightNode extends AnalyticLightNode {
52
52
 
53
53
  if ( lightingModelFunctionNode && lightingModelFunctionNode.direct ) {
54
54
 
55
- lightingModelFunctionNode.direct.call( {
55
+ lightingModelFunctionNode.direct( {
56
56
  lightDirection,
57
57
  lightColor,
58
58
  reflectedLight
59
- }, builder );
59
+ } );
60
60
 
61
61
  }
62
62
 
@@ -60,7 +60,7 @@ class SpotLightNode extends AnalyticLightNode {
60
60
 
61
61
  const lightDistance = lVector.length();
62
62
 
63
- const lightAttenuation = getDistanceAttenuation.call( {
63
+ const lightAttenuation = getDistanceAttenuation( {
64
64
  lightDistance,
65
65
  cutoffDistance: cutoffDistanceNode,
66
66
  decayExponent: decayExponentNode
@@ -73,11 +73,11 @@ class SpotLightNode extends AnalyticLightNode {
73
73
 
74
74
  if ( lightingModelFunctionNode && lightingModelFunctionNode.direct ) {
75
75
 
76
- lightingModelFunctionNode.direct.call( {
76
+ lightingModelFunctionNode.direct( {
77
77
  lightDirection,
78
78
  lightColor,
79
79
  reflectedLight
80
- }, builder );
80
+ } );
81
81
 
82
82
  }
83
83
 
@@ -21,21 +21,6 @@ class LineBasicNodeMaterial extends NodeMaterial {
21
21
 
22
22
  }
23
23
 
24
- copy( source ) {
25
-
26
- this.colorNode = source.colorNode;
27
- this.opacityNode = source.opacityNode;
28
-
29
- this.alphaTestNode = source.alphaTestNode;
30
-
31
- this.lightNode = source.lightNode;
32
-
33
- this.positionNode = source.positionNode;
34
-
35
- return super.copy( source );
36
-
37
- }
38
-
39
24
  }
40
25
 
41
26
  export default LineBasicNodeMaterial;
@@ -20,21 +20,6 @@ class MeshBasicNodeMaterial extends NodeMaterial {
20
20
 
21
21
  }
22
22
 
23
- copy( source ) {
24
-
25
- this.colorNode = source.colorNode;
26
- this.opacityNode = source.opacityNode;
27
-
28
- this.alphaTestNode = source.alphaTestNode;
29
-
30
- this.lightNode = source.lightNode;
31
-
32
- this.positionNode = source.positionNode;
33
-
34
- return super.copy( source );
35
-
36
- }
37
-
38
23
  }
39
24
 
40
25
  export default MeshBasicNodeMaterial;
@@ -31,16 +31,6 @@ class MeshNormalNodeMaterial extends NodeMaterial {
31
31
 
32
32
  }
33
33
 
34
- copy( source ) {
35
-
36
- this.opacityNode = source.opacityNode;
37
-
38
- this.positionNode = source.positionNode;
39
-
40
- return super.copy( source );
41
-
42
- }
43
-
44
34
  }
45
35
 
46
36
  export default MeshNormalNodeMaterial;
@@ -51,18 +51,9 @@ class MeshPhongNodeMaterial extends NodeMaterial {
51
51
 
52
52
  copy( source ) {
53
53
 
54
- this.colorNode = source.colorNode;
55
- this.opacityNode = source.opacityNode;
56
-
57
- this.alphaTestNode = source.alphaTestNode;
58
-
59
54
  this.shininessNode = source.shininessNode;
60
55
  this.specularNode = source.specularNode;
61
56
 
62
- this.lightNode = source.lightNode;
63
-
64
- this.positionNode = source.positionNode;
65
-
66
57
  return super.copy( source );
67
58
 
68
59
  }
@@ -1,4 +1,9 @@
1
1
  import { addNodeMaterial } from './NodeMaterial.js';
2
+ import { transformedClearcoatNormalView } from '../accessors/NormalNode.js';
3
+ import { clearcoat, clearcoatRoughness, sheen, sheenRoughness } from '../core/PropertyNode.js';
4
+ import { materialClearcoatNormal } from '../accessors/ExtendedMaterialNode.js';
5
+ import { materialClearcoat, materialClearcoatRoughness, materialSheen, materialSheenRoughness } from '../accessors/MaterialNode.js';
6
+ import { float, vec3 } from '../shadernode/ShaderNode.js';
2
7
  import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
3
8
 
4
9
  import { MeshPhysicalMaterial } from 'three';
@@ -38,6 +43,42 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
38
43
 
39
44
  }
40
45
 
46
+ constructVariants( builder ) {
47
+
48
+ super.constructVariants( builder );
49
+
50
+ const { stack } = builder;
51
+
52
+ // CLEARCOAT
53
+
54
+ const clearcoatNode = this.clearcoatNode ? float( this.clearcoatNode ) : materialClearcoat;
55
+ const clearcoatRoughnessNode = this.clearcoatRoughnessNode ? float( this.clearcoatRoughnessNode ) : materialClearcoatRoughness;
56
+
57
+ stack.assign( clearcoat, clearcoatNode );
58
+ stack.assign( clearcoatRoughness, clearcoatRoughnessNode );
59
+
60
+ // SHEEN
61
+
62
+ const sheenNode = this.sheenNode ? vec3( this.sheenNode ) : materialSheen;
63
+ const sheenRoughnessNode = this.sheenRoughnessNode ? float( this.sheenRoughnessNode ) : materialSheenRoughness;
64
+
65
+ stack.assign( sheen, sheenNode );
66
+ stack.assign( sheenRoughness, sheenRoughnessNode );
67
+
68
+ }
69
+
70
+ constructNormal( builder ) {
71
+
72
+ super.constructNormal( builder );
73
+
74
+ // CLEARCOAT NORMAL
75
+
76
+ const clearcoatNormalNode = this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;
77
+
78
+ builder.stack.assign( transformedClearcoatNormalView, clearcoatNormalNode );
79
+
80
+ }
81
+
41
82
  copy( source ) {
42
83
 
43
84
  this.clearcoatNode = source.clearcoatNode;
@@ -46,7 +46,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
46
46
  // ROUGHNESS
47
47
 
48
48
  let roughnessNode = this.roughnessNode ? float( this.roughnessNode ) : materialRoughness;
49
- roughnessNode = getRoughness.call( { roughness: roughnessNode } );
49
+ roughnessNode = getRoughness( { roughness: roughnessNode } );
50
50
 
51
51
  stack.assign( roughness, roughnessNode );
52
52
 
@@ -64,24 +64,11 @@ class MeshStandardNodeMaterial extends NodeMaterial {
64
64
 
65
65
  copy( source ) {
66
66
 
67
- this.colorNode = source.colorNode;
68
- this.opacityNode = source.opacityNode;
69
-
70
- this.alphaTestNode = source.alphaTestNode;
71
-
72
- this.normalNode = source.normalNode;
73
-
74
67
  this.emissiveNode = source.emissiveNode;
75
68
 
76
69
  this.metalnessNode = source.metalnessNode;
77
70
  this.roughnessNode = source.roughnessNode;
78
71
 
79
- this.envNode = source.envNode;
80
-
81
- this.lightsNode = source.lightsNode;
82
-
83
- this.positionNode = source.positionNode;
84
-
85
72
  return super.copy( source );
86
73
 
87
74
  }