@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
|
@@ -8,7 +8,7 @@ import ParameterNode from './ParameterNode.js';
|
|
|
8
8
|
import StructType from './StructType.js';
|
|
9
9
|
import FunctionNode from '../code/FunctionNode.js';
|
|
10
10
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
11
|
-
import { getTypeFromLength } from './NodeUtils.js';
|
|
11
|
+
import { getDataFromObject, getTypeFromLength, hashString } from './NodeUtils.js';
|
|
12
12
|
import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
|
|
13
13
|
|
|
14
14
|
import {
|
|
@@ -20,7 +20,6 @@ import { stack } from './StackNode.js';
|
|
|
20
20
|
import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
21
21
|
|
|
22
22
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
23
|
-
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
24
23
|
|
|
25
24
|
import BindGroup from '../../renderers/common/BindGroup.js';
|
|
26
25
|
|
|
@@ -35,7 +34,9 @@ import { warn, error } from '../../utils.js';
|
|
|
35
34
|
|
|
36
35
|
let _id = 0;
|
|
37
36
|
|
|
38
|
-
const
|
|
37
|
+
const _bindingGroupsCache = new WeakMap();
|
|
38
|
+
|
|
39
|
+
const sharedNodeData = new WeakMap();
|
|
39
40
|
|
|
40
41
|
const typeFromArray = new Map( [
|
|
41
42
|
[ Int8Array, 'int' ],
|
|
@@ -138,7 +139,10 @@ class NodeBuilder {
|
|
|
138
139
|
this.nodes = [];
|
|
139
140
|
|
|
140
141
|
/**
|
|
141
|
-
* A list of all sequential
|
|
142
|
+
* A list of all nodes the builder is processing in sequential order.
|
|
143
|
+
*
|
|
144
|
+
* This is used to determine the update order of nodes, which is important for
|
|
145
|
+
* {@link NodeUpdateType#UPDATE_BEFORE} and {@link NodeUpdateType#UPDATE_AFTER}.
|
|
142
146
|
*
|
|
143
147
|
* @type {Array<Node>}
|
|
144
148
|
*/
|
|
@@ -466,36 +470,26 @@ class NodeBuilder {
|
|
|
466
470
|
}
|
|
467
471
|
|
|
468
472
|
/**
|
|
469
|
-
* Whether the material is
|
|
473
|
+
* Whether the material is using flat shading or not.
|
|
470
474
|
*
|
|
471
|
-
* @
|
|
475
|
+
* @returns {boolean} Whether the material is using flat shading or not.
|
|
472
476
|
*/
|
|
473
|
-
|
|
477
|
+
isFlatShading() {
|
|
474
478
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
|
|
479
|
+
return this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;
|
|
478
480
|
|
|
479
481
|
}
|
|
480
482
|
|
|
481
483
|
/**
|
|
482
|
-
*
|
|
484
|
+
* Whether the material is opaque or not.
|
|
483
485
|
*
|
|
484
|
-
* @return {
|
|
486
|
+
* @return {boolean} Whether the material is opaque or not.
|
|
485
487
|
*/
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
let bindGroupsCache = rendererCache.get( this.renderer );
|
|
489
|
-
|
|
490
|
-
if ( bindGroupsCache === undefined ) {
|
|
491
|
-
|
|
492
|
-
bindGroupsCache = new ChainMap();
|
|
493
|
-
|
|
494
|
-
rendererCache.set( this.renderer, bindGroupsCache );
|
|
488
|
+
isOpaque() {
|
|
495
489
|
|
|
496
|
-
|
|
490
|
+
const material = this.material;
|
|
497
491
|
|
|
498
|
-
return
|
|
492
|
+
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
|
|
499
493
|
|
|
500
494
|
}
|
|
501
495
|
|
|
@@ -559,19 +553,21 @@ class NodeBuilder {
|
|
|
559
553
|
*/
|
|
560
554
|
_getBindGroup( groupName, bindings ) {
|
|
561
555
|
|
|
562
|
-
const
|
|
556
|
+
const groupNode = bindings[ 0 ].groupNode;
|
|
563
557
|
|
|
564
|
-
|
|
558
|
+
let sharedGroup = groupNode.shared;
|
|
565
559
|
|
|
566
|
-
|
|
560
|
+
if ( sharedGroup ) {
|
|
561
|
+
|
|
562
|
+
for ( let i = 1; i < bindings.length; i ++ ) {
|
|
567
563
|
|
|
568
|
-
|
|
564
|
+
if ( groupNode !== bindings[ i ].groupNode ) {
|
|
569
565
|
|
|
570
|
-
|
|
566
|
+
sharedGroup = false;
|
|
571
567
|
|
|
572
|
-
|
|
568
|
+
}
|
|
573
569
|
|
|
574
|
-
|
|
570
|
+
}
|
|
575
571
|
|
|
576
572
|
}
|
|
577
573
|
|
|
@@ -581,19 +577,59 @@ class NodeBuilder {
|
|
|
581
577
|
|
|
582
578
|
if ( sharedGroup ) {
|
|
583
579
|
|
|
584
|
-
|
|
580
|
+
let cacheKeyString = '';
|
|
581
|
+
|
|
582
|
+
for ( const binding of bindings ) {
|
|
583
|
+
|
|
584
|
+
if ( binding.isNodeUniformsGroup ) {
|
|
585
|
+
|
|
586
|
+
binding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );
|
|
587
|
+
|
|
588
|
+
for ( const uniform of binding.uniforms ) {
|
|
589
|
+
|
|
590
|
+
cacheKeyString += uniform.nodeUniform.node.id;
|
|
591
|
+
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
} else {
|
|
595
|
+
|
|
596
|
+
cacheKeyString += binding.nodeUniform.id;
|
|
597
|
+
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// TODO: Remove this hack ._currentRenderContext
|
|
603
|
+
|
|
604
|
+
const currentContext = this.renderer._currentRenderContext || this.renderer; // use renderer as fallback until we have a compute context
|
|
605
|
+
|
|
606
|
+
let bindingGroupsCache = _bindingGroupsCache.get( currentContext );
|
|
607
|
+
|
|
608
|
+
if ( bindingGroupsCache === undefined ) {
|
|
609
|
+
|
|
610
|
+
bindingGroupsCache = new Map();
|
|
611
|
+
|
|
612
|
+
_bindingGroupsCache.set( currentContext, bindingGroupsCache );
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
//
|
|
617
|
+
|
|
618
|
+
const cacheKey = hashString( cacheKeyString );
|
|
619
|
+
|
|
620
|
+
bindGroup = bindingGroupsCache.get( cacheKey );
|
|
585
621
|
|
|
586
622
|
if ( bindGroup === undefined ) {
|
|
587
623
|
|
|
588
|
-
bindGroup = new BindGroup( groupName,
|
|
624
|
+
bindGroup = new BindGroup( groupName, bindings, this.bindingsIndexes[ groupName ].group );
|
|
589
625
|
|
|
590
|
-
|
|
626
|
+
bindingGroupsCache.set( cacheKey, bindGroup );
|
|
591
627
|
|
|
592
628
|
}
|
|
593
629
|
|
|
594
630
|
} else {
|
|
595
631
|
|
|
596
|
-
bindGroup = new BindGroup( groupName,
|
|
632
|
+
bindGroup = new BindGroup( groupName, bindings, this.bindingsIndexes[ groupName ].group );
|
|
597
633
|
|
|
598
634
|
}
|
|
599
635
|
|
|
@@ -651,7 +687,16 @@ class NodeBuilder {
|
|
|
651
687
|
const uniforms = bindings[ shaderStage ][ groupName ];
|
|
652
688
|
|
|
653
689
|
const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
|
|
654
|
-
|
|
690
|
+
|
|
691
|
+
for ( const uniform of uniforms ) {
|
|
692
|
+
|
|
693
|
+
if ( groupUniforms.includes( uniform ) === false ) {
|
|
694
|
+
|
|
695
|
+
groupUniforms.push( uniform );
|
|
696
|
+
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
}
|
|
655
700
|
|
|
656
701
|
}
|
|
657
702
|
|
|
@@ -736,9 +781,16 @@ class NodeBuilder {
|
|
|
736
781
|
*/
|
|
737
782
|
addSequentialNode( node ) {
|
|
738
783
|
|
|
739
|
-
|
|
784
|
+
const updateBeforeType = node.getUpdateBeforeType();
|
|
785
|
+
const updateAfterType = node.getUpdateAfterType();
|
|
786
|
+
|
|
787
|
+
if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
|
|
788
|
+
|
|
789
|
+
if ( this.sequentialNodes.includes( node ) === false ) {
|
|
740
790
|
|
|
741
|
-
|
|
791
|
+
this.sequentialNodes.push( node );
|
|
792
|
+
|
|
793
|
+
}
|
|
742
794
|
|
|
743
795
|
}
|
|
744
796
|
|
|
@@ -807,6 +859,17 @@ class NodeBuilder {
|
|
|
807
859
|
|
|
808
860
|
}
|
|
809
861
|
|
|
862
|
+
/**
|
|
863
|
+
* Returns the maximum number of bytes available for uniform buffers.
|
|
864
|
+
*
|
|
865
|
+
* @return {number} The maximum number of bytes available for uniform buffers.
|
|
866
|
+
*/
|
|
867
|
+
getUniformBufferLimit() {
|
|
868
|
+
|
|
869
|
+
return 16384;
|
|
870
|
+
|
|
871
|
+
}
|
|
872
|
+
|
|
810
873
|
/**
|
|
811
874
|
* Adds the given node to the internal node chain.
|
|
812
875
|
* This is used to check recursive calls in node-graph.
|
|
@@ -951,8 +1014,13 @@ class NodeBuilder {
|
|
|
951
1014
|
const context = { ...this.context };
|
|
952
1015
|
|
|
953
1016
|
delete context.material;
|
|
1017
|
+
delete context.getUV;
|
|
1018
|
+
delete context.getOutput;
|
|
1019
|
+
delete context.getTextureLevel;
|
|
1020
|
+
delete context.getAO;
|
|
1021
|
+
delete context.getShadow;
|
|
954
1022
|
|
|
955
|
-
return
|
|
1023
|
+
return context;
|
|
956
1024
|
|
|
957
1025
|
}
|
|
958
1026
|
|
|
@@ -1224,9 +1292,9 @@ class NodeBuilder {
|
|
|
1224
1292
|
if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
|
|
1225
1293
|
else if ( type === 'bool' ) value = false;
|
|
1226
1294
|
else if ( type === 'color' ) value = new Color();
|
|
1227
|
-
else if ( type === 'vec2' ) value = new Vector2();
|
|
1228
|
-
else if ( type === 'vec3' ) value = new Vector3();
|
|
1229
|
-
else if ( type === 'vec4' ) value = new Vector4();
|
|
1295
|
+
else if ( type === 'vec2' || type === 'uvec2' || type === 'ivec2' ) value = new Vector2();
|
|
1296
|
+
else if ( type === 'vec3' || type === 'uvec3' || type === 'ivec3' ) value = new Vector3();
|
|
1297
|
+
else if ( type === 'vec4' || type === 'uvec4' || type === 'ivec4' ) value = new Vector4();
|
|
1230
1298
|
|
|
1231
1299
|
}
|
|
1232
1300
|
|
|
@@ -1777,7 +1845,7 @@ class NodeBuilder {
|
|
|
1777
1845
|
*/
|
|
1778
1846
|
getBufferAttributeFromNode( node, type ) {
|
|
1779
1847
|
|
|
1780
|
-
const nodeData = this.getDataFromNode( node );
|
|
1848
|
+
const nodeData = this.getDataFromNode( node, 'vertex' );
|
|
1781
1849
|
|
|
1782
1850
|
let bufferAttribute = nodeData.bufferAttribute;
|
|
1783
1851
|
|
|
@@ -2909,9 +2977,9 @@ class NodeBuilder {
|
|
|
2909
2977
|
|
|
2910
2978
|
this.setBuildStage( buildStage );
|
|
2911
2979
|
|
|
2912
|
-
if ( this.context.
|
|
2980
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
2913
2981
|
|
|
2914
|
-
this.flowNodeFromShaderStage( 'vertex', this.context.
|
|
2982
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
2915
2983
|
|
|
2916
2984
|
}
|
|
2917
2985
|
|
|
@@ -2951,6 +3019,26 @@ class NodeBuilder {
|
|
|
2951
3019
|
|
|
2952
3020
|
}
|
|
2953
3021
|
|
|
3022
|
+
/**
|
|
3023
|
+
* Returns shared data object for the given node.
|
|
3024
|
+
*
|
|
3025
|
+
* @param {Node} node - The node to get shared data from.
|
|
3026
|
+
* @return {Object} The shared data.
|
|
3027
|
+
*/
|
|
3028
|
+
getSharedDataFromNode( node ) {
|
|
3029
|
+
|
|
3030
|
+
let data = sharedNodeData.get( node );
|
|
3031
|
+
|
|
3032
|
+
if ( data === undefined ) {
|
|
3033
|
+
|
|
3034
|
+
data = {};
|
|
3035
|
+
|
|
3036
|
+
}
|
|
3037
|
+
|
|
3038
|
+
return data;
|
|
3039
|
+
|
|
3040
|
+
}
|
|
3041
|
+
|
|
2954
3042
|
/**
|
|
2955
3043
|
* Returns a uniform representation which is later used for UBO generation and rendering.
|
|
2956
3044
|
*
|
|
@@ -2960,16 +3048,31 @@ class NodeBuilder {
|
|
|
2960
3048
|
*/
|
|
2961
3049
|
getNodeUniform( uniformNode, type ) {
|
|
2962
3050
|
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
if (
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
3051
|
+
const nodeData = this.getSharedDataFromNode( uniformNode );
|
|
3052
|
+
|
|
3053
|
+
let node = nodeData.cache;
|
|
3054
|
+
|
|
3055
|
+
if ( node === undefined ) {
|
|
3056
|
+
|
|
3057
|
+
if ( type === 'float' || type === 'int' || type === 'uint' ) node = new NumberNodeUniform( uniformNode );
|
|
3058
|
+
else if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) node = new Vector2NodeUniform( uniformNode );
|
|
3059
|
+
else if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) node = new Vector3NodeUniform( uniformNode );
|
|
3060
|
+
else if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) node = new Vector4NodeUniform( uniformNode );
|
|
3061
|
+
else if ( type === 'color' ) node = new ColorNodeUniform( uniformNode );
|
|
3062
|
+
else if ( type === 'mat2' ) node = new Matrix2NodeUniform( uniformNode );
|
|
3063
|
+
else if ( type === 'mat3' ) node = new Matrix3NodeUniform( uniformNode );
|
|
3064
|
+
else if ( type === 'mat4' ) node = new Matrix4NodeUniform( uniformNode );
|
|
3065
|
+
else {
|
|
3066
|
+
|
|
3067
|
+
throw new Error( `Uniform "${ type }" not implemented.` );
|
|
3068
|
+
|
|
3069
|
+
}
|
|
3070
|
+
|
|
3071
|
+
nodeData.cache = node;
|
|
3072
|
+
|
|
3073
|
+
}
|
|
2971
3074
|
|
|
2972
|
-
|
|
3075
|
+
return node;
|
|
2973
3076
|
|
|
2974
3077
|
}
|
|
2975
3078
|
|
|
@@ -3076,6 +3179,20 @@ class NodeBuilder {
|
|
|
3076
3179
|
|
|
3077
3180
|
}
|
|
3078
3181
|
|
|
3182
|
+
/**
|
|
3183
|
+
* Returns `true` if data from the previous frame are required. Relevant
|
|
3184
|
+
* when computing motion vectors with {@link VelocityNode}.
|
|
3185
|
+
*
|
|
3186
|
+
* @return {boolean} Whether data from the previous frame are required or not.
|
|
3187
|
+
*/
|
|
3188
|
+
needsPreviousData() {
|
|
3189
|
+
|
|
3190
|
+
const mrt = this.renderer.getMRT();
|
|
3191
|
+
|
|
3192
|
+
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
|
|
3193
|
+
|
|
3194
|
+
}
|
|
3195
|
+
|
|
3079
3196
|
}
|
|
3080
3197
|
|
|
3081
3198
|
export default NodeBuilder;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for node-related errors, including stack trace information.
|
|
3
|
+
*/
|
|
4
|
+
class NodeError extends Error {
|
|
5
|
+
|
|
6
|
+
constructor( message, stackTrace = null ) {
|
|
7
|
+
|
|
8
|
+
super( message );
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The name of the error.
|
|
12
|
+
*
|
|
13
|
+
* @type {string}
|
|
14
|
+
*/
|
|
15
|
+
this.name = 'NodeError';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The stack trace associated with the error.
|
|
19
|
+
*
|
|
20
|
+
* @type {?StackTrace}
|
|
21
|
+
*/
|
|
22
|
+
this.stackTrace = stackTrace;
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default NodeError;
|
|
@@ -155,9 +155,13 @@ class NodeFrame {
|
|
|
155
155
|
|
|
156
156
|
if ( nodeUpdateBeforeMap.frameId !== this.frameId ) {
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
const previousFrameId = nodeUpdateBeforeMap.frameId;
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
nodeUpdateBeforeMap.frameId = this.frameId;
|
|
161
|
+
|
|
162
|
+
if ( node.updateBefore( this ) === false ) {
|
|
163
|
+
|
|
164
|
+
nodeUpdateBeforeMap.frameId = previousFrameId;
|
|
161
165
|
|
|
162
166
|
}
|
|
163
167
|
|
|
@@ -169,9 +173,13 @@ class NodeFrame {
|
|
|
169
173
|
|
|
170
174
|
if ( nodeUpdateBeforeMap.renderId !== this.renderId ) {
|
|
171
175
|
|
|
172
|
-
|
|
176
|
+
const previousRenderId = nodeUpdateBeforeMap.renderId;
|
|
177
|
+
|
|
178
|
+
nodeUpdateBeforeMap.renderId = this.renderId;
|
|
179
|
+
|
|
180
|
+
if ( node.updateBefore( this ) === false ) {
|
|
173
181
|
|
|
174
|
-
nodeUpdateBeforeMap.renderId =
|
|
182
|
+
nodeUpdateBeforeMap.renderId = previousRenderId;
|
|
175
183
|
|
|
176
184
|
}
|
|
177
185
|
|
|
@@ -5,7 +5,9 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
|
|
8
9
|
import { error } from '../../utils.js';
|
|
10
|
+
import StackTrace from '../core/StackTrace.js';
|
|
9
11
|
|
|
10
12
|
// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
|
|
11
13
|
// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
|
|
@@ -154,7 +156,7 @@ export function getLengthFromType( type ) {
|
|
|
154
156
|
if ( /mat3/.test( type ) ) return 9;
|
|
155
157
|
if ( /mat4/.test( type ) ) return 16;
|
|
156
158
|
|
|
157
|
-
error(
|
|
159
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
158
160
|
|
|
159
161
|
}
|
|
160
162
|
|
|
@@ -176,29 +178,29 @@ export function getMemoryLengthFromType( type ) {
|
|
|
176
178
|
if ( /mat3/.test( type ) ) return 12;
|
|
177
179
|
if ( /mat4/.test( type ) ) return 16;
|
|
178
180
|
|
|
179
|
-
error(
|
|
181
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
180
182
|
|
|
181
183
|
}
|
|
182
184
|
|
|
183
185
|
/**
|
|
184
|
-
* Returns the
|
|
186
|
+
* Returns the alignment requirement for the given data type.
|
|
185
187
|
*
|
|
186
188
|
* @private
|
|
187
189
|
* @method
|
|
188
190
|
* @param {string} type - The data type.
|
|
189
|
-
* @return {number} The
|
|
191
|
+
* @return {number} The alignment requirement in bytes.
|
|
190
192
|
*/
|
|
191
|
-
export function
|
|
193
|
+
export function getAlignmentFromType( type ) {
|
|
192
194
|
|
|
193
195
|
if ( /float|int|uint/.test( type ) ) return 4;
|
|
194
196
|
if ( /vec2/.test( type ) ) return 8;
|
|
195
197
|
if ( /vec3/.test( type ) ) return 16;
|
|
196
198
|
if ( /vec4/.test( type ) ) return 16;
|
|
197
199
|
if ( /mat2/.test( type ) ) return 8;
|
|
198
|
-
if ( /mat3/.test( type ) ) return
|
|
199
|
-
if ( /mat4/.test( type ) ) return
|
|
200
|
+
if ( /mat3/.test( type ) ) return 16;
|
|
201
|
+
if ( /mat4/.test( type ) ) return 16;
|
|
200
202
|
|
|
201
|
-
error(
|
|
203
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
202
204
|
|
|
203
205
|
}
|
|
204
206
|
|
|
@@ -42,11 +42,17 @@ class OutputStructNode extends Node {
|
|
|
42
42
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
getNodeType( builder ) {
|
|
45
|
+
getNodeType( /*builder*/ ) {
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
return 'OutputType';
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
generate( builder ) {
|
|
52
|
+
|
|
53
|
+
const nodeData = builder.getDataFromNode( this );
|
|
54
|
+
|
|
55
|
+
if ( nodeData.membersLayout === undefined ) {
|
|
50
56
|
|
|
51
57
|
const members = this.members;
|
|
52
58
|
const membersLayout = [];
|
|
@@ -60,16 +66,12 @@ class OutputStructNode extends Node {
|
|
|
60
66
|
|
|
61
67
|
}
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
nodeData.membersLayout = membersLayout;
|
|
70
|
+
nodeData.structType = builder.getOutputStructTypeFromNode( this, nodeData.membersLayout );
|
|
65
71
|
|
|
66
72
|
}
|
|
67
73
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
generate( builder ) {
|
|
74
|
+
//
|
|
73
75
|
|
|
74
76
|
const propertyName = builder.getOutputStructName();
|
|
75
77
|
const members = this.members;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
1
|
import { error } from '../../utils.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
3
3
|
import PropertyNode from './PropertyNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -56,7 +56,7 @@ class ParameterNode extends PropertyNode {
|
|
|
56
56
|
|
|
57
57
|
} else {
|
|
58
58
|
|
|
59
|
-
error( `TSL: Member "${ name }" not found in struct "${ type }"
|
|
59
|
+
error( `TSL: Member "${ name }" not found in struct "${ type }".`, new StackTrace() );
|
|
60
60
|
|
|
61
61
|
memberType = 'float';
|
|
62
62
|
|
|
@@ -91,4 +91,4 @@ export default ParameterNode;
|
|
|
91
91
|
* @param {?string} name - The name of the parameter in the shader.
|
|
92
92
|
* @returns {ParameterNode}
|
|
93
93
|
*/
|
|
94
|
-
export const parameter = ( type, name ) =>
|
|
94
|
+
export const parameter = ( type, name ) => new ParameterNode( type, name );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { nodeImmutable
|
|
2
|
+
import { nodeImmutable } from '../tsl/TSLCore.js';
|
|
3
3
|
import { hashString } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -113,7 +113,7 @@ export default PropertyNode;
|
|
|
113
113
|
* @param {?string} [name=null] - The name of the property in the shader.
|
|
114
114
|
* @returns {PropertyNode}
|
|
115
115
|
*/
|
|
116
|
-
export const property = ( type, name ) =>
|
|
116
|
+
export const property = ( type, name ) => new PropertyNode( type, name );
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
119
|
* TSL function for creating a varying property node.
|
|
@@ -124,7 +124,7 @@ export const property = ( type, name ) => nodeObject( new PropertyNode( type, na
|
|
|
124
124
|
* @param {?string} [name=null] - The name of the varying in the shader.
|
|
125
125
|
* @returns {PropertyNode}
|
|
126
126
|
*/
|
|
127
|
-
export const varyingProperty = ( type, name ) =>
|
|
127
|
+
export const varyingProperty = ( type, name ) => new PropertyNode( type, name, true );
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* TSL object that represents the shader variable `DiffuseColor`.
|
|
@@ -134,6 +134,14 @@ export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( t
|
|
|
134
134
|
*/
|
|
135
135
|
export const diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* TSL object that represents the shader variable `DiffuseContribution`.
|
|
139
|
+
*
|
|
140
|
+
* @tsl
|
|
141
|
+
* @type {PropertyNode<vec3>}
|
|
142
|
+
*/
|
|
143
|
+
export const diffuseContribution = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'DiffuseContribution' );
|
|
144
|
+
|
|
137
145
|
/**
|
|
138
146
|
* TSL object that represents the shader variable `EmissiveColor`.
|
|
139
147
|
*
|
|
@@ -254,6 +262,14 @@ export const anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'A
|
|
|
254
262
|
*/
|
|
255
263
|
export const specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
|
|
256
264
|
|
|
265
|
+
/**
|
|
266
|
+
* TSL object that represents the shader variable `SpecularColorBlended`.
|
|
267
|
+
*
|
|
268
|
+
* @tsl
|
|
269
|
+
* @type {PropertyNode<color>}
|
|
270
|
+
*/
|
|
271
|
+
export const specularColorBlended = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColorBlended' );
|
|
272
|
+
|
|
257
273
|
/**
|
|
258
274
|
* TSL object that represents the shader variable `SpecularF90`.
|
|
259
275
|
*
|