super-three 0.171.0 → 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
|
@@ -9,6 +9,11 @@ import { MeshPhongMaterial } from '../MeshPhongMaterial.js';
|
|
|
9
9
|
|
|
10
10
|
const _defaultValues = /*@__PURE__*/ new MeshPhongMaterial();
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Node material version of `MeshPhongMaterial`.
|
|
14
|
+
*
|
|
15
|
+
* @augments NodeMaterial
|
|
16
|
+
*/
|
|
12
17
|
class MeshPhongNodeMaterial extends NodeMaterial {
|
|
13
18
|
|
|
14
19
|
static get type() {
|
|
@@ -17,15 +22,56 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
17
22
|
|
|
18
23
|
}
|
|
19
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new mesh lambert node material.
|
|
27
|
+
*
|
|
28
|
+
* @param {Object?} parameters - The configuration parameter.
|
|
29
|
+
*/
|
|
20
30
|
constructor( parameters ) {
|
|
21
31
|
|
|
22
32
|
super();
|
|
23
33
|
|
|
34
|
+
/**
|
|
35
|
+
* This flag can be used for type testing.
|
|
36
|
+
*
|
|
37
|
+
* @type {Boolean}
|
|
38
|
+
* @readonly
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
24
41
|
this.isMeshPhongNodeMaterial = true;
|
|
25
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Set to `true` because phong materials react on lights.
|
|
45
|
+
*
|
|
46
|
+
* @type {Boolean}
|
|
47
|
+
* @default true
|
|
48
|
+
*/
|
|
26
49
|
this.lights = true;
|
|
27
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The shininess of phong materials is by default inferred from the `shininess`
|
|
53
|
+
* property. This node property allows to overwrite the default
|
|
54
|
+
* and define the shininess with a node instead.
|
|
55
|
+
*
|
|
56
|
+
* If you don't want to overwrite the shininess but modify the existing
|
|
57
|
+
* value instead, use {@link module:MaterialNode.materialShininess}.
|
|
58
|
+
*
|
|
59
|
+
* @type {Node<float>?}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
28
62
|
this.shininessNode = null;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The specular color of phong materials is by default inferred from the
|
|
66
|
+
* `specular` property. This node property allows to overwrite the default
|
|
67
|
+
* and define the specular color with a node instead.
|
|
68
|
+
*
|
|
69
|
+
* If you don't want to overwrite the specular color but modify the existing
|
|
70
|
+
* value instead, use {@link module:MaterialNode.materialSpecular}.
|
|
71
|
+
*
|
|
72
|
+
* @type {Node<vec3>?}
|
|
73
|
+
* @default null
|
|
74
|
+
*/
|
|
29
75
|
this.specularNode = null;
|
|
30
76
|
|
|
31
77
|
this.setDefaultValues( _defaultValues );
|
|
@@ -34,6 +80,13 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
34
80
|
|
|
35
81
|
}
|
|
36
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Overwritten since this type of material uses {@link BasicEnvironmentNode}
|
|
85
|
+
* to implement the default environment mapping.
|
|
86
|
+
*
|
|
87
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
88
|
+
* @return {BasicEnvironmentNode<vec3>?} The environment node.
|
|
89
|
+
*/
|
|
37
90
|
setupEnvironment( builder ) {
|
|
38
91
|
|
|
39
92
|
const envNode = super.setupEnvironment( builder );
|
|
@@ -42,13 +95,23 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
42
95
|
|
|
43
96
|
}
|
|
44
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Setups the lighting model.
|
|
100
|
+
*
|
|
101
|
+
* @return {PhongLightingModel} The lighting model.
|
|
102
|
+
*/
|
|
45
103
|
setupLightingModel( /*builder*/ ) {
|
|
46
104
|
|
|
47
105
|
return new PhongLightingModel();
|
|
48
106
|
|
|
49
107
|
}
|
|
50
108
|
|
|
51
|
-
|
|
109
|
+
/**
|
|
110
|
+
* Setups the phong specific node variables.
|
|
111
|
+
*
|
|
112
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
113
|
+
*/
|
|
114
|
+
setupVariants( /*builder*/ ) {
|
|
52
115
|
|
|
53
116
|
// SHININESS
|
|
54
117
|
|
|
@@ -11,6 +11,11 @@ import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
|
|
|
11
11
|
|
|
12
12
|
const _defaultValues = /*@__PURE__*/ new MeshPhysicalMaterial();
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Node material version of `MeshPhysicalMaterial`.
|
|
16
|
+
*
|
|
17
|
+
* @augments MeshStandardNodeMaterial
|
|
18
|
+
*/
|
|
14
19
|
class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
15
20
|
|
|
16
21
|
static get type() {
|
|
@@ -19,33 +24,243 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
19
24
|
|
|
20
25
|
}
|
|
21
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new mesh physical node material.
|
|
29
|
+
*
|
|
30
|
+
* @param {Object?} parameters - The configuration parameter.
|
|
31
|
+
*/
|
|
22
32
|
constructor( parameters ) {
|
|
23
33
|
|
|
24
34
|
super();
|
|
25
35
|
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {Boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
26
43
|
this.isMeshPhysicalNodeMaterial = true;
|
|
27
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The clearcoat of physical materials is by default inferred from the `clearcoat`
|
|
47
|
+
* and `clearcoatMap` properties. This node property allows to overwrite the default
|
|
48
|
+
* and define the clearcoat with a node instead.
|
|
49
|
+
*
|
|
50
|
+
* If you don't want to overwrite the clearcoat but modify the existing
|
|
51
|
+
* value instead, use {@link module:MaterialNode.materialClearcoat}.
|
|
52
|
+
*
|
|
53
|
+
* @type {Node<float>?}
|
|
54
|
+
* @default null
|
|
55
|
+
*/
|
|
28
56
|
this.clearcoatNode = null;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The clearcoat roughness of physical materials is by default inferred from the `clearcoatRoughness`
|
|
60
|
+
* and `clearcoatRoughnessMap` properties. This node property allows to overwrite the default
|
|
61
|
+
* and define the clearcoat roughness with a node instead.
|
|
62
|
+
*
|
|
63
|
+
* If you don't want to overwrite the clearcoat roughness but modify the existing
|
|
64
|
+
* value instead, use {@link module:MaterialNode.materialClearcoatRoughness}.
|
|
65
|
+
*
|
|
66
|
+
* @type {Node<float>?}
|
|
67
|
+
* @default null
|
|
68
|
+
*/
|
|
29
69
|
this.clearcoatRoughnessNode = null;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The clearcoat normal of physical materials is by default inferred from the `clearcoatNormalMap`
|
|
73
|
+
* property. This node property allows to overwrite the default
|
|
74
|
+
* and define the clearcoat normal with a node instead.
|
|
75
|
+
*
|
|
76
|
+
* If you don't want to overwrite the clearcoat normal but modify the existing
|
|
77
|
+
* value instead, use {@link module:MaterialNode.materialClearcoatNormal}.
|
|
78
|
+
*
|
|
79
|
+
* @type {Node<vec3>?}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
30
82
|
this.clearcoatNormalNode = null;
|
|
31
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The sheen of physical materials is by default inferred from the `sheen`, `sheenColor`
|
|
86
|
+
* and `sheenColorMap` properties. This node property allows to overwrite the default
|
|
87
|
+
* and define the sheen with a node instead.
|
|
88
|
+
*
|
|
89
|
+
* If you don't want to overwrite the sheen but modify the existing
|
|
90
|
+
* value instead, use {@link module:MaterialNode.materialSheen}.
|
|
91
|
+
*
|
|
92
|
+
* @type {Node<vec3>?}
|
|
93
|
+
* @default null
|
|
94
|
+
*/
|
|
32
95
|
this.sheenNode = null;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The sheen roughness of physical materials is by default inferred from the `sheenRoughness` and
|
|
99
|
+
* `sheenRoughnessMap` properties. This node property allows to overwrite the default
|
|
100
|
+
* and define the sheen roughness with a node instead.
|
|
101
|
+
*
|
|
102
|
+
* If you don't want to overwrite the sheen roughness but modify the existing
|
|
103
|
+
* value instead, use {@link module:MaterialNode.materialSheenRoughness}.
|
|
104
|
+
*
|
|
105
|
+
* @type {Node<float>?}
|
|
106
|
+
* @default null
|
|
107
|
+
*/
|
|
33
108
|
this.sheenRoughnessNode = null;
|
|
34
109
|
|
|
110
|
+
/**
|
|
111
|
+
* The iridescence of physical materials is by default inferred from the `iridescence`
|
|
112
|
+
* property. This node property allows to overwrite the default
|
|
113
|
+
* and define the iridescence with a node instead.
|
|
114
|
+
*
|
|
115
|
+
* If you don't want to overwrite the iridescence but modify the existing
|
|
116
|
+
* value instead, use {@link module:MaterialNode.materialIridescence}.
|
|
117
|
+
*
|
|
118
|
+
* @type {Node<float>?}
|
|
119
|
+
* @default null
|
|
120
|
+
*/
|
|
35
121
|
this.iridescenceNode = null;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The iridescence IOR of physical materials is by default inferred from the `iridescenceIOR`
|
|
125
|
+
* property. This node property allows to overwrite the default
|
|
126
|
+
* and define the iridescence IOR with a node instead.
|
|
127
|
+
*
|
|
128
|
+
* If you don't want to overwrite the iridescence IOR but modify the existing
|
|
129
|
+
* value instead, use {@link module:MaterialNode.materialIridescenceIOR}.
|
|
130
|
+
*
|
|
131
|
+
* @type {Node<float>?}
|
|
132
|
+
* @default null
|
|
133
|
+
*/
|
|
36
134
|
this.iridescenceIORNode = null;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessRange`
|
|
138
|
+
* and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
|
|
139
|
+
* and define the iridescence thickness with a node instead.
|
|
140
|
+
*
|
|
141
|
+
* If you don't want to overwrite the iridescence thickness but modify the existing
|
|
142
|
+
* value instead, use {@link module:MaterialNode.materialIridescenceThickness}.
|
|
143
|
+
*
|
|
144
|
+
* @type {Node<float>?}
|
|
145
|
+
* @default null
|
|
146
|
+
*/
|
|
37
147
|
this.iridescenceThicknessNode = null;
|
|
38
148
|
|
|
149
|
+
/**
|
|
150
|
+
* The specular intensity of physical materials is by default inferred from the `specularIntensity`
|
|
151
|
+
* and `specularIntensityMap` properties. This node property allows to overwrite the default
|
|
152
|
+
* and define the specular intensity with a node instead.
|
|
153
|
+
*
|
|
154
|
+
* If you don't want to overwrite the specular intensity but modify the existing
|
|
155
|
+
* value instead, use {@link module:MaterialNode.materialSpecularIntensity}.
|
|
156
|
+
*
|
|
157
|
+
* @type {Node<float>?}
|
|
158
|
+
* @default null
|
|
159
|
+
*/
|
|
39
160
|
this.specularIntensityNode = null;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The specular color of physical materials is by default inferred from the `specularColor`
|
|
164
|
+
* and `specularColorMap` properties. This node property allows to overwrite the default
|
|
165
|
+
* and define the specular color with a node instead.
|
|
166
|
+
*
|
|
167
|
+
* If you don't want to overwrite the specular color but modify the existing
|
|
168
|
+
* value instead, use {@link module:MaterialNode.materialSpecularColor}.
|
|
169
|
+
*
|
|
170
|
+
* @type {Node<vec3>?}
|
|
171
|
+
* @default null
|
|
172
|
+
*/
|
|
40
173
|
this.specularColorNode = null;
|
|
41
174
|
|
|
175
|
+
/**
|
|
176
|
+
* The ior of physical materials is by default inferred from the `ior`
|
|
177
|
+
* property. This node property allows to overwrite the default
|
|
178
|
+
* and define the ior with a node instead.
|
|
179
|
+
*
|
|
180
|
+
* If you don't want to overwrite the ior but modify the existing
|
|
181
|
+
* value instead, use {@link module:MaterialNode.materialIOR}.
|
|
182
|
+
*
|
|
183
|
+
* @type {Node<float>?}
|
|
184
|
+
* @default null
|
|
185
|
+
*/
|
|
42
186
|
this.iorNode = null;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* The transmission of physical materials is by default inferred from the `transmission` and
|
|
190
|
+
* `transmissionMap` properties. This node property allows to overwrite the default
|
|
191
|
+
* and define the transmission with a node instead.
|
|
192
|
+
*
|
|
193
|
+
* If you don't want to overwrite the transmission but modify the existing
|
|
194
|
+
* value instead, use {@link module:MaterialNode.materialTransmission}.
|
|
195
|
+
*
|
|
196
|
+
* @type {Node<float>?}
|
|
197
|
+
* @default null
|
|
198
|
+
*/
|
|
43
199
|
this.transmissionNode = null;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* The thickness of physical materials is by default inferred from the `thickness` and
|
|
203
|
+
* `thicknessMap` properties. This node property allows to overwrite the default
|
|
204
|
+
* and define the thickness with a node instead.
|
|
205
|
+
*
|
|
206
|
+
* If you don't want to overwrite the thickness but modify the existing
|
|
207
|
+
* value instead, use {@link module:MaterialNode.materialThickness}.
|
|
208
|
+
*
|
|
209
|
+
* @type {Node<float>?}
|
|
210
|
+
* @default null
|
|
211
|
+
*/
|
|
44
212
|
this.thicknessNode = null;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The attenuation distance of physical materials is by default inferred from the
|
|
216
|
+
* `attenuationDistance` property. This node property allows to overwrite the default
|
|
217
|
+
* and define the attenuation distance with a node instead.
|
|
218
|
+
*
|
|
219
|
+
* If you don't want to overwrite the attenuation distance but modify the existing
|
|
220
|
+
* value instead, use {@link module:MaterialNode.materialAttenuationDistance}.
|
|
221
|
+
*
|
|
222
|
+
* @type {Node<float>?}
|
|
223
|
+
* @default null
|
|
224
|
+
*/
|
|
45
225
|
this.attenuationDistanceNode = null;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* The attenuation color of physical materials is by default inferred from the
|
|
229
|
+
* `attenuationColor` property. This node property allows to overwrite the default
|
|
230
|
+
* and define the attenuation color with a node instead.
|
|
231
|
+
*
|
|
232
|
+
* If you don't want to overwrite the attenuation color but modify the existing
|
|
233
|
+
* value instead, use {@link module:MaterialNode.materialAttenuationColor}.
|
|
234
|
+
*
|
|
235
|
+
* @type {Node<vec3>?}
|
|
236
|
+
* @default null
|
|
237
|
+
*/
|
|
46
238
|
this.attenuationColorNode = null;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* The dispersion of physical materials is by default inferred from the
|
|
242
|
+
* `dispersion` property. This node property allows to overwrite the default
|
|
243
|
+
* and define the dispersion with a node instead.
|
|
244
|
+
*
|
|
245
|
+
* If you don't want to overwrite the dispersion but modify the existing
|
|
246
|
+
* value instead, use {@link module:MaterialNode.materialDispersion}.
|
|
247
|
+
*
|
|
248
|
+
* @type {Node<float>?}
|
|
249
|
+
* @default null
|
|
250
|
+
*/
|
|
47
251
|
this.dispersionNode = null;
|
|
48
252
|
|
|
253
|
+
/**
|
|
254
|
+
* The anisotropy of physical materials is by default inferred from the
|
|
255
|
+
* `anisotropy` property. This node property allows to overwrite the default
|
|
256
|
+
* and define the anisotropy with a node instead.
|
|
257
|
+
*
|
|
258
|
+
* If you don't want to overwrite the anisotropy but modify the existing
|
|
259
|
+
* value instead, use {@link module:MaterialNode.materialAnisotropy}.
|
|
260
|
+
*
|
|
261
|
+
* @type {Node<float>?}
|
|
262
|
+
* @default null
|
|
263
|
+
*/
|
|
49
264
|
this.anisotropyNode = null;
|
|
50
265
|
|
|
51
266
|
this.setDefaultValues( _defaultValues );
|
|
@@ -54,42 +269,81 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
54
269
|
|
|
55
270
|
}
|
|
56
271
|
|
|
272
|
+
/**
|
|
273
|
+
* Whether the lighting model should use clearcoat or not.
|
|
274
|
+
*
|
|
275
|
+
* @type {Boolean}
|
|
276
|
+
* @default true
|
|
277
|
+
*/
|
|
57
278
|
get useClearcoat() {
|
|
58
279
|
|
|
59
280
|
return this.clearcoat > 0 || this.clearcoatNode !== null;
|
|
60
281
|
|
|
61
282
|
}
|
|
62
283
|
|
|
284
|
+
/**
|
|
285
|
+
* Whether the lighting model should use iridescence or not.
|
|
286
|
+
*
|
|
287
|
+
* @type {Boolean}
|
|
288
|
+
* @default true
|
|
289
|
+
*/
|
|
63
290
|
get useIridescence() {
|
|
64
291
|
|
|
65
292
|
return this.iridescence > 0 || this.iridescenceNode !== null;
|
|
66
293
|
|
|
67
294
|
}
|
|
68
295
|
|
|
296
|
+
/**
|
|
297
|
+
* Whether the lighting model should use sheen or not.
|
|
298
|
+
*
|
|
299
|
+
* @type {Boolean}
|
|
300
|
+
* @default true
|
|
301
|
+
*/
|
|
69
302
|
get useSheen() {
|
|
70
303
|
|
|
71
304
|
return this.sheen > 0 || this.sheenNode !== null;
|
|
72
305
|
|
|
73
306
|
}
|
|
74
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Whether the lighting model should use anisotropy or not.
|
|
310
|
+
*
|
|
311
|
+
* @type {Boolean}
|
|
312
|
+
* @default true
|
|
313
|
+
*/
|
|
75
314
|
get useAnisotropy() {
|
|
76
315
|
|
|
77
316
|
return this.anisotropy > 0 || this.anisotropyNode !== null;
|
|
78
317
|
|
|
79
318
|
}
|
|
80
319
|
|
|
320
|
+
/**
|
|
321
|
+
* Whether the lighting model should use transmission or not.
|
|
322
|
+
*
|
|
323
|
+
* @type {Boolean}
|
|
324
|
+
* @default true
|
|
325
|
+
*/
|
|
81
326
|
get useTransmission() {
|
|
82
327
|
|
|
83
328
|
return this.transmission > 0 || this.transmissionNode !== null;
|
|
84
329
|
|
|
85
330
|
}
|
|
86
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Whether the lighting model should use dispersion or not.
|
|
334
|
+
*
|
|
335
|
+
* @type {Boolean}
|
|
336
|
+
* @default true
|
|
337
|
+
*/
|
|
87
338
|
get useDispersion() {
|
|
88
339
|
|
|
89
340
|
return this.dispersion > 0 || this.dispersionNode !== null;
|
|
90
341
|
|
|
91
342
|
}
|
|
92
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Setups the specular related node variables.
|
|
346
|
+
*/
|
|
93
347
|
setupSpecular() {
|
|
94
348
|
|
|
95
349
|
const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
|
|
@@ -100,12 +354,22 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
100
354
|
|
|
101
355
|
}
|
|
102
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Setups the lighting model.
|
|
359
|
+
*
|
|
360
|
+
* @return {PhysicalLightingModel} The lighting model.
|
|
361
|
+
*/
|
|
103
362
|
setupLightingModel( /*builder*/ ) {
|
|
104
363
|
|
|
105
364
|
return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion );
|
|
106
365
|
|
|
107
366
|
}
|
|
108
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Setups the physical specific node variables.
|
|
370
|
+
*
|
|
371
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
372
|
+
*/
|
|
109
373
|
setupVariants( builder ) {
|
|
110
374
|
|
|
111
375
|
super.setupVariants( builder );
|
|
@@ -201,6 +465,11 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
201
465
|
|
|
202
466
|
}
|
|
203
467
|
|
|
468
|
+
/**
|
|
469
|
+
* Setups the clearcoat normal node.
|
|
470
|
+
*
|
|
471
|
+
* @return {Node<vec3>} The clearcoat noraml.
|
|
472
|
+
*/
|
|
204
473
|
setupClearcoatNormal() {
|
|
205
474
|
|
|
206
475
|
return this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;
|
|
@@ -4,16 +4,49 @@ import { transformedNormalView } from '../../nodes/accessors/Normal.js';
|
|
|
4
4
|
import { positionViewDirection } from '../../nodes/accessors/Position.js';
|
|
5
5
|
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
constructor( useClearcoat, useSheen, useIridescence, useSSS ) {
|
|
7
|
+
/** @module MeshSSSNodeMaterial **/
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Represents the lighting model for {@link MeshSSSNodeMaterial}.
|
|
11
|
+
*
|
|
12
|
+
* @augments PhysicalLightingModel
|
|
13
|
+
*/
|
|
14
|
+
class SSSLightingModel extends PhysicalLightingModel {
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new physical lighting model.
|
|
18
|
+
*
|
|
19
|
+
* @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
|
|
20
|
+
* @param {Boolean} [sheen=false] - Whether sheen is supported or not.
|
|
21
|
+
* @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
|
|
22
|
+
* @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
|
|
23
|
+
* @param {Boolean} [transmission=false] - Whether transmission is supported or not.
|
|
24
|
+
* @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
25
|
+
* @param {Boolean} [sss=false] - Whether SSS is supported or not.
|
|
26
|
+
*/
|
|
27
|
+
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, sss = false ) {
|
|
28
|
+
|
|
29
|
+
super( clearcoat, sheen, iridescence, anisotropy, transmission, dispersion );
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Whether the lighting model should use SSS or not.
|
|
33
|
+
*
|
|
34
|
+
* @type {Boolean}
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
this.useSSS = sss;
|
|
14
38
|
|
|
15
39
|
}
|
|
16
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Extends the default implementation with a SSS term.
|
|
43
|
+
*
|
|
44
|
+
* Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]{@link https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/}
|
|
45
|
+
*
|
|
46
|
+
* @param {Object} input - The input data.
|
|
47
|
+
* @param {StackNode} stack - The current stack.
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
*/
|
|
17
50
|
direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
|
|
18
51
|
|
|
19
52
|
if ( this.useSSS === true ) {
|
|
@@ -36,6 +69,12 @@ class SSSLightingModel extends PhysicalLightingModel {
|
|
|
36
69
|
|
|
37
70
|
}
|
|
38
71
|
|
|
72
|
+
/**
|
|
73
|
+
* This node material is an experimental extension of {@link MeshPhysicalNodeMaterial}
|
|
74
|
+
* that implements a Subsurface scattering (SSS) term.
|
|
75
|
+
*
|
|
76
|
+
* @augments MeshPhysicalNodeMaterial
|
|
77
|
+
*/
|
|
39
78
|
class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
|
|
40
79
|
|
|
41
80
|
static get type() {
|
|
@@ -44,28 +83,80 @@ class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
|
|
|
44
83
|
|
|
45
84
|
}
|
|
46
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Constructs a new mesh SSS node material.
|
|
88
|
+
*
|
|
89
|
+
* @param {Object?} parameters - The configuration parameter.
|
|
90
|
+
*/
|
|
47
91
|
constructor( parameters ) {
|
|
48
92
|
|
|
49
93
|
super( parameters );
|
|
50
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Represents the thickness color.
|
|
97
|
+
*
|
|
98
|
+
* @type {Node<vec3>?}
|
|
99
|
+
* @default null
|
|
100
|
+
*/
|
|
51
101
|
this.thicknessColorNode = null;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Represents the distortion factor.
|
|
105
|
+
*
|
|
106
|
+
* @type {Node<float>?}
|
|
107
|
+
*/
|
|
52
108
|
this.thicknessDistortionNode = float( 0.1 );
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Represents the thickness ambient factor.
|
|
112
|
+
*
|
|
113
|
+
* @type {Node<float>?}
|
|
114
|
+
*/
|
|
53
115
|
this.thicknessAmbientNode = float( 0.0 );
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Represents the thickness attenuation.
|
|
119
|
+
*
|
|
120
|
+
* @type {Node<float>?}
|
|
121
|
+
*/
|
|
54
122
|
this.thicknessAttenuationNode = float( .1 );
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Represents the thickness power.
|
|
126
|
+
*
|
|
127
|
+
* @type {Node<float>?}
|
|
128
|
+
*/
|
|
55
129
|
this.thicknessPowerNode = float( 2.0 );
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Represents the thickness scale.
|
|
133
|
+
*
|
|
134
|
+
* @type {Node<float>?}
|
|
135
|
+
*/
|
|
56
136
|
this.thicknessScaleNode = float( 10.0 );
|
|
57
137
|
|
|
58
138
|
}
|
|
59
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Whether the lighting model should use SSS or not.
|
|
142
|
+
*
|
|
143
|
+
* @type {Boolean}
|
|
144
|
+
* @default true
|
|
145
|
+
*/
|
|
60
146
|
get useSSS() {
|
|
61
147
|
|
|
62
148
|
return this.thicknessColorNode !== null;
|
|
63
149
|
|
|
64
150
|
}
|
|
65
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Setups the lighting model.
|
|
154
|
+
*
|
|
155
|
+
* @return {SSSLightingModel} The lighting model.
|
|
156
|
+
*/
|
|
66
157
|
setupLightingModel( /*builder*/ ) {
|
|
67
158
|
|
|
68
|
-
return new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useSSS );
|
|
159
|
+
return new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useSSS );
|
|
69
160
|
|
|
70
161
|
}
|
|
71
162
|
|