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
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node represents an operation that packs floating-point values of a vector into an unsigned 32-bit integer
|
|
6
|
+
*
|
|
7
|
+
* @augments TempNode
|
|
8
|
+
*/
|
|
9
|
+
class PackFloatNode extends TempNode {
|
|
10
|
+
|
|
11
|
+
static get type() {
|
|
12
|
+
|
|
13
|
+
return 'PackFloatNode';
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param {'snorm' | 'unorm' | 'float16'} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
|
|
20
|
+
* @param {Node} vectorNode - The vector node to be packed
|
|
21
|
+
*/
|
|
22
|
+
constructor( encoding, vectorNode ) {
|
|
23
|
+
|
|
24
|
+
super();
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The vector to be packed.
|
|
28
|
+
*
|
|
29
|
+
* @type {Node}
|
|
30
|
+
*/
|
|
31
|
+
this.vectorNode = vectorNode;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The numeric encoding.
|
|
35
|
+
*
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
38
|
+
this.encoding = encoding;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* This flag can be used for type testing.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @readonly
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
47
|
+
this.isPackFloatNode = true;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
generateNodeType() {
|
|
52
|
+
|
|
53
|
+
return 'uint';
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
generate( builder ) {
|
|
58
|
+
|
|
59
|
+
const inputType = this.vectorNode.getNodeType( builder );
|
|
60
|
+
return `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default PackFloatNode;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer.
|
|
70
|
+
* round(clamp(c, -1, +1) * 32767.0)
|
|
71
|
+
*
|
|
72
|
+
* @tsl
|
|
73
|
+
* @function
|
|
74
|
+
* @param {Node<vec2>} value - The 2-component vector to be packed
|
|
75
|
+
* @returns {Node}
|
|
76
|
+
*/
|
|
77
|
+
export const packSnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm' ).setParameterLength( 1 );
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer.
|
|
81
|
+
* round(clamp(c, 0, +1) * 65535.0)
|
|
82
|
+
*
|
|
83
|
+
* @tsl
|
|
84
|
+
* @function
|
|
85
|
+
* @param {Node<vec2>} value - The 2-component vector to be packed
|
|
86
|
+
* @returns {Node}
|
|
87
|
+
*/
|
|
88
|
+
export const packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm' ).setParameterLength( 1 );
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Converts each component of the vec2 to 16-bit floating-point values. The results are packed into a single unsigned integer.
|
|
92
|
+
*
|
|
93
|
+
* @tsl
|
|
94
|
+
* @function
|
|
95
|
+
* @param {Node<vec2>} value - The 2-component vector to be packed
|
|
96
|
+
* @returns {Node}
|
|
97
|
+
*/
|
|
98
|
+
export const packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 );
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node represents an operation that unpacks values from a 32-bit unsigned integer, reinterpreting the results as a floating-point vector
|
|
6
|
+
*
|
|
7
|
+
* @augments TempNode
|
|
8
|
+
*/
|
|
9
|
+
class UnpackFloatNode extends TempNode {
|
|
10
|
+
|
|
11
|
+
static get type() {
|
|
12
|
+
|
|
13
|
+
return 'UnpackFloatNode';
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param {'snorm' | 'unorm' | 'float16'} encoding - The numeric encoding that describes how the integer values are mapped to the float range
|
|
20
|
+
* @param {Node} uintNode - The uint node to be unpacked
|
|
21
|
+
*/
|
|
22
|
+
constructor( encoding, uintNode ) {
|
|
23
|
+
|
|
24
|
+
super();
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The unsigned integer to be unpacked.
|
|
28
|
+
*
|
|
29
|
+
* @type {Node}
|
|
30
|
+
*/
|
|
31
|
+
this.uintNode = uintNode;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The numeric encoding.
|
|
35
|
+
*
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
38
|
+
this.encoding = encoding;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* This flag can be used for type testing.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @readonly
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
47
|
+
this.isUnpackFloatNode = true;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
generateNodeType() {
|
|
52
|
+
|
|
53
|
+
return 'vec2';
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
generate( builder ) {
|
|
58
|
+
|
|
59
|
+
const inputType = this.uintNode.getNodeType( builder );
|
|
60
|
+
return `${ builder.getFloatUnpackingMethod( this.encoding ) }(${ this.uintNode.build( builder, inputType )})`;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default UnpackFloatNode;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as normalized signed integers. Returns a vec2 with both values.
|
|
70
|
+
*
|
|
71
|
+
* @tsl
|
|
72
|
+
* @function
|
|
73
|
+
* @param {Node<uint>} value - The unsigned integer to be unpacked
|
|
74
|
+
* @returns {Node}
|
|
75
|
+
*/
|
|
76
|
+
export const unpackSnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'snorm' ).setParameterLength( 1 );
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as normalized unsigned integers. Returns a vec2 with both values.
|
|
80
|
+
*
|
|
81
|
+
* @tsl
|
|
82
|
+
* @function
|
|
83
|
+
* @param {Node<uint>} value - The unsigned integer to be unpacked
|
|
84
|
+
* @returns {Node}
|
|
85
|
+
*/
|
|
86
|
+
export const unpackUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm' ).setParameterLength( 1 );
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as 16-bit floating-point numbers. Returns a vec2 with both values.
|
|
90
|
+
*
|
|
91
|
+
* @tsl
|
|
92
|
+
* @function
|
|
93
|
+
* @param {Node<uint>} value - The unsigned integer to be unpacked
|
|
94
|
+
* @returns {Node}
|
|
95
|
+
*/
|
|
96
|
+
export const unpackHalf2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'float16' ).setParameterLength( 1 );
|
|
@@ -312,30 +312,24 @@ const hammersley = /*@__PURE__*/ Fn( ( [ i, N ] ) => {
|
|
|
312
312
|
// GGX VNDF importance sampling (Eric Heitz 2018)
|
|
313
313
|
// "Sampling the GGX Distribution of Visible Normals"
|
|
314
314
|
// https://jcgt.org/published/0007/04/01/
|
|
315
|
-
const importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi,
|
|
315
|
+
const importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi, V, roughness ] ) => {
|
|
316
316
|
|
|
317
|
-
const
|
|
318
|
-
const roughness = float( roughness_immutable );
|
|
319
|
-
const alpha = roughness.mul( roughness ).toVar();
|
|
320
|
-
|
|
321
|
-
// Section 3.2: Transform view direction to hemisphere configuration
|
|
322
|
-
const Vh = normalize( vec3( alpha.mul( V.x ), alpha.mul( V.y ), V.z ) ).toVar();
|
|
317
|
+
const alpha = roughness.mul( roughness ).toConst();
|
|
323
318
|
|
|
324
319
|
// Section 4.1: Orthonormal basis
|
|
325
|
-
const
|
|
326
|
-
const
|
|
327
|
-
const T2 = cross( Vh, T1 ).toVar();
|
|
320
|
+
const T1 = vec3( 1.0, 0.0, 0.0 ).toConst();
|
|
321
|
+
const T2 = cross( V, T1 ).toConst();
|
|
328
322
|
|
|
329
323
|
// Section 4.2: Parameterization of projected area
|
|
330
|
-
const r = sqrt( Xi.x );
|
|
331
|
-
const phi = mul( 2.0, 3.14159265359 ).mul( Xi.y );
|
|
332
|
-
const t1 = r.mul( cos( phi ) ).
|
|
324
|
+
const r = sqrt( Xi.x ).toConst();
|
|
325
|
+
const phi = mul( 2.0, 3.14159265359 ).mul( Xi.y ).toConst();
|
|
326
|
+
const t1 = r.mul( cos( phi ) ).toConst();
|
|
333
327
|
const t2 = r.mul( sin( phi ) ).toVar();
|
|
334
|
-
const s = mul( 0.5,
|
|
328
|
+
const s = mul( 0.5, V.z.add( 1.0 ) ).toConst();
|
|
335
329
|
t2.assign( s.oneMinus().mul( sqrt( t1.mul( t1 ).oneMinus() ) ).add( s.mul( t2 ) ) );
|
|
336
330
|
|
|
337
331
|
// Section 4.3: Reprojection onto hemisphere
|
|
338
|
-
const Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add(
|
|
332
|
+
const Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add( V.mul( sqrt( max( 0.0, t1.mul( t1 ).add( t2.mul( t2 ) ).oneMinus() ) ) ) );
|
|
339
333
|
|
|
340
334
|
// Section 3.4: Transform back to ellipsoid configuration
|
|
341
335
|
return normalize( vec3( alpha.mul( Nh.x ), alpha.mul( Nh.y ), max( 0.0, Nh.z ) ) );
|
package/src/nodes/tsl/TSLBase.js
CHANGED
|
@@ -21,7 +21,7 @@ export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
|
|
|
21
21
|
export * from '../gpgpu/ComputeNode.js'; // .compute()
|
|
22
22
|
export * from '../core/IsolateNode.js'; // .isolate()
|
|
23
23
|
export * from '../core/BypassNode.js'; // .bypass()
|
|
24
|
-
export * from '../utils/
|
|
24
|
+
export * from '../utils/Remap.js'; // .remap(), .remapClamp()
|
|
25
25
|
export * from '../code/ExpressionNode.js'; // expression()
|
|
26
26
|
export * from '../utils/Discard.js'; // Discard(), Return()
|
|
27
27
|
export * from '../display/RenderOutputNode.js'; // .renderOutput()
|
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -7,6 +7,7 @@ import SetNode from '../utils/SetNode.js';
|
|
|
7
7
|
import FlipNode from '../utils/FlipNode.js';
|
|
8
8
|
import ConstNode from '../core/ConstNode.js';
|
|
9
9
|
import MemberNode from '../utils/MemberNode.js';
|
|
10
|
+
import StackTrace from '../core/StackTrace.js';
|
|
10
11
|
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
|
|
11
12
|
import { warn, error } from '../../utils.js';
|
|
12
13
|
|
|
@@ -18,6 +19,8 @@ const NodeElements = new Map();
|
|
|
18
19
|
|
|
19
20
|
export function addMethodChaining( name, nodeElement ) {
|
|
20
21
|
|
|
22
|
+
// No require StackTrace because this is internal API
|
|
23
|
+
|
|
21
24
|
if ( NodeElements.has( name ) ) {
|
|
22
25
|
|
|
23
26
|
warn( `TSL: Redefinition of method chaining '${ name }'.` );
|
|
@@ -66,7 +69,7 @@ Node.prototype.assign = function ( ...params ) {
|
|
|
66
69
|
|
|
67
70
|
} else {
|
|
68
71
|
|
|
69
|
-
error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().' );
|
|
72
|
+
error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().', new StackTrace() );
|
|
70
73
|
|
|
71
74
|
}
|
|
72
75
|
|
|
@@ -374,13 +377,13 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
374
377
|
|
|
375
378
|
if ( minParams !== undefined && params.length < minParams ) {
|
|
376
379
|
|
|
377
|
-
error( `TSL: "${ tslName }" parameter length is less than minimum required
|
|
380
|
+
error( `TSL: "${ tslName }" parameter length is less than minimum required.`, new StackTrace() );
|
|
378
381
|
|
|
379
382
|
return params.concat( new Array( minParams - params.length ).fill( 0 ) );
|
|
380
383
|
|
|
381
384
|
} else if ( maxParams !== undefined && params.length > maxParams ) {
|
|
382
385
|
|
|
383
|
-
error( `TSL: "${ tslName }" parameter length exceeds limit
|
|
386
|
+
error( `TSL: "${ tslName }" parameter length exceeds limit.`, new StackTrace() );
|
|
384
387
|
|
|
385
388
|
return params.slice( 0, maxParams );
|
|
386
389
|
|
|
@@ -441,7 +444,7 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
441
444
|
|
|
442
445
|
const ShaderNodeImmutable = function ( NodeClass, ...params ) {
|
|
443
446
|
|
|
444
|
-
return
|
|
447
|
+
return new NodeClass( ...nodeArray( params ) );
|
|
445
448
|
|
|
446
449
|
};
|
|
447
450
|
|
|
@@ -458,7 +461,7 @@ class ShaderCallNodeInternal extends Node {
|
|
|
458
461
|
|
|
459
462
|
}
|
|
460
463
|
|
|
461
|
-
|
|
464
|
+
generateNodeType( builder ) {
|
|
462
465
|
|
|
463
466
|
return this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );
|
|
464
467
|
|
|
@@ -871,9 +874,9 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
871
874
|
|
|
872
875
|
if ( param === undefined ) {
|
|
873
876
|
|
|
874
|
-
error( `TSL: Invalid parameter for the type "${ type }"
|
|
877
|
+
error( `TSL: Invalid parameter for the type "${ type }".`, new StackTrace() );
|
|
875
878
|
|
|
876
|
-
return
|
|
879
|
+
return new ConstNode( 0, type );
|
|
877
880
|
|
|
878
881
|
}
|
|
879
882
|
|
|
@@ -914,7 +917,25 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
914
917
|
|
|
915
918
|
// exports
|
|
916
919
|
|
|
917
|
-
export
|
|
920
|
+
export function defined( value ) {
|
|
921
|
+
|
|
922
|
+
if ( value && value.isNode ) {
|
|
923
|
+
|
|
924
|
+
value.traverse( ( node ) => {
|
|
925
|
+
|
|
926
|
+
if ( node.isConstNode ) {
|
|
927
|
+
|
|
928
|
+
value = node.value;
|
|
929
|
+
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
} );
|
|
933
|
+
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
return Boolean( value );
|
|
937
|
+
|
|
938
|
+
}
|
|
918
939
|
|
|
919
940
|
// utils
|
|
920
941
|
|
|
@@ -960,7 +981,7 @@ class FnNode extends Node {
|
|
|
960
981
|
|
|
961
982
|
} else {
|
|
962
983
|
|
|
963
|
-
error( 'TSL: Invalid layout type.' );
|
|
984
|
+
error( 'TSL: Invalid layout type.', new StackTrace() );
|
|
964
985
|
|
|
965
986
|
}
|
|
966
987
|
|
|
@@ -1015,7 +1036,7 @@ class FnNode extends Node {
|
|
|
1015
1036
|
|
|
1016
1037
|
}
|
|
1017
1038
|
|
|
1018
|
-
|
|
1039
|
+
generateNodeType( builder ) {
|
|
1019
1040
|
|
|
1020
1041
|
return this.shaderNode.getNodeType( builder ) || 'float';
|
|
1021
1042
|
|
|
@@ -1044,7 +1065,7 @@ class FnNode extends Node {
|
|
|
1044
1065
|
|
|
1045
1066
|
const type = this.getNodeType( builder );
|
|
1046
1067
|
|
|
1047
|
-
error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".' );
|
|
1068
|
+
error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".', this.stackTrace );
|
|
1048
1069
|
|
|
1049
1070
|
return builder.generateConst( type );
|
|
1050
1071
|
|
|
@@ -1171,8 +1192,8 @@ export const mat2 = new ConvertType( 'mat2' );
|
|
|
1171
1192
|
export const mat3 = new ConvertType( 'mat3' );
|
|
1172
1193
|
export const mat4 = new ConvertType( 'mat4' );
|
|
1173
1194
|
|
|
1174
|
-
export const string = ( value = '' ) =>
|
|
1175
|
-
export const arrayBuffer = ( value ) =>
|
|
1195
|
+
export const string = ( value = '' ) => new ConstNode( value, 'string' );
|
|
1196
|
+
export const arrayBuffer = ( value ) => new ConstNode( value, 'ArrayBuffer' );
|
|
1176
1197
|
|
|
1177
1198
|
addMethodChaining( 'toColor', color );
|
|
1178
1199
|
addMethodChaining( 'toFloat', float );
|
|
@@ -1198,8 +1219,8 @@ addMethodChaining( 'toMat4', mat4 );
|
|
|
1198
1219
|
// basic nodes
|
|
1199
1220
|
|
|
1200
1221
|
export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );
|
|
1201
|
-
export const convert = ( node, types ) =>
|
|
1202
|
-
export const split = ( node, channels ) =>
|
|
1222
|
+
export const convert = ( node, types ) => new ConvertNode( nodeObject( node ), types );
|
|
1223
|
+
export const split = ( node, channels ) => new SplitNode( nodeObject( node ), channels );
|
|
1203
1224
|
|
|
1204
1225
|
addMethodChaining( 'element', element );
|
|
1205
1226
|
addMethodChaining( 'convert', convert );
|
|
@@ -1216,14 +1237,14 @@ addMethodChaining( 'convert', convert );
|
|
|
1216
1237
|
*/
|
|
1217
1238
|
export const append = ( node ) => { // @deprecated, r176
|
|
1218
1239
|
|
|
1219
|
-
warn( 'TSL: append() has been renamed to Stack().' );
|
|
1240
|
+
warn( 'TSL: append() has been renamed to Stack().', new StackTrace() );
|
|
1220
1241
|
return Stack( node );
|
|
1221
1242
|
|
|
1222
1243
|
};
|
|
1223
1244
|
|
|
1224
1245
|
addMethodChaining( 'append', ( node ) => { // @deprecated, r176
|
|
1225
1246
|
|
|
1226
|
-
warn( 'TSL: .append() has been renamed to .toStack().' );
|
|
1247
|
+
warn( 'TSL: .append() has been renamed to .toStack().', new StackTrace() );
|
|
1227
1248
|
return Stack( node );
|
|
1228
1249
|
|
|
1229
1250
|
} );
|
|
@@ -55,12 +55,25 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
|
|
|
55
55
|
* @param {NodeBuilder} builder - The current node builder.
|
|
56
56
|
* @return {string} The node type.
|
|
57
57
|
*/
|
|
58
|
-
|
|
58
|
+
generateNodeType( builder ) {
|
|
59
59
|
|
|
60
60
|
return this.node.getElementType( builder );
|
|
61
61
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
/**
|
|
65
|
+
* This method is overwritten since the member type is inferred from the array-like node.
|
|
66
|
+
*
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
* @param {string} name - The member name.
|
|
69
|
+
* @return {string} The member type.
|
|
70
|
+
*/
|
|
71
|
+
getMemberType( builder, name ) {
|
|
72
|
+
|
|
73
|
+
return this.node.getMemberType( builder, name );
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
64
77
|
generate( builder ) {
|
|
65
78
|
|
|
66
79
|
const indexType = this.indexNode.getNodeType( builder );
|
|
@@ -48,7 +48,7 @@ class ConvertNode extends Node {
|
|
|
48
48
|
* @param {NodeBuilder} builder - The current node builder.
|
|
49
49
|
* @return {string} The node type.
|
|
50
50
|
*/
|
|
51
|
-
|
|
51
|
+
generateNodeType( builder ) {
|
|
52
52
|
|
|
53
53
|
const requestType = this.node.getNodeType( builder );
|
|
54
54
|
|
|
@@ -19,7 +19,7 @@ class DebugNode extends TempNode {
|
|
|
19
19
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
generateNodeType( builder ) {
|
|
23
23
|
|
|
24
24
|
return this.node.getNodeType( builder );
|
|
25
25
|
|
|
@@ -42,21 +42,21 @@ class DebugNode extends TempNode {
|
|
|
42
42
|
const callback = this.callback;
|
|
43
43
|
const snippet = this.node.build( builder );
|
|
44
44
|
|
|
45
|
-
const title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';
|
|
46
|
-
const border = '-'.repeat( title.length );
|
|
47
|
-
|
|
48
|
-
let code = '';
|
|
49
|
-
code += '// #' + title + '#\n';
|
|
50
|
-
code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
|
|
51
|
-
code += '/* ... */ ' + snippet + ' /* ... */\n';
|
|
52
|
-
code += '// #' + border + '#\n';
|
|
53
|
-
|
|
54
45
|
if ( callback !== null ) {
|
|
55
46
|
|
|
56
|
-
callback( builder,
|
|
47
|
+
callback( builder, snippet );
|
|
57
48
|
|
|
58
49
|
} else {
|
|
59
50
|
|
|
51
|
+
const title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';
|
|
52
|
+
const border = '-'.repeat( title.length );
|
|
53
|
+
|
|
54
|
+
let code = '';
|
|
55
|
+
code += '// #' + title + '#\n';
|
|
56
|
+
code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
|
|
57
|
+
code += '/* ... */ ' + snippet + ' /* ... */\n';
|
|
58
|
+
code += '// #' + border + '#\n';
|
|
59
|
+
|
|
60
60
|
log( code );
|
|
61
61
|
|
|
62
62
|
}
|
|
@@ -78,6 +78,6 @@ export default DebugNode;
|
|
|
78
78
|
* @param {?Function} [callback=null] - Optional callback function to handle the debug output.
|
|
79
79
|
* @returns {DebugNode}
|
|
80
80
|
*/
|
|
81
|
-
export const debug = ( node, callback = null ) =>
|
|
81
|
+
export const debug = ( node, callback = null ) => new DebugNode( nodeObject( node ), callback ).toStack();
|
|
82
82
|
|
|
83
83
|
addMethodChaining( 'debug', debug );
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* EventNode is a node that executes a callback during specific update phases.
|
|
@@ -36,6 +35,10 @@ class EventNode extends Node {
|
|
|
36
35
|
|
|
37
36
|
this.updateType = NodeUpdateType.RENDER;
|
|
38
37
|
|
|
38
|
+
} else if ( eventType === EventNode.FRAME ) {
|
|
39
|
+
|
|
40
|
+
this.updateType = NodeUpdateType.FRAME;
|
|
41
|
+
|
|
39
42
|
} else if ( eventType === EventNode.BEFORE_OBJECT ) {
|
|
40
43
|
|
|
41
44
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
@@ -44,6 +47,10 @@ class EventNode extends Node {
|
|
|
44
47
|
|
|
45
48
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
46
49
|
|
|
50
|
+
} else if ( eventType === EventNode.BEFORE_FRAME ) {
|
|
51
|
+
|
|
52
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
53
|
+
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
}
|
|
@@ -64,8 +71,10 @@ class EventNode extends Node {
|
|
|
64
71
|
|
|
65
72
|
EventNode.OBJECT = 'object';
|
|
66
73
|
EventNode.MATERIAL = 'material';
|
|
74
|
+
EventNode.FRAME = 'frame';
|
|
67
75
|
EventNode.BEFORE_OBJECT = 'beforeObject';
|
|
68
76
|
EventNode.BEFORE_MATERIAL = 'beforeMaterial';
|
|
77
|
+
EventNode.BEFORE_FRAME = 'beforeFrame';
|
|
69
78
|
|
|
70
79
|
export default EventNode;
|
|
71
80
|
|
|
@@ -76,7 +85,7 @@ export default EventNode;
|
|
|
76
85
|
* @param {Function} callback - The callback function.
|
|
77
86
|
* @returns {EventNode}
|
|
78
87
|
*/
|
|
79
|
-
const createEvent = ( type, callback ) =>
|
|
88
|
+
const createEvent = ( type, callback ) => new EventNode( type, callback ).toStack();
|
|
80
89
|
|
|
81
90
|
/**
|
|
82
91
|
* Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.
|
|
@@ -98,6 +107,16 @@ export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, cal
|
|
|
98
107
|
*/
|
|
99
108
|
export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
|
|
100
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Creates an event that triggers a function every frame.
|
|
112
|
+
*
|
|
113
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
114
|
+
*
|
|
115
|
+
* @param {Function} callback - The callback function.
|
|
116
|
+
* @returns {EventNode}
|
|
117
|
+
*/
|
|
118
|
+
export const OnFrameUpdate = ( callback ) => createEvent( EventNode.FRAME, callback );
|
|
119
|
+
|
|
101
120
|
/**
|
|
102
121
|
* Creates an event that triggers a function before an object (Mesh|Sprite) is updated.
|
|
103
122
|
*
|
|
@@ -117,3 +136,13 @@ export const OnBeforeObjectUpdate = ( callback ) => createEvent( EventNode.BEFOR
|
|
|
117
136
|
* @returns {EventNode}
|
|
118
137
|
*/
|
|
119
138
|
export const OnBeforeMaterialUpdate = ( callback ) => createEvent( EventNode.BEFORE_MATERIAL, callback );
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Creates an event that triggers a function before every frame.
|
|
142
|
+
*
|
|
143
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
144
|
+
*
|
|
145
|
+
* @param {Function} callback - The callback function.
|
|
146
|
+
* @returns {EventNode}
|
|
147
|
+
*/
|
|
148
|
+
export const OnBeforeFrameUpdate = ( callback ) => createEvent( EventNode.BEFORE_FRAME, callback );
|
|
@@ -65,7 +65,7 @@ class FunctionOverloadingNode extends Node {
|
|
|
65
65
|
* @param {NodeBuilder} builder - The current node builder.
|
|
66
66
|
* @return {string} The node type.
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
generateNodeType( builder ) {
|
|
69
69
|
|
|
70
70
|
const candidateFn = this.getCandidateFn( builder );
|
|
71
71
|
|
|
@@ -42,7 +42,7 @@ class JoinNode extends TempNode {
|
|
|
42
42
|
* @param {NodeBuilder} builder - The current node builder.
|
|
43
43
|
* @return {string} The node type.
|
|
44
44
|
*/
|
|
45
|
-
|
|
45
|
+
generateNodeType( builder ) {
|
|
46
46
|
|
|
47
47
|
if ( this.nodeType !== null ) {
|
|
48
48
|
|
|
@@ -71,7 +71,7 @@ class JoinNode extends TempNode {
|
|
|
71
71
|
|
|
72
72
|
if ( length >= maxLength ) {
|
|
73
73
|
|
|
74
|
-
error( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type
|
|
74
|
+
error( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type.`, this.stackTrace );
|
|
75
75
|
break;
|
|
76
76
|
|
|
77
77
|
}
|
|
@@ -82,7 +82,7 @@ class JoinNode extends TempNode {
|
|
|
82
82
|
|
|
83
83
|
if ( length + inputTypeLength > maxLength ) {
|
|
84
84
|
|
|
85
|
-
error( `TSL: Length of '${ type }()' data exceeds maximum length of output type
|
|
85
|
+
error( `TSL: Length of '${ type }()' data exceeds maximum length of output type.`, this.stackTrace );
|
|
86
86
|
|
|
87
87
|
inputTypeLength = maxLength - length;
|
|
88
88
|
inputType = builder.getTypeFromLength( inputTypeLength );
|
|
@@ -265,7 +265,7 @@ class LoopNode extends Node {
|
|
|
265
265
|
|
|
266
266
|
} else {
|
|
267
267
|
|
|
268
|
-
error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
|
|
268
|
+
error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.', this.stackTrace );
|
|
269
269
|
|
|
270
270
|
updateSnippet = 'break /* invalid update */';
|
|
271
271
|
|
|
@@ -66,7 +66,7 @@ class MemberNode extends Node {
|
|
|
66
66
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
generateNodeType( builder ) {
|
|
70
70
|
|
|
71
71
|
if ( this.hasMember( builder ) === false ) {
|
|
72
72
|
|
|
@@ -101,7 +101,7 @@ class MemberNode extends Node {
|
|
|
101
101
|
|
|
102
102
|
if ( this.hasMember( builder ) === false ) {
|
|
103
103
|
|
|
104
|
-
warn( `TSL: Member "${ this.property }" does not exist in struct
|
|
104
|
+
warn( `TSL: Member "${ this.property }" does not exist in struct.`, this.stackTrace );
|
|
105
105
|
|
|
106
106
|
const type = this.getNodeType( builder );
|
|
107
107
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
1
|
+
import { nodeObject, vec3, float } from '../tsl/TSLBase.js';
|
|
2
|
+
import { dot, sqrt, saturate } from '../math/MathNode.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Packs a direction vector into a color value.
|
|
@@ -19,3 +20,14 @@ export const directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0
|
|
|
19
20
|
* @return {Node<vec3>} The direction.
|
|
20
21
|
*/
|
|
21
22
|
export const colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Unpacks a tangent space normal, reconstructing the Z component by projecting the X,Y coordinates onto the hemisphere.
|
|
26
|
+
* The X,Y coordinates are expected to be in the [-1, 1] range.
|
|
27
|
+
*
|
|
28
|
+
* @tsl
|
|
29
|
+
* @function
|
|
30
|
+
* @param {Node<vec2>} xy - The X,Y coordinates of the normal.
|
|
31
|
+
* @return {Node<vec3>} The resulting normal.
|
|
32
|
+
*/
|
|
33
|
+
export const unpackNormal = ( xy ) => vec3( xy, sqrt( saturate( float( 1.0 ).sub( dot( xy, xy ) ) ) ) );
|