@plastic-software/three 0.167.3 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- 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 +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- 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 +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- 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 +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
|
|
2
|
+
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
|
|
3
|
+
import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
|
|
4
|
+
import getRoughness from '../../nodes/functions/material/getRoughness.js';
|
|
5
|
+
import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
|
|
6
|
+
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
7
|
+
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
8
|
+
import { mix, pow2, min } from '../../nodes/math/MathNode.js';
|
|
9
|
+
|
|
10
|
+
import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
|
|
11
|
+
|
|
12
|
+
const _defaultValues = /*@__PURE__*/ new MeshPhysicalMaterial();
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Node material version of `MeshPhysicalMaterial`.
|
|
16
|
+
*
|
|
17
|
+
* @augments MeshStandardNodeMaterial
|
|
18
|
+
*/
|
|
19
|
+
class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
20
|
+
|
|
21
|
+
static get type() {
|
|
22
|
+
|
|
23
|
+
return 'MeshPhysicalNodeMaterial';
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new mesh physical node material.
|
|
29
|
+
*
|
|
30
|
+
* @param {?Object} parameters - The configuration parameter.
|
|
31
|
+
*/
|
|
32
|
+
constructor( parameters ) {
|
|
33
|
+
|
|
34
|
+
super();
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
this.isMeshPhysicalNodeMaterial = true;
|
|
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 materialClearcoat}.
|
|
52
|
+
*
|
|
53
|
+
* @type {?Node<float>}
|
|
54
|
+
* @default null
|
|
55
|
+
*/
|
|
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 materialClearcoatRoughness}.
|
|
65
|
+
*
|
|
66
|
+
* @type {?Node<float>}
|
|
67
|
+
* @default null
|
|
68
|
+
*/
|
|
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 materialClearcoatNormal}.
|
|
78
|
+
*
|
|
79
|
+
* @type {?Node<vec3>}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
this.clearcoatNormalNode = null;
|
|
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 materialSheen}.
|
|
91
|
+
*
|
|
92
|
+
* @type {?Node<vec3>}
|
|
93
|
+
* @default null
|
|
94
|
+
*/
|
|
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 materialSheenRoughness}.
|
|
104
|
+
*
|
|
105
|
+
* @type {?Node<float>}
|
|
106
|
+
* @default null
|
|
107
|
+
*/
|
|
108
|
+
this.sheenRoughnessNode = null;
|
|
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 materialIridescence}.
|
|
117
|
+
*
|
|
118
|
+
* @type {?Node<float>}
|
|
119
|
+
* @default null
|
|
120
|
+
*/
|
|
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 materialIridescenceIOR}.
|
|
130
|
+
*
|
|
131
|
+
* @type {?Node<float>}
|
|
132
|
+
* @default null
|
|
133
|
+
*/
|
|
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 materialIridescenceThickness}.
|
|
143
|
+
*
|
|
144
|
+
* @type {?Node<float>}
|
|
145
|
+
* @default null
|
|
146
|
+
*/
|
|
147
|
+
this.iridescenceThicknessNode = null;
|
|
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 materialSpecularIntensity}.
|
|
156
|
+
*
|
|
157
|
+
* @type {?Node<float>}
|
|
158
|
+
* @default null
|
|
159
|
+
*/
|
|
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 materialSpecularColor}.
|
|
169
|
+
*
|
|
170
|
+
* @type {?Node<vec3>}
|
|
171
|
+
* @default null
|
|
172
|
+
*/
|
|
173
|
+
this.specularColorNode = null;
|
|
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 materialIOR}.
|
|
182
|
+
*
|
|
183
|
+
* @type {?Node<float>}
|
|
184
|
+
* @default null
|
|
185
|
+
*/
|
|
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 materialTransmission}.
|
|
195
|
+
*
|
|
196
|
+
* @type {?Node<float>}
|
|
197
|
+
* @default null
|
|
198
|
+
*/
|
|
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 materialThickness}.
|
|
208
|
+
*
|
|
209
|
+
* @type {?Node<float>}
|
|
210
|
+
* @default null
|
|
211
|
+
*/
|
|
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 materialAttenuationDistance}.
|
|
221
|
+
*
|
|
222
|
+
* @type {?Node<float>}
|
|
223
|
+
* @default null
|
|
224
|
+
*/
|
|
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 materialAttenuationColor}.
|
|
234
|
+
*
|
|
235
|
+
* @type {?Node<vec3>}
|
|
236
|
+
* @default null
|
|
237
|
+
*/
|
|
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 materialDispersion}.
|
|
247
|
+
*
|
|
248
|
+
* @type {?Node<float>}
|
|
249
|
+
* @default null
|
|
250
|
+
*/
|
|
251
|
+
this.dispersionNode = null;
|
|
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 materialAnisotropy}.
|
|
260
|
+
*
|
|
261
|
+
* @type {?Node<float>}
|
|
262
|
+
* @default null
|
|
263
|
+
*/
|
|
264
|
+
this.anisotropyNode = null;
|
|
265
|
+
|
|
266
|
+
this.setDefaultValues( _defaultValues );
|
|
267
|
+
|
|
268
|
+
this.setValues( parameters );
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Whether the lighting model should use clearcoat or not.
|
|
274
|
+
*
|
|
275
|
+
* @type {boolean}
|
|
276
|
+
* @default true
|
|
277
|
+
*/
|
|
278
|
+
get useClearcoat() {
|
|
279
|
+
|
|
280
|
+
return this.clearcoat > 0 || this.clearcoatNode !== null;
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Whether the lighting model should use iridescence or not.
|
|
286
|
+
*
|
|
287
|
+
* @type {boolean}
|
|
288
|
+
* @default true
|
|
289
|
+
*/
|
|
290
|
+
get useIridescence() {
|
|
291
|
+
|
|
292
|
+
return this.iridescence > 0 || this.iridescenceNode !== null;
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Whether the lighting model should use sheen or not.
|
|
298
|
+
*
|
|
299
|
+
* @type {boolean}
|
|
300
|
+
* @default true
|
|
301
|
+
*/
|
|
302
|
+
get useSheen() {
|
|
303
|
+
|
|
304
|
+
return this.sheen > 0 || this.sheenNode !== null;
|
|
305
|
+
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Whether the lighting model should use anisotropy or not.
|
|
310
|
+
*
|
|
311
|
+
* @type {boolean}
|
|
312
|
+
* @default true
|
|
313
|
+
*/
|
|
314
|
+
get useAnisotropy() {
|
|
315
|
+
|
|
316
|
+
return this.anisotropy > 0 || this.anisotropyNode !== null;
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Whether the lighting model should use transmission or not.
|
|
322
|
+
*
|
|
323
|
+
* @type {boolean}
|
|
324
|
+
* @default true
|
|
325
|
+
*/
|
|
326
|
+
get useTransmission() {
|
|
327
|
+
|
|
328
|
+
return this.transmission > 0 || this.transmissionNode !== null;
|
|
329
|
+
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Whether the lighting model should use dispersion or not.
|
|
334
|
+
*
|
|
335
|
+
* @type {boolean}
|
|
336
|
+
* @default true
|
|
337
|
+
*/
|
|
338
|
+
get useDispersion() {
|
|
339
|
+
|
|
340
|
+
return this.dispersion > 0 || this.dispersionNode !== null;
|
|
341
|
+
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Setups the specular related node variables.
|
|
346
|
+
*/
|
|
347
|
+
setupSpecular() {
|
|
348
|
+
|
|
349
|
+
const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
|
|
350
|
+
|
|
351
|
+
ior.assign( iorNode );
|
|
352
|
+
specularColor.assign( mix( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ), diffuseColor.rgb, metalness ) );
|
|
353
|
+
specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Setups the lighting model.
|
|
359
|
+
*
|
|
360
|
+
* @return {PhysicalLightingModel} The lighting model.
|
|
361
|
+
*/
|
|
362
|
+
setupLightingModel( /*builder*/ ) {
|
|
363
|
+
|
|
364
|
+
return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion );
|
|
365
|
+
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Setups the physical specific node variables.
|
|
370
|
+
*
|
|
371
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
372
|
+
*/
|
|
373
|
+
setupVariants( builder ) {
|
|
374
|
+
|
|
375
|
+
super.setupVariants( builder );
|
|
376
|
+
|
|
377
|
+
// CLEARCOAT
|
|
378
|
+
|
|
379
|
+
if ( this.useClearcoat ) {
|
|
380
|
+
|
|
381
|
+
const clearcoatNode = this.clearcoatNode ? float( this.clearcoatNode ) : materialClearcoat;
|
|
382
|
+
const clearcoatRoughnessNode = this.clearcoatRoughnessNode ? float( this.clearcoatRoughnessNode ) : materialClearcoatRoughness;
|
|
383
|
+
|
|
384
|
+
clearcoat.assign( clearcoatNode );
|
|
385
|
+
clearcoatRoughness.assign( getRoughness( { roughness: clearcoatRoughnessNode } ) );
|
|
386
|
+
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// SHEEN
|
|
390
|
+
|
|
391
|
+
if ( this.useSheen ) {
|
|
392
|
+
|
|
393
|
+
const sheenNode = this.sheenNode ? vec3( this.sheenNode ) : materialSheen;
|
|
394
|
+
const sheenRoughnessNode = this.sheenRoughnessNode ? float( this.sheenRoughnessNode ) : materialSheenRoughness;
|
|
395
|
+
|
|
396
|
+
sheen.assign( sheenNode );
|
|
397
|
+
sheenRoughness.assign( sheenRoughnessNode );
|
|
398
|
+
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// IRIDESCENCE
|
|
402
|
+
|
|
403
|
+
if ( this.useIridescence ) {
|
|
404
|
+
|
|
405
|
+
const iridescenceNode = this.iridescenceNode ? float( this.iridescenceNode ) : materialIridescence;
|
|
406
|
+
const iridescenceIORNode = this.iridescenceIORNode ? float( this.iridescenceIORNode ) : materialIridescenceIOR;
|
|
407
|
+
const iridescenceThicknessNode = this.iridescenceThicknessNode ? float( this.iridescenceThicknessNode ) : materialIridescenceThickness;
|
|
408
|
+
|
|
409
|
+
iridescence.assign( iridescenceNode );
|
|
410
|
+
iridescenceIOR.assign( iridescenceIORNode );
|
|
411
|
+
iridescenceThickness.assign( iridescenceThicknessNode );
|
|
412
|
+
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// ANISOTROPY
|
|
416
|
+
|
|
417
|
+
if ( this.useAnisotropy ) {
|
|
418
|
+
|
|
419
|
+
const anisotropyV = ( this.anisotropyNode ? vec2( this.anisotropyNode ) : materialAnisotropy ).toVar();
|
|
420
|
+
|
|
421
|
+
anisotropy.assign( anisotropyV.length() );
|
|
422
|
+
|
|
423
|
+
If( anisotropy.equal( 0.0 ), () => {
|
|
424
|
+
|
|
425
|
+
anisotropyV.assign( vec2( 1.0, 0.0 ) );
|
|
426
|
+
|
|
427
|
+
} ).Else( () => {
|
|
428
|
+
|
|
429
|
+
anisotropyV.divAssign( vec2( anisotropy ) );
|
|
430
|
+
anisotropy.assign( anisotropy.saturate() );
|
|
431
|
+
|
|
432
|
+
} );
|
|
433
|
+
|
|
434
|
+
// Roughness along the anisotropy bitangent is the material roughness, while the tangent roughness increases with anisotropy.
|
|
435
|
+
alphaT.assign( anisotropy.pow2().mix( roughness.pow2(), 1.0 ) );
|
|
436
|
+
|
|
437
|
+
anisotropyT.assign( TBNViewMatrix[ 0 ].mul( anisotropyV.x ).add( TBNViewMatrix[ 1 ].mul( anisotropyV.y ) ) );
|
|
438
|
+
anisotropyB.assign( TBNViewMatrix[ 1 ].mul( anisotropyV.x ).sub( TBNViewMatrix[ 0 ].mul( anisotropyV.y ) ) );
|
|
439
|
+
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// TRANSMISSION
|
|
443
|
+
|
|
444
|
+
if ( this.useTransmission ) {
|
|
445
|
+
|
|
446
|
+
const transmissionNode = this.transmissionNode ? float( this.transmissionNode ) : materialTransmission;
|
|
447
|
+
const thicknessNode = this.thicknessNode ? float( this.thicknessNode ) : materialThickness;
|
|
448
|
+
const attenuationDistanceNode = this.attenuationDistanceNode ? float( this.attenuationDistanceNode ) : materialAttenuationDistance;
|
|
449
|
+
const attenuationColorNode = this.attenuationColorNode ? vec3( this.attenuationColorNode ) : materialAttenuationColor;
|
|
450
|
+
|
|
451
|
+
transmission.assign( transmissionNode );
|
|
452
|
+
thickness.assign( thicknessNode );
|
|
453
|
+
attenuationDistance.assign( attenuationDistanceNode );
|
|
454
|
+
attenuationColor.assign( attenuationColorNode );
|
|
455
|
+
|
|
456
|
+
if ( this.useDispersion ) {
|
|
457
|
+
|
|
458
|
+
const dispersionNode = this.dispersionNode ? float( this.dispersionNode ) : materialDispersion;
|
|
459
|
+
|
|
460
|
+
dispersion.assign( dispersionNode );
|
|
461
|
+
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* Setups the clearcoat normal node.
|
|
470
|
+
*
|
|
471
|
+
* @return {Node<vec3>} The clearcoat normal.
|
|
472
|
+
*/
|
|
473
|
+
setupClearcoatNormal() {
|
|
474
|
+
|
|
475
|
+
return this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
setup( builder ) {
|
|
480
|
+
|
|
481
|
+
builder.context.setupClearcoatNormal = () => this.setupClearcoatNormal( builder );
|
|
482
|
+
|
|
483
|
+
super.setup( builder );
|
|
484
|
+
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
copy( source ) {
|
|
488
|
+
|
|
489
|
+
this.clearcoatNode = source.clearcoatNode;
|
|
490
|
+
this.clearcoatRoughnessNode = source.clearcoatRoughnessNode;
|
|
491
|
+
this.clearcoatNormalNode = source.clearcoatNormalNode;
|
|
492
|
+
|
|
493
|
+
this.sheenNode = source.sheenNode;
|
|
494
|
+
this.sheenRoughnessNode = source.sheenRoughnessNode;
|
|
495
|
+
|
|
496
|
+
this.iridescenceNode = source.iridescenceNode;
|
|
497
|
+
this.iridescenceIORNode = source.iridescenceIORNode;
|
|
498
|
+
this.iridescenceThicknessNode = source.iridescenceThicknessNode;
|
|
499
|
+
|
|
500
|
+
this.specularIntensityNode = source.specularIntensityNode;
|
|
501
|
+
this.specularColorNode = source.specularColorNode;
|
|
502
|
+
|
|
503
|
+
this.transmissionNode = source.transmissionNode;
|
|
504
|
+
this.thicknessNode = source.thicknessNode;
|
|
505
|
+
this.attenuationDistanceNode = source.attenuationDistanceNode;
|
|
506
|
+
this.attenuationColorNode = source.attenuationColorNode;
|
|
507
|
+
this.dispersionNode = source.dispersionNode;
|
|
508
|
+
|
|
509
|
+
this.anisotropyNode = source.anisotropyNode;
|
|
510
|
+
|
|
511
|
+
return super.copy( source );
|
|
512
|
+
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
export default MeshPhysicalNodeMaterial;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
|
|
2
|
+
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
3
|
+
import { transformedNormalView } from '../../nodes/accessors/Normal.js';
|
|
4
|
+
import { positionViewDirection } from '../../nodes/accessors/Position.js';
|
|
5
|
+
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents the lighting model for {@link MeshSSSNodeMaterial}.
|
|
9
|
+
*
|
|
10
|
+
* @augments PhysicalLightingModel
|
|
11
|
+
*/
|
|
12
|
+
class SSSLightingModel extends PhysicalLightingModel {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new physical lighting model.
|
|
16
|
+
*
|
|
17
|
+
* @param {boolean} [clearcoat=false] - Whether clearcoat is supported or not.
|
|
18
|
+
* @param {boolean} [sheen=false] - Whether sheen is supported or not.
|
|
19
|
+
* @param {boolean} [iridescence=false] - Whether iridescence is supported or not.
|
|
20
|
+
* @param {boolean} [anisotropy=false] - Whether anisotropy is supported or not.
|
|
21
|
+
* @param {boolean} [transmission=false] - Whether transmission is supported or not.
|
|
22
|
+
* @param {boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
23
|
+
* @param {boolean} [sss=false] - Whether SSS is supported or not.
|
|
24
|
+
*/
|
|
25
|
+
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, sss = false ) {
|
|
26
|
+
|
|
27
|
+
super( clearcoat, sheen, iridescence, anisotropy, transmission, dispersion );
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Whether the lighting model should use SSS or not.
|
|
31
|
+
*
|
|
32
|
+
* @type {boolean}
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
this.useSSS = sss;
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Extends the default implementation with a SSS term.
|
|
41
|
+
*
|
|
42
|
+
* 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/}
|
|
43
|
+
*
|
|
44
|
+
* @param {Object} input - The input data.
|
|
45
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
46
|
+
*/
|
|
47
|
+
direct( { lightDirection, lightColor, reflectedLight }, builder ) {
|
|
48
|
+
|
|
49
|
+
if ( this.useSSS === true ) {
|
|
50
|
+
|
|
51
|
+
const material = builder.material;
|
|
52
|
+
|
|
53
|
+
const { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material;
|
|
54
|
+
|
|
55
|
+
const scatteringHalf = lightDirection.add( transformedNormalView.mul( thicknessDistortionNode ) ).normalize();
|
|
56
|
+
const scatteringDot = float( positionViewDirection.dot( scatteringHalf.negate() ).saturate().pow( thicknessPowerNode ).mul( thicknessScaleNode ) );
|
|
57
|
+
const scatteringIllu = vec3( scatteringDot.add( thicknessAmbientNode ).mul( thicknessColorNode ) );
|
|
58
|
+
|
|
59
|
+
reflectedLight.directDiffuse.addAssign( scatteringIllu.mul( thicknessAttenuationNode.mul( lightColor ) ) );
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
super.direct( { lightDirection, lightColor, reflectedLight }, builder );
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* This node material is an experimental extension of {@link MeshPhysicalNodeMaterial}
|
|
71
|
+
* that implements a Subsurface scattering (SSS) term.
|
|
72
|
+
*
|
|
73
|
+
* @augments MeshPhysicalNodeMaterial
|
|
74
|
+
*/
|
|
75
|
+
class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
|
|
76
|
+
|
|
77
|
+
static get type() {
|
|
78
|
+
|
|
79
|
+
return 'MeshSSSNodeMaterial';
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Constructs a new mesh SSS node material.
|
|
85
|
+
*
|
|
86
|
+
* @param {?Object} parameters - The configuration parameter.
|
|
87
|
+
*/
|
|
88
|
+
constructor( parameters ) {
|
|
89
|
+
|
|
90
|
+
super( parameters );
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Represents the thickness color.
|
|
94
|
+
*
|
|
95
|
+
* @type {?Node<vec3>}
|
|
96
|
+
* @default null
|
|
97
|
+
*/
|
|
98
|
+
this.thicknessColorNode = null;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Represents the distortion factor.
|
|
102
|
+
*
|
|
103
|
+
* @type {?Node<float>}
|
|
104
|
+
*/
|
|
105
|
+
this.thicknessDistortionNode = float( 0.1 );
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Represents the thickness ambient factor.
|
|
109
|
+
*
|
|
110
|
+
* @type {?Node<float>}
|
|
111
|
+
*/
|
|
112
|
+
this.thicknessAmbientNode = float( 0.0 );
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Represents the thickness attenuation.
|
|
116
|
+
*
|
|
117
|
+
* @type {?Node<float>}
|
|
118
|
+
*/
|
|
119
|
+
this.thicknessAttenuationNode = float( .1 );
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Represents the thickness power.
|
|
123
|
+
*
|
|
124
|
+
* @type {?Node<float>}
|
|
125
|
+
*/
|
|
126
|
+
this.thicknessPowerNode = float( 2.0 );
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Represents the thickness scale.
|
|
130
|
+
*
|
|
131
|
+
* @type {?Node<float>}
|
|
132
|
+
*/
|
|
133
|
+
this.thicknessScaleNode = float( 10.0 );
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Whether the lighting model should use SSS or not.
|
|
139
|
+
*
|
|
140
|
+
* @type {boolean}
|
|
141
|
+
* @default true
|
|
142
|
+
*/
|
|
143
|
+
get useSSS() {
|
|
144
|
+
|
|
145
|
+
return this.thicknessColorNode !== null;
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Setups the lighting model.
|
|
151
|
+
*
|
|
152
|
+
* @return {SSSLightingModel} The lighting model.
|
|
153
|
+
*/
|
|
154
|
+
setupLightingModel( /*builder*/ ) {
|
|
155
|
+
|
|
156
|
+
return new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useSSS );
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
copy( source ) {
|
|
161
|
+
|
|
162
|
+
this.thicknessColorNode = source.thicknessColorNode;
|
|
163
|
+
this.thicknessDistortionNode = source.thicknessDistortionNode;
|
|
164
|
+
this.thicknessAmbientNode = source.thicknessAmbientNode;
|
|
165
|
+
this.thicknessAttenuationNode = source.thicknessAttenuationNode;
|
|
166
|
+
this.thicknessPowerNode = source.thicknessPowerNode;
|
|
167
|
+
this.thicknessScaleNode = source.thicknessScaleNode;
|
|
168
|
+
|
|
169
|
+
return super.copy( source );
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export default MeshSSSNodeMaterial;
|