@plastic-software/three 0.181.3 → 0.183.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 +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- 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 +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -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/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- 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 +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- 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 +1 -1
- 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 +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- 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 +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -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 +61 -4
- 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/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- 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/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -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 +3 -3
- 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 -20
- 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/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/TRAANode.js +273 -125
- 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/math/Bayer.js +40 -1
- 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/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- 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/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/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- 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 +98 -12
- 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 +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- 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/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- 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 +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- 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/ViewportTextureNode.js +21 -4
- 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 +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- 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 +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- 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/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- 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/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- 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/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- 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/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- 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 +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- 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_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -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_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- 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 +3 -3
- 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 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -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 +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -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/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -5,12 +5,15 @@ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
|
|
|
5
5
|
import { expression } from '../code/ExpressionNode.js';
|
|
6
6
|
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
7
7
|
import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
|
|
8
|
+
import { step } from '../math/MathNode.js';
|
|
8
9
|
import { NodeUpdateType } from '../core/constants.js';
|
|
9
10
|
|
|
10
|
-
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
|
+
import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
12
|
|
|
12
13
|
import { Texture } from '../../textures/Texture.js';
|
|
13
|
-
import { warn } from '../../utils.js';
|
|
14
|
+
import { warn, warnOnce } from '../../utils.js';
|
|
15
|
+
|
|
16
|
+
import NodeError from '../core/NodeError.js';
|
|
14
17
|
|
|
15
18
|
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
16
19
|
|
|
@@ -343,7 +346,7 @@ class TextureNode extends UniformNode {
|
|
|
343
346
|
|
|
344
347
|
if ( ! texture || texture.isTexture !== true ) {
|
|
345
348
|
|
|
346
|
-
throw new
|
|
349
|
+
throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
|
|
347
350
|
|
|
348
351
|
}
|
|
349
352
|
|
|
@@ -391,10 +394,40 @@ class TextureNode extends UniformNode {
|
|
|
391
394
|
|
|
392
395
|
//
|
|
393
396
|
|
|
397
|
+
let compareNode = null;
|
|
398
|
+
let compareStepNode = null;
|
|
399
|
+
|
|
400
|
+
if ( this.compareNode !== null ) {
|
|
401
|
+
|
|
402
|
+
if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
403
|
+
|
|
404
|
+
compareNode = this.compareNode;
|
|
405
|
+
|
|
406
|
+
} else {
|
|
407
|
+
|
|
408
|
+
const compareFunction = texture.compareFunction;
|
|
409
|
+
|
|
410
|
+
if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
411
|
+
|
|
412
|
+
compareStepNode = this.compareNode;
|
|
413
|
+
|
|
414
|
+
} else {
|
|
415
|
+
|
|
416
|
+
compareNode = this.compareNode;
|
|
417
|
+
|
|
418
|
+
warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
}
|
|
425
|
+
|
|
394
426
|
properties.uvNode = uvNode;
|
|
395
427
|
properties.levelNode = levelNode;
|
|
396
428
|
properties.biasNode = this.biasNode;
|
|
397
|
-
properties.compareNode =
|
|
429
|
+
properties.compareNode = compareNode;
|
|
430
|
+
properties.compareStepNode = compareStepNode;
|
|
398
431
|
properties.gradNode = this.gradNode;
|
|
399
432
|
properties.depthNode = this.depthNode;
|
|
400
433
|
properties.offsetNode = this.offsetNode;
|
|
@@ -503,17 +536,20 @@ class TextureNode extends UniformNode {
|
|
|
503
536
|
|
|
504
537
|
const nodeData = builder.getDataFromNode( this );
|
|
505
538
|
|
|
539
|
+
const nodeType = this.getNodeType( builder );
|
|
540
|
+
|
|
506
541
|
let propertyName = nodeData.propertyName;
|
|
507
542
|
|
|
508
543
|
if ( propertyName === undefined ) {
|
|
509
544
|
|
|
510
|
-
const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
|
|
545
|
+
const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, offsetNode } = properties;
|
|
511
546
|
|
|
512
547
|
const uvSnippet = this.generateUV( builder, uvNode );
|
|
513
548
|
const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
|
|
514
549
|
const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
|
|
515
550
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
516
551
|
const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
|
|
552
|
+
const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
|
|
517
553
|
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
518
554
|
const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
|
|
519
555
|
|
|
@@ -521,7 +557,23 @@ class TextureNode extends UniformNode {
|
|
|
521
557
|
|
|
522
558
|
propertyName = builder.getPropertyName( nodeVar );
|
|
523
559
|
|
|
524
|
-
|
|
560
|
+
let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
|
|
561
|
+
|
|
562
|
+
if ( compareStepSnippet !== null ) {
|
|
563
|
+
|
|
564
|
+
const compareFunction = texture.compareFunction;
|
|
565
|
+
|
|
566
|
+
if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
567
|
+
|
|
568
|
+
snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
|
|
569
|
+
|
|
570
|
+
} else {
|
|
571
|
+
|
|
572
|
+
snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
|
|
573
|
+
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
}
|
|
525
577
|
|
|
526
578
|
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
527
579
|
|
|
@@ -531,7 +583,6 @@ class TextureNode extends UniformNode {
|
|
|
531
583
|
}
|
|
532
584
|
|
|
533
585
|
let snippet = propertyName;
|
|
534
|
-
const nodeType = this.getNodeType( builder );
|
|
535
586
|
|
|
536
587
|
if ( builder.needsToWorkingColorSpace( texture ) ) {
|
|
537
588
|
|
|
@@ -572,21 +623,6 @@ class TextureNode extends UniformNode {
|
|
|
572
623
|
|
|
573
624
|
// @TODO: Move to TSL
|
|
574
625
|
|
|
575
|
-
/**
|
|
576
|
-
* @function
|
|
577
|
-
* @deprecated since r172. Use {@link TextureNode#sample} instead.
|
|
578
|
-
*
|
|
579
|
-
* @param {Node} uvNode - The uv node.
|
|
580
|
-
* @return {TextureNode} A texture node representing the texture sample.
|
|
581
|
-
*/
|
|
582
|
-
uv( uvNode ) { // @deprecated, r172
|
|
583
|
-
|
|
584
|
-
warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
|
|
585
|
-
|
|
586
|
-
return this.sample( uvNode );
|
|
587
|
-
|
|
588
|
-
}
|
|
589
|
-
|
|
590
626
|
/**
|
|
591
627
|
* Samples the texture with the given uv node.
|
|
592
628
|
*
|
|
@@ -315,6 +315,8 @@ class UniformArrayNode extends BufferNode {
|
|
|
315
315
|
this.bufferCount = length;
|
|
316
316
|
this.bufferType = paddedType;
|
|
317
317
|
|
|
318
|
+
this.update(); // initialize the buffer values
|
|
319
|
+
|
|
318
320
|
return super.setup( builder );
|
|
319
321
|
|
|
320
322
|
}
|
|
@@ -328,7 +330,7 @@ class UniformArrayNode extends BufferNode {
|
|
|
328
330
|
*/
|
|
329
331
|
element( indexNode ) {
|
|
330
332
|
|
|
331
|
-
return
|
|
333
|
+
return new UniformArrayElementNode( this, nodeObject( indexNode ) );
|
|
332
334
|
|
|
333
335
|
}
|
|
334
336
|
|
|
@@ -345,4 +347,4 @@ export default UniformArrayNode;
|
|
|
345
347
|
* @param {?string} [nodeType] - The data type of the array elements.
|
|
346
348
|
* @returns {UniformArrayNode}
|
|
347
349
|
*/
|
|
348
|
-
export const uniformArray = ( values, nodeType ) =>
|
|
350
|
+
export const uniformArray = ( values, nodeType ) => new UniformArrayNode( values, nodeType );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* A special type of reference node that allows to link values in
|
|
@@ -74,4 +73,4 @@ export default UserDataNode;
|
|
|
74
73
|
* @param {?Object} userData - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.
|
|
75
74
|
* @returns {UserDataNode}
|
|
76
75
|
*/
|
|
77
|
-
export const userData = ( name, inputType, userData ) =>
|
|
76
|
+
export const userData = ( name, inputType, userData ) => new UserDataNode( name, inputType, userData );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import AttributeNode from '../core/AttributeNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
import { Vector4 } from '../../math/Vector4.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -107,4 +106,4 @@ export default VertexColorNode;
|
|
|
107
106
|
* @param {number} [index=0] - The attribute index.
|
|
108
107
|
* @returns {VertexColorNode}
|
|
109
108
|
*/
|
|
110
|
-
export const vertexColor = ( index = 0 ) =>
|
|
109
|
+
export const vertexColor = ( index = 0 ) => new VertexColorNode( index );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import CodeNode from './CodeNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* This class represents a native shader function. It can be used to implement
|
|
@@ -170,7 +169,7 @@ const nativeFn = ( code, includes = [], language = '' ) => {
|
|
|
170
169
|
|
|
171
170
|
}
|
|
172
171
|
|
|
173
|
-
const functionNode =
|
|
172
|
+
const functionNode = new FunctionNode( code, includes, language );
|
|
174
173
|
|
|
175
174
|
const fn = ( ...params ) => functionNode.call( ...params );
|
|
176
175
|
fn.functionNode = functionNode;
|
|
@@ -81,7 +81,7 @@ class ArrayNode extends TempNode {
|
|
|
81
81
|
|
|
82
82
|
if ( this.nodeType === null ) {
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
return this.values[ 0 ].getNodeType( builder );
|
|
85
85
|
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -101,6 +101,25 @@ class ArrayNode extends TempNode {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Returns the type of a member variable.
|
|
106
|
+
*
|
|
107
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
108
|
+
* @param {string} name - The name of the member variable.
|
|
109
|
+
* @return {string} The type of the member variable.
|
|
110
|
+
*/
|
|
111
|
+
getMemberType( builder, name ) {
|
|
112
|
+
|
|
113
|
+
if ( this.nodeType === null ) {
|
|
114
|
+
|
|
115
|
+
return this.values[ 0 ].getMemberType( builder, name );
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return super.getMemberType( builder, name );
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
104
123
|
/**
|
|
105
124
|
* This method builds the output node and returns the resulting array as a shader string.
|
|
106
125
|
*
|
|
@@ -99,8 +99,8 @@ class AssignNode extends TempNode {
|
|
|
99
99
|
|
|
100
100
|
const scope = targetNode.getScope();
|
|
101
101
|
|
|
102
|
-
const
|
|
103
|
-
|
|
102
|
+
const scopeData = builder.getDataFromNode( scope );
|
|
103
|
+
scopeData.assign = true;
|
|
104
104
|
|
|
105
105
|
const properties = builder.getNodeProperties( this );
|
|
106
106
|
properties.sourceNode = sourceNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import {
|
|
2
|
+
import { varying } from '../tsl/TSLBase.js';
|
|
3
3
|
import { warn } from '../../utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -165,4 +165,4 @@ export default AttributeNode;
|
|
|
165
165
|
* @param {?string} [nodeType=null] - The node type.
|
|
166
166
|
* @returns {AttributeNode}
|
|
167
167
|
*/
|
|
168
|
-
export const attribute = ( name, nodeType = null ) =>
|
|
168
|
+
export const attribute = ( name, nodeType = null ) => new AttributeNode( name, nodeType );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { addMethodChaining
|
|
2
|
+
import { addMethodChaining } from '../tsl/TSLCore.js';
|
|
3
3
|
import { warn } from '../../utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,6 +9,12 @@ import { warn } from '../../utils.js';
|
|
|
9
9
|
*
|
|
10
10
|
* ```js
|
|
11
11
|
*node.context( { getUV: () => customCoord } );
|
|
12
|
+
*\// or
|
|
13
|
+
*material.contextNode = context( { getUV: () => customCoord } );
|
|
14
|
+
*\// or
|
|
15
|
+
*renderer.contextNode = context( { getUV: () => customCoord } );
|
|
16
|
+
*\// or
|
|
17
|
+
*scenePass.contextNode = context( { getUV: () => customCoord } );
|
|
12
18
|
*```
|
|
13
19
|
* @augments Node
|
|
14
20
|
*/
|
|
@@ -26,7 +32,7 @@ class ContextNode extends Node {
|
|
|
26
32
|
* @param {Node} node - The node whose context should be modified.
|
|
27
33
|
* @param {Object} [value={}] - The modified context data.
|
|
28
34
|
*/
|
|
29
|
-
constructor( node, value = {} ) {
|
|
35
|
+
constructor( node = null, value = {} ) {
|
|
30
36
|
|
|
31
37
|
super();
|
|
32
38
|
|
|
@@ -79,6 +85,29 @@ class ContextNode extends Node {
|
|
|
79
85
|
|
|
80
86
|
}
|
|
81
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Gathers the context data from all parent context nodes.
|
|
90
|
+
*
|
|
91
|
+
* @return {Object} The gathered context data.
|
|
92
|
+
*/
|
|
93
|
+
getFlowContextData() {
|
|
94
|
+
|
|
95
|
+
const children = [];
|
|
96
|
+
|
|
97
|
+
this.traverse( ( node ) => {
|
|
98
|
+
|
|
99
|
+
if ( node.isContextNode === true ) {
|
|
100
|
+
|
|
101
|
+
children.push( node.value );
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
} );
|
|
106
|
+
|
|
107
|
+
return Object.assign( {}, ...children );
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
82
111
|
/**
|
|
83
112
|
* This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.
|
|
84
113
|
*
|
|
@@ -133,11 +162,24 @@ export default ContextNode;
|
|
|
133
162
|
*
|
|
134
163
|
* @tsl
|
|
135
164
|
* @function
|
|
136
|
-
* @param {Node}
|
|
165
|
+
* @param {Node|Object} [nodeOrValue={}] - The node whose context should be modified or the modified context data.
|
|
137
166
|
* @param {Object} [value={}] - The modified context data.
|
|
138
167
|
* @returns {ContextNode}
|
|
139
168
|
*/
|
|
140
|
-
export const context =
|
|
169
|
+
export const context = ( nodeOrValue = null, value = {} ) => {
|
|
170
|
+
|
|
171
|
+
let node = nodeOrValue;
|
|
172
|
+
|
|
173
|
+
if ( node === null || node.isNode !== true ) {
|
|
174
|
+
|
|
175
|
+
value = node || value;
|
|
176
|
+
node = null;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return new ContextNode( node, value );
|
|
181
|
+
|
|
182
|
+
};
|
|
141
183
|
|
|
142
184
|
/**
|
|
143
185
|
* TSL function for defining a uniformFlow context value for a given node.
|
|
@@ -160,6 +202,61 @@ export const uniformFlow = ( node ) => context( node, { uniformFlow: true } );
|
|
|
160
202
|
*/
|
|
161
203
|
export const setName = ( node, name ) => context( node, { nodeName: name } );
|
|
162
204
|
|
|
205
|
+
/**
|
|
206
|
+
* TSL function for defining a built-in shadow context for a given node.
|
|
207
|
+
*
|
|
208
|
+
* @tsl
|
|
209
|
+
* @function
|
|
210
|
+
* @param {ShadowNode} shadowNode - The shadow node representing the light's shadow.
|
|
211
|
+
* @param {Light} light - The light associated with the shadow.
|
|
212
|
+
* @param {Node} [node=null] - The node whose context should be modified.
|
|
213
|
+
* @returns {ContextNode}
|
|
214
|
+
*/
|
|
215
|
+
export function builtinShadowContext( shadowNode, light, node = null ) {
|
|
216
|
+
|
|
217
|
+
return context( node, {
|
|
218
|
+
|
|
219
|
+
getShadow: ( { light: shadowLight, shadowColorNode } ) => {
|
|
220
|
+
|
|
221
|
+
if ( light === shadowLight ) {
|
|
222
|
+
|
|
223
|
+
return shadowColorNode.mul( shadowNode );
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return shadowColorNode;
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
} );
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* TSL function for defining a built-in ambient occlusion context for a given node.
|
|
237
|
+
*
|
|
238
|
+
* @tsl
|
|
239
|
+
* @function
|
|
240
|
+
* @param {Node} aoNode - The ambient occlusion value node to apply.
|
|
241
|
+
* @param {Node} [node=null] - The node whose context should be modified.
|
|
242
|
+
* @returns {ContextNode}
|
|
243
|
+
*/
|
|
244
|
+
export function builtinAOContext( aoNode, node = null ) {
|
|
245
|
+
|
|
246
|
+
return context( node, {
|
|
247
|
+
|
|
248
|
+
getAO: ( inputNode, { material } ) => {
|
|
249
|
+
|
|
250
|
+
if ( material.transparent === true ) return inputNode;
|
|
251
|
+
|
|
252
|
+
return inputNode !== null ? inputNode.mul( aoNode ) : aoNode;
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
} );
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
163
260
|
/**
|
|
164
261
|
* TSL function for defining a label context value for a given node.
|
|
165
262
|
*
|
|
@@ -182,3 +279,5 @@ addMethodChaining( 'context', context );
|
|
|
182
279
|
addMethodChaining( 'label', label );
|
|
183
280
|
addMethodChaining( 'uniformFlow', uniformFlow );
|
|
184
281
|
addMethodChaining( 'setName', setName );
|
|
282
|
+
addMethodChaining( 'builtinShadowContext', ( node, shadowNode, light ) => builtinShadowContext( shadowNode, light, node ) );
|
|
283
|
+
addMethodChaining( 'builtinAOContext', ( node, aoValue ) => builtinAOContext( aoValue, node ) );
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import OutputStructNode from './OutputStructNode.js';
|
|
2
2
|
import { nodeProxy, vec4 } from '../tsl/TSLBase.js';
|
|
3
|
+
import { MaterialBlending, NoBlending } from '../../constants.js';
|
|
4
|
+
import BlendMode from '../../renderers/common/BlendMode.js';
|
|
5
|
+
|
|
6
|
+
// Predefined blend modes for MRT nodes.
|
|
7
|
+
const _noBlending = /**@__PURE__*/ new BlendMode( NoBlending );
|
|
8
|
+
const _materialBlending = /**@__PURE__*/ new BlendMode( MaterialBlending );
|
|
3
9
|
|
|
4
10
|
/**
|
|
5
11
|
* Returns the MRT texture index for the given name.
|
|
@@ -31,7 +37,7 @@ export function getTextureIndex( textures, name ) {
|
|
|
31
37
|
* const mrtNode = mrt( {
|
|
32
38
|
* output: output,
|
|
33
39
|
* normal: normalView
|
|
34
|
-
* } )
|
|
40
|
+
* } ) ;
|
|
35
41
|
* ```
|
|
36
42
|
* The MRT output is defined as a dictionary.
|
|
37
43
|
*
|
|
@@ -63,6 +69,15 @@ class MRTNode extends OutputStructNode {
|
|
|
63
69
|
*/
|
|
64
70
|
this.outputNodes = outputNodes;
|
|
65
71
|
|
|
72
|
+
/**
|
|
73
|
+
* A dictionary storing the blend modes for each output.
|
|
74
|
+
*
|
|
75
|
+
* @type {Object<string, BlendMode>}
|
|
76
|
+
*/
|
|
77
|
+
this.blendModes = {
|
|
78
|
+
output: _materialBlending
|
|
79
|
+
};
|
|
80
|
+
|
|
66
81
|
/**
|
|
67
82
|
* This flag can be used for type testing.
|
|
68
83
|
*
|
|
@@ -74,6 +89,33 @@ class MRTNode extends OutputStructNode {
|
|
|
74
89
|
|
|
75
90
|
}
|
|
76
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Sets the blend mode for the given output name.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} name - The name of the output.
|
|
96
|
+
* @param {BlendMode} blend - The blending mode.
|
|
97
|
+
* @return {MRTNode} The current MRT node.
|
|
98
|
+
*/
|
|
99
|
+
setBlendMode( name, blend ) {
|
|
100
|
+
|
|
101
|
+
this.blendModes[ name ] = blend;
|
|
102
|
+
|
|
103
|
+
return this;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Returns the blend mode for the given output name.
|
|
109
|
+
*
|
|
110
|
+
* @param {string} name - The name of the output.
|
|
111
|
+
* @return {BlendMode} The blend mode.
|
|
112
|
+
*/
|
|
113
|
+
getBlendMode( name ) {
|
|
114
|
+
|
|
115
|
+
return this.blendModes[ name ] || _noBlending;
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
77
119
|
/**
|
|
78
120
|
* Returns `true` if the MRT node has an output with the given name.
|
|
79
121
|
*
|
|
@@ -107,8 +149,12 @@ class MRTNode extends OutputStructNode {
|
|
|
107
149
|
merge( mrtNode ) {
|
|
108
150
|
|
|
109
151
|
const outputs = { ...this.outputNodes, ...mrtNode.outputNodes };
|
|
152
|
+
const blendings = { ...this.blendModes, ...mrtNode.blendModes };
|
|
153
|
+
|
|
154
|
+
const mrtTarget = mrt( outputs );
|
|
155
|
+
mrtTarget.blendings = blendings;
|
|
110
156
|
|
|
111
|
-
return
|
|
157
|
+
return mrtTarget;
|
|
112
158
|
|
|
113
159
|
}
|
|
114
160
|
|
package/src/nodes/core/Node.js
CHANGED
|
@@ -5,6 +5,8 @@ import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
6
|
import { warn, error } from '../../utils.js';
|
|
7
7
|
|
|
8
|
+
import StackTrace from './StackTrace.js';
|
|
9
|
+
|
|
8
10
|
const _parentBuildStage = {
|
|
9
11
|
analyze: 'setup',
|
|
10
12
|
generate: 'analyze'
|
|
@@ -132,7 +134,7 @@ class Node extends EventDispatcher {
|
|
|
132
134
|
this._cacheKey = null;
|
|
133
135
|
|
|
134
136
|
/**
|
|
135
|
-
* The cache key
|
|
137
|
+
* The cache key's version.
|
|
136
138
|
*
|
|
137
139
|
* @private
|
|
138
140
|
* @type {number}
|
|
@@ -142,6 +144,20 @@ class Node extends EventDispatcher {
|
|
|
142
144
|
|
|
143
145
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
144
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The stack trace of the node for debugging purposes.
|
|
149
|
+
*
|
|
150
|
+
* @type {?string}
|
|
151
|
+
* @default null
|
|
152
|
+
*/
|
|
153
|
+
this.stackTrace = null;
|
|
154
|
+
|
|
155
|
+
if ( Node.captureStackTrace === true ) {
|
|
156
|
+
|
|
157
|
+
this.stackTrace = new StackTrace();
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
145
161
|
}
|
|
146
162
|
|
|
147
163
|
/**
|
|
@@ -770,7 +786,6 @@ class Node extends EventDispatcher {
|
|
|
770
786
|
|
|
771
787
|
//
|
|
772
788
|
|
|
773
|
-
builder.addNode( this );
|
|
774
789
|
builder.addChain( this );
|
|
775
790
|
|
|
776
791
|
/* Build stages expected results:
|
|
@@ -784,6 +799,8 @@ class Node extends EventDispatcher {
|
|
|
784
799
|
|
|
785
800
|
if ( buildStage === 'setup' ) {
|
|
786
801
|
|
|
802
|
+
builder.addNode( this );
|
|
803
|
+
|
|
787
804
|
this.updateReference( builder );
|
|
788
805
|
|
|
789
806
|
const properties = builder.getNodeProperties( this );
|
|
@@ -820,6 +837,8 @@ class Node extends EventDispatcher {
|
|
|
820
837
|
|
|
821
838
|
}
|
|
822
839
|
|
|
840
|
+
builder.addSequentialNode( this );
|
|
841
|
+
|
|
823
842
|
}
|
|
824
843
|
|
|
825
844
|
result = properties.outputNode;
|
|
@@ -889,7 +908,6 @@ class Node extends EventDispatcher {
|
|
|
889
908
|
}
|
|
890
909
|
|
|
891
910
|
builder.removeChain( this );
|
|
892
|
-
builder.addSequentialNode( this );
|
|
893
911
|
|
|
894
912
|
return result;
|
|
895
913
|
|
|
@@ -1080,4 +1098,12 @@ class Node extends EventDispatcher {
|
|
|
1080
1098
|
|
|
1081
1099
|
}
|
|
1082
1100
|
|
|
1101
|
+
/**
|
|
1102
|
+
* Enables or disables the automatic capturing of stack traces for nodes.
|
|
1103
|
+
*
|
|
1104
|
+
* @type {boolean}
|
|
1105
|
+
* @default false
|
|
1106
|
+
*/
|
|
1107
|
+
Node.captureStackTrace = false;
|
|
1108
|
+
|
|
1083
1109
|
export default Node;
|