super-three 0.181.0 → 0.184.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 +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { Euler } from '../../math/Euler.js';
|
|
2
1
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
3
2
|
import { uniform } from '../core/UniformNode.js';
|
|
4
3
|
|
|
5
|
-
const _e1 = /*@__PURE__*/ new Euler();
|
|
6
4
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
7
5
|
|
|
8
6
|
/**
|
|
@@ -44,9 +42,8 @@ export const materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onRefe
|
|
|
44
42
|
|
|
45
43
|
if ( rotation ) {
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
_m1.makeRotationFromEuler( _e1 );
|
|
45
|
+
// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
|
|
46
|
+
_m1.makeRotationFromEuler( rotation ).transpose();
|
|
50
47
|
|
|
51
48
|
} else {
|
|
52
49
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* This node is a special type of reference node which is intended
|
|
@@ -82,4 +81,4 @@ export default MaterialReferenceNode;
|
|
|
82
81
|
* When no material is set, the node refers to the material of the current rendered object.
|
|
83
82
|
* @returns {MaterialReferenceNode}
|
|
84
83
|
*/
|
|
85
|
-
export const materialReference = ( name, type, material = null ) =>
|
|
84
|
+
export const materialReference = ( name, type, material = null ) => new MaterialReferenceNode( name, type, material );
|
|
@@ -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.
|
|
126
|
+
return builder.context.modelViewMatrix || mediumpModelViewMatrix;
|
|
127
127
|
|
|
128
128
|
} ).once() )().toVar( 'modelViewMatrix' );
|
|
129
129
|
|
|
@@ -52,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
52
52
|
|
|
53
53
|
let node;
|
|
54
54
|
|
|
55
|
-
if ( builder.
|
|
55
|
+
if ( builder.isFlatShading() ) {
|
|
56
56
|
|
|
57
57
|
node = normalFlat;
|
|
58
58
|
|
|
@@ -76,7 +76,7 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
76
76
|
|
|
77
77
|
let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
|
|
78
78
|
|
|
79
|
-
if ( builder.
|
|
79
|
+
if ( builder.isFlatShading() !== true ) {
|
|
80
80
|
|
|
81
81
|
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
82
82
|
|
|
@@ -92,15 +92,15 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
92
92
|
* @tsl
|
|
93
93
|
* @type {Node<vec3>}
|
|
94
94
|
*/
|
|
95
|
-
export const normalView = /*@__PURE__*/ ( Fn( (
|
|
95
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
96
96
|
|
|
97
97
|
let node;
|
|
98
98
|
|
|
99
|
-
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
99
|
+
if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
|
|
100
100
|
|
|
101
101
|
node = normalViewGeometry;
|
|
102
102
|
|
|
103
|
-
if (
|
|
103
|
+
if ( builder.isFlatShading() !== true ) {
|
|
104
104
|
|
|
105
105
|
node = directionToFaceDirection( node );
|
|
106
106
|
|
|
@@ -108,9 +108,9 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
|
|
|
108
108
|
|
|
109
109
|
} else {
|
|
110
110
|
|
|
111
|
-
// Use
|
|
111
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
112
112
|
|
|
113
|
-
node = context.setupNormal().context( { getUV: null } );
|
|
113
|
+
node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
|
|
114
114
|
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -142,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
|
|
|
142
142
|
|
|
143
143
|
} else {
|
|
144
144
|
|
|
145
|
-
// Use
|
|
145
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
146
146
|
|
|
147
|
-
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
147
|
+
node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
|
|
148
148
|
|
|
149
149
|
}
|
|
150
150
|
|
|
@@ -182,9 +182,9 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
|
|
|
182
182
|
*/
|
|
183
183
|
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
184
184
|
|
|
185
|
-
const modelNormalViewMatrix = builder.
|
|
185
|
+
const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
|
|
186
186
|
|
|
187
|
-
if ( modelNormalViewMatrix
|
|
187
|
+
if ( modelNormalViewMatrix ) {
|
|
188
188
|
|
|
189
189
|
return modelNormalViewMatrix.transformDirection( normal );
|
|
190
190
|
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
-
import { Fn, vec3 } from '../tsl/TSLCore.js';
|
|
2
|
+
import { Fn, vec3, vec4 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { modelWorldMatrix } from './ModelNode.js';
|
|
4
|
+
import { cameraProjectionMatrixInverse } from './Camera.js';
|
|
5
|
+
import { warnOnce } from '../../utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TSL object that represents the clip space position of the current rendered object.
|
|
9
|
+
*
|
|
10
|
+
* @tsl
|
|
11
|
+
* @type {VaryingNode<vec4>}
|
|
12
|
+
*/
|
|
13
|
+
export const clipSpace = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
14
|
+
|
|
15
|
+
if ( builder.shaderStage !== 'fragment' ) {
|
|
16
|
+
|
|
17
|
+
warnOnce( 'TSL: `clipSpace` is only available in fragment stage.' );
|
|
18
|
+
|
|
19
|
+
return vec4();
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return builder.context.clipSpace.toVarying( 'v_clipSpace' );
|
|
24
|
+
|
|
25
|
+
} ).once() )();
|
|
4
26
|
|
|
5
27
|
/**
|
|
6
28
|
* TSL object that represents the position attribute of the current rendered object.
|
|
@@ -61,9 +83,19 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
|
61
83
|
*/
|
|
62
84
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
63
85
|
|
|
86
|
+
if ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {
|
|
87
|
+
|
|
88
|
+
// reconstruct view position from clip space
|
|
89
|
+
|
|
90
|
+
const viewPos = cameraProjectionMatrixInverse.mul( clipSpace );
|
|
91
|
+
|
|
92
|
+
return viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
64
96
|
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
65
97
|
|
|
66
|
-
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
98
|
+
}, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();
|
|
67
99
|
|
|
68
100
|
/**
|
|
69
101
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js';
|
|
|
4
4
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
5
5
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
6
6
|
|
|
7
|
-
// TODO: Avoid duplicated code and
|
|
7
|
+
// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* This class is only relevant if the referenced property is array-like.
|
|
@@ -57,7 +57,7 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
57
57
|
*
|
|
58
58
|
* @return {string} The node type.
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
generateNodeType() {
|
|
61
61
|
|
|
62
62
|
return this.referenceNode.uniformType;
|
|
63
63
|
|
|
@@ -199,7 +199,7 @@ class ReferenceBaseNode extends Node {
|
|
|
199
199
|
*/
|
|
200
200
|
element( indexNode ) {
|
|
201
201
|
|
|
202
|
-
return
|
|
202
|
+
return new ReferenceElementNode( this, nodeObject( indexNode ) );
|
|
203
203
|
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -230,7 +230,7 @@ class ReferenceBaseNode extends Node {
|
|
|
230
230
|
* @param {NodeBuilder} builder - The current node builder.
|
|
231
231
|
* @return {string} The node type.
|
|
232
232
|
*/
|
|
233
|
-
|
|
233
|
+
generateNodeType( builder ) {
|
|
234
234
|
|
|
235
235
|
if ( this.node === null ) {
|
|
236
236
|
|
|
@@ -340,7 +340,7 @@ export default ReferenceBaseNode;
|
|
|
340
340
|
* @param {Object} object - The object the property belongs to.
|
|
341
341
|
* @returns {ReferenceBaseNode}
|
|
342
342
|
*/
|
|
343
|
-
export const reference = ( name, type, object ) =>
|
|
343
|
+
export const reference = ( name, type, object ) => new ReferenceBaseNode( name, type, object );
|
|
344
344
|
|
|
345
345
|
/**
|
|
346
346
|
* TSL function for creating a reference base node. Use this function if you want need a reference
|
|
@@ -354,4 +354,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceBase
|
|
|
354
354
|
* @param {Object} [object] - An array-like object the property belongs to.
|
|
355
355
|
* @returns {ReferenceBaseNode}
|
|
356
356
|
*/
|
|
357
|
-
export const referenceBuffer = ( name, type, count, object ) =>
|
|
357
|
+
export const referenceBuffer = ( name, type, count, object ) => new ReferenceBaseNode( name, type, object, count );
|
|
@@ -9,7 +9,7 @@ import { uniformArray } from './UniformArrayNode.js';
|
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
10
|
import { warn } from '../../utils.js';
|
|
11
11
|
|
|
12
|
-
// TODO: Avoid duplicated code and
|
|
12
|
+
// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* This class is only relevant if the referenced property is array-like.
|
|
@@ -62,7 +62,7 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
62
62
|
*
|
|
63
63
|
* @return {string} The node type.
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
generateNodeType() {
|
|
66
66
|
|
|
67
67
|
return this.referenceNode.uniformType;
|
|
68
68
|
|
|
@@ -71,8 +71,8 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
71
71
|
generate( builder ) {
|
|
72
72
|
|
|
73
73
|
const snippet = super.generate( builder );
|
|
74
|
-
const arrayType = this.referenceNode.getNodeType();
|
|
75
|
-
const elementType = this.getNodeType();
|
|
74
|
+
const arrayType = this.referenceNode.getNodeType( builder );
|
|
75
|
+
const elementType = this.getNodeType( builder );
|
|
76
76
|
|
|
77
77
|
return builder.format( snippet, arrayType, elementType );
|
|
78
78
|
|
|
@@ -198,7 +198,7 @@ class ReferenceNode extends Node {
|
|
|
198
198
|
*/
|
|
199
199
|
element( indexNode ) {
|
|
200
200
|
|
|
201
|
-
return
|
|
201
|
+
return new ReferenceElementNode( this, nodeObject( indexNode ) );
|
|
202
202
|
|
|
203
203
|
}
|
|
204
204
|
|
|
@@ -296,7 +296,7 @@ class ReferenceNode extends Node {
|
|
|
296
296
|
* @param {NodeBuilder} builder - The current node builder.
|
|
297
297
|
* @return {string} The node type.
|
|
298
298
|
*/
|
|
299
|
-
|
|
299
|
+
generateNodeType( builder ) {
|
|
300
300
|
|
|
301
301
|
if ( this.node === null ) {
|
|
302
302
|
|
|
@@ -407,7 +407,7 @@ export default ReferenceNode;
|
|
|
407
407
|
* @param {?Object} [object] - The object the property belongs to.
|
|
408
408
|
* @returns {ReferenceNode}
|
|
409
409
|
*/
|
|
410
|
-
export const reference = ( name, type, object ) =>
|
|
410
|
+
export const reference = ( name, type, object ) => new ReferenceNode( name, type, object );
|
|
411
411
|
|
|
412
412
|
/**
|
|
413
413
|
* TSL function for creating a reference node. Use this function if you want need a reference
|
|
@@ -421,4 +421,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode
|
|
|
421
421
|
* @param {Object} object - An array-like object the property belongs to.
|
|
422
422
|
* @returns {ReferenceNode}
|
|
423
423
|
*/
|
|
424
|
-
export const referenceBuffer = ( name, type, count, object ) =>
|
|
424
|
+
export const referenceBuffer = ( name, type, count, object ) => new ReferenceNode( name, type, object, count );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceBaseNode from './ReferenceBaseNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
2
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -76,4 +75,4 @@ export default RendererReferenceNode;
|
|
|
76
75
|
* the node refers to the renderer of the current state.
|
|
77
76
|
* @returns {RendererReferenceNode}
|
|
78
77
|
*/
|
|
79
|
-
export const rendererReference = ( name, type, renderer = null ) =>
|
|
78
|
+
export const rendererReference = ( name, type, renderer = null ) => new RendererReferenceNode( name, type, renderer );
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { UVMapping } from '../../constants.js';
|
|
2
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
3
|
+
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
4
|
+
import { uniform } from '../tsl/TSLBase.js';
|
|
5
|
+
|
|
6
|
+
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* TSL object that represents the scene's background blurriness.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @type {Node<float>}
|
|
13
|
+
*/
|
|
14
|
+
export const backgroundBlurriness = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundBlurriness );
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TSL object that represents the scene's background intensity.
|
|
18
|
+
*
|
|
19
|
+
* @tsl
|
|
20
|
+
* @type {Node<float>}
|
|
21
|
+
*/
|
|
22
|
+
export const backgroundIntensity = /*@__PURE__*/ uniform( 1 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundIntensity );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* TSL object that represents the scene's background rotation.
|
|
26
|
+
*
|
|
27
|
+
* @tsl
|
|
28
|
+
* @type {Node<mat4>}
|
|
29
|
+
*/
|
|
30
|
+
export const backgroundRotation = /*@__PURE__*/ uniform( new Matrix4() ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => {
|
|
31
|
+
|
|
32
|
+
const background = scene.background;
|
|
33
|
+
|
|
34
|
+
if ( background !== null && background.isTexture && background.mapping !== UVMapping ) {
|
|
35
|
+
|
|
36
|
+
// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
|
|
37
|
+
_m1.makeRotationFromEuler( scene.backgroundRotation ).transpose();
|
|
38
|
+
|
|
39
|
+
} else {
|
|
40
|
+
|
|
41
|
+
_m1.identity();
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return _m1;
|
|
46
|
+
|
|
47
|
+
} );
|
|
@@ -9,7 +9,6 @@ import { positionLocal, positionPrevious } from './Position.js';
|
|
|
9
9
|
import { tangentLocal } from './Tangent.js';
|
|
10
10
|
import { uniform } from '../core/UniformNode.js';
|
|
11
11
|
import { buffer } from './BufferNode.js';
|
|
12
|
-
import { getDataFromObject } from '../core/NodeUtils.js';
|
|
13
12
|
import { storage } from './StorageBufferNode.js';
|
|
14
13
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
15
14
|
import { instanceIndex } from '../core/IndexNode.js';
|
|
@@ -147,13 +146,14 @@ class SkinningNode extends Node {
|
|
|
147
146
|
}
|
|
148
147
|
|
|
149
148
|
/**
|
|
150
|
-
* Transforms the given vertex normal via skinning.
|
|
149
|
+
* Transforms the given vertex normal and tangent via skinning.
|
|
151
150
|
*
|
|
152
151
|
* @param {Node} [boneMatrices=this.boneMatricesNode] - The bone matrices
|
|
153
152
|
* @param {Node<vec3>} [normal=normalLocal] - The vertex normal in local space.
|
|
154
|
-
* @
|
|
153
|
+
* @param {Node<vec3>} [tangent=tangentLocal] - The vertex tangent in local space.
|
|
154
|
+
* @return {{skinNormal: Node<vec3>, skinTangent:Node<vec3>}} The transformed vertex normal and tangent.
|
|
155
155
|
*/
|
|
156
|
-
|
|
156
|
+
getSkinnedNormalAndTangent( boneMatrices = this.boneMatricesNode, normal = normalLocal, tangent = tangentLocal ) {
|
|
157
157
|
|
|
158
158
|
const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;
|
|
159
159
|
|
|
@@ -162,7 +162,7 @@ class SkinningNode extends Node {
|
|
|
162
162
|
const boneMatZ = boneMatrices.element( skinIndexNode.z );
|
|
163
163
|
const boneMatW = boneMatrices.element( skinIndexNode.w );
|
|
164
164
|
|
|
165
|
-
// NORMAL
|
|
165
|
+
// NORMAL and TANGENT
|
|
166
166
|
|
|
167
167
|
let skinMatrix = add(
|
|
168
168
|
skinWeightNode.x.mul( boneMatX ),
|
|
@@ -173,7 +173,10 @@ class SkinningNode extends Node {
|
|
|
173
173
|
|
|
174
174
|
skinMatrix = bindMatrixInverseNode.mul( skinMatrix ).mul( bindMatrixNode );
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
const skinNormal = skinMatrix.transformDirection( normal ).xyz;
|
|
177
|
+
const skinTangent = skinMatrix.transformDirection( tangent ).xyz;
|
|
178
|
+
|
|
179
|
+
return { skinNormal, skinTangent };
|
|
177
180
|
|
|
178
181
|
}
|
|
179
182
|
|
|
@@ -199,21 +202,6 @@ class SkinningNode extends Node {
|
|
|
199
202
|
|
|
200
203
|
}
|
|
201
204
|
|
|
202
|
-
/**
|
|
203
|
-
* Returns `true` if bone matrices from the previous frame are required. Relevant
|
|
204
|
-
* when computing motion vectors with {@link VelocityNode}.
|
|
205
|
-
*
|
|
206
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
207
|
-
* @return {boolean} Whether bone matrices from the previous frame are required or not.
|
|
208
|
-
*/
|
|
209
|
-
needsPreviousBoneMatrices( builder ) {
|
|
210
|
-
|
|
211
|
-
const mrt = builder.renderer.getMRT();
|
|
212
|
-
|
|
213
|
-
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( builder.object ).useVelocity === true;
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
205
|
/**
|
|
218
206
|
* Setups the skinning node by assigning the transformed vertex data to predefined node variables.
|
|
219
207
|
*
|
|
@@ -222,7 +210,7 @@ class SkinningNode extends Node {
|
|
|
222
210
|
*/
|
|
223
211
|
setup( builder ) {
|
|
224
212
|
|
|
225
|
-
if (
|
|
213
|
+
if ( builder.needsPreviousData() ) {
|
|
226
214
|
|
|
227
215
|
positionPrevious.assign( this.getPreviousSkinnedPosition( builder ) );
|
|
228
216
|
|
|
@@ -236,13 +224,13 @@ class SkinningNode extends Node {
|
|
|
236
224
|
|
|
237
225
|
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
238
226
|
|
|
239
|
-
const skinNormal = this.
|
|
227
|
+
const { skinNormal, skinTangent } = this.getSkinnedNormalAndTangent();
|
|
240
228
|
|
|
241
229
|
normalLocal.assign( skinNormal );
|
|
242
230
|
|
|
243
231
|
if ( builder.hasGeometryAttribute( 'tangent' ) ) {
|
|
244
232
|
|
|
245
|
-
tangentLocal.assign(
|
|
233
|
+
tangentLocal.assign( skinTangent );
|
|
246
234
|
|
|
247
235
|
}
|
|
248
236
|
|
|
@@ -282,7 +270,20 @@ class SkinningNode extends Node {
|
|
|
282
270
|
|
|
283
271
|
_frameId.set( skeleton, frame.frameId );
|
|
284
272
|
|
|
285
|
-
if ( this.previousBoneMatricesNode !== null )
|
|
273
|
+
if ( this.previousBoneMatricesNode !== null ) {
|
|
274
|
+
|
|
275
|
+
if ( skeleton.previousBoneMatrices === null ) {
|
|
276
|
+
|
|
277
|
+
// cloned skeletons miss "previousBoneMatrices" in their first updated
|
|
278
|
+
|
|
279
|
+
skeleton.previousBoneMatrices = new Float32Array( skeleton.boneMatrices );
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
skeleton.previousBoneMatrices.set( skeleton.boneMatrices );
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
}
|
|
286
287
|
|
|
287
288
|
skeleton.update();
|
|
288
289
|
|
|
@@ -300,7 +301,7 @@ export default SkinningNode;
|
|
|
300
301
|
* @param {SkinnedMesh} skinnedMesh - The skinned mesh.
|
|
301
302
|
* @returns {SkinningNode}
|
|
302
303
|
*/
|
|
303
|
-
export const skinning = ( skinnedMesh ) =>
|
|
304
|
+
export const skinning = ( skinnedMesh ) => new SkinningNode( skinnedMesh );
|
|
304
305
|
|
|
305
306
|
/**
|
|
306
307
|
* TSL function for computing skinning.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import BufferNode from './BufferNode.js';
|
|
2
2
|
import { bufferAttribute } from './BufferAttributeNode.js';
|
|
3
|
-
import {
|
|
3
|
+
import { varying } from '../tsl/TSLBase.js';
|
|
4
4
|
import { storageElement } from '../utils/StorageArrayElementNode.js';
|
|
5
5
|
import { NodeAccess } from '../core/constants.js';
|
|
6
6
|
import { getTypeFromLength } from '../core/NodeUtils.js';
|
|
7
|
-
import { warn } from '../../utils.js';
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* This node is used in context of compute shaders and allows to define a
|
|
@@ -126,6 +125,7 @@ class StorageBufferNode extends BufferNode {
|
|
|
126
125
|
/**
|
|
127
126
|
* A reference to the internal buffer attribute node.
|
|
128
127
|
*
|
|
128
|
+
* @private
|
|
129
129
|
* @type {?BufferAttributeNode}
|
|
130
130
|
* @default null
|
|
131
131
|
*/
|
|
@@ -134,6 +134,7 @@ class StorageBufferNode extends BufferNode {
|
|
|
134
134
|
/**
|
|
135
135
|
* A reference to the internal varying node.
|
|
136
136
|
*
|
|
137
|
+
* @private
|
|
137
138
|
* @type {?VaryingNode}
|
|
138
139
|
* @default null
|
|
139
140
|
*/
|
|
@@ -167,6 +168,8 @@ class StorageBufferNode extends BufferNode {
|
|
|
167
168
|
*/
|
|
168
169
|
getHash( builder ) {
|
|
169
170
|
|
|
171
|
+
let id;
|
|
172
|
+
|
|
170
173
|
if ( this.bufferCount === 0 ) {
|
|
171
174
|
|
|
172
175
|
let bufferData = builder.globalCache.getData( this.value );
|
|
@@ -181,11 +184,15 @@ class StorageBufferNode extends BufferNode {
|
|
|
181
184
|
|
|
182
185
|
}
|
|
183
186
|
|
|
184
|
-
|
|
187
|
+
id = bufferData.node.id;
|
|
188
|
+
|
|
189
|
+
} else {
|
|
190
|
+
|
|
191
|
+
id = this.id;
|
|
185
192
|
|
|
186
193
|
}
|
|
187
194
|
|
|
188
|
-
return
|
|
195
|
+
return String( id );
|
|
189
196
|
|
|
190
197
|
}
|
|
191
198
|
|
|
@@ -316,7 +323,7 @@ class StorageBufferNode extends BufferNode {
|
|
|
316
323
|
* @param {NodeBuilder} builder - The current node builder.
|
|
317
324
|
* @return {string} The node type.
|
|
318
325
|
*/
|
|
319
|
-
|
|
326
|
+
generateNodeType( builder ) {
|
|
320
327
|
|
|
321
328
|
if ( this.structTypeNode !== null ) {
|
|
322
329
|
|
|
@@ -326,7 +333,7 @@ class StorageBufferNode extends BufferNode {
|
|
|
326
333
|
|
|
327
334
|
if ( builder.isAvailable( 'storageBuffer' ) || builder.isAvailable( 'indirectStorageBuffer' ) ) {
|
|
328
335
|
|
|
329
|
-
return super.
|
|
336
|
+
return super.generateNodeType( builder );
|
|
330
337
|
|
|
331
338
|
}
|
|
332
339
|
|
|
@@ -395,22 +402,4 @@ export default StorageBufferNode;
|
|
|
395
402
|
* @param {number} [count=0] - The buffer count.
|
|
396
403
|
* @returns {StorageBufferNode}
|
|
397
404
|
*/
|
|
398
|
-
export const storage = ( value, type = null, count = 0 ) =>
|
|
399
|
-
|
|
400
|
-
/**
|
|
401
|
-
* @tsl
|
|
402
|
-
* @function
|
|
403
|
-
* @deprecated since r171. Use `storage().setPBO( true )` instead.
|
|
404
|
-
*
|
|
405
|
-
* @param {StorageBufferAttribute|StorageInstancedBufferAttribute|BufferAttribute} value - The buffer data.
|
|
406
|
-
* @param {?string} type - The buffer type (e.g. `'vec3'`).
|
|
407
|
-
* @param {number} count - The buffer count.
|
|
408
|
-
* @returns {StorageBufferNode}
|
|
409
|
-
*/
|
|
410
|
-
export const storageObject = ( value, type, count ) => { // @deprecated, r171
|
|
411
|
-
|
|
412
|
-
warn( 'TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
|
|
413
|
-
|
|
414
|
-
return storage( value, type, count ).setPBO( true );
|
|
415
|
-
|
|
416
|
-
};
|
|
405
|
+
export const storage = ( value, type = null, count = 0 ) => new StorageBufferNode( value, type, count );
|
|
@@ -146,19 +146,36 @@ class StorageTextureNode extends TextureNode {
|
|
|
146
146
|
*/
|
|
147
147
|
generate( builder, output ) {
|
|
148
148
|
|
|
149
|
-
let snippet;
|
|
150
|
-
|
|
151
149
|
if ( this.storeNode !== null ) {
|
|
152
150
|
|
|
153
|
-
|
|
151
|
+
this.generateStore( builder );
|
|
152
|
+
return '';
|
|
154
153
|
|
|
155
|
-
}
|
|
154
|
+
}
|
|
156
155
|
|
|
157
|
-
|
|
156
|
+
return super.generate( builder, output );
|
|
158
157
|
|
|
159
|
-
|
|
158
|
+
}
|
|
160
159
|
|
|
161
|
-
|
|
160
|
+
/**
|
|
161
|
+
* Generates the snippet for the storage texture.
|
|
162
|
+
*
|
|
163
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
164
|
+
* @param {string} textureProperty - The texture property.
|
|
165
|
+
* @param {string} uvSnippet - The uv snippet.
|
|
166
|
+
* @param {?string} levelSnippet - The level snippet.
|
|
167
|
+
* @param {?string} biasSnippet - The bias snippet.
|
|
168
|
+
* @param {?string} depthSnippet - The depth snippet.
|
|
169
|
+
* @param {?string} compareSnippet - The compare snippet.
|
|
170
|
+
* @param {?Array<string>} gradSnippet - The grad snippet.
|
|
171
|
+
* @param {?string} offsetSnippet - The offset snippet.
|
|
172
|
+
* @return {string} The generated code snippet.
|
|
173
|
+
*/
|
|
174
|
+
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
|
|
175
|
+
|
|
176
|
+
const texture = this.value;
|
|
177
|
+
|
|
178
|
+
return builder.generateStorageTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
|
|
162
179
|
|
|
163
180
|
}
|
|
164
181
|
|
|
@@ -211,7 +228,7 @@ class StorageTextureNode extends TextureNode {
|
|
|
211
228
|
const storeSnippet = storeNode.build( builder, 'vec4' );
|
|
212
229
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
213
230
|
|
|
214
|
-
const snippet = builder.generateTextureStore(
|
|
231
|
+
const snippet = builder.generateTextureStore( this.value, textureProperty, uvSnippet, depthSnippet, storeSnippet );
|
|
215
232
|
|
|
216
233
|
builder.addLineFlowCode( snippet, this );
|
|
217
234
|
|
|
@@ -222,6 +239,7 @@ class StorageTextureNode extends TextureNode {
|
|
|
222
239
|
const newNode = super.clone();
|
|
223
240
|
newNode.storeNode = this.storeNode;
|
|
224
241
|
newNode.mipLevel = this.mipLevel;
|
|
242
|
+
newNode.access = this.access;
|
|
225
243
|
return newNode;
|
|
226
244
|
|
|
227
245
|
}
|
|
@@ -255,7 +273,20 @@ export const storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode ).setP
|
|
|
255
273
|
*/
|
|
256
274
|
export const textureStore = ( value, uvNode, storeNode ) => {
|
|
257
275
|
|
|
258
|
-
|
|
276
|
+
let node;
|
|
277
|
+
|
|
278
|
+
if ( value.isStorageTextureNode === true ) {
|
|
279
|
+
|
|
280
|
+
// Derive new storage texture node from existing one
|
|
281
|
+
node = value.clone();
|
|
282
|
+
node.uvNode = uvNode;
|
|
283
|
+
node.storeNode = storeNode;
|
|
284
|
+
|
|
285
|
+
} else {
|
|
286
|
+
|
|
287
|
+
node = storageTexture( value, uvNode, storeNode );
|
|
288
|
+
|
|
289
|
+
}
|
|
259
290
|
|
|
260
291
|
if ( storeNode !== null ) node.toStack();
|
|
261
292
|
|