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
|
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
|
|
|
4
4
|
|
|
5
5
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
6
6
|
|
|
7
|
+
/** @module ViewportSharedTextureNode **/
|
|
8
|
+
|
|
7
9
|
let _sharedFramebuffer = null;
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* `ViewportTextureNode` creates an internal texture for each node instance. This module
|
|
13
|
+
* shares a texture across all instances of `ViewportSharedTextureNode`. It should
|
|
14
|
+
* be the first choice when using data of the default/screen framebuffer for performance reasons.
|
|
15
|
+
*
|
|
16
|
+
* @augments module:ViewportTextureNode~ViewportTextureNode
|
|
17
|
+
*/
|
|
9
18
|
class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
10
19
|
|
|
11
20
|
static get type() {
|
|
@@ -14,6 +23,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
|
14
23
|
|
|
15
24
|
}
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new viewport shared texture node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
30
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
31
|
+
*/
|
|
17
32
|
constructor( uvNode = screenUV, levelNode = null ) {
|
|
18
33
|
|
|
19
34
|
if ( _sharedFramebuffer === null ) {
|
|
@@ -36,4 +51,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
|
|
|
36
51
|
|
|
37
52
|
export default ViewportSharedTextureNode;
|
|
38
53
|
|
|
54
|
+
/**
|
|
55
|
+
* TSL function for creating a shared viewport texture node.
|
|
56
|
+
*
|
|
57
|
+
* @function
|
|
58
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
59
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
60
|
+
* @returns {ViewportSharedTextureNode}
|
|
61
|
+
*/
|
|
39
62
|
export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
|
|
@@ -7,8 +7,19 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
7
7
|
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
8
8
|
import { LinearMipmapLinearFilter } from '../../constants.js';
|
|
9
9
|
|
|
10
|
+
/** @module ViewportTextureNode **/
|
|
11
|
+
|
|
10
12
|
const _size = /*@__PURE__*/ new Vector2();
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* A special type of texture node which represents the data of the current viewport
|
|
16
|
+
* as a texture. The module extracts data from the current bound framebuffer with
|
|
17
|
+
* a copy operation so no extra render pass is required to produce the texture data
|
|
18
|
+
* (which is good for performance). `ViewportTextureNode` can be used as an input for a
|
|
19
|
+
* variety of effects like refractive or transmissive materials.
|
|
20
|
+
*
|
|
21
|
+
* @augments module:TextureNode~TextureNode
|
|
22
|
+
*/
|
|
12
23
|
class ViewportTextureNode extends TextureNode {
|
|
13
24
|
|
|
14
25
|
static get type() {
|
|
@@ -17,6 +28,13 @@ class ViewportTextureNode extends TextureNode {
|
|
|
17
28
|
|
|
18
29
|
}
|
|
19
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Constructs a new viewport texture node.
|
|
33
|
+
*
|
|
34
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
35
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
36
|
+
* @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
37
|
+
*/
|
|
20
38
|
constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
|
|
21
39
|
|
|
22
40
|
if ( framebufferTexture === null ) {
|
|
@@ -28,10 +46,30 @@ class ViewportTextureNode extends TextureNode {
|
|
|
28
46
|
|
|
29
47
|
super( framebufferTexture, uvNode, levelNode );
|
|
30
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Whether to generate mipmaps or not.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
31
55
|
this.generateMipmaps = false;
|
|
32
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This flag can be used for type testing.
|
|
59
|
+
*
|
|
60
|
+
* @type {Boolean}
|
|
61
|
+
* @readonly
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
33
64
|
this.isOutputTextureNode = true;
|
|
34
65
|
|
|
66
|
+
/**
|
|
67
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
|
|
68
|
+
* scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
|
|
69
|
+
*
|
|
70
|
+
* @type {String}
|
|
71
|
+
* @default 'frame'
|
|
72
|
+
*/
|
|
35
73
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
36
74
|
|
|
37
75
|
}
|
|
@@ -77,5 +115,24 @@ class ViewportTextureNode extends TextureNode {
|
|
|
77
115
|
|
|
78
116
|
export default ViewportTextureNode;
|
|
79
117
|
|
|
118
|
+
/**
|
|
119
|
+
* TSL function for creating a viewport texture node.
|
|
120
|
+
*
|
|
121
|
+
* @function
|
|
122
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
123
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
124
|
+
* @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
125
|
+
* @returns {ViewportTextureNode}
|
|
126
|
+
*/
|
|
80
127
|
export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* TSL function for creating a viewport texture node with enabled mipmap generation.
|
|
131
|
+
*
|
|
132
|
+
* @function
|
|
133
|
+
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
134
|
+
* @param {Node?} [levelNode=null] - The level node.
|
|
135
|
+
* @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
|
136
|
+
* @returns {ViewportTextureNode}
|
|
137
|
+
*/
|
|
81
138
|
export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { positionView } from '../accessors/Position.js';
|
|
2
|
+
import { smoothstep } from '../math/MathNode.js';
|
|
3
|
+
import { Fn, output, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
/** @module Fog **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns a node that represents the `z` coordinate in view space
|
|
9
|
+
* for the current fragment. It's a different representation of the
|
|
10
|
+
* default depth value.
|
|
11
|
+
*
|
|
12
|
+
* This value can be part of a computation that defines how the fog
|
|
13
|
+
* density increases when moving away from the camera.
|
|
14
|
+
*
|
|
15
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
16
|
+
* @return {Node} The viewZ node.
|
|
17
|
+
*/
|
|
18
|
+
function getViewZNode( builder ) {
|
|
19
|
+
|
|
20
|
+
let viewZ;
|
|
21
|
+
|
|
22
|
+
const getViewZ = builder.context.getViewZ;
|
|
23
|
+
|
|
24
|
+
if ( getViewZ !== undefined ) {
|
|
25
|
+
|
|
26
|
+
viewZ = getViewZ( this );
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ( viewZ || positionView.z ).negate();
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Constructs a new range factor node.
|
|
36
|
+
*
|
|
37
|
+
* @function
|
|
38
|
+
* @param {Node} near - Defines the near value.
|
|
39
|
+
* @param {Node} far - Defines the far value.
|
|
40
|
+
*/
|
|
41
|
+
export const rangeFogFactor = Fn( ( [ near, far ], builder ) => {
|
|
42
|
+
|
|
43
|
+
const viewZ = getViewZNode( builder );
|
|
44
|
+
|
|
45
|
+
return smoothstep( near, far, viewZ );
|
|
46
|
+
|
|
47
|
+
} );
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Represents an exponential squared fog. This type of fog gives
|
|
51
|
+
* a clear view near the camera and a faster than exponentially
|
|
52
|
+
* densening fog farther from the camera.
|
|
53
|
+
*
|
|
54
|
+
* @function
|
|
55
|
+
* @param {Node} density - Defines the fog density.
|
|
56
|
+
*/
|
|
57
|
+
export const densityFogFactor = Fn( ( [ density ], builder ) => {
|
|
58
|
+
|
|
59
|
+
const viewZ = getViewZNode( builder );
|
|
60
|
+
|
|
61
|
+
return density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();
|
|
62
|
+
|
|
63
|
+
} );
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* This class can be used to configure a fog for the scene.
|
|
67
|
+
* Nodes of this type are assigned to `Scene.fogNode`.
|
|
68
|
+
*
|
|
69
|
+
* @function
|
|
70
|
+
* @param {Node} color - Defines the color of the fog.
|
|
71
|
+
* @param {Node} factor - Defines how the fog is factored in the scene.
|
|
72
|
+
*/
|
|
73
|
+
export const fog = Fn( ( [ color, factor ] ) => {
|
|
74
|
+
|
|
75
|
+
return vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );
|
|
76
|
+
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
// Deprecated
|
|
80
|
+
|
|
81
|
+
export function rangeFog( color, near, far ) { // @deprecated, r171
|
|
82
|
+
|
|
83
|
+
console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
|
|
84
|
+
return fog( color, rangeFogFactor( near, far ) );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function densityFog( color, density ) { // @deprecated, r171
|
|
89
|
+
|
|
90
|
+
console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
|
|
91
|
+
return fog( color, densityFogFactor( density ) );
|
|
92
|
+
|
|
93
|
+
}
|
|
@@ -5,14 +5,31 @@ import { materialSpecularStrength, materialReflectivity } from '../accessors/Mat
|
|
|
5
5
|
import { mix } from '../math/MathNode.js';
|
|
6
6
|
import { vec4 } from '../tsl/TSLBase.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Represents the lighting model for unlit materials. The only light contribution
|
|
10
|
+
* is baked indirect lighting modulated with ambient occlusion and the material's
|
|
11
|
+
* diffuse color. Environment mapping is supported. Used in {@link MeshBasicNodeMaterial}.
|
|
12
|
+
*
|
|
13
|
+
* @augments LightingModel
|
|
14
|
+
*/
|
|
8
15
|
class BasicLightingModel extends LightingModel {
|
|
9
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new basic lighting model.
|
|
19
|
+
*/
|
|
10
20
|
constructor() {
|
|
11
21
|
|
|
12
22
|
super();
|
|
13
23
|
|
|
14
24
|
}
|
|
15
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Implements the baked indirect lighting with its modulation.
|
|
28
|
+
*
|
|
29
|
+
* @param {ContextNode} context - The current node context.
|
|
30
|
+
* @param {StackNode} stack - The current stack.
|
|
31
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
32
|
+
*/
|
|
16
33
|
indirect( context, stack, builder ) {
|
|
17
34
|
|
|
18
35
|
const ambientOcclusion = context.ambientOcclusion;
|
|
@@ -41,6 +58,13 @@ class BasicLightingModel extends LightingModel {
|
|
|
41
58
|
|
|
42
59
|
}
|
|
43
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Implements the environment mapping.
|
|
63
|
+
*
|
|
64
|
+
* @param {ContextNode} context - The current node context.
|
|
65
|
+
* @param {StackNode} stack - The current stack.
|
|
66
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
67
|
+
*/
|
|
44
68
|
finish( context, stack, builder ) {
|
|
45
69
|
|
|
46
70
|
const material = builder.material;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import BasicLightingModel from './BasicLightingModel.js';
|
|
2
2
|
import F_Schlick from './BSDF/F_Schlick.js';
|
|
3
3
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
4
|
-
import { diffuseColor } from '../core/PropertyNode.js';
|
|
4
|
+
import { diffuseColor, shininess, specularColor } from '../core/PropertyNode.js';
|
|
5
5
|
import { transformedNormalView } from '../accessors/Normal.js';
|
|
6
6
|
import { materialSpecularStrength } from '../accessors/MaterialNode.js';
|
|
7
|
-
import { shininess, specularColor } from '../core/PropertyNode.js';
|
|
8
7
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
9
8
|
import { Fn, float } from '../tsl/TSLBase.js';
|
|
10
9
|
|
|
@@ -31,16 +30,42 @@ const BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
|
|
|
31
30
|
|
|
32
31
|
} );
|
|
33
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Represents the lighting model for a phong material. Used in {@link MeshPhongNodeMaterial}.
|
|
35
|
+
*
|
|
36
|
+
* @augments BasicLightingModel
|
|
37
|
+
*/
|
|
34
38
|
class PhongLightingModel extends BasicLightingModel {
|
|
35
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Constructs a new phong lighting model.
|
|
42
|
+
*
|
|
43
|
+
* @param {Boolean} [specular=true] - Whether specular is supported or not.
|
|
44
|
+
*/
|
|
36
45
|
constructor( specular = true ) {
|
|
37
46
|
|
|
38
47
|
super();
|
|
39
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Whether specular is supported or not. Set this to `false` if you are
|
|
51
|
+
* looking for a Lambert-like material meaning a material for non-shiny
|
|
52
|
+
* surfaces, without specular highlights.
|
|
53
|
+
*
|
|
54
|
+
* @type {Boolean}
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
40
57
|
this.specular = specular;
|
|
41
58
|
|
|
42
59
|
}
|
|
43
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Implements the direct lighting. The specular portion is optional an can be controlled
|
|
63
|
+
* with the {@link PhongLightingModel#specular} flag.
|
|
64
|
+
*
|
|
65
|
+
* @param {Object} input - The input data.
|
|
66
|
+
* @param {StackNode} stack - The current stack.
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
*/
|
|
44
69
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
45
70
|
|
|
46
71
|
const dotNL = transformedNormalView.dot( lightDirection ).clamp();
|
|
@@ -56,6 +81,13 @@ class PhongLightingModel extends BasicLightingModel {
|
|
|
56
81
|
|
|
57
82
|
}
|
|
58
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Implements the indirect lighting.
|
|
86
|
+
*
|
|
87
|
+
* @param {ContextNode} input - The current node context.
|
|
88
|
+
* @param {StackNode} stack - The current stack.
|
|
89
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
90
|
+
*/
|
|
59
91
|
indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
|
|
60
92
|
|
|
61
93
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
@@ -31,7 +31,7 @@ const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, mod
|
|
|
31
31
|
// Direction of refracted light.
|
|
32
32
|
const refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );
|
|
33
33
|
|
|
34
|
-
// Compute rotation-
|
|
34
|
+
// Compute rotation-independent scaling of the model matrix.
|
|
35
35
|
const modelScale = vec3(
|
|
36
36
|
length( modelMatrix[ 0 ].xyz ),
|
|
37
37
|
length( modelMatrix[ 1 ].xyz ),
|
|
@@ -73,9 +73,9 @@ const viewportFrontSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
|
73
73
|
|
|
74
74
|
const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
|
|
75
75
|
|
|
76
|
-
const vTexture = material.side
|
|
76
|
+
const vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
|
|
77
77
|
|
|
78
|
-
const transmissionSample = vTexture.
|
|
78
|
+
const transmissionSample = vTexture.sample( fragCoord );
|
|
79
79
|
//const transmissionSample = viewportMipTexture( fragCoord );
|
|
80
80
|
|
|
81
81
|
const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
|
|
@@ -311,7 +311,7 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
|
|
|
311
311
|
// Sheen
|
|
312
312
|
//
|
|
313
313
|
|
|
314
|
-
// This is a curve-fit
|
|
314
|
+
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
315
315
|
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
|
|
316
316
|
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
317
317
|
const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
@@ -341,31 +341,140 @@ const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
|
341
341
|
const clearcoatF0 = vec3( 0.04 );
|
|
342
342
|
const clearcoatF90 = float( 1 );
|
|
343
343
|
|
|
344
|
-
//
|
|
345
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Represents the lighting model for a PBR material.
|
|
347
|
+
*
|
|
348
|
+
* @augments LightingModel
|
|
349
|
+
*/
|
|
346
350
|
class PhysicalLightingModel extends LightingModel {
|
|
347
351
|
|
|
352
|
+
/**
|
|
353
|
+
* Constructs a new physical lighting model.
|
|
354
|
+
*
|
|
355
|
+
* @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
|
|
356
|
+
* @param {Boolean} [sheen=false] - Whether sheen is supported or not.
|
|
357
|
+
* @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
|
|
358
|
+
* @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
|
|
359
|
+
* @param {Boolean} [transmission=false] - Whether transmission is supported or not.
|
|
360
|
+
* @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
361
|
+
*/
|
|
348
362
|
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
|
|
349
363
|
|
|
350
364
|
super();
|
|
351
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Whether clearcoat is supported or not.
|
|
368
|
+
*
|
|
369
|
+
* @type {Boolean}
|
|
370
|
+
* @default false
|
|
371
|
+
*/
|
|
352
372
|
this.clearcoat = clearcoat;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Whether sheen is supported or not.
|
|
376
|
+
*
|
|
377
|
+
* @type {Boolean}
|
|
378
|
+
* @default false
|
|
379
|
+
*/
|
|
353
380
|
this.sheen = sheen;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Whether iridescence is supported or not.
|
|
384
|
+
*
|
|
385
|
+
* @type {Boolean}
|
|
386
|
+
* @default false
|
|
387
|
+
*/
|
|
354
388
|
this.iridescence = iridescence;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Whether anisotropy is supported or not.
|
|
392
|
+
*
|
|
393
|
+
* @type {Boolean}
|
|
394
|
+
* @default false
|
|
395
|
+
*/
|
|
355
396
|
this.anisotropy = anisotropy;
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Whether transmission is supported or not.
|
|
400
|
+
*
|
|
401
|
+
* @type {Boolean}
|
|
402
|
+
* @default false
|
|
403
|
+
*/
|
|
356
404
|
this.transmission = transmission;
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Whether dispersion is supported or not.
|
|
408
|
+
*
|
|
409
|
+
* @type {Boolean}
|
|
410
|
+
* @default false
|
|
411
|
+
*/
|
|
357
412
|
this.dispersion = dispersion;
|
|
358
413
|
|
|
414
|
+
/**
|
|
415
|
+
* The clear coat radiance.
|
|
416
|
+
*
|
|
417
|
+
* @type {Node?}
|
|
418
|
+
* @default null
|
|
419
|
+
*/
|
|
359
420
|
this.clearcoatRadiance = null;
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* The clear coat specular direct.
|
|
424
|
+
*
|
|
425
|
+
* @type {Node?}
|
|
426
|
+
* @default null
|
|
427
|
+
*/
|
|
360
428
|
this.clearcoatSpecularDirect = null;
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* The clear coat specular indirect.
|
|
432
|
+
*
|
|
433
|
+
* @type {Node?}
|
|
434
|
+
* @default null
|
|
435
|
+
*/
|
|
361
436
|
this.clearcoatSpecularIndirect = null;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* The sheen specular direct.
|
|
440
|
+
*
|
|
441
|
+
* @type {Node?}
|
|
442
|
+
* @default null
|
|
443
|
+
*/
|
|
362
444
|
this.sheenSpecularDirect = null;
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* The sheen specular indirect.
|
|
448
|
+
*
|
|
449
|
+
* @type {Node?}
|
|
450
|
+
* @default null
|
|
451
|
+
*/
|
|
363
452
|
this.sheenSpecularIndirect = null;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* The iridescence Fresnel.
|
|
456
|
+
*
|
|
457
|
+
* @type {Node?}
|
|
458
|
+
* @default null
|
|
459
|
+
*/
|
|
364
460
|
this.iridescenceFresnel = null;
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* The iridescence F0.
|
|
464
|
+
*
|
|
465
|
+
* @type {Node?}
|
|
466
|
+
* @default null
|
|
467
|
+
*/
|
|
365
468
|
this.iridescenceF0 = null;
|
|
366
469
|
|
|
367
470
|
}
|
|
368
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Depending on what features are requested, the method prepares certain node variables
|
|
474
|
+
* which are later used for lighting computations.
|
|
475
|
+
*
|
|
476
|
+
* @param {ContextNode} context - The current node context.
|
|
477
|
+
*/
|
|
369
478
|
start( context ) {
|
|
370
479
|
|
|
371
480
|
if ( this.clearcoat === true ) {
|
|
@@ -432,7 +541,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
432
541
|
}
|
|
433
542
|
|
|
434
543
|
// Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
|
|
435
|
-
// Approximates
|
|
544
|
+
// Approximates multi-scattering in order to preserve energy.
|
|
436
545
|
// http://www.jcgt.org/published/0008/01/03/
|
|
437
546
|
|
|
438
547
|
computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
|
|
@@ -456,6 +565,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
456
565
|
|
|
457
566
|
}
|
|
458
567
|
|
|
568
|
+
/**
|
|
569
|
+
* Implements the direct light.
|
|
570
|
+
*
|
|
571
|
+
* @param {Object} input - The input data.
|
|
572
|
+
* @param {StackNode} stack - The current stack.
|
|
573
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
574
|
+
*/
|
|
459
575
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
460
576
|
|
|
461
577
|
const dotNL = transformedNormalView.dot( lightDirection ).clamp();
|
|
@@ -482,6 +598,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
482
598
|
|
|
483
599
|
}
|
|
484
600
|
|
|
601
|
+
/**
|
|
602
|
+
* This method is intended for implementing the direct light term for
|
|
603
|
+
* rect area light nodes.
|
|
604
|
+
*
|
|
605
|
+
* @param {Object} input - The input data.
|
|
606
|
+
* @param {StackNode} stack - The current stack.
|
|
607
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
608
|
+
*/
|
|
485
609
|
directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
|
|
486
610
|
|
|
487
611
|
const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
|
|
@@ -495,8 +619,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
495
619
|
|
|
496
620
|
const uv = LTC_Uv( { N, V, roughness } );
|
|
497
621
|
|
|
498
|
-
const t1 = ltc_1.
|
|
499
|
-
const t2 = ltc_2.
|
|
622
|
+
const t1 = ltc_1.sample( uv ).toVar();
|
|
623
|
+
const t2 = ltc_2.sample( uv ).toVar();
|
|
500
624
|
|
|
501
625
|
const mInv = mat3(
|
|
502
626
|
vec3( t1.x, 0, t1.y ),
|
|
@@ -514,6 +638,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
514
638
|
|
|
515
639
|
}
|
|
516
640
|
|
|
641
|
+
/**
|
|
642
|
+
* Implements the indirect lighting.
|
|
643
|
+
*
|
|
644
|
+
* @param {ContextNode} context - The current node context.
|
|
645
|
+
* @param {StackNode} stack - The current stack.
|
|
646
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
647
|
+
*/
|
|
517
648
|
indirect( context, stack, builder ) {
|
|
518
649
|
|
|
519
650
|
this.indirectDiffuse( context, stack, builder );
|
|
@@ -522,12 +653,26 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
522
653
|
|
|
523
654
|
}
|
|
524
655
|
|
|
656
|
+
/**
|
|
657
|
+
* Implements the indirect diffuse term.
|
|
658
|
+
*
|
|
659
|
+
* @param {ContextNode} input - The current node context.
|
|
660
|
+
* @param {StackNode} stack - The current stack.
|
|
661
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
662
|
+
*/
|
|
525
663
|
indirectDiffuse( { irradiance, reflectedLight } ) {
|
|
526
664
|
|
|
527
665
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
528
666
|
|
|
529
667
|
}
|
|
530
668
|
|
|
669
|
+
/**
|
|
670
|
+
* Implements the indirect specular term.
|
|
671
|
+
*
|
|
672
|
+
* @param {ContextNode} input - The current node context.
|
|
673
|
+
* @param {StackNode} stack - The current stack.
|
|
674
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
675
|
+
*/
|
|
531
676
|
indirectSpecular( { radiance, iblIrradiance, reflectedLight } ) {
|
|
532
677
|
|
|
533
678
|
if ( this.sheen === true ) {
|
|
@@ -577,6 +722,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
577
722
|
|
|
578
723
|
}
|
|
579
724
|
|
|
725
|
+
/**
|
|
726
|
+
* Implements the ambient occlusion term.
|
|
727
|
+
*
|
|
728
|
+
* @param {ContextNode} input - The current node context.
|
|
729
|
+
* @param {StackNode} stack - The current stack.
|
|
730
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
731
|
+
*/
|
|
580
732
|
ambientOcclusion( { ambientOcclusion, reflectedLight } ) {
|
|
581
733
|
|
|
582
734
|
const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
@@ -603,6 +755,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
603
755
|
|
|
604
756
|
}
|
|
605
757
|
|
|
758
|
+
/**
|
|
759
|
+
* Used for final lighting accumulations depending on the requested features.
|
|
760
|
+
*
|
|
761
|
+
* @param {ContextNode} context - The current node context.
|
|
762
|
+
* @param {StackNode} stack - The current stack.
|
|
763
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
764
|
+
*/
|
|
606
765
|
finish( context ) {
|
|
607
766
|
|
|
608
767
|
const { outgoingLight } = context;
|
|
@@ -2,22 +2,45 @@ import LightingModel from '../core/LightingModel.js';
|
|
|
2
2
|
import { diffuseColor } from '../core/PropertyNode.js';
|
|
3
3
|
import { float } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Represents lighting model for a shadow material. Used in {@link ShadowNodeMaterial}.
|
|
7
|
+
*
|
|
8
|
+
* @augments LightingModel
|
|
9
|
+
*/
|
|
5
10
|
class ShadowMaskModel extends LightingModel {
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new shadow mask model.
|
|
14
|
+
*/
|
|
7
15
|
constructor() {
|
|
8
16
|
|
|
9
17
|
super();
|
|
10
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The shadow mask node.
|
|
21
|
+
*
|
|
22
|
+
* @type {Node}
|
|
23
|
+
*/
|
|
11
24
|
this.shadowNode = float( 1 ).toVar( 'shadowMask' );
|
|
12
25
|
|
|
13
26
|
}
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Only used to save the shadow mask.
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} input - The input data.
|
|
32
|
+
*/
|
|
15
33
|
direct( { shadowMask } ) {
|
|
16
34
|
|
|
17
35
|
this.shadowNode.mulAssign( shadowMask );
|
|
18
36
|
|
|
19
37
|
}
|
|
20
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Uses the shadow mask to produce the final color.
|
|
41
|
+
*
|
|
42
|
+
* @param {ContextNode} context - The current node context.
|
|
43
|
+
*/
|
|
21
44
|
finish( context ) {
|
|
22
45
|
|
|
23
46
|
diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );
|