super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -8,10 +8,19 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
8
8
|
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
9
9
|
import { Texture } from '../../textures/Texture.js';
|
|
10
10
|
|
|
11
|
+
/** @module PMREMNode **/
|
|
12
|
+
|
|
11
13
|
let _generator = null;
|
|
12
14
|
|
|
13
15
|
const _cache = new WeakMap();
|
|
14
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Generates the cubeUV size based on the given image height.
|
|
19
|
+
*
|
|
20
|
+
* @private
|
|
21
|
+
* @param {Number} imageHeight - The image height.
|
|
22
|
+
* @return {{texelWidth: Number,texelHeight: Number, maxMip: Number}} The result object.
|
|
23
|
+
*/
|
|
15
24
|
function _generateCubeUVSize( imageHeight ) {
|
|
16
25
|
|
|
17
26
|
const maxMip = Math.log2( imageHeight ) - 2;
|
|
@@ -24,6 +33,13 @@ function _generateCubeUVSize( imageHeight ) {
|
|
|
24
33
|
|
|
25
34
|
}
|
|
26
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Generates a PMREM from the given texture .
|
|
38
|
+
*
|
|
39
|
+
* @private
|
|
40
|
+
* @param {Texture} texture - The texture to create the PMREM for.
|
|
41
|
+
* @return {Texture} The PMREM.
|
|
42
|
+
*/
|
|
27
43
|
function _getPMREMFromTexture( texture ) {
|
|
28
44
|
|
|
29
45
|
let cacheTexture = _cache.get( texture );
|
|
@@ -71,6 +87,17 @@ function _getPMREMFromTexture( texture ) {
|
|
|
71
87
|
|
|
72
88
|
}
|
|
73
89
|
|
|
90
|
+
/**
|
|
91
|
+
* This node represents a PMREM which is a special type of preprocessed
|
|
92
|
+
* environment map intended for PBR materials.
|
|
93
|
+
*
|
|
94
|
+
* ```js
|
|
95
|
+
* const material = new MeshStandardNodeMaterial();
|
|
96
|
+
* material.envNode = pmremTexture( envMap );
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @augments TempNode
|
|
100
|
+
*/
|
|
74
101
|
class PMREMNode extends TempNode {
|
|
75
102
|
|
|
76
103
|
static get type() {
|
|
@@ -79,27 +106,98 @@ class PMREMNode extends TempNode {
|
|
|
79
106
|
|
|
80
107
|
}
|
|
81
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Constructs a new function overloading node.
|
|
111
|
+
*
|
|
112
|
+
* @param {Texture} value - The input texture.
|
|
113
|
+
* @param {Node<vec2>} [uvNode=null] - The uv node.
|
|
114
|
+
* @param {Node<float>} [levelNode=null] - The level node.
|
|
115
|
+
*/
|
|
82
116
|
constructor( value, uvNode = null, levelNode = null ) {
|
|
83
117
|
|
|
84
118
|
super( 'vec3' );
|
|
85
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Reference to the input texture.
|
|
122
|
+
*
|
|
123
|
+
* @private
|
|
124
|
+
* @type {Texture}
|
|
125
|
+
*/
|
|
86
126
|
this._value = value;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Reference to the generated PMREM.
|
|
130
|
+
*
|
|
131
|
+
* @private
|
|
132
|
+
* @type {Texture | null}
|
|
133
|
+
* @default null
|
|
134
|
+
*/
|
|
87
135
|
this._pmrem = null;
|
|
88
136
|
|
|
137
|
+
/**
|
|
138
|
+
* The uv node.
|
|
139
|
+
*
|
|
140
|
+
* @type {Node<vec2>}
|
|
141
|
+
*/
|
|
89
142
|
this.uvNode = uvNode;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* The level node.
|
|
146
|
+
*
|
|
147
|
+
* @type {Node<float>}
|
|
148
|
+
*/
|
|
90
149
|
this.levelNode = levelNode;
|
|
91
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Reference to a PMREM generator.
|
|
153
|
+
*
|
|
154
|
+
* @private
|
|
155
|
+
* @type {PMREMGenerator}
|
|
156
|
+
* @default null
|
|
157
|
+
*/
|
|
92
158
|
this._generator = null;
|
|
93
159
|
|
|
94
160
|
const defaultTexture = new Texture();
|
|
95
161
|
defaultTexture.isRenderTargetTexture = true;
|
|
96
162
|
|
|
163
|
+
/**
|
|
164
|
+
* The texture node holding the generated PMREM.
|
|
165
|
+
*
|
|
166
|
+
* @private
|
|
167
|
+
* @type {TextureNode}
|
|
168
|
+
*/
|
|
97
169
|
this._texture = texture( defaultTexture );
|
|
98
170
|
|
|
171
|
+
/**
|
|
172
|
+
* A uniform representing the PMREM's width.
|
|
173
|
+
*
|
|
174
|
+
* @private
|
|
175
|
+
* @type {UniformNode<float>}
|
|
176
|
+
*/
|
|
99
177
|
this._width = uniform( 0 );
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* A uniform representing the PMREM's height.
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
* @type {UniformNode<float>}
|
|
184
|
+
*/
|
|
100
185
|
this._height = uniform( 0 );
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* A uniform representing the PMREM's max Mip.
|
|
189
|
+
*
|
|
190
|
+
* @private
|
|
191
|
+
* @type {UniformNode<float>}
|
|
192
|
+
*/
|
|
101
193
|
this._maxMip = uniform( 0 );
|
|
102
194
|
|
|
195
|
+
/**
|
|
196
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER`.
|
|
197
|
+
*
|
|
198
|
+
* @type {String}
|
|
199
|
+
* @default 'render'
|
|
200
|
+
*/
|
|
103
201
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
104
202
|
|
|
105
203
|
}
|
|
@@ -111,12 +209,22 @@ class PMREMNode extends TempNode {
|
|
|
111
209
|
|
|
112
210
|
}
|
|
113
211
|
|
|
212
|
+
/**
|
|
213
|
+
* The node's texture value.
|
|
214
|
+
*
|
|
215
|
+
* @type {Texture}
|
|
216
|
+
*/
|
|
114
217
|
get value() {
|
|
115
218
|
|
|
116
219
|
return this._value;
|
|
117
220
|
|
|
118
221
|
}
|
|
119
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Uses the given PMREM texture to update internal values.
|
|
225
|
+
*
|
|
226
|
+
* @param {Texture} texture - The PMREM texture.
|
|
227
|
+
*/
|
|
120
228
|
updateFromTexture( texture ) {
|
|
121
229
|
|
|
122
230
|
const cubeUVSize = _generateCubeUVSize( texture.image.height );
|
|
@@ -191,6 +299,8 @@ class PMREMNode extends TempNode {
|
|
|
191
299
|
|
|
192
300
|
}
|
|
193
301
|
|
|
302
|
+
uvNode = vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
|
|
303
|
+
|
|
194
304
|
//
|
|
195
305
|
|
|
196
306
|
let levelNode = this.levelNode;
|
|
@@ -211,6 +321,13 @@ class PMREMNode extends TempNode {
|
|
|
211
321
|
|
|
212
322
|
export default PMREMNode;
|
|
213
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Returns `true` if the given cube map image has been fully loaded.
|
|
326
|
+
*
|
|
327
|
+
* @private
|
|
328
|
+
* @param {Array<(Image|Object)>} image - The cube map image.
|
|
329
|
+
* @return {Boolean} Whether the given cube map is ready or not.
|
|
330
|
+
*/
|
|
214
331
|
function isCubeMapReady( image ) {
|
|
215
332
|
|
|
216
333
|
if ( image === null || image === undefined ) return false;
|
|
@@ -229,6 +346,13 @@ function isCubeMapReady( image ) {
|
|
|
229
346
|
|
|
230
347
|
}
|
|
231
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Returns `true` if the given equirectangular image has been fully loaded.
|
|
351
|
+
*
|
|
352
|
+
* @private
|
|
353
|
+
* @param {(Image|Object)} image - The equirectangular image.
|
|
354
|
+
* @return {Boolean} Whether the given cube map is ready or not.
|
|
355
|
+
*/
|
|
232
356
|
function isEquirectangularMapReady( image ) {
|
|
233
357
|
|
|
234
358
|
if ( image === null || image === undefined ) return false;
|
|
@@ -237,4 +361,13 @@ function isEquirectangularMapReady( image ) {
|
|
|
237
361
|
|
|
238
362
|
}
|
|
239
363
|
|
|
364
|
+
/**
|
|
365
|
+
* TSL function for creating a PMREM node.
|
|
366
|
+
*
|
|
367
|
+
* @function
|
|
368
|
+
* @param {Texture} value - The input texture.
|
|
369
|
+
* @param {Node<vec2>} [uvNode=null] - The uv node.
|
|
370
|
+
* @param {Node<float>} [levelNode=null] - The level node.
|
|
371
|
+
* @returns {PMREMNode}
|
|
372
|
+
*/
|
|
240
373
|
export const pmremTexture = /*@__PURE__*/ nodeProxy( PMREMNode );
|
|
@@ -237,7 +237,7 @@ const bilinearCubeUV = /*@__PURE__*/ Fn( ( [ envMap, direction_immutable, mipInt
|
|
|
237
237
|
uv.x.mulAssign( CUBEUV_TEXEL_WIDTH );
|
|
238
238
|
uv.y.mulAssign( CUBEUV_TEXEL_HEIGHT );
|
|
239
239
|
|
|
240
|
-
return envMap.
|
|
240
|
+
return envMap.sample( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
|
|
241
241
|
|
|
242
242
|
} );
|
|
243
243
|
|
|
@@ -267,7 +267,7 @@ export const blur = /*@__PURE__*/ Fn( ( { n, latitudinal, poleAxis, outputDirect
|
|
|
267
267
|
axis.assign( normalize( axis ) );
|
|
268
268
|
|
|
269
269
|
const gl_FragColor = vec3().toVar();
|
|
270
|
-
gl_FragColor.addAssign( weights.element(
|
|
270
|
+
gl_FragColor.addAssign( weights.element( 0 ).mul( getSample( { theta: 0.0, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );
|
|
271
271
|
|
|
272
272
|
Loop( { start: int( 1 ), end: n }, ( { i } ) => {
|
|
273
273
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { uv } from '../accessors/UV.js';
|
|
2
2
|
import { Fn } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module Procedural **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a 2x2 checkerboard pattern that can be used as procedural texture data.
|
|
8
|
+
*
|
|
9
|
+
* @method
|
|
10
|
+
* @param {Node<vec2>} coord - The uv coordinates.
|
|
11
|
+
* @return {Node<float>} The result data.
|
|
12
|
+
*/
|
|
4
13
|
export const checker = /*@__PURE__*/ Fn( ( [ coord = uv() ] ) => {
|
|
5
14
|
|
|
6
15
|
const uv = coord.mul( 2.0 );
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Fn, float } from '../tsl/TSLBase.js';
|
|
2
|
+
import { lengthSq, smoothstep } from '../math/MathNode.js';
|
|
3
|
+
import { uv } from '../accessors/UV.js';
|
|
4
|
+
|
|
5
|
+
/** @module Shapes **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generates a circle based on the uv coordinates.
|
|
9
|
+
*
|
|
10
|
+
* @method
|
|
11
|
+
* @param {Node<vec2>} coord - The uv to generate the circle.
|
|
12
|
+
* @return {Node<float>} The circle shape.
|
|
13
|
+
*/
|
|
14
|
+
export const shapeCircle = Fn( ( [ coord = uv() ], { renderer, material } ) => {
|
|
15
|
+
|
|
16
|
+
const alpha = float( 1 ).toVar();
|
|
17
|
+
const len2 = lengthSq( coord.mul( 2 ).sub( 1 ) );
|
|
18
|
+
|
|
19
|
+
if ( material.alphaToCoverage && renderer.samples > 1 ) {
|
|
20
|
+
|
|
21
|
+
const dlen = float( len2.fwidth() ).toVar();
|
|
22
|
+
|
|
23
|
+
alpha.assign( smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus() );
|
|
24
|
+
|
|
25
|
+
} else {
|
|
26
|
+
|
|
27
|
+
len2.greaterThan( 1.0 ).discard();
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return alpha;
|
|
32
|
+
|
|
33
|
+
} );
|
package/src/nodes/tsl/TSLBase.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// TSL Base Syntax
|
|
3
3
|
|
|
4
4
|
export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
|
|
5
|
+
export * from '../core/ArrayNode.js'; // array(), .toArray()
|
|
5
6
|
export * from '../core/UniformNode.js'; // uniform()
|
|
6
|
-
export * from '../core/PropertyNode.js'; // property() <-> TODO:
|
|
7
|
+
export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
|
|
7
8
|
export * from '../core/AssignNode.js'; // .assign()
|
|
8
9
|
export * from '../code/FunctionCallNode.js'; // .call()
|
|
9
10
|
export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
|
|
@@ -11,7 +12,7 @@ export * from '../math/MathNode.js'; // abs(), floor(), ...
|
|
|
11
12
|
export * from '../math/ConditionalNode.js'; // select(), ...
|
|
12
13
|
export * from '../core/ContextNode.js'; // .context()
|
|
13
14
|
export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
|
|
14
|
-
export * from '../core/VaryingNode.js'; // varying()
|
|
15
|
+
export * from '../core/VaryingNode.js'; // varying(), vertexStage()
|
|
15
16
|
export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
|
|
16
17
|
export * from '../display/ToneMappingNode.js'; // .toToneMapping()
|
|
17
18
|
export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
|
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -6,9 +6,10 @@ import SplitNode from '../utils/SplitNode.js';
|
|
|
6
6
|
import SetNode from '../utils/SetNode.js';
|
|
7
7
|
import FlipNode from '../utils/FlipNode.js';
|
|
8
8
|
import ConstNode from '../core/ConstNode.js';
|
|
9
|
+
import MemberNode from '../utils/MemberNode.js';
|
|
9
10
|
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
/** @module TSLCore **/
|
|
12
13
|
|
|
13
14
|
let currentStack = null;
|
|
14
15
|
|
|
@@ -112,6 +113,12 @@ const shaderNodeHandler = {
|
|
|
112
113
|
|
|
113
114
|
return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
|
|
114
115
|
|
|
116
|
+
} else if ( /^get$/.test( prop ) === true ) {
|
|
117
|
+
|
|
118
|
+
// accessing properties
|
|
119
|
+
|
|
120
|
+
return ( value ) => nodeObject( new MemberNode( nodeObj, value ) );
|
|
121
|
+
|
|
115
122
|
}
|
|
116
123
|
|
|
117
124
|
}
|
|
@@ -261,6 +268,12 @@ class ShaderCallNodeInternal extends Node {
|
|
|
261
268
|
|
|
262
269
|
}
|
|
263
270
|
|
|
271
|
+
getMemberType( builder, name ) {
|
|
272
|
+
|
|
273
|
+
return this.getOutputNode( builder ).getMemberType( builder, name );
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
264
277
|
call( builder ) {
|
|
265
278
|
|
|
266
279
|
const { shaderNode, inputNodes } = this;
|
|
@@ -305,7 +318,7 @@ class ShaderCallNodeInternal extends Node {
|
|
|
305
318
|
} else {
|
|
306
319
|
|
|
307
320
|
const jsFunc = shaderNode.jsFunc;
|
|
308
|
-
const outputNode = inputNodes !== null ? jsFunc( inputNodes, builder ) : jsFunc( builder );
|
|
321
|
+
const outputNode = inputNodes !== null || jsFunc.length > 1 ? jsFunc( inputNodes || [], builder ) : jsFunc( builder );
|
|
309
322
|
|
|
310
323
|
result = nodeObject( outputNode );
|
|
311
324
|
|
|
@@ -553,6 +566,13 @@ export const Fn = ( jsFunc, nodeType ) => {
|
|
|
553
566
|
|
|
554
567
|
};
|
|
555
568
|
|
|
569
|
+
/**
|
|
570
|
+
* @function
|
|
571
|
+
* @deprecated since r168. Use {@link Fn} instead.
|
|
572
|
+
*
|
|
573
|
+
* @param {...any} params
|
|
574
|
+
* @returns {Function}
|
|
575
|
+
*/
|
|
556
576
|
export const tslFn = ( ...params ) => { // @deprecated, r168
|
|
557
577
|
|
|
558
578
|
console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
|
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Base class for representing element access on an array-like
|
|
5
|
+
* node data structures.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
*/
|
|
9
|
+
class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
|
|
4
10
|
|
|
5
11
|
static get type() {
|
|
6
12
|
|
|
7
13
|
return 'ArrayElementNode';
|
|
8
14
|
|
|
9
|
-
}
|
|
15
|
+
}
|
|
10
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs an array element node.
|
|
19
|
+
*
|
|
20
|
+
* @param {Node} node - The array-like node.
|
|
21
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
22
|
+
*/
|
|
11
23
|
constructor( node, indexNode ) {
|
|
12
24
|
|
|
13
25
|
super();
|
|
14
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The array-like node.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node}
|
|
31
|
+
*/
|
|
15
32
|
this.node = node;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The index node that defines the element access.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.indexNode = indexNode;
|
|
17
40
|
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {Boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
18
48
|
this.isArrayElementNode = true;
|
|
19
49
|
|
|
20
50
|
}
|
|
21
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This method is overwritten since the node type is inferred from the array-like node.
|
|
54
|
+
*
|
|
55
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
56
|
+
* @return {String} The node type.
|
|
57
|
+
*/
|
|
22
58
|
getNodeType( builder ) {
|
|
23
59
|
|
|
24
60
|
return this.node.getElementType( builder );
|
|
@@ -30,7 +66,7 @@ class ArrayElementNode extends Node {
|
|
|
30
66
|
const nodeSnippet = this.node.build( builder );
|
|
31
67
|
const indexSnippet = this.indexNode.build( builder, 'uint' );
|
|
32
68
|
|
|
33
|
-
return `${nodeSnippet}[ ${indexSnippet} ]`;
|
|
69
|
+
return `${ nodeSnippet }[ ${ indexSnippet } ]`;
|
|
34
70
|
|
|
35
71
|
}
|
|
36
72
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
5
|
+
* It represents a convert operation during the shader generation process
|
|
6
|
+
* meaning it converts the data type of a node to a target data type.
|
|
7
|
+
*
|
|
8
|
+
* @augments Node
|
|
9
|
+
*/
|
|
3
10
|
class ConvertNode extends Node {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,15 +15,39 @@ class ConvertNode extends Node {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new convert node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} node - The node which type should be converted.
|
|
22
|
+
* @param {String} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
23
|
+
*/
|
|
11
24
|
constructor( node, convertTo ) {
|
|
12
25
|
|
|
13
26
|
super();
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The node which type should be converted.
|
|
30
|
+
*
|
|
31
|
+
* @type {Node}
|
|
32
|
+
*/
|
|
15
33
|
this.node = node;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
37
|
+
*
|
|
38
|
+
* @type {String}
|
|
39
|
+
*/
|
|
16
40
|
this.convertTo = convertTo;
|
|
17
41
|
|
|
18
42
|
}
|
|
19
43
|
|
|
44
|
+
/**
|
|
45
|
+
* This method is overwritten since the implementation tries to infer the best
|
|
46
|
+
* matching type from the {@link ConvertNode#convertTo} property.
|
|
47
|
+
*
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
* @return {String} The node type.
|
|
50
|
+
*/
|
|
20
51
|
getNodeType( builder ) {
|
|
21
52
|
|
|
22
53
|
const requestType = this.node.getNodeType( builder );
|
|
@@ -6,8 +6,16 @@ import { cubeTexture } from '../accessors/CubeTextureNode.js';
|
|
|
6
6
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
7
7
|
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
|
|
8
8
|
|
|
9
|
+
/** @module CubeMapNode **/
|
|
10
|
+
|
|
9
11
|
const _cache = new WeakMap();
|
|
10
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This node can be used to automatically convert environment maps in the
|
|
15
|
+
* equirectangular format into the cube map format.
|
|
16
|
+
*
|
|
17
|
+
* @augments TempNode
|
|
18
|
+
*/
|
|
11
19
|
class CubeMapNode extends TempNode {
|
|
12
20
|
|
|
13
21
|
static get type() {
|
|
@@ -16,20 +24,59 @@ class CubeMapNode extends TempNode {
|
|
|
16
24
|
|
|
17
25
|
}
|
|
18
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new cube map node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
31
|
+
*/
|
|
19
32
|
constructor( envNode ) {
|
|
20
33
|
|
|
21
34
|
super( 'vec3' );
|
|
22
35
|
|
|
36
|
+
/**
|
|
37
|
+
* The node representing the environment map.
|
|
38
|
+
*
|
|
39
|
+
* @type {Node}
|
|
40
|
+
*/
|
|
23
41
|
this.envNode = envNode;
|
|
24
42
|
|
|
43
|
+
/**
|
|
44
|
+
* A reference to the internal cube texture.
|
|
45
|
+
*
|
|
46
|
+
* @private
|
|
47
|
+
* @type {CubeTexture}
|
|
48
|
+
* @default null
|
|
49
|
+
*/
|
|
25
50
|
this._cubeTexture = null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A reference to the internal cube texture node.
|
|
54
|
+
*
|
|
55
|
+
* @private
|
|
56
|
+
* @type {CubeTextureNode}
|
|
57
|
+
*/
|
|
26
58
|
this._cubeTextureNode = cubeTexture();
|
|
27
59
|
|
|
28
60
|
const defaultTexture = new CubeTexture();
|
|
29
61
|
defaultTexture.isRenderTargetTexture = true;
|
|
30
62
|
|
|
63
|
+
/**
|
|
64
|
+
* A default cube texture that acts as a placeholder.
|
|
65
|
+
* It is used when the conversion from equirectangular to cube
|
|
66
|
+
* map has not finished yet for a given texture.
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
* @type {CubeTexture}
|
|
70
|
+
*/
|
|
31
71
|
this._defaultTexture = defaultTexture;
|
|
32
72
|
|
|
73
|
+
/**
|
|
74
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
|
|
75
|
+
* the texture once per render in its {@link CubeMapNode#updateBefore} method.
|
|
76
|
+
*
|
|
77
|
+
* @type {String}
|
|
78
|
+
* @default 'render'
|
|
79
|
+
*/
|
|
33
80
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
34
81
|
|
|
35
82
|
}
|
|
@@ -117,6 +164,14 @@ class CubeMapNode extends TempNode {
|
|
|
117
164
|
|
|
118
165
|
export default CubeMapNode;
|
|
119
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Returns true if the given equirectangular image has been fully loaded
|
|
169
|
+
* and is ready for further processing.
|
|
170
|
+
*
|
|
171
|
+
* @private
|
|
172
|
+
* @param {Image} image - The equirectangular image to check.
|
|
173
|
+
* @return {Boolean} Whether the image is ready or not.
|
|
174
|
+
*/
|
|
120
175
|
function isEquirectangularMapReady( image ) {
|
|
121
176
|
|
|
122
177
|
if ( image === null || image === undefined ) return false;
|
|
@@ -125,6 +180,14 @@ function isEquirectangularMapReady( image ) {
|
|
|
125
180
|
|
|
126
181
|
}
|
|
127
182
|
|
|
183
|
+
/**
|
|
184
|
+
* This function is executed when `dispose()` is called on the equirectangular
|
|
185
|
+
* texture. In this case, the generated cube map with its render target
|
|
186
|
+
* is deleted as well.
|
|
187
|
+
*
|
|
188
|
+
* @private
|
|
189
|
+
* @param {Object} event - The event object.
|
|
190
|
+
*/
|
|
128
191
|
function onTextureDispose( event ) {
|
|
129
192
|
|
|
130
193
|
const texture = event.target;
|
|
@@ -143,6 +206,14 @@ function onTextureDispose( event ) {
|
|
|
143
206
|
|
|
144
207
|
}
|
|
145
208
|
|
|
209
|
+
/**
|
|
210
|
+
* This function makes sure the generated cube map uses the correct
|
|
211
|
+
* texture mapping that corresponds to the equirectangular original.
|
|
212
|
+
*
|
|
213
|
+
* @private
|
|
214
|
+
* @param {Texture} texture - The cube texture.
|
|
215
|
+
* @param {Number} mapping - The original texture mapping.
|
|
216
|
+
*/
|
|
146
217
|
function mapTextureMapping( texture, mapping ) {
|
|
147
218
|
|
|
148
219
|
if ( mapping === EquirectangularReflectionMapping ) {
|
|
@@ -157,4 +228,11 @@ function mapTextureMapping( texture, mapping ) {
|
|
|
157
228
|
|
|
158
229
|
}
|
|
159
230
|
|
|
231
|
+
/**
|
|
232
|
+
* TSL function for creating a cube map node.
|
|
233
|
+
*
|
|
234
|
+
* @function
|
|
235
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
236
|
+
* @returns {CubeMapNode}
|
|
237
|
+
*/
|
|
160
238
|
export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
|
|
@@ -2,7 +2,23 @@ import { select } from '../math/ConditionalNode.js';
|
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
3
|
import { addMethodChaining } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module Discard **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents a `discard` shader operation in TSL.
|
|
9
|
+
*
|
|
10
|
+
* @method
|
|
11
|
+
* @param {ConditionalNode?} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.
|
|
12
|
+
* @return {Node} The `discard` expression.
|
|
13
|
+
*/
|
|
5
14
|
export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).append();
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Represents a `return` shader operation in TSL.
|
|
18
|
+
*
|
|
19
|
+
* @method
|
|
20
|
+
* @return {ExpressionNode} The `return` expression.
|
|
21
|
+
*/
|
|
6
22
|
export const Return = () => expression( 'return' ).append();
|
|
7
23
|
|
|
8
24
|
addMethodChaining( 'discard', Discard );
|