super-three 0.170.1 → 0.172.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/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- 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 +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -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 +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- 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 -1
- 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/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- 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 +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/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/SobelOperatorShader.js +1 -1
- 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 +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- 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/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- 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/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/InstancedPointsNodeMaterial.js +72 -19
- 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 +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- 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 +49 -0
- 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/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- 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 +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -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 +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -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/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 +24 -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 +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- 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 +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- 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 +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -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 +93 -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 +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -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 +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- 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 +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- 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 +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -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 +40 -0
- package/src/nodes/utils/Timer.js +19 -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 +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -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 +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -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 +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- 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 +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -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 +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -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 +189 -0
- 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 +327 -60
- 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-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -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 +59 -11
- 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 +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -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/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- 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
|
@@ -3,34 +3,96 @@ import ChainMap from '../ChainMap.js';
|
|
|
3
3
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
4
4
|
import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
|
|
5
5
|
import { NodeFrame } from '../../../nodes/Nodes.js';
|
|
6
|
-
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture,
|
|
6
|
+
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
|
|
7
7
|
|
|
8
8
|
import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
9
9
|
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const _outputNodeMap = new WeakMap();
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This renderer module manages node-related objects and is the
|
|
15
|
+
* primary interface between the renderer and the node system.
|
|
16
|
+
*
|
|
17
|
+
* @private
|
|
18
|
+
* @augments DataMap
|
|
19
|
+
*/
|
|
13
20
|
class Nodes extends DataMap {
|
|
14
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new nodes management component.
|
|
24
|
+
*
|
|
25
|
+
* @param {Renderer} renderer - The renderer.
|
|
26
|
+
* @param {Backend} backend - The renderer's backend.
|
|
27
|
+
*/
|
|
15
28
|
constructor( renderer, backend ) {
|
|
16
29
|
|
|
17
30
|
super();
|
|
18
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The renderer.
|
|
34
|
+
*
|
|
35
|
+
* @type {Renderer}
|
|
36
|
+
*/
|
|
19
37
|
this.renderer = renderer;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The renderer's backend.
|
|
41
|
+
*
|
|
42
|
+
* @type {Backend}
|
|
43
|
+
*/
|
|
20
44
|
this.backend = backend;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The node frame.
|
|
48
|
+
*
|
|
49
|
+
* @type {Renderer}
|
|
50
|
+
*/
|
|
21
51
|
this.nodeFrame = new NodeFrame();
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A cache for managing node builder states.
|
|
55
|
+
*
|
|
56
|
+
* @type {Map<Number,NodeBuilderState>}
|
|
57
|
+
*/
|
|
22
58
|
this.nodeBuilderCache = new Map();
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A cache for managing data cache key data.
|
|
62
|
+
*
|
|
63
|
+
* @type {ChainMap}
|
|
64
|
+
*/
|
|
23
65
|
this.callHashCache = new ChainMap();
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* A cache for managing node uniforms group data.
|
|
69
|
+
*
|
|
70
|
+
* @type {ChainMap}
|
|
71
|
+
*/
|
|
24
72
|
this.groupsData = new ChainMap();
|
|
25
73
|
|
|
74
|
+
/**
|
|
75
|
+
* A cache for managing node objects of
|
|
76
|
+
* scene properties like fog or environments.
|
|
77
|
+
*
|
|
78
|
+
* @type {Object<String,WeakMap>}
|
|
79
|
+
*/
|
|
80
|
+
this.cacheLib = {};
|
|
81
|
+
|
|
26
82
|
}
|
|
27
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Returns `true` if the given node uniforms group must be updated or not.
|
|
86
|
+
*
|
|
87
|
+
* @param {NodeUniformsGroup} nodeUniformsGroup - The node uniforms group.
|
|
88
|
+
* @return {Boolean} Whether the node uniforms group requires an update or not.
|
|
89
|
+
*/
|
|
28
90
|
updateGroup( nodeUniformsGroup ) {
|
|
29
91
|
|
|
30
92
|
const groupNode = nodeUniformsGroup.groupNode;
|
|
31
93
|
const name = groupNode.name;
|
|
32
94
|
|
|
33
|
-
// objectGroup is
|
|
95
|
+
// objectGroup is always updated
|
|
34
96
|
|
|
35
97
|
if ( name === objectGroup.name ) return true;
|
|
36
98
|
|
|
@@ -91,12 +153,24 @@ class Nodes extends DataMap {
|
|
|
91
153
|
|
|
92
154
|
}
|
|
93
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Returns the cache key for the given render object.
|
|
158
|
+
*
|
|
159
|
+
* @param {RenderObject} renderObject - The render object.
|
|
160
|
+
* @return {Number} The cache key.
|
|
161
|
+
*/
|
|
94
162
|
getForRenderCacheKey( renderObject ) {
|
|
95
163
|
|
|
96
164
|
return renderObject.initialCacheKey;
|
|
97
165
|
|
|
98
166
|
}
|
|
99
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Returns a node builder state for the given render object.
|
|
170
|
+
*
|
|
171
|
+
* @param {RenderObject} renderObject - The render object.
|
|
172
|
+
* @return {NodeBuilderState} The node builder state.
|
|
173
|
+
*/
|
|
100
174
|
getForRender( renderObject ) {
|
|
101
175
|
|
|
102
176
|
const renderObjectData = this.get( renderObject );
|
|
@@ -140,6 +214,12 @@ class Nodes extends DataMap {
|
|
|
140
214
|
|
|
141
215
|
}
|
|
142
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Deletes the given object from the internal data map
|
|
219
|
+
*
|
|
220
|
+
* @param {Any} object - The object to delete.
|
|
221
|
+
* @return {Object?} The deleted dictionary.
|
|
222
|
+
*/
|
|
143
223
|
delete( object ) {
|
|
144
224
|
|
|
145
225
|
if ( object.isRenderObject ) {
|
|
@@ -159,6 +239,12 @@ class Nodes extends DataMap {
|
|
|
159
239
|
|
|
160
240
|
}
|
|
161
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Returns a node builder state for the given compute node.
|
|
244
|
+
*
|
|
245
|
+
* @param {Node} computeNode - The compute node.
|
|
246
|
+
* @return {NodeBuilderState} The node builder state.
|
|
247
|
+
*/
|
|
162
248
|
getForCompute( computeNode ) {
|
|
163
249
|
|
|
164
250
|
const computeData = this.get( computeNode );
|
|
@@ -180,6 +266,13 @@ class Nodes extends DataMap {
|
|
|
180
266
|
|
|
181
267
|
}
|
|
182
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Creates a node builder state for the given node builder.
|
|
271
|
+
*
|
|
272
|
+
* @private
|
|
273
|
+
* @param {NodeBuilder} nodeBuilder - The node builder.
|
|
274
|
+
* @return {NodeBuilderState} The node builder state.
|
|
275
|
+
*/
|
|
183
276
|
_createNodeBuilderState( nodeBuilder ) {
|
|
184
277
|
|
|
185
278
|
return new NodeBuilderState(
|
|
@@ -197,24 +290,96 @@ class Nodes extends DataMap {
|
|
|
197
290
|
|
|
198
291
|
}
|
|
199
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Returns an environment node for the current configured
|
|
295
|
+
* scene environment.
|
|
296
|
+
*
|
|
297
|
+
* @param {Scene} scene - The scene.
|
|
298
|
+
* @return {Node} A node representing the current scene environment.
|
|
299
|
+
*/
|
|
200
300
|
getEnvironmentNode( scene ) {
|
|
201
301
|
|
|
202
|
-
|
|
302
|
+
this.updateEnvironment( scene );
|
|
303
|
+
|
|
304
|
+
let environmentNode = null;
|
|
305
|
+
|
|
306
|
+
if ( scene.environmentNode && scene.environmentNode.isNode ) {
|
|
307
|
+
|
|
308
|
+
environmentNode = scene.environmentNode;
|
|
309
|
+
|
|
310
|
+
} else {
|
|
311
|
+
|
|
312
|
+
const sceneData = this.get( scene );
|
|
313
|
+
|
|
314
|
+
if ( sceneData.environmentNode ) {
|
|
315
|
+
|
|
316
|
+
environmentNode = sceneData.environmentNode;
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return environmentNode;
|
|
203
323
|
|
|
204
324
|
}
|
|
205
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Returns a background node for the current configured
|
|
328
|
+
* scene background.
|
|
329
|
+
*
|
|
330
|
+
* @param {Scene} scene - The scene.
|
|
331
|
+
* @return {Node} A node representing the current scene background.
|
|
332
|
+
*/
|
|
206
333
|
getBackgroundNode( scene ) {
|
|
207
334
|
|
|
208
|
-
|
|
335
|
+
this.updateBackground( scene );
|
|
336
|
+
|
|
337
|
+
let backgroundNode = null;
|
|
338
|
+
|
|
339
|
+
if ( scene.backgroundNode && scene.backgroundNode.isNode ) {
|
|
340
|
+
|
|
341
|
+
backgroundNode = scene.backgroundNode;
|
|
342
|
+
|
|
343
|
+
} else {
|
|
344
|
+
|
|
345
|
+
const sceneData = this.get( scene );
|
|
346
|
+
|
|
347
|
+
if ( sceneData.backgroundNode ) {
|
|
348
|
+
|
|
349
|
+
backgroundNode = sceneData.backgroundNode;
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
return backgroundNode;
|
|
209
356
|
|
|
210
357
|
}
|
|
211
358
|
|
|
359
|
+
/**
|
|
360
|
+
* Returns a fog node for the current configured scene fog.
|
|
361
|
+
*
|
|
362
|
+
* @param {Scene} scene - The scene.
|
|
363
|
+
* @return {Node} A node representing the current scene fog.
|
|
364
|
+
*/
|
|
212
365
|
getFogNode( scene ) {
|
|
213
366
|
|
|
367
|
+
this.updateFog( scene );
|
|
368
|
+
|
|
214
369
|
return scene.fogNode || this.get( scene ).fogNode || null;
|
|
215
370
|
|
|
216
371
|
}
|
|
217
372
|
|
|
373
|
+
/**
|
|
374
|
+
* Returns a cache key for the given scene and lights node.
|
|
375
|
+
* This key is used by `RenderObject` as a part of the dynamic
|
|
376
|
+
* cache key (a key that must be checked every time the render
|
|
377
|
+
* objects is drawn).
|
|
378
|
+
*
|
|
379
|
+
* @param {Scene} scene - The scene.
|
|
380
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
381
|
+
* @return {Number} The cache key.
|
|
382
|
+
*/
|
|
218
383
|
getCacheKey( scene, lightsNode ) {
|
|
219
384
|
|
|
220
385
|
const chain = [ scene, lightsNode ];
|
|
@@ -248,20 +413,24 @@ class Nodes extends DataMap {
|
|
|
248
413
|
|
|
249
414
|
}
|
|
250
415
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
416
|
+
/**
|
|
417
|
+
* A boolean that indicates whether tone mapping should be enabled
|
|
418
|
+
* or not.
|
|
419
|
+
*
|
|
420
|
+
* @type {Boolean}
|
|
421
|
+
*/
|
|
259
422
|
get isToneMappingState() {
|
|
260
423
|
|
|
261
424
|
return this.renderer.getRenderTarget() ? false : true;
|
|
262
425
|
|
|
263
426
|
}
|
|
264
427
|
|
|
428
|
+
/**
|
|
429
|
+
* If a scene background is configured, this method makes sure to
|
|
430
|
+
* represent the background with a corresponding node-based implementation.
|
|
431
|
+
*
|
|
432
|
+
* @param {Scene} scene - The scene.
|
|
433
|
+
*/
|
|
265
434
|
updateBackground( scene ) {
|
|
266
435
|
|
|
267
436
|
const sceneData = this.get( scene );
|
|
@@ -273,41 +442,43 @@ class Nodes extends DataMap {
|
|
|
273
442
|
|
|
274
443
|
if ( sceneData.background !== background || forceUpdate ) {
|
|
275
444
|
|
|
276
|
-
|
|
445
|
+
const backgroundNode = this.getCacheNode( 'background', background, () => {
|
|
277
446
|
|
|
278
|
-
|
|
447
|
+
if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
|
|
279
448
|
|
|
280
|
-
|
|
449
|
+
if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
|
|
281
450
|
|
|
282
|
-
|
|
451
|
+
return pmremTexture( background );
|
|
283
452
|
|
|
284
|
-
|
|
453
|
+
} else {
|
|
285
454
|
|
|
286
|
-
|
|
455
|
+
let envMap;
|
|
287
456
|
|
|
288
|
-
|
|
457
|
+
if ( background.isCubeTexture === true ) {
|
|
289
458
|
|
|
290
|
-
|
|
459
|
+
envMap = cubeTexture( background );
|
|
291
460
|
|
|
292
|
-
|
|
461
|
+
} else {
|
|
293
462
|
|
|
294
|
-
|
|
463
|
+
envMap = texture( background );
|
|
295
464
|
|
|
296
|
-
|
|
465
|
+
}
|
|
297
466
|
|
|
298
|
-
|
|
467
|
+
return cubeMapNode( envMap );
|
|
299
468
|
|
|
300
|
-
|
|
469
|
+
}
|
|
301
470
|
|
|
302
|
-
|
|
471
|
+
} else if ( background.isTexture === true ) {
|
|
303
472
|
|
|
304
|
-
|
|
473
|
+
return texture( background, screenUV.flipY() ).setUpdateMatrix( true );
|
|
305
474
|
|
|
306
|
-
|
|
475
|
+
} else if ( background.isColor !== true ) {
|
|
307
476
|
|
|
308
|
-
|
|
477
|
+
console.error( 'WebGPUNodes: Unsupported background configuration.', background );
|
|
478
|
+
|
|
479
|
+
}
|
|
309
480
|
|
|
310
|
-
}
|
|
481
|
+
}, forceUpdate );
|
|
311
482
|
|
|
312
483
|
sceneData.backgroundNode = backgroundNode;
|
|
313
484
|
sceneData.background = background;
|
|
@@ -324,40 +495,75 @@ class Nodes extends DataMap {
|
|
|
324
495
|
|
|
325
496
|
}
|
|
326
497
|
|
|
498
|
+
/**
|
|
499
|
+
* This method is part of the caching of nodes which are used to represents the
|
|
500
|
+
* scene's background, fog or environment.
|
|
501
|
+
*
|
|
502
|
+
* @param {String} type - The type of object to cache.
|
|
503
|
+
* @param {Object} object - The object.
|
|
504
|
+
* @param {Function} callback - A callback that produces a node representation for the given object.
|
|
505
|
+
* @param {Boolean} [forceUpdate=false] - Whether an update should be enforced or not.
|
|
506
|
+
* @return {Node} The node representation.
|
|
507
|
+
*/
|
|
508
|
+
getCacheNode( type, object, callback, forceUpdate = false ) {
|
|
509
|
+
|
|
510
|
+
const nodeCache = this.cacheLib[ type ] || ( this.cacheLib[ type ] = new WeakMap() );
|
|
511
|
+
|
|
512
|
+
let node = nodeCache.get( object );
|
|
513
|
+
|
|
514
|
+
if ( node === undefined || forceUpdate ) {
|
|
515
|
+
|
|
516
|
+
node = callback();
|
|
517
|
+
nodeCache.set( object, node );
|
|
518
|
+
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
return node;
|
|
522
|
+
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* If a scene fog is configured, this method makes sure to
|
|
527
|
+
* represent the fog with a corresponding node-based implementation.
|
|
528
|
+
*
|
|
529
|
+
* @param {Scene} scene - The scene.
|
|
530
|
+
*/
|
|
327
531
|
updateFog( scene ) {
|
|
328
532
|
|
|
329
533
|
const sceneData = this.get( scene );
|
|
330
|
-
const
|
|
534
|
+
const sceneFog = scene.fog;
|
|
331
535
|
|
|
332
|
-
if (
|
|
536
|
+
if ( sceneFog ) {
|
|
333
537
|
|
|
334
|
-
if ( sceneData.fog !==
|
|
538
|
+
if ( sceneData.fog !== sceneFog ) {
|
|
335
539
|
|
|
336
|
-
|
|
540
|
+
const fogNode = this.getCacheNode( 'fog', sceneFog, () => {
|
|
337
541
|
|
|
338
|
-
|
|
542
|
+
if ( sceneFog.isFogExp2 ) {
|
|
339
543
|
|
|
340
|
-
|
|
341
|
-
|
|
544
|
+
const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
|
|
545
|
+
const density = reference( 'density', 'float', sceneFog ).setGroup( renderGroup );
|
|
342
546
|
|
|
343
|
-
|
|
547
|
+
return fog( color, densityFogFactor( density ) );
|
|
344
548
|
|
|
345
|
-
|
|
549
|
+
} else if ( sceneFog.isFog ) {
|
|
346
550
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
551
|
+
const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
|
|
552
|
+
const near = reference( 'near', 'float', sceneFog ).setGroup( renderGroup );
|
|
553
|
+
const far = reference( 'far', 'float', sceneFog ).setGroup( renderGroup );
|
|
350
554
|
|
|
351
|
-
|
|
555
|
+
return fog( color, rangeFogFactor( near, far ) );
|
|
556
|
+
|
|
557
|
+
} else {
|
|
352
558
|
|
|
353
|
-
|
|
559
|
+
console.error( 'THREE.Renderer: Unsupported fog configuration.', sceneFog );
|
|
354
560
|
|
|
355
|
-
|
|
561
|
+
}
|
|
356
562
|
|
|
357
|
-
}
|
|
563
|
+
} );
|
|
358
564
|
|
|
359
565
|
sceneData.fogNode = fogNode;
|
|
360
|
-
sceneData.fog =
|
|
566
|
+
sceneData.fog = sceneFog;
|
|
361
567
|
|
|
362
568
|
}
|
|
363
569
|
|
|
@@ -370,6 +576,12 @@ class Nodes extends DataMap {
|
|
|
370
576
|
|
|
371
577
|
}
|
|
372
578
|
|
|
579
|
+
/**
|
|
580
|
+
* If a scene environment is configured, this method makes sure to
|
|
581
|
+
* represent the environment with a corresponding node-based implementation.
|
|
582
|
+
*
|
|
583
|
+
* @param {Scene} scene - The scene.
|
|
584
|
+
*/
|
|
373
585
|
updateEnvironment( scene ) {
|
|
374
586
|
|
|
375
587
|
const sceneData = this.get( scene );
|
|
@@ -379,21 +591,23 @@ class Nodes extends DataMap {
|
|
|
379
591
|
|
|
380
592
|
if ( sceneData.environment !== environment ) {
|
|
381
593
|
|
|
382
|
-
|
|
594
|
+
const environmentNode = this.getCacheNode( 'environment', environment, () => {
|
|
595
|
+
|
|
596
|
+
if ( environment.isCubeTexture === true ) {
|
|
383
597
|
|
|
384
|
-
|
|
598
|
+
return cubeTexture( environment );
|
|
385
599
|
|
|
386
|
-
|
|
600
|
+
} else if ( environment.isTexture === true ) {
|
|
387
601
|
|
|
388
|
-
|
|
602
|
+
return texture( environment );
|
|
389
603
|
|
|
390
|
-
|
|
604
|
+
} else {
|
|
391
605
|
|
|
392
|
-
|
|
606
|
+
console.error( 'Nodes: Unsupported environment configuration.', environment );
|
|
393
607
|
|
|
394
|
-
|
|
608
|
+
}
|
|
395
609
|
|
|
396
|
-
}
|
|
610
|
+
} );
|
|
397
611
|
|
|
398
612
|
sceneData.environmentNode = environmentNode;
|
|
399
613
|
sceneData.environment = environment;
|
|
@@ -428,6 +642,11 @@ class Nodes extends DataMap {
|
|
|
428
642
|
|
|
429
643
|
}
|
|
430
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Returns the current output cache key.
|
|
647
|
+
*
|
|
648
|
+
* @return {String} The output cache key.
|
|
649
|
+
*/
|
|
431
650
|
getOutputCacheKey() {
|
|
432
651
|
|
|
433
652
|
const renderer = this.renderer;
|
|
@@ -436,27 +655,47 @@ class Nodes extends DataMap {
|
|
|
436
655
|
|
|
437
656
|
}
|
|
438
657
|
|
|
658
|
+
/**
|
|
659
|
+
* Checks if the output configuration (tone mapping and color space) for
|
|
660
|
+
* the given target has changed.
|
|
661
|
+
*
|
|
662
|
+
* @param {Texture} outputTarget - The output target.
|
|
663
|
+
* @return {Boolean} Whether the output configuration has changed or not.
|
|
664
|
+
*/
|
|
439
665
|
hasOutputChange( outputTarget ) {
|
|
440
666
|
|
|
441
|
-
const cacheKey =
|
|
667
|
+
const cacheKey = _outputNodeMap.get( outputTarget );
|
|
442
668
|
|
|
443
669
|
return cacheKey !== this.getOutputCacheKey();
|
|
444
670
|
|
|
445
671
|
}
|
|
446
672
|
|
|
447
|
-
|
|
673
|
+
/**
|
|
674
|
+
* Returns a node that represents the output configuration (tone mapping and
|
|
675
|
+
* color space) for the current target.
|
|
676
|
+
*
|
|
677
|
+
* @param {Texture} outputTarget - The output target.
|
|
678
|
+
* @return {Node} The output node.
|
|
679
|
+
*/
|
|
680
|
+
getOutputNode( outputTarget ) {
|
|
448
681
|
|
|
449
682
|
const renderer = this.renderer;
|
|
450
683
|
const cacheKey = this.getOutputCacheKey();
|
|
451
684
|
|
|
452
|
-
const output = texture(
|
|
685
|
+
const output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
453
686
|
|
|
454
|
-
|
|
687
|
+
_outputNodeMap.set( outputTarget, cacheKey );
|
|
455
688
|
|
|
456
689
|
return output;
|
|
457
690
|
|
|
458
691
|
}
|
|
459
692
|
|
|
693
|
+
/**
|
|
694
|
+
* Triggers the call of `updateBefore()` methods
|
|
695
|
+
* for all nodes of the given render object.
|
|
696
|
+
*
|
|
697
|
+
* @param {RenderObject} renderObject - The render object.
|
|
698
|
+
*/
|
|
460
699
|
updateBefore( renderObject ) {
|
|
461
700
|
|
|
462
701
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
@@ -471,6 +710,12 @@ class Nodes extends DataMap {
|
|
|
471
710
|
|
|
472
711
|
}
|
|
473
712
|
|
|
713
|
+
/**
|
|
714
|
+
* Triggers the call of `updateAfter()` methods
|
|
715
|
+
* for all nodes of the given render object.
|
|
716
|
+
*
|
|
717
|
+
* @param {RenderObject} renderObject - The render object.
|
|
718
|
+
*/
|
|
474
719
|
updateAfter( renderObject ) {
|
|
475
720
|
|
|
476
721
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
@@ -485,6 +730,12 @@ class Nodes extends DataMap {
|
|
|
485
730
|
|
|
486
731
|
}
|
|
487
732
|
|
|
733
|
+
/**
|
|
734
|
+
* Triggers the call of `update()` methods
|
|
735
|
+
* for all nodes of the given compute node.
|
|
736
|
+
*
|
|
737
|
+
* @param {Node} computeNode - The compute node.
|
|
738
|
+
*/
|
|
488
739
|
updateForCompute( computeNode ) {
|
|
489
740
|
|
|
490
741
|
const nodeFrame = this.getNodeFrame();
|
|
@@ -498,6 +749,12 @@ class Nodes extends DataMap {
|
|
|
498
749
|
|
|
499
750
|
}
|
|
500
751
|
|
|
752
|
+
/**
|
|
753
|
+
* Triggers the call of `update()` methods
|
|
754
|
+
* for all nodes of the given compute node.
|
|
755
|
+
*
|
|
756
|
+
* @param {RenderObject} renderObject - The render object.
|
|
757
|
+
*/
|
|
501
758
|
updateForRender( renderObject ) {
|
|
502
759
|
|
|
503
760
|
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
@@ -511,6 +768,12 @@ class Nodes extends DataMap {
|
|
|
511
768
|
|
|
512
769
|
}
|
|
513
770
|
|
|
771
|
+
/**
|
|
772
|
+
* Returns `true` if the given render object requires a refresh.
|
|
773
|
+
*
|
|
774
|
+
* @param {RenderObject} renderObject - The render object.
|
|
775
|
+
* @return {Boolean} Whether the given render object requires a refresh or not.
|
|
776
|
+
*/
|
|
514
777
|
needsRefresh( renderObject ) {
|
|
515
778
|
|
|
516
779
|
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
@@ -520,12 +783,16 @@ class Nodes extends DataMap {
|
|
|
520
783
|
|
|
521
784
|
}
|
|
522
785
|
|
|
786
|
+
/**
|
|
787
|
+
* Frees the intenral resources.
|
|
788
|
+
*/
|
|
523
789
|
dispose() {
|
|
524
790
|
|
|
525
791
|
super.dispose();
|
|
526
792
|
|
|
527
793
|
this.nodeFrame = new NodeFrame();
|
|
528
794
|
this.nodeBuilderCache = new Map();
|
|
795
|
+
this.cacheLib = {};
|
|
529
796
|
|
|
530
797
|
}
|
|
531
798
|
|
|
@@ -286,7 +286,7 @@ vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in m
|
|
|
286
286
|
float result = LTC_ClippedSphereFormFactor( vectorFormFactor );
|
|
287
287
|
|
|
288
288
|
/*
|
|
289
|
-
// alternate method of adjusting for horizon clipping (see
|
|
289
|
+
// alternate method of adjusting for horizon clipping (see reference)
|
|
290
290
|
// refactoring required
|
|
291
291
|
float len = length( vectorFormFactor );
|
|
292
292
|
float z = vectorFormFactor.z / len;
|
|
@@ -351,7 +351,7 @@ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 no
|
|
|
351
351
|
|
|
352
352
|
#endif
|
|
353
353
|
|
|
354
|
-
// This is a curve-fit
|
|
354
|
+
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
355
355
|
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
|
|
356
356
|
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
357
357
|
float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
|
|
@@ -123,7 +123,7 @@ export default /* glsl */`
|
|
|
123
123
|
// Direction of refracted light.
|
|
124
124
|
vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
|
|
125
125
|
|
|
126
|
-
// Compute rotation-
|
|
126
|
+
// Compute rotation-independent scaling of the model matrix.
|
|
127
127
|
vec3 modelScale;
|
|
128
128
|
modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
|
|
129
129
|
modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
|
|
@@ -184,13 +184,13 @@ export default /* glsl */`
|
|
|
184
184
|
|
|
185
185
|
vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );
|
|
186
186
|
vec3 refractedRayExit = position + transmissionRay;
|
|
187
|
-
|
|
187
|
+
|
|
188
188
|
// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
|
|
189
189
|
vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
|
|
190
190
|
vec2 refractionCoords = ndcPos.xy / ndcPos.w;
|
|
191
191
|
refractionCoords += 1.0;
|
|
192
192
|
refractionCoords /= 2.0;
|
|
193
|
-
|
|
193
|
+
|
|
194
194
|
// Sample framebuffer to get pixel the refracted ray hits.
|
|
195
195
|
vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );
|
|
196
196
|
transmittedLight[ i ] = transmissionSample[ i ];
|
|
@@ -201,9 +201,9 @@ export default /* glsl */`
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
transmittedLight.a /= 3.0;
|
|
204
|
-
|
|
204
|
+
|
|
205
205
|
#else
|
|
206
|
-
|
|
206
|
+
|
|
207
207
|
vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
|
|
208
208
|
vec3 refractedRayExit = position + transmissionRay;
|
|
209
209
|
|
|
@@ -216,7 +216,7 @@ export default /* glsl */`
|
|
|
216
216
|
// Sample framebuffer to get pixel the refracted ray hits.
|
|
217
217
|
transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
|
|
218
218
|
transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );
|
|
219
|
-
|
|
219
|
+
|
|
220
220
|
#endif
|
|
221
221
|
|
|
222
222
|
vec3 attenuatedColor = transmittance * transmittedLight.rgb;
|
|
@@ -224,7 +224,7 @@ export default /* glsl */`
|
|
|
224
224
|
// Get the specular component.
|
|
225
225
|
vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
|
|
226
226
|
|
|
227
|
-
// As less light is transmitted, the opacity should be increased. This simple approximation does a decent job
|
|
227
|
+
// As less light is transmitted, the opacity should be increased. This simple approximation does a decent job
|
|
228
228
|
// of modulating a CSS background, and has no effect when the buffer is opaque, due to a solid object or clear color.
|
|
229
229
|
float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
|
|
230
230
|
|