@plastic-software/three 0.167.4 → 0.174.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- 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/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,31 +1,64 @@
|
|
|
1
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node is a special type of reference node which is intended
|
|
6
|
+
* for linking material properties with node values.
|
|
7
|
+
* ```js
|
|
8
|
+
* const opacityNode = materialReference( 'opacity', 'float', material );
|
|
9
|
+
* ```
|
|
10
|
+
* When changing `material.opacity`, the node value of `opacityNode` will
|
|
11
|
+
* automatically be updated.
|
|
12
|
+
*
|
|
13
|
+
* @augments ReferenceNode
|
|
14
|
+
*/
|
|
7
15
|
class MaterialReferenceNode extends ReferenceNode {
|
|
8
16
|
|
|
17
|
+
static get type() {
|
|
18
|
+
|
|
19
|
+
return 'MaterialReferenceNode';
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new material reference node.
|
|
25
|
+
*
|
|
26
|
+
* @param {string} property - The name of the property the node refers to.
|
|
27
|
+
* @param {string} inputType - The uniform type that should be used to represent the property value.
|
|
28
|
+
* @param {?Material} [material=null] - The material the property belongs to. When no material is set,
|
|
29
|
+
* the node refers to the material of the current rendered object.
|
|
30
|
+
*/
|
|
9
31
|
constructor( property, inputType, material = null ) {
|
|
10
32
|
|
|
11
33
|
super( property, inputType, material );
|
|
12
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The material the property belongs to. When no material is set,
|
|
37
|
+
* the node refers to the material of the current rendered object.
|
|
38
|
+
*
|
|
39
|
+
* @type {?Material}
|
|
40
|
+
* @default null
|
|
41
|
+
*/
|
|
13
42
|
this.material = material;
|
|
14
43
|
|
|
15
|
-
|
|
16
|
-
|
|
44
|
+
/**
|
|
45
|
+
* This flag can be used for type testing.
|
|
46
|
+
*
|
|
47
|
+
* @type {boolean}
|
|
48
|
+
* @readonly
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
17
51
|
this.isMaterialReferenceNode = true;
|
|
18
52
|
|
|
19
53
|
}
|
|
20
54
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Updates the reference based on the given state. The state is only evaluated
|
|
57
|
+
* {@link MaterialReferenceNode#material} is not set.
|
|
58
|
+
*
|
|
59
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
60
|
+
* @return {Object} The updated reference.
|
|
61
|
+
*/
|
|
29
62
|
updateReference( state ) {
|
|
30
63
|
|
|
31
64
|
this.reference = this.material !== null ? this.material : state.material;
|
|
@@ -38,6 +71,15 @@ class MaterialReferenceNode extends ReferenceNode {
|
|
|
38
71
|
|
|
39
72
|
export default MaterialReferenceNode;
|
|
40
73
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
74
|
+
/**
|
|
75
|
+
* TSL function for creating a material reference node.
|
|
76
|
+
*
|
|
77
|
+
* @tsl
|
|
78
|
+
* @function
|
|
79
|
+
* @param {string} name - The name of the property the node refers to.
|
|
80
|
+
* @param {string} type - The uniform type that should be used to represent the property value.
|
|
81
|
+
* @param {?Material} [material=null] - The material the property belongs to.
|
|
82
|
+
* When no material is set, the node refers to the material of the current rendered object.
|
|
83
|
+
* @returns {MaterialReferenceNode}
|
|
84
|
+
*/
|
|
85
|
+
export const materialReference = ( name, type, material = null ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
|
|
@@ -1,18 +1,44 @@
|
|
|
1
1
|
import Object3DNode from './Object3DNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import { nodeImmutable } from '../shadernode/ShaderNode.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
|
|
|
9
|
+
/**
|
|
10
|
+
* This type of node is a specialized version of `Object3DNode`
|
|
11
|
+
* with larger set of model related metrics. Unlike `Object3DNode`,
|
|
12
|
+
* `ModelNode` extracts the reference to the 3D object from the
|
|
13
|
+
* current node frame state.
|
|
14
|
+
*
|
|
15
|
+
* @augments Object3DNode
|
|
16
|
+
*/
|
|
8
17
|
class ModelNode extends Object3DNode {
|
|
9
18
|
|
|
10
|
-
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'ModelNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new object model node.
|
|
27
|
+
*
|
|
28
|
+
* @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.
|
|
29
|
+
*/
|
|
30
|
+
constructor( scope ) {
|
|
11
31
|
|
|
12
32
|
super( scope );
|
|
13
33
|
|
|
14
34
|
}
|
|
15
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Extracts the model reference from the frame state and then
|
|
38
|
+
* updates the uniform value depending on the scope.
|
|
39
|
+
*
|
|
40
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
41
|
+
*/
|
|
16
42
|
update( frame ) {
|
|
17
43
|
|
|
18
44
|
this.object3d = frame.object;
|
|
@@ -25,13 +51,134 @@ class ModelNode extends Object3DNode {
|
|
|
25
51
|
|
|
26
52
|
export default ModelNode;
|
|
27
53
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
export const
|
|
35
|
-
|
|
54
|
+
/**
|
|
55
|
+
* TSL object that represents the object's direction in world space.
|
|
56
|
+
*
|
|
57
|
+
* @tsl
|
|
58
|
+
* @type {ModelNode<vec3>}
|
|
59
|
+
*/
|
|
60
|
+
export const modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* TSL object that represents the object's world matrix.
|
|
64
|
+
*
|
|
65
|
+
* @tsl
|
|
66
|
+
* @type {ModelNode<mat4>}
|
|
67
|
+
*/
|
|
68
|
+
export const modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* TSL object that represents the object's position in world space.
|
|
72
|
+
*
|
|
73
|
+
* @tsl
|
|
74
|
+
* @type {ModelNode<vec3>}
|
|
75
|
+
*/
|
|
76
|
+
export const modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* TSL object that represents the object's scale in world space.
|
|
80
|
+
*
|
|
81
|
+
* @tsl
|
|
82
|
+
* @type {ModelNode<vec3>}
|
|
83
|
+
*/
|
|
84
|
+
export const modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* TSL object that represents the object's position in view/camera space.
|
|
88
|
+
*
|
|
89
|
+
* @tsl
|
|
90
|
+
* @type {ModelNode<vec3>}
|
|
91
|
+
*/
|
|
92
|
+
export const modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* TSL object that represents the object's radius.
|
|
96
|
+
*
|
|
97
|
+
* @tsl
|
|
98
|
+
* @type {ModelNode<float>}
|
|
99
|
+
*/
|
|
100
|
+
export const modelRadius = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.RADIUS );
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* TSL object that represents the object's normal matrix.
|
|
104
|
+
*
|
|
105
|
+
* @tsl
|
|
106
|
+
* @type {UniformNode<mat3>}
|
|
107
|
+
*/
|
|
108
|
+
export const modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* TSL object that represents the object's inverse world matrix.
|
|
112
|
+
*
|
|
113
|
+
* @tsl
|
|
114
|
+
* @type {UniformNode<mat4>}
|
|
115
|
+
*/
|
|
116
|
+
export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* TSL object that represents the object's model view matrix.
|
|
120
|
+
*
|
|
121
|
+
* @tsl
|
|
122
|
+
* @type {Node<mat4>}
|
|
123
|
+
*/
|
|
124
|
+
export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
125
|
+
|
|
126
|
+
return builder.renderer.nodes.modelViewMatrix || mediumpModelViewMatrix;
|
|
127
|
+
|
|
128
|
+
} ).once() )().toVar( 'modelViewMatrix' );
|
|
129
|
+
|
|
130
|
+
// GPU Precision
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* TSL object that represents the object's model view in `mediump` precision.
|
|
134
|
+
*
|
|
135
|
+
* @tsl
|
|
136
|
+
* @type {Node<mat4>}
|
|
137
|
+
*/
|
|
138
|
+
export const mediumpModelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix );
|
|
139
|
+
|
|
140
|
+
// CPU Precision
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* TSL object that represents the object's model view in `highp` precision
|
|
144
|
+
* which is achieved by computing the matrix in JS and not in the shader.
|
|
145
|
+
*
|
|
146
|
+
* @tsl
|
|
147
|
+
* @type {Node<mat4>}
|
|
148
|
+
*/
|
|
149
|
+
export const highpModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
150
|
+
|
|
151
|
+
builder.context.isHighPrecisionModelViewMatrix = true;
|
|
152
|
+
|
|
153
|
+
return uniform( 'mat4' ).onObjectUpdate( ( { object, camera } ) => {
|
|
154
|
+
|
|
155
|
+
return object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
156
|
+
|
|
157
|
+
} );
|
|
158
|
+
|
|
159
|
+
} ).once() )().toVar( 'highpModelViewMatrix' );
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* TSL object that represents the object's model normal view in `highp` precision
|
|
163
|
+
* which is achieved by computing the matrix in JS and not in the shader.
|
|
164
|
+
*
|
|
165
|
+
* @tsl
|
|
166
|
+
* @type {Node<mat3>}
|
|
167
|
+
*/
|
|
168
|
+
export const highpModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
169
|
+
|
|
170
|
+
const isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;
|
|
171
|
+
|
|
172
|
+
return uniform( 'mat3' ).onObjectUpdate( ( { object, camera } ) => {
|
|
173
|
+
|
|
174
|
+
if ( isHighPrecisionModelViewMatrix !== true ) {
|
|
175
|
+
|
|
176
|
+
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
181
|
+
|
|
182
|
+
} );
|
|
36
183
|
|
|
37
|
-
|
|
184
|
+
} ).once() )().toVar( 'highpModelNormalViewMatrix' );
|
|
@@ -1,39 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import TempNode from '../core/TempNode.js';
|
|
3
|
-
import { cameraProjectionMatrix } from './CameraNode.js';
|
|
4
|
-
import { modelViewMatrix } from './ModelNode.js';
|
|
5
|
-
import { positionLocal } from './PositionNode.js';
|
|
6
|
-
import { nodeProxy } from '../shadernode/ShaderNode.js';
|
|
7
|
-
import { varying } from '../core/VaryingNode.js';
|
|
1
|
+
import { Fn } from '../tsl/TSLCore.js';
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
/**
|
|
4
|
+
* TSL object that represents the position in clip space after the model-view-projection transform of the current rendered object.
|
|
5
|
+
*
|
|
6
|
+
* @tsl
|
|
7
|
+
* @type {VaryingNode<vec4>}
|
|
8
|
+
*/
|
|
9
|
+
export const modelViewProjection = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
return builder.context.setupModelViewProjection();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this.positionNode = positionNode;
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
setup( builder ) {
|
|
20
|
-
|
|
21
|
-
if ( builder.shaderStage === 'fragment' ) {
|
|
22
|
-
|
|
23
|
-
return varying( builder.context.mvp );
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const position = this.positionNode || positionLocal;
|
|
28
|
-
|
|
29
|
-
return cameraProjectionMatrix.mul( modelViewMatrix ).mul( position );
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export default ModelViewProjectionNode;
|
|
36
|
-
|
|
37
|
-
export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
|
|
38
|
-
|
|
39
|
-
addNodeClass( 'ModelViewProjectionNode', ModelViewProjectionNode );
|
|
13
|
+
}, 'vec4' ).once() )().toVarying( 'v_modelViewProjection' );
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { float, nodeProxy, Fn } from '../
|
|
3
|
+
import { float, nodeProxy, Fn, ivec2, int } from '../tsl/TSLBase.js';
|
|
4
4
|
import { uniform } from '../core/UniformNode.js';
|
|
5
5
|
import { reference } from './ReferenceNode.js';
|
|
6
|
-
import { positionLocal } from './
|
|
7
|
-
import { normalLocal } from './
|
|
6
|
+
import { positionLocal } from './Position.js';
|
|
7
|
+
import { normalLocal } from './Normal.js';
|
|
8
8
|
import { textureLoad } from './TextureNode.js';
|
|
9
9
|
import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
|
|
10
|
-
import { ivec2, int } from '../shadernode/ShaderNode.js';
|
|
11
10
|
import { Loop } from '../utils/LoopNode.js';
|
|
12
11
|
|
|
13
12
|
import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
@@ -15,10 +14,10 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
15
14
|
import { Vector4 } from '../../math/Vector4.js';
|
|
16
15
|
import { FloatType } from '../../constants.js';
|
|
17
16
|
|
|
18
|
-
const _morphTextures = new WeakMap();
|
|
17
|
+
const _morphTextures = /*@__PURE__*/ new WeakMap();
|
|
19
18
|
const _morphVec4 = /*@__PURE__*/ new Vector4();
|
|
20
19
|
|
|
21
|
-
const getMorph = Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
|
|
20
|
+
const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
|
|
22
21
|
|
|
23
22
|
const texelIndex = int( vertexIndex ).mul( stride ).add( offset );
|
|
24
23
|
|
|
@@ -157,26 +156,63 @@ function getEntry( geometry ) {
|
|
|
157
156
|
|
|
158
157
|
}
|
|
159
158
|
|
|
160
|
-
|
|
159
|
+
/**
|
|
160
|
+
* This node implements the vertex transformation shader logic which is required
|
|
161
|
+
* for morph target animation.
|
|
162
|
+
*
|
|
163
|
+
* @augments Node
|
|
164
|
+
*/
|
|
161
165
|
class MorphNode extends Node {
|
|
162
166
|
|
|
167
|
+
static get type() {
|
|
168
|
+
|
|
169
|
+
return 'MorphNode';
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Constructs a new morph node.
|
|
175
|
+
*
|
|
176
|
+
* @param {Mesh} mesh - The mesh holding the morph targets.
|
|
177
|
+
*/
|
|
163
178
|
constructor( mesh ) {
|
|
164
179
|
|
|
165
180
|
super( 'void' );
|
|
166
181
|
|
|
182
|
+
/**
|
|
183
|
+
* The mesh holding the morph targets.
|
|
184
|
+
*
|
|
185
|
+
* @type {Mesh}
|
|
186
|
+
*/
|
|
167
187
|
this.mesh = mesh;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* A uniform node which represents the morph base influence value.
|
|
191
|
+
*
|
|
192
|
+
* @type {UniformNode<float>}
|
|
193
|
+
*/
|
|
168
194
|
this.morphBaseInfluence = uniform( 1 );
|
|
169
195
|
|
|
196
|
+
/**
|
|
197
|
+
* The update type overwritten since morph nodes are updated per object.
|
|
198
|
+
*
|
|
199
|
+
* @type {string}
|
|
200
|
+
*/
|
|
170
201
|
this.updateType = NodeUpdateType.OBJECT;
|
|
171
202
|
|
|
172
203
|
}
|
|
173
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Setups the morph node by assigning the transformed vertex data to predefined node variables.
|
|
207
|
+
*
|
|
208
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
209
|
+
*/
|
|
174
210
|
setup( builder ) {
|
|
175
211
|
|
|
176
212
|
const { geometry } = builder;
|
|
177
213
|
|
|
178
214
|
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
179
|
-
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
215
|
+
const hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;
|
|
180
216
|
|
|
181
217
|
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
182
218
|
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
@@ -234,7 +270,12 @@ class MorphNode extends Node {
|
|
|
234
270
|
|
|
235
271
|
}
|
|
236
272
|
|
|
237
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Updates the state of the morphed mesh by updating the base influence.
|
|
275
|
+
*
|
|
276
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
277
|
+
*/
|
|
278
|
+
update( /*frame*/ ) {
|
|
238
279
|
|
|
239
280
|
const morphBaseInfluence = this.morphBaseInfluence;
|
|
240
281
|
|
|
@@ -254,6 +295,12 @@ class MorphNode extends Node {
|
|
|
254
295
|
|
|
255
296
|
export default MorphNode;
|
|
256
297
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
298
|
+
/**
|
|
299
|
+
* TSL function for creating a morph node.
|
|
300
|
+
*
|
|
301
|
+
* @tsl
|
|
302
|
+
* @function
|
|
303
|
+
* @param {Mesh} mesh - The mesh holding the morph targets.
|
|
304
|
+
* @returns {MorphNode}
|
|
305
|
+
*/
|
|
306
|
+
export const morphReference = /*@__PURE__*/ nodeProxy( MorphNode );
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
3
|
+
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
+
import { mat3, vec3, Fn, varying } from '../tsl/TSLBase.js';
|
|
5
|
+
import { positionView } from './Position.js';
|
|
6
|
+
import { faceDirection } from '../display/FrontFacingNode.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* TSL object that represents the normal attribute of the current rendered object.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @type {Node<vec3>}
|
|
13
|
+
*/
|
|
14
|
+
export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TSL object that represents the vertex normal in local space of the current rendered object.
|
|
18
|
+
*
|
|
19
|
+
* @tsl
|
|
20
|
+
* @type {Node<vec3>}
|
|
21
|
+
*/
|
|
22
|
+
export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
23
|
+
|
|
24
|
+
if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
|
|
25
|
+
|
|
26
|
+
console.warn( 'TSL.NormalNode: Vertex attribute "normal" not found on geometry.' );
|
|
27
|
+
|
|
28
|
+
return vec3( 0, 1, 0 );
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return normalGeometry;
|
|
33
|
+
|
|
34
|
+
}, 'vec3' ).once() )().toVar( 'normalLocal' );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* TSL object that represents the flat vertex normal in view space of the current rendered object.
|
|
38
|
+
*
|
|
39
|
+
* @tsl
|
|
40
|
+
* @type {Node<vec3>}
|
|
41
|
+
*/
|
|
42
|
+
export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* TSL object that represents the vertex normal in view space of the current rendered object.
|
|
46
|
+
*
|
|
47
|
+
* @tsl
|
|
48
|
+
* @type {Node<vec3>}
|
|
49
|
+
*/
|
|
50
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
51
|
+
|
|
52
|
+
let node;
|
|
53
|
+
|
|
54
|
+
if ( builder.material.flatShading === true ) {
|
|
55
|
+
|
|
56
|
+
node = normalFlat;
|
|
57
|
+
|
|
58
|
+
} else {
|
|
59
|
+
|
|
60
|
+
node = varying( transformNormalToView( normalLocal ), 'v_normalView' ).normalize();
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return node;
|
|
65
|
+
|
|
66
|
+
}, 'vec3' ).once() )().toVar( 'normalView' );
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* TSL object that represents the vertex normal in world space of the current rendered object.
|
|
70
|
+
*
|
|
71
|
+
* @tsl
|
|
72
|
+
* @type {Node<vec3>}
|
|
73
|
+
*/
|
|
74
|
+
export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* TSL object that represents the transformed vertex normal in view space of the current rendered object.
|
|
78
|
+
*
|
|
79
|
+
* @tsl
|
|
80
|
+
* @type {Node<vec3>}
|
|
81
|
+
*/
|
|
82
|
+
export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
83
|
+
|
|
84
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
85
|
+
|
|
86
|
+
return builder.context.setupNormal().context( { getUV: null } );
|
|
87
|
+
|
|
88
|
+
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* TSL object that represents the transformed vertex normal in world space of the current rendered object.
|
|
92
|
+
*
|
|
93
|
+
* @tsl
|
|
94
|
+
* @type {Node<vec3>}
|
|
95
|
+
*/
|
|
96
|
+
export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
|
|
100
|
+
*
|
|
101
|
+
* @tsl
|
|
102
|
+
* @type {Node<vec3>}
|
|
103
|
+
*/
|
|
104
|
+
export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
105
|
+
|
|
106
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
107
|
+
|
|
108
|
+
return builder.context.setupClearcoatNormal().context( { getUV: null } );
|
|
109
|
+
|
|
110
|
+
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Transforms the normal with the given matrix.
|
|
114
|
+
*
|
|
115
|
+
* @tsl
|
|
116
|
+
* @function
|
|
117
|
+
* @param {Node<vec3>} normal - The normal.
|
|
118
|
+
* @param {Node<mat3>} [matrix=modelWorldMatrix] - The matrix.
|
|
119
|
+
* @return {Node<vec3>} The transformed normal.
|
|
120
|
+
*/
|
|
121
|
+
export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
|
|
122
|
+
|
|
123
|
+
const m = mat3( matrix );
|
|
124
|
+
|
|
125
|
+
const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
|
|
126
|
+
|
|
127
|
+
return m.mul( transformedNormal ).xyz;
|
|
128
|
+
|
|
129
|
+
} );
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Transforms the given normal from local to view space.
|
|
133
|
+
*
|
|
134
|
+
* @tsl
|
|
135
|
+
* @function
|
|
136
|
+
* @param {Node<vec3>} normal - The normal.
|
|
137
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
138
|
+
* @return {Node<vec3>} The transformed normal.
|
|
139
|
+
*/
|
|
140
|
+
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
141
|
+
|
|
142
|
+
const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
|
|
143
|
+
|
|
144
|
+
if ( modelNormalViewMatrix !== null ) {
|
|
145
|
+
|
|
146
|
+
return modelNormalViewMatrix.transformDirection( normal );
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
//
|
|
151
|
+
|
|
152
|
+
const transformedNormal = modelNormalMatrix.mul( normal );
|
|
153
|
+
|
|
154
|
+
return cameraViewMatrix.transformDirection( transformedNormal );
|
|
155
|
+
|
|
156
|
+
} );
|