@plastic-software/three 0.175.13 → 0.178.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/README.md +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,9 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { Fn } from '../tsl/TSLCore.js';
|
|
2
|
+
import { normalGeometry, normalLocal, normalView, normalWorld } from './Normal.js';
|
|
3
|
+
import { tangentGeometry, tangentLocal, tangentView, tangentWorld } from './Tangent.js';
|
|
4
|
+
import { bitangentViewFrame } from './TangentUtils.js';
|
|
5
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Returns the bitangent node and assigns it to a varying if the material is not flat shaded.
|
|
9
|
+
*
|
|
10
|
+
* @tsl
|
|
11
|
+
* @private
|
|
12
|
+
* @param {Node<vec3>} crossNormalTangent - The cross product of the normal and tangent vectors.
|
|
13
|
+
* @param {string} varyingName - The name of the varying to assign the bitangent to.
|
|
14
|
+
* @returns {Node<vec3>} The bitangent node.
|
|
15
|
+
*/
|
|
16
|
+
const getBitangent = /*@__PURE__*/ Fn( ( [ crossNormalTangent, varyingName ], { subBuildFn, material } ) => {
|
|
17
|
+
|
|
18
|
+
let bitangent = crossNormalTangent.mul( tangentGeometry.w ).xyz;
|
|
19
|
+
|
|
20
|
+
if ( subBuildFn === 'NORMAL' && material.flatShading !== true ) {
|
|
21
|
+
|
|
22
|
+
bitangent = bitangent.toVarying( varyingName );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return bitangent;
|
|
27
|
+
|
|
28
|
+
} ).once( [ 'NORMAL' ] );
|
|
7
29
|
|
|
8
30
|
/**
|
|
9
31
|
* TSL object that represents the bitangent attribute of the current rendered object.
|
|
@@ -11,7 +33,7 @@ const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGe
|
|
|
11
33
|
* @tsl
|
|
12
34
|
* @type {Node<vec3>}
|
|
13
35
|
*/
|
|
14
|
-
export const bitangentGeometry = /*@__PURE__*/
|
|
36
|
+
export const bitangentGeometry = /*@__PURE__*/ getBitangent( normalGeometry.cross( tangentGeometry ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
|
|
15
37
|
|
|
16
38
|
/**
|
|
17
39
|
* TSL object that represents the vertex bitangent in local space of the current rendered object.
|
|
@@ -19,36 +41,42 @@ export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeom
|
|
|
19
41
|
* @tsl
|
|
20
42
|
* @type {Node<vec3>}
|
|
21
43
|
*/
|
|
22
|
-
export const bitangentLocal = /*@__PURE__*/
|
|
44
|
+
export const bitangentLocal = /*@__PURE__*/ getBitangent( normalLocal.cross( tangentLocal ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
|
|
23
45
|
|
|
24
46
|
/**
|
|
25
47
|
* TSL object that represents the vertex bitangent in view space of the current rendered object.
|
|
26
48
|
*
|
|
27
49
|
* @tsl
|
|
28
|
-
* @type {Node<
|
|
50
|
+
* @type {Node<vec3>}
|
|
29
51
|
*/
|
|
30
|
-
export const bitangentView = /*@__PURE__*/
|
|
52
|
+
export const bitangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
|
|
31
53
|
|
|
32
|
-
|
|
33
|
-
* TSL object that represents the vertex bitangent in world space of the current rendered object.
|
|
34
|
-
*
|
|
35
|
-
* @tsl
|
|
36
|
-
* @type {Node<vec4>}
|
|
37
|
-
*/
|
|
38
|
-
export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
|
|
54
|
+
let node;
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
|
|
57
|
+
|
|
58
|
+
node = getBitangent( normalView.cross( tangentView ), 'v_bitangentView' ).normalize();
|
|
59
|
+
|
|
60
|
+
} else {
|
|
61
|
+
|
|
62
|
+
node = bitangentViewFrame;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if ( material.flatShading !== true ) {
|
|
67
|
+
|
|
68
|
+
node = directionToFaceDirection( node );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return node;
|
|
73
|
+
|
|
74
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'bitangentView' );
|
|
47
75
|
|
|
48
76
|
/**
|
|
49
|
-
* TSL object that represents the
|
|
77
|
+
* TSL object that represents the vertex bitangent in world space of the current rendered object.
|
|
50
78
|
*
|
|
51
79
|
* @tsl
|
|
52
|
-
* @type {Node<
|
|
80
|
+
* @type {Node<vec3>}
|
|
53
81
|
*/
|
|
54
|
-
export const
|
|
82
|
+
export const bitangentWorld = /*@__PURE__*/ getBitangent( normalWorld.cross( tangentWorld ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
|
|
@@ -3,6 +3,7 @@ import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
|
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
4
|
import { Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { uniformArray } from './UniformArrayNode.js';
|
|
6
|
+
import { builtin } from './BuiltinNode.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* TSL object that represents the current `index` value of the camera if used ArrayCamera.
|
|
@@ -10,7 +11,7 @@ import { uniformArray } from './UniformArrayNode.js';
|
|
|
10
11
|
* @tsl
|
|
11
12
|
* @type {UniformNode<uint>}
|
|
12
13
|
*/
|
|
13
|
-
export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
|
|
14
|
+
export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).label( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* TSL object that represents the `near` value of the camera used for the current render.
|
|
@@ -50,7 +51,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
50
51
|
|
|
51
52
|
const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatrices' );
|
|
52
53
|
|
|
53
|
-
cameraProjectionMatrix = cameraProjectionMatrices.element( cameraIndex ).toVar( 'cameraProjectionMatrix' );
|
|
54
|
+
cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrix' );
|
|
54
55
|
|
|
55
56
|
} else {
|
|
56
57
|
|
|
@@ -68,7 +69,33 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
68
69
|
* @tsl
|
|
69
70
|
* @type {UniformNode<mat4>}
|
|
70
71
|
*/
|
|
71
|
-
export const cameraProjectionMatrixInverse = /*@__PURE__*/
|
|
72
|
+
export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
73
|
+
|
|
74
|
+
let cameraProjectionMatrixInverse;
|
|
75
|
+
|
|
76
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
77
|
+
|
|
78
|
+
const matrices = [];
|
|
79
|
+
|
|
80
|
+
for ( const subCamera of camera.cameras ) {
|
|
81
|
+
|
|
82
|
+
matrices.push( subCamera.projectionMatrixInverse );
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatricesInverse' );
|
|
87
|
+
|
|
88
|
+
cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrixInverse' );
|
|
89
|
+
|
|
90
|
+
} else {
|
|
91
|
+
|
|
92
|
+
cameraProjectionMatrixInverse = uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return cameraProjectionMatrixInverse;
|
|
97
|
+
|
|
98
|
+
} ).once() )();
|
|
72
99
|
|
|
73
100
|
/**
|
|
74
101
|
* TSL object that represents the view matrix of the camera used for the current render.
|
|
@@ -92,7 +119,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
92
119
|
|
|
93
120
|
const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraViewMatrices' );
|
|
94
121
|
|
|
95
|
-
cameraViewMatrix = cameraViewMatrices.element( cameraIndex ).toVar( 'cameraViewMatrix' );
|
|
122
|
+
cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraViewMatrix' );
|
|
96
123
|
|
|
97
124
|
} else {
|
|
98
125
|
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import TextureNode from './TextureNode.js';
|
|
2
2
|
import { reflectVector, refractVector } from './ReflectVector.js';
|
|
3
|
-
import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
3
|
+
import { nodeObject, nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
|
|
6
6
|
import { materialEnvRotation } from './MaterialProperties.js';
|
|
7
7
|
|
|
8
|
+
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
9
|
+
|
|
10
|
+
const EmptyTexture = /*@__PURE__*/ new CubeTexture();
|
|
11
|
+
|
|
8
12
|
/**
|
|
9
13
|
* This type of uniform node represents a cube texture.
|
|
10
14
|
*
|
|
@@ -138,4 +142,48 @@ export default CubeTextureNode;
|
|
|
138
142
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
139
143
|
* @returns {CubeTextureNode}
|
|
140
144
|
*/
|
|
141
|
-
export const
|
|
145
|
+
export const cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setParameterLength( 1, 4 ).setName( 'cubeTexture' );
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* TSL function for creating a cube texture uniform node.
|
|
149
|
+
*
|
|
150
|
+
* @tsl
|
|
151
|
+
* @function
|
|
152
|
+
* @param {?CubeTexture|CubeTextureNode} [value=EmptyTexture] - The cube texture.
|
|
153
|
+
* @param {?Node<vec3>} [uvNode=null] - The uv node.
|
|
154
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
155
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
156
|
+
* @returns {CubeTextureNode}
|
|
157
|
+
*/
|
|
158
|
+
export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
|
|
159
|
+
|
|
160
|
+
let textureNode;
|
|
161
|
+
|
|
162
|
+
if ( value && value.isCubeTextureNode === true ) {
|
|
163
|
+
|
|
164
|
+
textureNode = nodeObject( value.clone() );
|
|
165
|
+
textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
|
|
166
|
+
|
|
167
|
+
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
168
|
+
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
169
|
+
if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
|
|
170
|
+
|
|
171
|
+
} else {
|
|
172
|
+
|
|
173
|
+
textureNode = cubeTextureBase( value, uvNode, levelNode, biasNode );
|
|
174
|
+
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return textureNode;
|
|
178
|
+
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* TSL function for creating a uniform cube texture node.
|
|
183
|
+
*
|
|
184
|
+
* @tsl
|
|
185
|
+
* @function
|
|
186
|
+
* @param {?CubeTexture} [value=EmptyTexture] - The cube texture.
|
|
187
|
+
* @returns {CubeTextureNode}
|
|
188
|
+
*/
|
|
189
|
+
export const uniformCubeTexture = ( value = EmptyTexture ) => cubeTextureBase( value );
|
|
@@ -33,9 +33,9 @@ class InstanceNode extends Node {
|
|
|
33
33
|
*
|
|
34
34
|
* @param {number} count - The number of instances.
|
|
35
35
|
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
36
|
-
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
36
|
+
* @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
37
37
|
*/
|
|
38
|
-
constructor( count, instanceMatrix, instanceColor ) {
|
|
38
|
+
constructor( count, instanceMatrix, instanceColor = null ) {
|
|
39
39
|
|
|
40
40
|
super( 'void' );
|
|
41
41
|
|
|
@@ -71,6 +71,7 @@ class InstanceNode extends Node {
|
|
|
71
71
|
* The node that represents the instance color data.
|
|
72
72
|
*
|
|
73
73
|
* @type {?Node}
|
|
74
|
+
* @default null
|
|
74
75
|
*/
|
|
75
76
|
this.instanceColorNode = null;
|
|
76
77
|
|
|
@@ -217,7 +218,7 @@ export default InstanceNode;
|
|
|
217
218
|
* @function
|
|
218
219
|
* @param {number} count - The number of instances.
|
|
219
220
|
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
220
|
-
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
221
|
+
* @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
221
222
|
* @returns {InstanceNode}
|
|
222
223
|
*/
|
|
223
|
-
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 3 );
|
|
224
|
+
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 2, 3 );
|
|
@@ -30,9 +30,9 @@ export function lightShadowMatrix( light ) {
|
|
|
30
30
|
|
|
31
31
|
const data = getLightData( light );
|
|
32
32
|
|
|
33
|
-
return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( () => {
|
|
33
|
+
return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
|
|
34
34
|
|
|
35
|
-
if ( light.castShadow !== true ) {
|
|
35
|
+
if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
|
|
36
36
|
|
|
37
37
|
light.shadow.updateMatrices( light );
|
|
38
38
|
|
|
@@ -386,6 +386,10 @@ class MaterialNode extends Node {
|
|
|
386
386
|
|
|
387
387
|
node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
|
|
388
388
|
|
|
389
|
+
} else if ( scope === MaterialNode.LINE_DASH_OFFSET ) {
|
|
390
|
+
|
|
391
|
+
node = ( material.dashOffset ) ? this.getFloat( scope ) : float( 0 );
|
|
392
|
+
|
|
389
393
|
} else {
|
|
390
394
|
|
|
391
395
|
const outputType = this.getNodeType( builder );
|
|
@@ -123,7 +123,7 @@ export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).on
|
|
|
123
123
|
*/
|
|
124
124
|
export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
125
125
|
|
|
126
|
-
return builder.renderer.
|
|
126
|
+
return builder.renderer.overrideNodes.modelViewMatrix || mediumpModelViewMatrix;
|
|
127
127
|
|
|
128
128
|
} ).once() )().toVar( 'modelViewMatrix' );
|
|
129
129
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
-
import { mat3, vec3, Fn
|
|
4
|
+
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
|
-
import {
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* TSL object that represents the normal attribute of the current rendered object.
|
|
@@ -47,7 +47,7 @@ export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.
|
|
|
47
47
|
* @tsl
|
|
48
48
|
* @type {Node<vec3>}
|
|
49
49
|
*/
|
|
50
|
-
export const
|
|
50
|
+
export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
51
51
|
|
|
52
52
|
let node;
|
|
53
53
|
|
|
@@ -57,13 +57,13 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
57
57
|
|
|
58
58
|
} else {
|
|
59
59
|
|
|
60
|
-
node =
|
|
60
|
+
node = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();
|
|
61
61
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
return node;
|
|
65
65
|
|
|
66
|
-
}, 'vec3' ).once() )().toVar( '
|
|
66
|
+
}, 'vec3' ).once() )().toVar( 'normalViewGeometry' );
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* TSL object that represents the vertex normal in world space of the current rendered object.
|
|
@@ -71,7 +71,19 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
71
71
|
* @tsl
|
|
72
72
|
* @type {Node<vec3>}
|
|
73
73
|
*/
|
|
74
|
-
export const
|
|
74
|
+
export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
75
|
+
|
|
76
|
+
let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
|
|
77
|
+
|
|
78
|
+
if ( builder.material.flatShading !== true ) {
|
|
79
|
+
|
|
80
|
+
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return normal.normalize().toVar( 'normalWorldGeometry' );
|
|
85
|
+
|
|
86
|
+
}, 'vec3' ).once() )();
|
|
75
87
|
|
|
76
88
|
/**
|
|
77
89
|
* TSL object that represents the transformed vertex normal in view space of the current rendered object.
|
|
@@ -79,13 +91,31 @@ export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection(
|
|
|
79
91
|
* @tsl
|
|
80
92
|
* @type {Node<vec3>}
|
|
81
93
|
*/
|
|
82
|
-
export const
|
|
94
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
|
|
83
95
|
|
|
84
|
-
|
|
96
|
+
let node;
|
|
97
|
+
|
|
98
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
99
|
+
|
|
100
|
+
node = normalViewGeometry;
|
|
101
|
+
|
|
102
|
+
if ( material.flatShading !== true ) {
|
|
103
|
+
|
|
104
|
+
node = directionToFaceDirection( node );
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
} else {
|
|
85
109
|
|
|
86
|
-
|
|
110
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
87
111
|
|
|
88
|
-
|
|
112
|
+
node = context.setupNormal().context( { getUV: null } );
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return node;
|
|
117
|
+
|
|
118
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
|
|
89
119
|
|
|
90
120
|
/**
|
|
91
121
|
* TSL object that represents the transformed vertex normal in world space of the current rendered object.
|
|
@@ -93,7 +123,7 @@ export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
93
123
|
* @tsl
|
|
94
124
|
* @type {Node<vec3>}
|
|
95
125
|
*/
|
|
96
|
-
export const
|
|
126
|
+
export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
|
|
97
127
|
|
|
98
128
|
/**
|
|
99
129
|
* TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
|
|
@@ -101,13 +131,25 @@ export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transf
|
|
|
101
131
|
* @tsl
|
|
102
132
|
* @type {Node<vec3>}
|
|
103
133
|
*/
|
|
104
|
-
export const
|
|
134
|
+
export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {
|
|
135
|
+
|
|
136
|
+
let node;
|
|
105
137
|
|
|
106
|
-
|
|
138
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
139
|
+
|
|
140
|
+
node = normalView;
|
|
141
|
+
|
|
142
|
+
} else {
|
|
143
|
+
|
|
144
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
145
|
+
|
|
146
|
+
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
147
|
+
|
|
148
|
+
}
|
|
107
149
|
|
|
108
|
-
return
|
|
150
|
+
return node;
|
|
109
151
|
|
|
110
|
-
}, 'vec3' ).once() )().
|
|
152
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
|
|
111
153
|
|
|
112
154
|
/**
|
|
113
155
|
* Transforms the normal with the given matrix.
|
|
@@ -139,7 +181,7 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
|
|
|
139
181
|
*/
|
|
140
182
|
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
141
183
|
|
|
142
|
-
const modelNormalViewMatrix = builder.renderer.
|
|
184
|
+
const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
|
|
143
185
|
|
|
144
186
|
if ( modelNormalViewMatrix !== null ) {
|
|
145
187
|
|
|
@@ -154,3 +196,47 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
154
196
|
return cameraViewMatrix.transformDirection( transformedNormal );
|
|
155
197
|
|
|
156
198
|
} );
|
|
199
|
+
|
|
200
|
+
// Deprecated
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* TSL object that represents the transformed vertex normal in view space of the current rendered object.
|
|
204
|
+
*
|
|
205
|
+
* @tsl
|
|
206
|
+
* @type {Node<vec3>}
|
|
207
|
+
* @deprecated since r178. Use `normalView` instead.
|
|
208
|
+
*/
|
|
209
|
+
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
210
|
+
|
|
211
|
+
console.warn( 'THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
212
|
+
return normalView;
|
|
213
|
+
|
|
214
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* TSL object that represents the transformed vertex normal in world space of the current rendered object.
|
|
218
|
+
*
|
|
219
|
+
* @tsl
|
|
220
|
+
* @type {Node<vec3>}
|
|
221
|
+
* @deprecated since r178. Use `normalWorld` instead.
|
|
222
|
+
*/
|
|
223
|
+
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
224
|
+
|
|
225
|
+
console.warn( 'THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
226
|
+
return normalWorld;
|
|
227
|
+
|
|
228
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
|
|
232
|
+
*
|
|
233
|
+
* @tsl
|
|
234
|
+
* @type {Node<vec3>}
|
|
235
|
+
* @deprecated since r178. Use `clearcoatNormalView` instead.
|
|
236
|
+
*/
|
|
237
|
+
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
238
|
+
|
|
239
|
+
console.warn( 'THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
240
|
+
return clearcoatNormalView;
|
|
241
|
+
|
|
242
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -64,10 +64,9 @@ class Object3DNode extends Node {
|
|
|
64
64
|
/**
|
|
65
65
|
* Holds the value of the node as a uniform.
|
|
66
66
|
*
|
|
67
|
-
* @private
|
|
68
67
|
* @type {UniformNode}
|
|
69
68
|
*/
|
|
70
|
-
this.
|
|
69
|
+
this.uniformNode = new UniformNode( null );
|
|
71
70
|
|
|
72
71
|
}
|
|
73
72
|
|
|
@@ -104,7 +103,7 @@ class Object3DNode extends Node {
|
|
|
104
103
|
update( frame ) {
|
|
105
104
|
|
|
106
105
|
const object = this.object3d;
|
|
107
|
-
const uniformNode = this.
|
|
106
|
+
const uniformNode = this.uniformNode;
|
|
108
107
|
const scope = this.scope;
|
|
109
108
|
|
|
110
109
|
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
@@ -165,19 +164,19 @@ class Object3DNode extends Node {
|
|
|
165
164
|
|
|
166
165
|
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
167
166
|
|
|
168
|
-
this.
|
|
167
|
+
this.uniformNode.nodeType = 'mat4';
|
|
169
168
|
|
|
170
169
|
} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
|
|
171
170
|
|
|
172
|
-
this.
|
|
171
|
+
this.uniformNode.nodeType = 'vec3';
|
|
173
172
|
|
|
174
173
|
} else if ( scope === Object3DNode.RADIUS ) {
|
|
175
174
|
|
|
176
|
-
this.
|
|
175
|
+
this.uniformNode.nodeType = 'float';
|
|
177
176
|
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
return this.
|
|
179
|
+
return this.uniformNode.build( builder );
|
|
181
180
|
|
|
182
181
|
}
|
|
183
182
|
|
|
@@ -264,6 +263,6 @@ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3
|
|
|
264
263
|
* @tsl
|
|
265
264
|
* @function
|
|
266
265
|
* @param {?Object3D} [object3d] - The 3D object.
|
|
267
|
-
* @returns {Object3DNode<
|
|
266
|
+
* @returns {Object3DNode<float>}
|
|
268
267
|
*/
|
|
269
268
|
export const objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );
|
|
@@ -33,7 +33,11 @@ export const positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'posit
|
|
|
33
33
|
* @tsl
|
|
34
34
|
* @type {VaryingNode<vec3>}
|
|
35
35
|
*/
|
|
36
|
-
export const positionWorld = /*@__PURE__*/
|
|
36
|
+
export const positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
37
|
+
|
|
38
|
+
return modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.getSubBuildProperty( 'v_positionWorld' ) );
|
|
39
|
+
|
|
40
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
37
41
|
|
|
38
42
|
/**
|
|
39
43
|
* TSL object that represents the position world direction of the current rendered object.
|
|
@@ -41,7 +45,13 @@ export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal )
|
|
|
41
45
|
* @tsl
|
|
42
46
|
* @type {Node<vec3>}
|
|
43
47
|
*/
|
|
44
|
-
export const positionWorldDirection = /*@__PURE__*/
|
|
48
|
+
export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
49
|
+
|
|
50
|
+
const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' );
|
|
51
|
+
|
|
52
|
+
return vertexPWD.normalize().toVar( 'positionWorldDirection' );
|
|
53
|
+
|
|
54
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
45
55
|
|
|
46
56
|
/**
|
|
47
57
|
* TSL object that represents the vertex position in view space of the current rendered object.
|
|
@@ -51,9 +61,9 @@ export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirec
|
|
|
51
61
|
*/
|
|
52
62
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
53
63
|
|
|
54
|
-
return builder.context.setupPositionView();
|
|
64
|
+
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
55
65
|
|
|
56
|
-
}, 'vec3' ).once(
|
|
66
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
57
67
|
|
|
58
68
|
/**
|
|
59
69
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -294,7 +294,7 @@ class ReferenceBaseNode extends Node {
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
/**
|
|
297
|
-
* Overwritten to
|
|
297
|
+
* Overwritten to update the internal uniform value.
|
|
298
298
|
*
|
|
299
299
|
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
300
300
|
*/
|
|
@@ -345,7 +345,7 @@ class ReferenceNode extends Node {
|
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
/**
|
|
348
|
-
* Overwritten to
|
|
348
|
+
* Overwritten to update the internal uniform value.
|
|
349
349
|
*
|
|
350
350
|
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
351
351
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cameraViewMatrix } from './Camera.js';
|
|
2
|
-
import {
|
|
2
|
+
import { normalView } from './Normal.js';
|
|
3
3
|
import { positionViewDirection } from './Position.js';
|
|
4
4
|
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
5
5
|
|
|
@@ -9,7 +9,7 @@ import { materialRefractionRatio } from './MaterialProperties.js';
|
|
|
9
9
|
* @tsl
|
|
10
10
|
* @type {Node<vec3>}
|
|
11
11
|
*/
|
|
12
|
-
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
12
|
+
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( normalView );
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* The refract vector in view space.
|
|
@@ -17,7 +17,7 @@ export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
|
17
17
|
* @tsl
|
|
18
18
|
* @type {Node<vec3>}
|
|
19
19
|
*/
|
|
20
|
-
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract(
|
|
20
|
+
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( normalView, materialRefractionRatio );
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Used for sampling cube maps when using cube reflection mapping.
|
|
@@ -178,7 +178,7 @@ class SkinningNode extends Node {
|
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
/**
|
|
181
|
-
*
|
|
181
|
+
* Computes the transformed/skinned vertex position of the previous frame.
|
|
182
182
|
*
|
|
183
183
|
* @param {NodeBuilder} builder - The current node builder.
|
|
184
184
|
* @return {Node<vec3>} The skinned position from the previous frame.
|
|
@@ -200,7 +200,8 @@ class SkinningNode extends Node {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
/**
|
|
203
|
-
* Returns `true` if bone matrices from the previous frame are required.
|
|
203
|
+
* Returns `true` if bone matrices from the previous frame are required. Relevant
|
|
204
|
+
* when computing motion vectors with {@link VelocityNode}.
|
|
204
205
|
*
|
|
205
206
|
* @param {NodeBuilder} builder - The current node builder.
|
|
206
207
|
* @return {boolean} Whether bone matrices from the previous frame are required or not.
|