super-three 0.168.0 → 0.169.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.
- package/build/three.cjs +384 -700
- package/build/three.module.js +384 -700
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +24644 -22406
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +79941 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +0 -6
- package/examples/jsm/controls/TrackballControls.js +32 -12
- package/examples/jsm/controls/TransformControls.js +97 -62
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/KTX2Exporter.js +21 -13
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +9 -7
- package/examples/jsm/geometries/DecalGeometry.js +4 -1
- package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/LightProbeGenerator.js +24 -10
- package/examples/jsm/loaders/ColladaLoader.js +9 -6
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +30 -20
- package/examples/jsm/loaders/GLTFLoader.js +5 -10
- package/examples/jsm/loaders/KTX2Loader.js +10 -7
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +29 -10
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +5 -4
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +8 -5
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/VRMLLoader.js +10 -10
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/misc/Timer.js +1 -1
- package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
- package/examples/jsm/objects/LensflareMesh.js +322 -0
- package/examples/jsm/objects/SkyMesh.js +1 -2
- package/examples/jsm/objects/Water2Mesh.js +2 -3
- package/examples/jsm/objects/WaterMesh.js +1 -2
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/physics/RapierPhysics.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
- package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/TextureUtils.js +1 -0
- package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/package.json +2 -2
- package/src/Three.WebGPU.Nodes.js +200 -0
- package/src/Three.WebGPU.js +2 -1
- package/src/audio/Audio.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +0 -9
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +0 -9
- package/src/extras/Controls.js +1 -1
- package/src/geometries/CylinderGeometry.js +11 -4
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +24 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +21 -17
- package/src/loaders/nodes/NodeObjectLoader.js +19 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +19 -34
- package/src/materials/nodes/Line2NodeMaterial.js +26 -26
- package/src/materials/nodes/LineBasicNodeMaterial.js +7 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshLambertNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshPhongNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +6 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +6 -3
- package/src/materials/nodes/MeshStandardNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshToonNodeMaterial.js +7 -3
- package/src/materials/nodes/NodeMaterial.js +20 -45
- package/src/materials/nodes/NodeMaterials.js +2 -0
- package/src/materials/nodes/PointsNodeMaterial.js +7 -3
- package/src/materials/nodes/ShadowNodeMaterial.js +7 -3
- package/src/materials/nodes/SpriteNodeMaterial.js +39 -6
- package/src/materials/nodes/VolumeNodeMaterial.js +13 -9
- package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
- package/src/math/Triangle.js +24 -0
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +96 -93
- package/src/nodes/accessors/BatchNode.js +7 -3
- package/src/nodes/accessors/BufferAttributeNode.js +6 -3
- package/src/nodes/accessors/BufferNode.js +6 -3
- package/src/nodes/accessors/Camera.js +10 -16
- package/src/nodes/accessors/ClippingNode.js +7 -3
- package/src/nodes/accessors/CubeTextureNode.js +6 -3
- package/src/nodes/accessors/InstanceNode.js +11 -11
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +6 -3
- package/src/nodes/accessors/Lights.js +51 -0
- package/src/nodes/accessors/MaterialNode.js +8 -4
- package/src/nodes/accessors/MaterialReferenceNode.js +6 -3
- package/src/nodes/accessors/ModelNode.js +42 -7
- package/src/nodes/accessors/ModelViewProjectionNode.js +9 -5
- package/src/nodes/accessors/MorphNode.js +7 -3
- package/src/nodes/accessors/Normal.js +32 -6
- package/src/nodes/accessors/Object3DNode.js +11 -27
- package/src/nodes/accessors/PointUVNode.js +7 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +32 -4
- package/src/nodes/accessors/ReferenceNode.js +40 -3
- package/src/nodes/accessors/RendererReferenceNode.js +9 -3
- package/src/nodes/accessors/SceneNode.js +7 -3
- package/src/nodes/accessors/SkinningNode.js +7 -3
- package/src/nodes/accessors/StorageBufferNode.js +21 -3
- package/src/nodes/accessors/StorageTextureNode.js +7 -4
- package/src/nodes/accessors/Texture3DNode.js +7 -4
- package/src/nodes/accessors/TextureNode.js +19 -8
- package/src/nodes/accessors/TextureSizeNode.js +8 -5
- package/src/nodes/accessors/UniformArrayNode.js +12 -9
- package/src/nodes/accessors/UserDataNode.js +9 -6
- package/src/nodes/accessors/VelocityNode.js +74 -23
- package/src/nodes/accessors/VertexColorNode.js +6 -3
- package/src/nodes/code/CodeNode.js +7 -3
- package/src/nodes/code/ExpressionNode.js +8 -4
- package/src/nodes/code/FunctionCallNode.js +6 -3
- package/src/nodes/code/FunctionNode.js +6 -3
- package/src/nodes/code/ScriptableNode.js +11 -6
- package/src/nodes/code/ScriptableValueNode.js +7 -3
- package/src/nodes/core/AssignNode.js +9 -6
- package/src/nodes/core/AttributeNode.js +7 -3
- package/src/nodes/core/BypassNode.js +8 -4
- package/src/nodes/core/CacheNode.js +8 -4
- package/src/nodes/core/ConstNode.js +6 -3
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/IndexNode.js +25 -3
- package/src/nodes/core/InputNode.js +7 -3
- package/src/nodes/core/MRTNode.js +6 -3
- package/src/nodes/core/Node.js +10 -51
- package/src/nodes/core/NodeBuilder.js +71 -5
- package/src/nodes/core/NodeUtils.js +48 -6
- package/src/nodes/core/OutputStructNode.js +8 -4
- package/src/nodes/core/ParameterNode.js +6 -3
- package/src/nodes/core/PropertyNode.js +7 -3
- package/src/nodes/core/StackNode.js +7 -3
- package/src/nodes/core/StructTypeNode.js +7 -3
- package/src/nodes/core/TempNode.js +8 -4
- package/src/nodes/core/UniformGroupNode.js +10 -6
- package/src/nodes/core/UniformNode.js +6 -3
- package/src/nodes/core/VarNode.js +8 -4
- package/src/nodes/core/VaryingNode.js +7 -3
- package/src/nodes/display/AfterImageNode.js +6 -0
- package/src/nodes/display/AnaglyphPassNode.js +6 -0
- package/src/nodes/display/AnamorphicNode.js +6 -0
- package/src/nodes/display/BloomNode.js +6 -0
- package/src/nodes/display/BumpMapNode.js +6 -0
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +43 -14
- package/src/nodes/display/DenoiseNode.js +6 -3
- package/src/nodes/display/DepthOfFieldNode.js +6 -3
- package/src/nodes/display/DotScreenNode.js +8 -5
- package/src/nodes/display/FXAANode.js +6 -3
- package/src/nodes/display/FilmNode.js +6 -3
- package/src/nodes/display/FrontFacingNode.js +7 -3
- package/src/nodes/display/GTAONode.js +6 -3
- package/src/nodes/display/GaussianBlurNode.js +6 -3
- package/src/nodes/display/Lut3DNode.js +6 -3
- package/src/nodes/display/NormalMapNode.js +8 -6
- package/src/nodes/display/ParallaxBarrierPassNode.js +8 -5
- package/src/nodes/display/PassNode.js +18 -7
- package/src/nodes/display/PixelationPassNode.js +12 -5
- package/src/nodes/display/PosterizeNode.js +6 -3
- package/src/nodes/display/RGBShiftNode.js +6 -3
- package/src/nodes/display/RenderOutputNode.js +12 -8
- package/src/nodes/display/SSAAPassNode.js +6 -3
- package/src/nodes/display/ScreenNode.js +181 -0
- package/src/nodes/display/SobelOperatorNode.js +6 -3
- package/src/nodes/display/StereoCompositePassNode.js +6 -3
- package/src/nodes/display/StereoPassNode.js +6 -3
- package/src/nodes/display/ToneMappingFunctions.js +12 -12
- package/src/nodes/display/ToneMappingNode.js +8 -7
- package/src/nodes/display/ToonOutlinePassNode.js +111 -0
- package/src/nodes/display/TransitionNode.js +6 -3
- package/src/nodes/display/ViewportDepthNode.js +7 -3
- package/src/nodes/display/ViewportDepthTextureNode.js +8 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +8 -5
- package/src/nodes/display/ViewportTextureNode.js +8 -5
- package/src/nodes/fog/FogExp2Node.js +6 -3
- package/src/nodes/fog/FogNode.js +7 -3
- package/src/nodes/fog/FogRangeNode.js +6 -3
- package/src/nodes/functions/PhysicalLightingModel.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +7 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
- package/src/nodes/gpgpu/BarrierNode.js +40 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
- package/src/nodes/gpgpu/ComputeNode.js +8 -4
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
- package/src/nodes/lighting/AONode.js +6 -3
- package/src/nodes/lighting/AmbientLightNode.js +6 -3
- package/src/nodes/lighting/AnalyticLightNode.js +198 -30
- package/src/nodes/lighting/BasicEnvironmentNode.js +6 -3
- package/src/nodes/lighting/BasicLightMapNode.js +6 -3
- package/src/nodes/lighting/DirectionalLightNode.js +7 -4
- package/src/nodes/lighting/EnvironmentNode.js +6 -3
- package/src/nodes/lighting/HemisphereLightNode.js +10 -6
- package/src/nodes/lighting/IESSpotLightNode.js +6 -3
- package/src/nodes/lighting/IrradianceNode.js +6 -3
- package/src/nodes/lighting/LightProbeNode.js +8 -31
- package/src/nodes/lighting/LightingContextNode.js +6 -3
- package/src/nodes/lighting/LightingNode.js +7 -3
- package/src/nodes/lighting/LightsNode.js +24 -5
- package/src/nodes/lighting/PointLightNode.js +11 -7
- package/src/nodes/lighting/RectAreaLightNode.js +11 -7
- package/src/nodes/lighting/SpotLightNode.js +13 -10
- package/src/nodes/math/ConditionalNode.js +23 -6
- package/src/nodes/math/MathNode.js +6 -3
- package/src/nodes/math/OperatorNode.js +6 -3
- package/src/nodes/pmrem/PMREMNode.js +6 -3
- package/src/nodes/utils/ArrayElementNode.js +8 -4
- package/src/nodes/utils/ConvertNode.js +7 -3
- package/src/nodes/utils/CubeMapNode.js +6 -3
- package/src/nodes/utils/EquirectUVNode.js +6 -3
- package/src/nodes/utils/FlipNode.js +7 -4
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -3
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +7 -3
- package/src/nodes/utils/MatcapUVNode.js +6 -3
- package/src/nodes/utils/MaxMipLevelNode.js +6 -3
- package/src/nodes/utils/OscNode.js +7 -3
- package/src/nodes/utils/RTTNode.js +6 -3
- package/src/nodes/utils/ReflectorNode.js +8 -5
- package/src/nodes/utils/RemapNode.js +7 -3
- package/src/nodes/utils/RotateNode.js +6 -3
- package/src/nodes/utils/SetNode.js +7 -4
- package/src/nodes/utils/SplitNode.js +7 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +7 -3
- package/src/nodes/utils/StorageArrayElementNode.js +9 -8
- package/src/nodes/utils/TimerNode.js +6 -3
- package/src/nodes/utils/TriplanarTexturesNode.js +7 -3
- package/src/nodes/utils/ViewportUtils.js +2 -2
- package/src/objects/BatchedMesh.js +76 -10
- package/src/objects/LOD.js +21 -0
- package/src/objects/Line.js +1 -0
- package/src/objects/Mesh.js +7 -23
- package/src/objects/Points.js +2 -0
- package/src/renderers/WebGLRenderer.js +65 -50
- package/src/renderers/common/BundleGroup.js +26 -0
- package/src/renderers/common/ClippingContext.js +4 -3
- package/src/renderers/common/RenderContext.js +4 -5
- package/src/renderers/common/RenderObject.js +116 -5
- package/src/renderers/common/RenderObjects.js +8 -1
- package/src/renderers/common/Renderer.js +57 -49
- package/src/renderers/common/extras/PMREMGenerator.js +7 -9
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +33 -14
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLCapabilities.js +9 -0
- package/src/renderers/webgl/WebGLProgram.js +2 -0
- package/src/renderers/webgl/WebGLPrograms.js +21 -17
- package/src/renderers/webgl/WebGLState.js +21 -0
- package/src/renderers/webgl/WebGLTextures.js +22 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +50 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +61 -16
- package/src/renderers/webgpu/WebGPUBackend.js +33 -25
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
- package/src/renderers/webgpu/WebGPURenderer.js +5 -2
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
- package/src/renderers/{common → webgpu}/nodes/StandardNodeLibrary.js +11 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +91 -11
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +7 -5
- package/src/renderers/webgpu/utils/WebGPUUtils.js +1 -1
- package/src/utils.js +33 -1
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/display/ViewportNode.js +0 -138
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/renderers/common/StandardRenderer.js +0 -18
- package/src/renderers/webvr/WebVRManager.js +0 -495
- package/src/renderers/webvr/WebVRUtils.js +0 -66
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import UniformNode from '../core/UniformNode.js';
|
|
3
2
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
4
3
|
|
|
5
4
|
class BufferNode extends UniformNode {
|
|
6
5
|
|
|
6
|
+
static get type() {
|
|
7
|
+
|
|
8
|
+
return 'BufferNode';
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
constructor( value, bufferType, bufferCount = 0 ) {
|
|
8
13
|
|
|
9
14
|
super( value, bufferType );
|
|
@@ -31,6 +36,4 @@ class BufferNode extends UniformNode {
|
|
|
31
36
|
|
|
32
37
|
export default BufferNode;
|
|
33
38
|
|
|
34
|
-
BufferNode.type = /*@__PURE__*/ registerNode( 'Buffer', BufferNode );
|
|
35
|
-
|
|
36
39
|
export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import { uniform } from '../core/UniformNode.js';
|
|
2
|
-
import {
|
|
2
|
+
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} );
|
|
10
|
-
|
|
11
|
-
export const
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
14
|
-
export const cameraProjectionMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
|
|
15
|
-
export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
|
|
16
|
-
export const cameraViewMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
|
|
17
|
-
export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
|
|
18
|
-
export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
|
|
19
|
-
export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( cameraGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
|
|
5
|
+
export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
|
|
6
|
+
export const cameraFar = /*@__PURE__*/ uniform( 'float' ).label( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
|
|
7
|
+
export const cameraLogDepth = /*@__PURE__*/ uniform( 'float' ).label( 'cameraLogDepth' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
8
|
+
export const cameraProjectionMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
|
|
9
|
+
export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
|
|
10
|
+
export const cameraViewMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
|
|
11
|
+
export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
|
|
12
|
+
export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
|
|
13
|
+
export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import Node
|
|
2
|
+
import Node from '../core/Node.js';
|
|
3
3
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
4
4
|
import { positionView } from './Position.js';
|
|
5
5
|
import { diffuseColor, property } from '../core/PropertyNode.js';
|
|
@@ -10,6 +10,12 @@ import { uniformArray } from './UniformArrayNode.js';
|
|
|
10
10
|
|
|
11
11
|
class ClippingNode extends Node {
|
|
12
12
|
|
|
13
|
+
static get type() {
|
|
14
|
+
|
|
15
|
+
return 'ClippingNode';
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
constructor( scope = ClippingNode.DEFAULT ) {
|
|
14
20
|
|
|
15
21
|
super();
|
|
@@ -140,8 +146,6 @@ ClippingNode.DEFAULT = 'default';
|
|
|
140
146
|
|
|
141
147
|
export default ClippingNode;
|
|
142
148
|
|
|
143
|
-
ClippingNode.type = /*@__PURE__*/ registerNode( 'Clipping', ClippingNode );
|
|
144
|
-
|
|
145
149
|
export const clipping = () => nodeObject( new ClippingNode() );
|
|
146
150
|
|
|
147
151
|
export const clippingAlpha = () => nodeObject( new ClippingNode( ClippingNode.ALPHA_TO_COVERAGE ) );
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import TextureNode from './TextureNode.js';
|
|
3
2
|
import { reflectVector, refractVector } from './ReflectVector.js';
|
|
4
3
|
import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
@@ -7,6 +6,12 @@ import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem }
|
|
|
7
6
|
|
|
8
7
|
class CubeTextureNode extends TextureNode {
|
|
9
8
|
|
|
9
|
+
static get type() {
|
|
10
|
+
|
|
11
|
+
return 'CubeTextureNode';
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
10
15
|
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
11
16
|
|
|
12
17
|
super( value, uvNode, levelNode, biasNode );
|
|
@@ -71,6 +76,4 @@ class CubeTextureNode extends TextureNode {
|
|
|
71
76
|
|
|
72
77
|
export default CubeTextureNode;
|
|
73
78
|
|
|
74
|
-
CubeTextureNode.type = /*@__PURE__*/ registerNode( 'CubeTexture', CubeTextureNode );
|
|
75
|
-
|
|
76
79
|
export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode );
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { varyingProperty } from '../core/PropertyNode.js';
|
|
3
3
|
import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
|
|
4
|
-
import { normalLocal } from './Normal.js';
|
|
4
|
+
import { normalLocal, transformNormal } from './Normal.js';
|
|
5
5
|
import { positionLocal } from './Position.js';
|
|
6
|
-
import { nodeProxy, vec3,
|
|
6
|
+
import { nodeProxy, vec3, mat4 } from '../tsl/TSLBase.js';
|
|
7
7
|
import { NodeUpdateType } from '../core/constants.js';
|
|
8
8
|
import { buffer } from '../accessors/BufferNode.js';
|
|
9
9
|
import { instanceIndex } from '../core/IndexNode.js';
|
|
@@ -14,6 +14,12 @@ import { DynamicDrawUsage } from '../../constants.js';
|
|
|
14
14
|
|
|
15
15
|
class InstanceNode extends Node {
|
|
16
16
|
|
|
17
|
+
static get type() {
|
|
18
|
+
|
|
19
|
+
return 'InstanceNode';
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
17
23
|
constructor( instanceMesh ) {
|
|
18
24
|
|
|
19
25
|
super( 'void' );
|
|
@@ -46,7 +52,7 @@ class InstanceNode extends Node {
|
|
|
46
52
|
|
|
47
53
|
if ( instanceMesh.count <= 1000 ) {
|
|
48
54
|
|
|
49
|
-
instanceMatrixNode = buffer( instanceAttribute.array, 'mat4', instanceMesh.count ).element( instanceIndex );
|
|
55
|
+
instanceMatrixNode = buffer( instanceAttribute.array, 'mat4', Math.max( instanceMesh.count, 1 ) ).element( instanceIndex );
|
|
50
56
|
|
|
51
57
|
} else {
|
|
52
58
|
|
|
@@ -97,11 +103,7 @@ class InstanceNode extends Node {
|
|
|
97
103
|
|
|
98
104
|
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
99
105
|
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
const transformedNormal = normalLocal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
|
|
103
|
-
|
|
104
|
-
const instanceNormal = m.mul( transformedNormal ).xyz;
|
|
106
|
+
const instanceNormal = transformNormal( normalLocal, instanceMatrixNode );
|
|
105
107
|
|
|
106
108
|
// ASSIGNS
|
|
107
109
|
|
|
@@ -139,6 +141,4 @@ class InstanceNode extends Node {
|
|
|
139
141
|
|
|
140
142
|
export default InstanceNode;
|
|
141
143
|
|
|
142
|
-
InstanceNode.type = /*@__PURE__*/ registerNode( 'Instance', InstanceNode );
|
|
143
|
-
|
|
144
144
|
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode );
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import MaterialNode from './MaterialNode.js';
|
|
3
2
|
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
4
3
|
|
|
5
4
|
class InstancedPointsMaterialNode extends MaterialNode {
|
|
6
5
|
|
|
6
|
+
static get type() {
|
|
7
|
+
|
|
8
|
+
return 'InstancedPointsMaterialNode';
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
setup( /*builder*/ ) {
|
|
8
13
|
|
|
9
14
|
return this.getFloat( this.scope );
|
|
@@ -16,6 +21,4 @@ InstancedPointsMaterialNode.POINT_WIDTH = 'pointWidth';
|
|
|
16
21
|
|
|
17
22
|
export default InstancedPointsMaterialNode;
|
|
18
23
|
|
|
19
|
-
InstancedPointsMaterialNode.type = /*@__PURE__*/ registerNode( 'InstancedPointsMaterial', InstancedPointsMaterialNode );
|
|
20
|
-
|
|
21
24
|
export const materialPointWidth = /*@__PURE__*/ nodeImmutable( InstancedPointsMaterialNode, InstancedPointsMaterialNode.POINT_WIDTH );
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { uniform } from '../core/UniformNode.js';
|
|
2
|
+
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
3
|
+
import { Vector3 } from '../../math/Vector3.js';
|
|
4
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
5
|
+
|
|
6
|
+
let uniformsLib;
|
|
7
|
+
|
|
8
|
+
function getLightData( light ) {
|
|
9
|
+
|
|
10
|
+
uniformsLib = uniformsLib || new WeakMap();
|
|
11
|
+
|
|
12
|
+
let uniforms = uniformsLib.get( light );
|
|
13
|
+
|
|
14
|
+
if ( uniforms === undefined ) uniformsLib.set( light, uniforms = {} );
|
|
15
|
+
|
|
16
|
+
return uniforms;
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function lightPosition( light ) {
|
|
21
|
+
|
|
22
|
+
const data = getLightData( light );
|
|
23
|
+
|
|
24
|
+
return data.position || ( data.position = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( _, self ) => self.value.setFromMatrixPosition( light.matrixWorld ) ) );
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function lightTargetPosition( light ) {
|
|
29
|
+
|
|
30
|
+
const data = getLightData( light );
|
|
31
|
+
|
|
32
|
+
return data.targetPosition || ( data.targetPosition = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( _, self ) => self.value.setFromMatrixPosition( light.target.matrixWorld ) ) );
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function lightViewPosition( light ) {
|
|
37
|
+
|
|
38
|
+
const data = getLightData( light );
|
|
39
|
+
|
|
40
|
+
return data.viewPosition || ( data.viewPosition = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => {
|
|
41
|
+
|
|
42
|
+
self.value = self.value || new Vector3();
|
|
43
|
+
self.value.setFromMatrixPosition( light.matrixWorld );
|
|
44
|
+
|
|
45
|
+
self.value.applyMatrix4( camera.matrixWorldInverse );
|
|
46
|
+
|
|
47
|
+
} ) );
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const lightTargetDirection = ( light ) => cameraViewMatrix.transformDirection( lightPosition( light ).sub( lightTargetPosition( light ) ) );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { reference } from './ReferenceNode.js';
|
|
3
3
|
import { materialReference } from './MaterialReferenceNode.js';
|
|
4
4
|
import { normalView } from './Normal.js';
|
|
@@ -13,6 +13,12 @@ const _propertyCache = new Map();
|
|
|
13
13
|
|
|
14
14
|
class MaterialNode extends Node {
|
|
15
15
|
|
|
16
|
+
static get type() {
|
|
17
|
+
|
|
18
|
+
return 'MaterialNode';
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
constructor( scope ) {
|
|
17
23
|
|
|
18
24
|
super();
|
|
@@ -178,6 +184,7 @@ class MaterialNode extends Node {
|
|
|
178
184
|
if ( material.normalMap ) {
|
|
179
185
|
|
|
180
186
|
node = normalMap( this.getTexture( 'normal' ), this.getCache( 'normalScale', 'vec2' ) );
|
|
187
|
+
node.normalMapType = material.normalMapType;
|
|
181
188
|
|
|
182
189
|
} else if ( material.bumpMap ) {
|
|
183
190
|
|
|
@@ -384,8 +391,6 @@ MaterialNode.AO_MAP = 'ao';
|
|
|
384
391
|
|
|
385
392
|
export default MaterialNode;
|
|
386
393
|
|
|
387
|
-
MaterialNode.type = /*@__PURE__*/ registerNode( 'Material', MaterialNode );
|
|
388
|
-
|
|
389
394
|
export const materialAlphaTest = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
|
|
390
395
|
export const materialColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.COLOR );
|
|
391
396
|
export const materialShininess = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHININESS );
|
|
@@ -425,7 +430,6 @@ export const materialPointWidth = /*@__PURE__*/ nodeImmutable( MaterialNode, Mat
|
|
|
425
430
|
export const materialDispersion = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.DISPERSION );
|
|
426
431
|
export const materialLightMap = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LIGHT_MAP );
|
|
427
432
|
export const materialAOMap = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.AO_MAP );
|
|
428
|
-
export const materialRefractionRatio = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.REFRACTION_RATIO );
|
|
429
433
|
export const materialAnisotropyVector = /*@__PURE__*/ uniform( new Vector2() ).onReference( function ( frame ) {
|
|
430
434
|
|
|
431
435
|
return frame.material;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
3
2
|
//import { renderGroup } from '../core/UniformGroupNode.js';
|
|
4
3
|
//import { NodeUpdateType } from '../core/constants.js';
|
|
@@ -6,6 +5,12 @@ import { nodeObject } from '../tsl/TSLBase.js';
|
|
|
6
5
|
|
|
7
6
|
class MaterialReferenceNode extends ReferenceNode {
|
|
8
7
|
|
|
8
|
+
static get type() {
|
|
9
|
+
|
|
10
|
+
return 'MaterialReferenceNode';
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
constructor( property, inputType, material = null ) {
|
|
10
15
|
|
|
11
16
|
super( property, inputType, material );
|
|
@@ -38,6 +43,4 @@ class MaterialReferenceNode extends ReferenceNode {
|
|
|
38
43
|
|
|
39
44
|
export default MaterialReferenceNode;
|
|
40
45
|
|
|
41
|
-
MaterialReferenceNode.type = /*@__PURE__*/ registerNode( 'MaterialReference', MaterialReferenceNode );
|
|
42
|
-
|
|
43
46
|
export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import Object3DNode from './Object3DNode.js';
|
|
3
|
-
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
2
|
+
import { Fn, nodeImmutable } from '../tsl/TSLBase.js';
|
|
4
3
|
import { uniform } from '../core/UniformNode.js';
|
|
5
4
|
|
|
6
5
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
6
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
7
|
+
import { Matrix3 } from '../../math/Matrix3.js';
|
|
7
8
|
|
|
8
9
|
class ModelNode extends Object3DNode {
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
static get type() {
|
|
12
|
+
|
|
13
|
+
return 'ModelNode';
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
constructor( scope ) {
|
|
11
18
|
|
|
12
19
|
super( scope );
|
|
13
20
|
|
|
@@ -25,13 +32,41 @@ class ModelNode extends Object3DNode {
|
|
|
25
32
|
|
|
26
33
|
export default ModelNode;
|
|
27
34
|
|
|
28
|
-
ModelNode.type = /*@__PURE__*/ registerNode( 'Model', ModelNode );
|
|
29
|
-
|
|
30
35
|
export const modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );
|
|
31
|
-
export const modelViewMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ).label( 'modelViewMatrix' ).toVar( 'ModelViewMatrix' );
|
|
32
|
-
export const modelNormalMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
|
|
33
36
|
export const modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
|
|
34
37
|
export const modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );
|
|
35
38
|
export const modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );
|
|
36
39
|
export const modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
|
|
40
|
+
export const modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );
|
|
37
41
|
export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
|
|
42
|
+
export const modelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix ).toVar( 'modelViewMatrix' );
|
|
43
|
+
|
|
44
|
+
export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
45
|
+
|
|
46
|
+
builder.context.isHighPrecisionModelViewMatrix = true;
|
|
47
|
+
|
|
48
|
+
return uniform( 'mat4' ).onObjectUpdate( ( { object, camera } ) => {
|
|
49
|
+
|
|
50
|
+
return object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
51
|
+
|
|
52
|
+
} );
|
|
53
|
+
|
|
54
|
+
} ).once() )().toVar( 'highPrecisionModelViewMatrix' );
|
|
55
|
+
|
|
56
|
+
export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
57
|
+
|
|
58
|
+
const isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;
|
|
59
|
+
|
|
60
|
+
return uniform( 'mat3' ).onObjectUpdate( ( { object, camera } ) => {
|
|
61
|
+
|
|
62
|
+
if ( isHighPrecisionModelViewMatrix !== true ) {
|
|
63
|
+
|
|
64
|
+
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
69
|
+
|
|
70
|
+
} );
|
|
71
|
+
|
|
72
|
+
} ).once() )().toVar( 'highPrecisionModelNormalMatrix' );
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { registerNode } from '../core/Node.js';
|
|
2
1
|
import TempNode from '../core/TempNode.js';
|
|
3
2
|
import { cameraProjectionMatrix } from './Camera.js';
|
|
4
|
-
import { modelViewMatrix } from './ModelNode.js';
|
|
5
3
|
import { positionLocal } from './Position.js';
|
|
6
4
|
import { nodeProxy, varying } from '../tsl/TSLBase.js';
|
|
5
|
+
import { modelViewMatrix } from './ModelNode.js';
|
|
7
6
|
|
|
8
7
|
class ModelViewProjectionNode extends TempNode {
|
|
9
8
|
|
|
9
|
+
static get type() {
|
|
10
|
+
|
|
11
|
+
return 'ModelViewProjectionNode';
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
10
15
|
constructor( positionNode = null ) {
|
|
11
16
|
|
|
12
17
|
super( 'vec4' );
|
|
@@ -24,8 +29,9 @@ class ModelViewProjectionNode extends TempNode {
|
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
const position = this.positionNode || positionLocal;
|
|
32
|
+
const viewMatrix = builder.renderer.nodes.modelViewMatrix || modelViewMatrix;
|
|
27
33
|
|
|
28
|
-
return cameraProjectionMatrix.mul(
|
|
34
|
+
return cameraProjectionMatrix.mul( viewMatrix ).mul( position );
|
|
29
35
|
|
|
30
36
|
}
|
|
31
37
|
|
|
@@ -33,6 +39,4 @@ class ModelViewProjectionNode extends TempNode {
|
|
|
33
39
|
|
|
34
40
|
export default ModelViewProjectionNode;
|
|
35
41
|
|
|
36
|
-
ModelViewProjectionNode.type = /*@__PURE__*/ registerNode( 'ModelViewProjection', ModelViewProjectionNode );
|
|
37
|
-
|
|
38
42
|
export const modelViewProjection = /*@__PURE__*/ nodeProxy( ModelViewProjectionNode );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { float, nodeProxy, Fn } from '../tsl/TSLBase.js';
|
|
4
4
|
import { uniform } from '../core/UniformNode.js';
|
|
@@ -160,6 +160,12 @@ function getEntry( geometry ) {
|
|
|
160
160
|
|
|
161
161
|
class MorphNode extends Node {
|
|
162
162
|
|
|
163
|
+
static get type() {
|
|
164
|
+
|
|
165
|
+
return 'MorphNode';
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
163
169
|
constructor( mesh ) {
|
|
164
170
|
|
|
165
171
|
super( 'void' );
|
|
@@ -254,6 +260,4 @@ class MorphNode extends Node {
|
|
|
254
260
|
|
|
255
261
|
export default MorphNode;
|
|
256
262
|
|
|
257
|
-
MorphNode.type = /*@__PURE__*/ registerNode( 'Morph', MorphNode );
|
|
258
|
-
|
|
259
263
|
export const morphReference = /*@__PURE__*/ nodeProxy( MorphNode );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
|
-
import { modelNormalMatrix } from './ModelNode.js';
|
|
4
|
-
import { vec3 } from '../tsl/TSLBase.js';
|
|
3
|
+
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
+
import { mat3, vec3 } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
6
|
import { Fn, varying } from '../tsl/TSLBase.js';
|
|
7
7
|
import { faceDirection } from '../display/FrontFacingNode.js';
|
|
@@ -24,8 +24,6 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
24
24
|
|
|
25
25
|
export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
|
|
26
26
|
|
|
27
|
-
let normalViewVarying = null;
|
|
28
|
-
|
|
29
27
|
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
30
28
|
|
|
31
29
|
let node;
|
|
@@ -36,7 +34,7 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
36
34
|
|
|
37
35
|
} else {
|
|
38
36
|
|
|
39
|
-
node =
|
|
37
|
+
node = varying( transformNormalToView( normalLocal ), 'v_normalView' ).normalize();
|
|
40
38
|
|
|
41
39
|
}
|
|
42
40
|
|
|
@@ -53,10 +51,38 @@ export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
53
51
|
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
|
|
54
52
|
|
|
55
53
|
|
|
56
|
-
export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).
|
|
54
|
+
export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
|
|
57
55
|
|
|
58
56
|
export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
59
57
|
|
|
60
58
|
return builder.context.setupClearcoatNormal();
|
|
61
59
|
|
|
62
60
|
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
|
|
61
|
+
|
|
62
|
+
export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
|
|
63
|
+
|
|
64
|
+
const m = mat3( matrix );
|
|
65
|
+
|
|
66
|
+
const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
|
|
67
|
+
|
|
68
|
+
return m.mul( transformedNormal ).xyz;
|
|
69
|
+
|
|
70
|
+
} );
|
|
71
|
+
|
|
72
|
+
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
73
|
+
|
|
74
|
+
const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
|
|
75
|
+
|
|
76
|
+
if ( modelNormalViewMatrix !== null ) {
|
|
77
|
+
|
|
78
|
+
return modelNormalViewMatrix.transformDirection( normal );
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//
|
|
83
|
+
|
|
84
|
+
const transformedNormal = modelNormalMatrix.mul( normal );
|
|
85
|
+
|
|
86
|
+
return cameraViewMatrix.transformDirection( transformedNormal );
|
|
87
|
+
|
|
88
|
+
} );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import UniformNode from '../core/UniformNode.js';
|
|
4
4
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
@@ -7,7 +7,13 @@ import { Vector3 } from '../../math/Vector3.js';
|
|
|
7
7
|
|
|
8
8
|
class Object3DNode extends Node {
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
static get type() {
|
|
11
|
+
|
|
12
|
+
return 'Object3DNode';
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
constructor( scope, object3d = null ) {
|
|
11
17
|
|
|
12
18
|
super();
|
|
13
19
|
|
|
@@ -24,14 +30,10 @@ class Object3DNode extends Node {
|
|
|
24
30
|
|
|
25
31
|
const scope = this.scope;
|
|
26
32
|
|
|
27
|
-
if ( scope === Object3DNode.WORLD_MATRIX
|
|
33
|
+
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
28
34
|
|
|
29
35
|
return 'mat4';
|
|
30
36
|
|
|
31
|
-
} else if ( scope === Object3DNode.NORMAL_MATRIX ) {
|
|
32
|
-
|
|
33
|
-
return 'mat3';
|
|
34
|
-
|
|
35
37
|
} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
|
|
36
38
|
|
|
37
39
|
return 'vec3';
|
|
@@ -46,15 +48,7 @@ class Object3DNode extends Node {
|
|
|
46
48
|
const uniformNode = this._uniformNode;
|
|
47
49
|
const scope = this.scope;
|
|
48
50
|
|
|
49
|
-
if ( scope === Object3DNode.
|
|
50
|
-
|
|
51
|
-
uniformNode.value = object.modelViewMatrix;
|
|
52
|
-
|
|
53
|
-
} else if ( scope === Object3DNode.NORMAL_MATRIX ) {
|
|
54
|
-
|
|
55
|
-
uniformNode.value = object.normalMatrix;
|
|
56
|
-
|
|
57
|
-
} else if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
51
|
+
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
58
52
|
|
|
59
53
|
uniformNode.value = object.matrixWorld;
|
|
60
54
|
|
|
@@ -93,14 +87,10 @@ class Object3DNode extends Node {
|
|
|
93
87
|
|
|
94
88
|
const scope = this.scope;
|
|
95
89
|
|
|
96
|
-
if ( scope === Object3DNode.WORLD_MATRIX
|
|
90
|
+
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
97
91
|
|
|
98
92
|
this._uniformNode.nodeType = 'mat4';
|
|
99
93
|
|
|
100
|
-
} else if ( scope === Object3DNode.NORMAL_MATRIX ) {
|
|
101
|
-
|
|
102
|
-
this._uniformNode.nodeType = 'mat3';
|
|
103
|
-
|
|
104
94
|
} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
|
|
105
95
|
|
|
106
96
|
this._uniformNode.nodeType = 'vec3';
|
|
@@ -129,8 +119,6 @@ class Object3DNode extends Node {
|
|
|
129
119
|
|
|
130
120
|
}
|
|
131
121
|
|
|
132
|
-
Object3DNode.VIEW_MATRIX = 'viewMatrix';
|
|
133
|
-
Object3DNode.NORMAL_MATRIX = 'normalMatrix';
|
|
134
122
|
Object3DNode.WORLD_MATRIX = 'worldMatrix';
|
|
135
123
|
Object3DNode.POSITION = 'position';
|
|
136
124
|
Object3DNode.SCALE = 'scale';
|
|
@@ -139,11 +127,7 @@ Object3DNode.DIRECTION = 'direction';
|
|
|
139
127
|
|
|
140
128
|
export default Object3DNode;
|
|
141
129
|
|
|
142
|
-
Object3DNode.type = /*@__PURE__*/ registerNode( 'Object3D', Object3DNode );
|
|
143
|
-
|
|
144
130
|
export const objectDirection = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.DIRECTION );
|
|
145
|
-
export const objectViewMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_MATRIX );
|
|
146
|
-
export const objectNormalMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
|
|
147
131
|
export const objectWorldMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
|
|
148
132
|
export const objectPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.POSITION );
|
|
149
133
|
export const objectScale = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.SCALE );
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
4
|
class PointUVNode extends Node {
|
|
5
5
|
|
|
6
|
+
static get type() {
|
|
7
|
+
|
|
8
|
+
return 'PointUVNode';
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
6
12
|
constructor() {
|
|
7
13
|
|
|
8
14
|
super( 'vec2' );
|
|
@@ -21,6 +27,4 @@ class PointUVNode extends Node {
|
|
|
21
27
|
|
|
22
28
|
export default PointUVNode;
|
|
23
29
|
|
|
24
|
-
PointUVNode.type = /*@__PURE__*/ registerNode( 'PointUV', PointUVNode );
|
|
25
|
-
|
|
26
30
|
export const pointUV = /*@__PURE__*/ nodeImmutable( PointUVNode );
|