super-three 0.162.0 → 0.164.0
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.
- package/build/three.cjs +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -2,7 +2,9 @@ import Node, { addNodeClass } from '../core/Node.js';
|
|
|
2
2
|
import { reference } from './ReferenceNode.js';
|
|
3
3
|
import { materialReference } from './MaterialReferenceNode.js';
|
|
4
4
|
import { normalView } from './NormalNode.js';
|
|
5
|
-
import { nodeImmutable, float } from '../shadernode/ShaderNode.js';
|
|
5
|
+
import { nodeImmutable, float, vec2, mat2 } from '../shadernode/ShaderNode.js';
|
|
6
|
+
import { uniform } from '../core/UniformNode.js';
|
|
7
|
+
import { Vector2 } from 'three';
|
|
6
8
|
|
|
7
9
|
const _propertyCache = new Map();
|
|
8
10
|
|
|
@@ -89,7 +91,7 @@ class MaterialNode extends Node {
|
|
|
89
91
|
|
|
90
92
|
if ( material.specularMap && material.specularMap.isTexture === true ) {
|
|
91
93
|
|
|
92
|
-
node = this.getTexture(
|
|
94
|
+
node = this.getTexture( 'specular' ).r;
|
|
93
95
|
|
|
94
96
|
} else {
|
|
95
97
|
|
|
@@ -97,6 +99,34 @@ class MaterialNode extends Node {
|
|
|
97
99
|
|
|
98
100
|
}
|
|
99
101
|
|
|
102
|
+
} else if ( scope === MaterialNode.SPECULAR_INTENSITY ) {
|
|
103
|
+
|
|
104
|
+
const specularIntensity = this.getFloat( scope );
|
|
105
|
+
|
|
106
|
+
if ( material.specularMap ) {
|
|
107
|
+
|
|
108
|
+
node = specularIntensity.mul( this.getTexture( scope ).a );
|
|
109
|
+
|
|
110
|
+
} else {
|
|
111
|
+
|
|
112
|
+
node = specularIntensity;
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
} else if ( scope === MaterialNode.SPECULAR_COLOR ) {
|
|
117
|
+
|
|
118
|
+
const specularColorNode = this.getColor( scope );
|
|
119
|
+
|
|
120
|
+
if ( material.specularColorMap && material.specularColorMap.isTexture === true ) {
|
|
121
|
+
|
|
122
|
+
node = specularColorNode.mul( this.getTexture( scope ).rgb );
|
|
123
|
+
|
|
124
|
+
} else {
|
|
125
|
+
|
|
126
|
+
node = specularColorNode;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
100
130
|
} else if ( scope === MaterialNode.ROUGHNESS ) { // TODO: cleanup similar branches
|
|
101
131
|
|
|
102
132
|
const roughnessNode = this.getFloat( scope );
|
|
@@ -225,6 +255,21 @@ class MaterialNode extends Node {
|
|
|
225
255
|
|
|
226
256
|
node = node.clamp( 0.07, 1.0 );
|
|
227
257
|
|
|
258
|
+
} else if ( scope === MaterialNode.ANISOTROPY ) {
|
|
259
|
+
|
|
260
|
+
if ( material.anisotropyMap && material.anisotropyMap.isTexture === true ) {
|
|
261
|
+
|
|
262
|
+
const anisotropyPolar = this.getTexture( scope );
|
|
263
|
+
const anisotropyMat = mat2( materialAnisotropyVector.x, materialAnisotropyVector.y, materialAnisotropyVector.y.negate(), materialAnisotropyVector.x );
|
|
264
|
+
|
|
265
|
+
node = anisotropyMat.mul( anisotropyPolar.rg.mul( 2.0 ).sub( vec2( 1.0 ) ).normalize().mul( anisotropyPolar.b ) );
|
|
266
|
+
|
|
267
|
+
} else {
|
|
268
|
+
|
|
269
|
+
node = materialAnisotropyVector;
|
|
270
|
+
|
|
271
|
+
}
|
|
272
|
+
|
|
228
273
|
} else if ( scope === MaterialNode.IRIDESCENCE_THICKNESS ) {
|
|
229
274
|
|
|
230
275
|
const iridescenceThicknessMaximum = reference( '1', 'float', material.iridescenceThicknessRange );
|
|
@@ -241,6 +286,38 @@ class MaterialNode extends Node {
|
|
|
241
286
|
|
|
242
287
|
}
|
|
243
288
|
|
|
289
|
+
} else if ( scope === MaterialNode.TRANSMISSION ) {
|
|
290
|
+
|
|
291
|
+
const transmissionNode = this.getFloat( scope );
|
|
292
|
+
|
|
293
|
+
if ( material.transmissionMap ) {
|
|
294
|
+
|
|
295
|
+
node = transmissionNode.mul( this.getTexture( scope ).r );
|
|
296
|
+
|
|
297
|
+
} else {
|
|
298
|
+
|
|
299
|
+
node = transmissionNode;
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
} else if ( scope === MaterialNode.THICKNESS ) {
|
|
304
|
+
|
|
305
|
+
const thicknessNode = this.getFloat( scope );
|
|
306
|
+
|
|
307
|
+
if ( material.thicknessMap ) {
|
|
308
|
+
|
|
309
|
+
node = thicknessNode.mul( this.getTexture( scope ).g );
|
|
310
|
+
|
|
311
|
+
} else {
|
|
312
|
+
|
|
313
|
+
node = thicknessNode;
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
} else if ( scope === MaterialNode.IOR ) {
|
|
318
|
+
|
|
319
|
+
node = this.getFloat( scope );
|
|
320
|
+
|
|
244
321
|
} else {
|
|
245
322
|
|
|
246
323
|
const outputType = this.getNodeType( builder );
|
|
@@ -259,8 +336,10 @@ MaterialNode.ALPHA_TEST = 'alphaTest';
|
|
|
259
336
|
MaterialNode.COLOR = 'color';
|
|
260
337
|
MaterialNode.OPACITY = 'opacity';
|
|
261
338
|
MaterialNode.SHININESS = 'shininess';
|
|
262
|
-
MaterialNode.
|
|
339
|
+
MaterialNode.SPECULAR = 'specular';
|
|
263
340
|
MaterialNode.SPECULAR_STRENGTH = 'specularStrength';
|
|
341
|
+
MaterialNode.SPECULAR_INTENSITY = 'specularIntensity';
|
|
342
|
+
MaterialNode.SPECULAR_COLOR = 'specularColor';
|
|
264
343
|
MaterialNode.REFLECTIVITY = 'reflectivity';
|
|
265
344
|
MaterialNode.ROUGHNESS = 'roughness';
|
|
266
345
|
MaterialNode.METALNESS = 'metalness';
|
|
@@ -272,9 +351,15 @@ MaterialNode.EMISSIVE = 'emissive';
|
|
|
272
351
|
MaterialNode.ROTATION = 'rotation';
|
|
273
352
|
MaterialNode.SHEEN = 'sheen';
|
|
274
353
|
MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';
|
|
354
|
+
MaterialNode.ANISOTROPY = 'anisotropy';
|
|
275
355
|
MaterialNode.IRIDESCENCE = 'iridescence';
|
|
276
356
|
MaterialNode.IRIDESCENCE_IOR = 'iridescenceIOR';
|
|
277
357
|
MaterialNode.IRIDESCENCE_THICKNESS = 'iridescenceThickness';
|
|
358
|
+
MaterialNode.IOR = 'ior';
|
|
359
|
+
MaterialNode.TRANSMISSION = 'transmission';
|
|
360
|
+
MaterialNode.THICKNESS = 'thickness';
|
|
361
|
+
MaterialNode.ATTENUATION_DISTANCE = 'attenuationDistance';
|
|
362
|
+
MaterialNode.ATTENUATION_COLOR = 'attenuationColor';
|
|
278
363
|
MaterialNode.LINE_SCALE = 'scale';
|
|
279
364
|
MaterialNode.LINE_DASH_SIZE = 'dashSize';
|
|
280
365
|
MaterialNode.LINE_GAP_SIZE = 'gapSize';
|
|
@@ -289,7 +374,11 @@ export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
|
|
|
289
374
|
export const materialShininess = nodeImmutable( MaterialNode, MaterialNode.SHININESS );
|
|
290
375
|
export const materialEmissive = nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
|
|
291
376
|
export const materialOpacity = nodeImmutable( MaterialNode, MaterialNode.OPACITY );
|
|
377
|
+
export const materialSpecular = nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
|
|
378
|
+
|
|
379
|
+
export const materialSpecularIntensity = nodeImmutable( MaterialNode, MaterialNode.SPECULAR_INTENSITY );
|
|
292
380
|
export const materialSpecularColor = nodeImmutable( MaterialNode, MaterialNode.SPECULAR_COLOR );
|
|
381
|
+
|
|
293
382
|
export const materialSpecularStrength = nodeImmutable( MaterialNode, MaterialNode.SPECULAR_STRENGTH );
|
|
294
383
|
export const materialReflectivity = nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );
|
|
295
384
|
export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
|
|
@@ -301,14 +390,29 @@ export const materialClearcoatNormal = nodeImmutable( MaterialNode, MaterialNode
|
|
|
301
390
|
export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
|
|
302
391
|
export const materialSheen = nodeImmutable( MaterialNode, MaterialNode.SHEEN );
|
|
303
392
|
export const materialSheenRoughness = nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
|
|
393
|
+
export const materialAnisotropy = nodeImmutable( MaterialNode, MaterialNode.ANISOTROPY );
|
|
304
394
|
export const materialIridescence = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE );
|
|
305
395
|
export const materialIridescenceIOR = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );
|
|
306
396
|
export const materialIridescenceThickness = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );
|
|
397
|
+
export const materialTransmission = nodeImmutable( MaterialNode, MaterialNode.TRANSMISSION );
|
|
398
|
+
export const materialThickness = nodeImmutable( MaterialNode, MaterialNode.THICKNESS );
|
|
399
|
+
export const materialIOR = nodeImmutable( MaterialNode, MaterialNode.IOR );
|
|
400
|
+
export const materialAttenuationDistance = nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_DISTANCE );
|
|
401
|
+
export const materialAttenuationColor = nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_COLOR );
|
|
307
402
|
export const materialLineScale = nodeImmutable( MaterialNode, MaterialNode.LINE_SCALE );
|
|
308
403
|
export const materialLineDashSize = nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_SIZE );
|
|
309
404
|
export const materialLineGapSize = nodeImmutable( MaterialNode, MaterialNode.LINE_GAP_SIZE );
|
|
310
405
|
export const materialLineWidth = nodeImmutable( MaterialNode, MaterialNode.LINE_WIDTH );
|
|
311
406
|
export const materialLineDashOffset = nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_OFFSET );
|
|
312
407
|
export const materialPointWidth = nodeImmutable( MaterialNode, MaterialNode.POINT_WIDTH );
|
|
408
|
+
export const materialAnisotropyVector = uniform( new Vector2() ).onReference( function ( frame ) {
|
|
409
|
+
|
|
410
|
+
return frame.material;
|
|
411
|
+
|
|
412
|
+
} ).onRenderUpdate( function ( { material } ) {
|
|
413
|
+
|
|
414
|
+
this.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );
|
|
415
|
+
|
|
416
|
+
} );
|
|
313
417
|
|
|
314
418
|
addNodeClass( 'MaterialNode', MaterialNode );
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import Node, { addNodeClass } from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { nodeProxy, tslFn } from '../shadernode/ShaderNode.js';
|
|
3
|
+
import { float, nodeProxy, tslFn } from '../shadernode/ShaderNode.js';
|
|
4
4
|
import { uniform } from '../core/UniformNode.js';
|
|
5
5
|
import { reference } from './ReferenceNode.js';
|
|
6
6
|
import { positionLocal } from './PositionNode.js';
|
|
7
7
|
import { normalLocal } from './NormalNode.js';
|
|
8
8
|
import { textureLoad } from './TextureNode.js';
|
|
9
|
-
import { vertexIndex } from '../core/IndexNode.js';
|
|
9
|
+
import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
|
|
10
10
|
import { ivec2, int } from '../shadernode/ShaderNode.js';
|
|
11
11
|
import { DataArrayTexture, Vector2, Vector4, FloatType } from 'three';
|
|
12
12
|
import { loop } from '../utils/LoopNode.js';
|
|
@@ -188,7 +188,17 @@ class MorphNode extends Node {
|
|
|
188
188
|
|
|
189
189
|
loop( morphTargetsCount, ( { i } ) => {
|
|
190
190
|
|
|
191
|
-
const influence =
|
|
191
|
+
const influence = float( 0 ).toVar();
|
|
192
|
+
|
|
193
|
+
if ( this.mesh.isInstancedMesh === true && ( this.mesh.morphTexture !== null && this.mesh.morphTexture !== undefined ) ) {
|
|
194
|
+
|
|
195
|
+
influence.assign( textureLoad( this.mesh.morphTexture, ivec2( int( i ).add( 1 ), int( instanceIndex ) ) ).r );
|
|
196
|
+
|
|
197
|
+
} else {
|
|
198
|
+
|
|
199
|
+
influence.assign( reference( 'morphTargetInfluences', 'float' ).element( i ).toVar() );
|
|
200
|
+
|
|
201
|
+
}
|
|
192
202
|
|
|
193
203
|
if ( hasMorphPosition === true ) {
|
|
194
204
|
|
|
@@ -5,7 +5,7 @@ import { property } from '../core/PropertyNode.js';
|
|
|
5
5
|
import { normalize } from '../math/MathNode.js';
|
|
6
6
|
import { cameraViewMatrix } from './CameraNode.js';
|
|
7
7
|
import { modelNormalMatrix } from './ModelNode.js';
|
|
8
|
-
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
8
|
+
import { nodeImmutable, vec3 } from '../shadernode/ShaderNode.js';
|
|
9
9
|
|
|
10
10
|
class NormalNode extends Node {
|
|
11
11
|
|
|
@@ -37,7 +37,17 @@ class NormalNode extends Node {
|
|
|
37
37
|
|
|
38
38
|
if ( scope === NormalNode.GEOMETRY ) {
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
const geometryAttribute = builder.hasGeometryAttribute( 'normal' );
|
|
41
|
+
|
|
42
|
+
if ( geometryAttribute === false ) {
|
|
43
|
+
|
|
44
|
+
outputNode = vec3( 0, 1, 0 );
|
|
45
|
+
|
|
46
|
+
} else {
|
|
47
|
+
|
|
48
|
+
outputNode = attribute( 'normal', 'vec3' );
|
|
49
|
+
|
|
50
|
+
}
|
|
41
51
|
|
|
42
52
|
} else if ( scope === NormalNode.LOCAL ) {
|
|
43
53
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
+
import { addNodeClass } from '../core/Node.js';
|
|
3
|
+
import { nodeObject } from '../shadernode/ShaderNode.js';
|
|
4
|
+
|
|
5
|
+
class RendererReferenceNode extends ReferenceNode {
|
|
6
|
+
|
|
7
|
+
constructor( property, inputType, renderer = null ) {
|
|
8
|
+
|
|
9
|
+
super( property, inputType, renderer );
|
|
10
|
+
|
|
11
|
+
this.renderer = renderer;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
updateReference( state ) {
|
|
16
|
+
|
|
17
|
+
this.reference = this.renderer !== null ? this.renderer : state.renderer;
|
|
18
|
+
|
|
19
|
+
return this.reference;
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default RendererReferenceNode;
|
|
26
|
+
|
|
27
|
+
export const rendererReference = ( name, type, renderer ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
|
|
28
|
+
|
|
29
|
+
addNodeClass( 'RendererReferenceNode', RendererReferenceNode );
|
|
@@ -18,6 +18,15 @@ class StorageBufferNode extends BufferNode {
|
|
|
18
18
|
this._attribute = null;
|
|
19
19
|
this._varying = null;
|
|
20
20
|
|
|
21
|
+
if ( value.isStorageBufferAttribute !== true && value.isStorageInstancedBufferAttribute !== true ) {
|
|
22
|
+
|
|
23
|
+
// TOOD: Improve it, possibly adding a new property to the BufferAttribute to identify it as a storage buffer read-only attribute in Renderer
|
|
24
|
+
|
|
25
|
+
if ( value.isInstancedBufferAttribute ) value.isStorageInstancedBufferAttribute = true;
|
|
26
|
+
else value.isStorageBufferAttribute = true;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
}
|
|
22
31
|
|
|
23
32
|
getInputType( /*builder*/ ) {
|
|
@@ -20,15 +20,40 @@ class TextureNode extends UniformNode {
|
|
|
20
20
|
this.levelNode = levelNode;
|
|
21
21
|
this.compareNode = null;
|
|
22
22
|
this.depthNode = null;
|
|
23
|
+
this.gradNode = null;
|
|
23
24
|
|
|
24
25
|
this.sampler = true;
|
|
25
26
|
this.updateMatrix = false;
|
|
26
27
|
this.updateType = NodeUpdateType.NONE;
|
|
27
28
|
|
|
29
|
+
this.referenceNode = null;
|
|
30
|
+
|
|
31
|
+
this._value = value;
|
|
32
|
+
|
|
28
33
|
this.setUpdateMatrix( uvNode === null );
|
|
29
34
|
|
|
30
35
|
}
|
|
31
36
|
|
|
37
|
+
set value( value ) {
|
|
38
|
+
|
|
39
|
+
if ( this.referenceNode ) {
|
|
40
|
+
|
|
41
|
+
this.referenceNode.value = value;
|
|
42
|
+
|
|
43
|
+
} else {
|
|
44
|
+
|
|
45
|
+
this._value = value;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get value() {
|
|
52
|
+
|
|
53
|
+
return this.referenceNode ? this.referenceNode.value : this._value;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
32
57
|
getUniformHash( /*builder*/ ) {
|
|
33
58
|
|
|
34
59
|
return this.value.uuid;
|
|
@@ -55,7 +80,7 @@ class TextureNode extends UniformNode {
|
|
|
55
80
|
|
|
56
81
|
}
|
|
57
82
|
|
|
58
|
-
|
|
83
|
+
updateReference( /*state*/ ) {
|
|
59
84
|
|
|
60
85
|
return this.value;
|
|
61
86
|
|
|
@@ -126,17 +151,12 @@ class TextureNode extends UniformNode {
|
|
|
126
151
|
|
|
127
152
|
}
|
|
128
153
|
|
|
129
|
-
if ( levelNode !== null && builder.context.getTextureLevelAlgorithm !== undefined ) {
|
|
130
|
-
|
|
131
|
-
levelNode = builder.context.getTextureLevelAlgorithm( this, levelNode );
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
154
|
//
|
|
136
155
|
|
|
137
156
|
properties.uvNode = uvNode;
|
|
138
157
|
properties.levelNode = levelNode;
|
|
139
158
|
properties.compareNode = this.compareNode;
|
|
159
|
+
properties.gradNode = this.gradNode;
|
|
140
160
|
properties.depthNode = this.depthNode;
|
|
141
161
|
|
|
142
162
|
}
|
|
@@ -147,7 +167,7 @@ class TextureNode extends UniformNode {
|
|
|
147
167
|
|
|
148
168
|
}
|
|
149
169
|
|
|
150
|
-
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet ) {
|
|
170
|
+
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet ) {
|
|
151
171
|
|
|
152
172
|
const texture = this.value;
|
|
153
173
|
|
|
@@ -157,6 +177,10 @@ class TextureNode extends UniformNode {
|
|
|
157
177
|
|
|
158
178
|
snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet );
|
|
159
179
|
|
|
180
|
+
} else if ( gradSnippet ) {
|
|
181
|
+
|
|
182
|
+
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
|
|
183
|
+
|
|
160
184
|
} else if ( compareSnippet ) {
|
|
161
185
|
|
|
162
186
|
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet );
|
|
@@ -205,18 +229,19 @@ class TextureNode extends UniformNode {
|
|
|
205
229
|
|
|
206
230
|
if ( propertyName === undefined ) {
|
|
207
231
|
|
|
208
|
-
const { uvNode, levelNode, compareNode, depthNode } = properties;
|
|
232
|
+
const { uvNode, levelNode, compareNode, depthNode, gradNode } = properties;
|
|
209
233
|
|
|
210
234
|
const uvSnippet = this.generateUV( builder, uvNode );
|
|
211
235
|
const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
|
|
212
236
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
213
237
|
const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
|
|
238
|
+
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
214
239
|
|
|
215
240
|
const nodeVar = builder.getVarFromNode( this );
|
|
216
241
|
|
|
217
242
|
propertyName = builder.getPropertyName( nodeVar );
|
|
218
243
|
|
|
219
|
-
const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet );
|
|
244
|
+
const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet );
|
|
220
245
|
|
|
221
246
|
builder.addLineFlowCode( `${propertyName} = ${snippet}` );
|
|
222
247
|
|
|
@@ -264,6 +289,7 @@ class TextureNode extends UniformNode {
|
|
|
264
289
|
|
|
265
290
|
const textureNode = this.clone();
|
|
266
291
|
textureNode.uvNode = uvNode;
|
|
292
|
+
textureNode.referenceNode = this;
|
|
267
293
|
|
|
268
294
|
return nodeObject( textureNode );
|
|
269
295
|
|
|
@@ -273,6 +299,7 @@ class TextureNode extends UniformNode {
|
|
|
273
299
|
|
|
274
300
|
const textureNode = this.clone();
|
|
275
301
|
textureNode.levelNode = levelNode.mul( maxMipLevel( textureNode ) );
|
|
302
|
+
textureNode.referenceNode = this;
|
|
276
303
|
|
|
277
304
|
return nodeObject( textureNode );
|
|
278
305
|
|
|
@@ -282,6 +309,7 @@ class TextureNode extends UniformNode {
|
|
|
282
309
|
|
|
283
310
|
const textureNode = this.clone();
|
|
284
311
|
textureNode.levelNode = levelNode;
|
|
312
|
+
textureNode.referenceNode = this;
|
|
285
313
|
|
|
286
314
|
return textureNode;
|
|
287
315
|
|
|
@@ -297,6 +325,18 @@ class TextureNode extends UniformNode {
|
|
|
297
325
|
|
|
298
326
|
const textureNode = this.clone();
|
|
299
327
|
textureNode.compareNode = nodeObject( compareNode );
|
|
328
|
+
textureNode.referenceNode = this;
|
|
329
|
+
|
|
330
|
+
return nodeObject( textureNode );
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
grad( gradNodeX, gradNodeY ) {
|
|
335
|
+
|
|
336
|
+
const textureNode = this.clone();
|
|
337
|
+
textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
|
|
338
|
+
|
|
339
|
+
textureNode.referenceNode = this;
|
|
300
340
|
|
|
301
341
|
return nodeObject( textureNode );
|
|
302
342
|
|
|
@@ -306,6 +346,7 @@ class TextureNode extends UniformNode {
|
|
|
306
346
|
|
|
307
347
|
const textureNode = this.clone();
|
|
308
348
|
textureNode.depthNode = nodeObject( depthNode );
|
|
349
|
+
textureNode.referenceNode = this;
|
|
309
350
|
|
|
310
351
|
return nodeObject( textureNode );
|
|
311
352
|
|
|
@@ -20,7 +20,7 @@ class TextureSizeNode extends Node {
|
|
|
20
20
|
const textureProperty = this.textureNode.build( builder, 'property' );
|
|
21
21
|
const levelNode = this.levelNode.build( builder, 'int' );
|
|
22
22
|
|
|
23
|
-
return builder.format( `${builder.getMethod( 'textureDimensions' )}( ${textureProperty}, ${levelNode} )`, this.getNodeType( builder ), output );
|
|
23
|
+
return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ levelNode } )`, this.getNodeType( builder ), output );
|
|
24
24
|
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -127,12 +127,4 @@ const nativeFn = ( code, includes = [], language = '' ) => {
|
|
|
127
127
|
export const glslFn = ( code, includes ) => nativeFn( code, includes, 'glsl' );
|
|
128
128
|
export const wgslFn = ( code, includes ) => nativeFn( code, includes, 'wgsl' );
|
|
129
129
|
|
|
130
|
-
export const func = ( code, includes ) => { // @deprecated, r154
|
|
131
|
-
|
|
132
|
-
console.warn( 'TSL: func() is deprecated. Use nativeFn(), wgslFn() or glslFn() instead.' );
|
|
133
|
-
|
|
134
|
-
return nodeObject( new FunctionNode( code, includes ) );
|
|
135
|
-
|
|
136
|
-
};
|
|
137
|
-
|
|
138
130
|
addNodeClass( 'FunctionNode', FunctionNode );
|
|
@@ -20,18 +20,68 @@ class Node extends EventDispatcher {
|
|
|
20
20
|
|
|
21
21
|
this.uuid = MathUtils.generateUUID();
|
|
22
22
|
|
|
23
|
+
this.version = 0;
|
|
24
|
+
|
|
25
|
+
this._cacheKey = null;
|
|
26
|
+
this._cacheKeyVersion = 0;
|
|
27
|
+
|
|
23
28
|
this.isNode = true;
|
|
24
29
|
|
|
25
30
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
26
31
|
|
|
27
32
|
}
|
|
28
33
|
|
|
34
|
+
set needsUpdate( value ) {
|
|
35
|
+
|
|
36
|
+
if ( value === true ) {
|
|
37
|
+
|
|
38
|
+
this.version ++;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
29
44
|
get type() {
|
|
30
45
|
|
|
31
46
|
return this.constructor.type;
|
|
32
47
|
|
|
33
48
|
}
|
|
34
49
|
|
|
50
|
+
onUpdate( callback, updateType ) {
|
|
51
|
+
|
|
52
|
+
this.updateType = updateType;
|
|
53
|
+
this.update = callback.bind( this.getSelf() );
|
|
54
|
+
|
|
55
|
+
return this;
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
onFrameUpdate( callback ) {
|
|
60
|
+
|
|
61
|
+
return this.onUpdate( callback, NodeUpdateType.FRAME );
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
onRenderUpdate( callback ) {
|
|
66
|
+
|
|
67
|
+
return this.onUpdate( callback, NodeUpdateType.RENDER );
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
onObjectUpdate( callback ) {
|
|
72
|
+
|
|
73
|
+
return this.onUpdate( callback, NodeUpdateType.OBJECT );
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
onReference( callback ) {
|
|
78
|
+
|
|
79
|
+
this.updateReference = callback.bind( this.getSelf() );
|
|
80
|
+
|
|
81
|
+
return this;
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
35
85
|
getSelf() {
|
|
36
86
|
|
|
37
87
|
// Returns non-node object.
|
|
@@ -40,7 +90,7 @@ class Node extends EventDispatcher {
|
|
|
40
90
|
|
|
41
91
|
}
|
|
42
92
|
|
|
43
|
-
|
|
93
|
+
updateReference( /*state*/ ) {
|
|
44
94
|
|
|
45
95
|
return this;
|
|
46
96
|
|
|
@@ -80,9 +130,18 @@ class Node extends EventDispatcher {
|
|
|
80
130
|
|
|
81
131
|
}
|
|
82
132
|
|
|
83
|
-
getCacheKey() {
|
|
133
|
+
getCacheKey( force = false ) {
|
|
134
|
+
|
|
135
|
+
force = force || this.version !== this._cacheKeyVersion;
|
|
136
|
+
|
|
137
|
+
if ( force === true || this._cacheKey === null ) {
|
|
138
|
+
|
|
139
|
+
this._cacheKey = getCacheKey( this, force );
|
|
140
|
+
this._cacheKeyVersion = this.version;
|
|
141
|
+
|
|
142
|
+
}
|
|
84
143
|
|
|
85
|
-
return
|
|
144
|
+
return this._cacheKey;
|
|
86
145
|
|
|
87
146
|
}
|
|
88
147
|
|
|
@@ -231,7 +290,7 @@ class Node extends EventDispatcher {
|
|
|
231
290
|
|
|
232
291
|
if ( buildStage === 'setup' ) {
|
|
233
292
|
|
|
234
|
-
this.
|
|
293
|
+
this.updateReference( builder );
|
|
235
294
|
|
|
236
295
|
const properties = builder.getNodeProperties( this );
|
|
237
296
|
|