@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
|
@@ -8,28 +8,30 @@ import BRDF_Sheen from './BSDF/BRDF_Sheen.js';
|
|
|
8
8
|
import { LTC_Evaluate, LTC_Uv } from './BSDF/LTC.js';
|
|
9
9
|
import LightingModel from '../core/LightingModel.js';
|
|
10
10
|
import { diffuseColor, specularColor, specularF90, roughness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion } from '../core/PropertyNode.js';
|
|
11
|
-
import { transformedNormalView, transformedClearcoatNormalView, transformedNormalWorld } from '../accessors/
|
|
12
|
-
import { positionViewDirection, positionView, positionWorld } from '../accessors/
|
|
13
|
-
import { Fn, float, vec2, vec3, vec4, mat3, If } from '../
|
|
14
|
-
import { select } from '../math/
|
|
11
|
+
import { transformedNormalView, transformedClearcoatNormalView, transformedNormalWorld } from '../accessors/Normal.js';
|
|
12
|
+
import { positionViewDirection, positionView, positionWorld } from '../accessors/Position.js';
|
|
13
|
+
import { Fn, float, vec2, vec3, vec4, mat3, If } from '../tsl/TSLBase.js';
|
|
14
|
+
import { select } from '../math/ConditionalNode.js';
|
|
15
15
|
import { mix, normalize, refract, length, clamp, log2, log, exp, smoothstep } from '../math/MathNode.js';
|
|
16
16
|
import { div } from '../math/OperatorNode.js';
|
|
17
|
-
import { cameraPosition, cameraProjectionMatrix, cameraViewMatrix } from '../accessors/
|
|
17
|
+
import { cameraPosition, cameraProjectionMatrix, cameraViewMatrix } from '../accessors/Camera.js';
|
|
18
18
|
import { modelWorldMatrix } from '../accessors/ModelNode.js';
|
|
19
|
-
import {
|
|
19
|
+
import { screenSize } from '../display/ScreenNode.js';
|
|
20
20
|
import { viewportMipTexture } from '../display/ViewportTextureNode.js';
|
|
21
|
+
import { textureBicubic } from '../accessors/TextureBicubic.js';
|
|
21
22
|
import { Loop } from '../utils/LoopNode.js';
|
|
23
|
+
import { BackSide } from '../../constants.js';
|
|
22
24
|
|
|
23
25
|
//
|
|
24
26
|
// Transmission
|
|
25
27
|
//
|
|
26
28
|
|
|
27
|
-
const getVolumeTransmissionRay = Fn( ( [ n, v, thickness, ior, modelMatrix ] ) => {
|
|
29
|
+
const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, modelMatrix ] ) => {
|
|
28
30
|
|
|
29
31
|
// Direction of refracted light.
|
|
30
32
|
const refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );
|
|
31
33
|
|
|
32
|
-
// Compute rotation-
|
|
34
|
+
// Compute rotation-independent scaling of the model matrix.
|
|
33
35
|
const modelScale = vec3(
|
|
34
36
|
length( modelMatrix[ 0 ].xyz ),
|
|
35
37
|
length( modelMatrix[ 1 ].xyz ),
|
|
@@ -51,7 +53,7 @@ const getVolumeTransmissionRay = Fn( ( [ n, v, thickness, ior, modelMatrix ] ) =
|
|
|
51
53
|
]
|
|
52
54
|
} );
|
|
53
55
|
|
|
54
|
-
const applyIorToRoughness = Fn( ( [ roughness, ior ] ) => {
|
|
56
|
+
const applyIorToRoughness = /*@__PURE__*/ Fn( ( [ roughness, ior ] ) => {
|
|
55
57
|
|
|
56
58
|
// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
|
|
57
59
|
// an IOR of 1.5 results in the default amount of microfacet refraction.
|
|
@@ -66,20 +68,23 @@ const applyIorToRoughness = Fn( ( [ roughness, ior ] ) => {
|
|
|
66
68
|
]
|
|
67
69
|
} );
|
|
68
70
|
|
|
69
|
-
const
|
|
71
|
+
const viewportBackSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
72
|
+
const viewportFrontSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
70
73
|
|
|
71
|
-
const getTransmissionSample = Fn( ( [ fragCoord, roughness, ior ] ) => {
|
|
74
|
+
const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
|
|
72
75
|
|
|
73
|
-
const
|
|
76
|
+
const vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
|
|
77
|
+
|
|
78
|
+
const transmissionSample = vTexture.sample( fragCoord );
|
|
74
79
|
//const transmissionSample = viewportMipTexture( fragCoord );
|
|
75
80
|
|
|
76
|
-
const lod = log2(
|
|
81
|
+
const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
|
|
77
82
|
|
|
78
|
-
return
|
|
83
|
+
return textureBicubic( transmissionSample, lod );
|
|
79
84
|
|
|
80
85
|
} );
|
|
81
86
|
|
|
82
|
-
const volumeAttenuation = Fn( ( [ transmissionDistance, attenuationColor, attenuationDistance ] ) => {
|
|
87
|
+
const volumeAttenuation = /*@__PURE__*/ Fn( ( [ transmissionDistance, attenuationColor, attenuationDistance ] ) => {
|
|
83
88
|
|
|
84
89
|
If( attenuationDistance.notEqual( 0 ), () => {
|
|
85
90
|
|
|
@@ -104,7 +109,7 @@ const volumeAttenuation = Fn( ( [ transmissionDistance, attenuationColor, attenu
|
|
|
104
109
|
]
|
|
105
110
|
} );
|
|
106
111
|
|
|
107
|
-
const getIBLVolumeRefraction = Fn( ( [ n, v, roughness, diffuseColor, specularColor, specularF90, position, modelMatrix, viewMatrix, projMatrix, ior, thickness, attenuationColor, attenuationDistance, dispersion ] ) => {
|
|
112
|
+
const getIBLVolumeRefraction = /*@__PURE__*/ Fn( ( [ n, v, roughness, diffuseColor, specularColor, specularF90, position, modelMatrix, viewMatrix, projMatrix, ior, thickness, attenuationColor, attenuationDistance, dispersion ] ) => {
|
|
108
113
|
|
|
109
114
|
let transmittedLight, transmittance;
|
|
110
115
|
|
|
@@ -184,7 +189,7 @@ const getIBLVolumeRefraction = Fn( ( [ n, v, roughness, diffuseColor, specularCo
|
|
|
184
189
|
//
|
|
185
190
|
|
|
186
191
|
// XYZ to linear-sRGB color space
|
|
187
|
-
const XYZ_TO_REC709 = mat3(
|
|
192
|
+
const XYZ_TO_REC709 = /*@__PURE__*/ mat3(
|
|
188
193
|
3.2404542, - 0.9692660, 0.0556434,
|
|
189
194
|
- 1.5371385, 1.8760108, - 0.2040259,
|
|
190
195
|
- 0.4985314, 0.0415560, 1.0572252
|
|
@@ -227,20 +232,21 @@ const evalSensitivity = ( OPD, shift ) => {
|
|
|
227
232
|
|
|
228
233
|
};
|
|
229
234
|
|
|
230
|
-
const evalIridescence = Fn( ( { outsideIOR, eta2, cosTheta1, thinFilmThickness, baseF0 } ) => {
|
|
235
|
+
const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinFilmThickness, baseF0 } ) => {
|
|
231
236
|
|
|
232
237
|
// Force iridescenceIOR -> outsideIOR when thinFilmThickness -> 0.0
|
|
233
238
|
const iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );
|
|
234
239
|
// Evaluate the cosTheta on the base layer (Snell law)
|
|
235
|
-
const sinTheta2Sq = outsideIOR.div( iridescenceIOR ).pow2().mul(
|
|
240
|
+
const sinTheta2Sq = outsideIOR.div( iridescenceIOR ).pow2().mul( cosTheta1.pow2().oneMinus() );
|
|
236
241
|
|
|
237
242
|
// Handle TIR:
|
|
238
|
-
const cosTheta2Sq =
|
|
239
|
-
|
|
243
|
+
const cosTheta2Sq = sinTheta2Sq.oneMinus();
|
|
244
|
+
|
|
245
|
+
If( cosTheta2Sq.lessThan( 0 ), () => {
|
|
240
246
|
|
|
241
|
-
|
|
247
|
+
return vec3( 1.0 );
|
|
242
248
|
|
|
243
|
-
}
|
|
249
|
+
} );
|
|
244
250
|
|
|
245
251
|
const cosTheta2 = cosTheta2Sq.sqrt();
|
|
246
252
|
|
|
@@ -273,17 +279,18 @@ const evalIridescence = Fn( ( { outsideIOR, eta2, cosTheta1, thinFilmThickness,
|
|
|
273
279
|
|
|
274
280
|
// Reflectance term for m = 0 (DC term amplitude)
|
|
275
281
|
const C0 = R12.add( Rs );
|
|
276
|
-
|
|
282
|
+
const I = C0.toVar();
|
|
277
283
|
|
|
278
284
|
// Reflectance term for m > 0 (pairs of diracs)
|
|
279
|
-
|
|
280
|
-
for ( let m = 1; m <= 2; ++ m ) {
|
|
285
|
+
const Cm = Rs.sub( T121 ).toVar();
|
|
281
286
|
|
|
282
|
-
|
|
287
|
+
Loop( { start: 1, end: 2, condition: '<=', name: 'm' }, ( { m } ) => {
|
|
288
|
+
|
|
289
|
+
Cm.mulAssign( r123 );
|
|
283
290
|
const Sm = evalSensitivity( float( m ).mul( OPD ), float( m ).mul( phi ) ).mul( 2.0 );
|
|
284
|
-
I
|
|
291
|
+
I.addAssign( Cm.mul( Sm ) );
|
|
285
292
|
|
|
286
|
-
}
|
|
293
|
+
} );
|
|
287
294
|
|
|
288
295
|
// Since out of gamut colors might be produced, negative color values are clamped to 0.
|
|
289
296
|
return I.max( vec3( 0.0 ) );
|
|
@@ -304,10 +311,10 @@ const evalIridescence = Fn( ( { outsideIOR, eta2, cosTheta1, thinFilmThickness,
|
|
|
304
311
|
// Sheen
|
|
305
312
|
//
|
|
306
313
|
|
|
307
|
-
// This is a curve-fit
|
|
314
|
+
// This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
|
|
308
315
|
// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
|
|
309
316
|
// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
|
|
310
|
-
const IBLSheenBRDF = Fn( ( { normal, viewDir, roughness } ) => {
|
|
317
|
+
const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
311
318
|
|
|
312
319
|
const dotNV = normal.dot( viewDir ).saturate();
|
|
313
320
|
|
|
@@ -334,45 +341,154 @@ const IBLSheenBRDF = Fn( ( { normal, viewDir, roughness } ) => {
|
|
|
334
341
|
const clearcoatF0 = vec3( 0.04 );
|
|
335
342
|
const clearcoatF90 = float( 1 );
|
|
336
343
|
|
|
337
|
-
//
|
|
338
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Represents the lighting model for a PBR material.
|
|
347
|
+
*
|
|
348
|
+
* @augments LightingModel
|
|
349
|
+
*/
|
|
339
350
|
class PhysicalLightingModel extends LightingModel {
|
|
340
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
|
+
*/
|
|
341
362
|
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
|
|
342
363
|
|
|
343
364
|
super();
|
|
344
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Whether clearcoat is supported or not.
|
|
368
|
+
*
|
|
369
|
+
* @type {boolean}
|
|
370
|
+
* @default false
|
|
371
|
+
*/
|
|
345
372
|
this.clearcoat = clearcoat;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Whether sheen is supported or not.
|
|
376
|
+
*
|
|
377
|
+
* @type {boolean}
|
|
378
|
+
* @default false
|
|
379
|
+
*/
|
|
346
380
|
this.sheen = sheen;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Whether iridescence is supported or not.
|
|
384
|
+
*
|
|
385
|
+
* @type {boolean}
|
|
386
|
+
* @default false
|
|
387
|
+
*/
|
|
347
388
|
this.iridescence = iridescence;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Whether anisotropy is supported or not.
|
|
392
|
+
*
|
|
393
|
+
* @type {boolean}
|
|
394
|
+
* @default false
|
|
395
|
+
*/
|
|
348
396
|
this.anisotropy = anisotropy;
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Whether transmission is supported or not.
|
|
400
|
+
*
|
|
401
|
+
* @type {boolean}
|
|
402
|
+
* @default false
|
|
403
|
+
*/
|
|
349
404
|
this.transmission = transmission;
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Whether dispersion is supported or not.
|
|
408
|
+
*
|
|
409
|
+
* @type {boolean}
|
|
410
|
+
* @default false
|
|
411
|
+
*/
|
|
350
412
|
this.dispersion = dispersion;
|
|
351
413
|
|
|
414
|
+
/**
|
|
415
|
+
* The clear coat radiance.
|
|
416
|
+
*
|
|
417
|
+
* @type {?Node}
|
|
418
|
+
* @default null
|
|
419
|
+
*/
|
|
352
420
|
this.clearcoatRadiance = null;
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* The clear coat specular direct.
|
|
424
|
+
*
|
|
425
|
+
* @type {?Node}
|
|
426
|
+
* @default null
|
|
427
|
+
*/
|
|
353
428
|
this.clearcoatSpecularDirect = null;
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* The clear coat specular indirect.
|
|
432
|
+
*
|
|
433
|
+
* @type {?Node}
|
|
434
|
+
* @default null
|
|
435
|
+
*/
|
|
354
436
|
this.clearcoatSpecularIndirect = null;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* The sheen specular direct.
|
|
440
|
+
*
|
|
441
|
+
* @type {?Node}
|
|
442
|
+
* @default null
|
|
443
|
+
*/
|
|
355
444
|
this.sheenSpecularDirect = null;
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* The sheen specular indirect.
|
|
448
|
+
*
|
|
449
|
+
* @type {?Node}
|
|
450
|
+
* @default null
|
|
451
|
+
*/
|
|
356
452
|
this.sheenSpecularIndirect = null;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* The iridescence Fresnel.
|
|
456
|
+
*
|
|
457
|
+
* @type {?Node}
|
|
458
|
+
* @default null
|
|
459
|
+
*/
|
|
357
460
|
this.iridescenceFresnel = null;
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* The iridescence F0.
|
|
464
|
+
*
|
|
465
|
+
* @type {?Node}
|
|
466
|
+
* @default null
|
|
467
|
+
*/
|
|
358
468
|
this.iridescenceF0 = null;
|
|
359
469
|
|
|
360
470
|
}
|
|
361
471
|
|
|
362
|
-
|
|
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 {NodeBuilder} builder - The current node builder.
|
|
477
|
+
*/
|
|
478
|
+
start( builder ) {
|
|
363
479
|
|
|
364
480
|
if ( this.clearcoat === true ) {
|
|
365
481
|
|
|
366
|
-
this.clearcoatRadiance = vec3().
|
|
367
|
-
this.clearcoatSpecularDirect = vec3().
|
|
368
|
-
this.clearcoatSpecularIndirect = vec3().
|
|
482
|
+
this.clearcoatRadiance = vec3().toVar( 'clearcoatRadiance' );
|
|
483
|
+
this.clearcoatSpecularDirect = vec3().toVar( 'clearcoatSpecularDirect' );
|
|
484
|
+
this.clearcoatSpecularIndirect = vec3().toVar( 'clearcoatSpecularIndirect' );
|
|
369
485
|
|
|
370
486
|
}
|
|
371
487
|
|
|
372
488
|
if ( this.sheen === true ) {
|
|
373
489
|
|
|
374
|
-
this.sheenSpecularDirect = vec3().
|
|
375
|
-
this.sheenSpecularIndirect = vec3().
|
|
490
|
+
this.sheenSpecularDirect = vec3().toVar( 'sheenSpecularDirect' );
|
|
491
|
+
this.sheenSpecularIndirect = vec3().toVar( 'sheenSpecularIndirect' );
|
|
376
492
|
|
|
377
493
|
}
|
|
378
494
|
|
|
@@ -398,6 +514,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
398
514
|
const v = cameraPosition.sub( positionWorld ).normalize(); // TODO: Create Node for this, same issue in MaterialX
|
|
399
515
|
const n = transformedNormalWorld;
|
|
400
516
|
|
|
517
|
+
const context = builder.context;
|
|
518
|
+
|
|
401
519
|
context.backdrop = getIBLVolumeRefraction(
|
|
402
520
|
n,
|
|
403
521
|
v,
|
|
@@ -422,10 +540,12 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
422
540
|
|
|
423
541
|
}
|
|
424
542
|
|
|
543
|
+
super.start( builder );
|
|
544
|
+
|
|
425
545
|
}
|
|
426
546
|
|
|
427
547
|
// Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
|
|
428
|
-
// Approximates
|
|
548
|
+
// Approximates multi-scattering in order to preserve energy.
|
|
429
549
|
// http://www.jcgt.org/published/0008/01/03/
|
|
430
550
|
|
|
431
551
|
computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
|
|
@@ -449,6 +569,12 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
449
569
|
|
|
450
570
|
}
|
|
451
571
|
|
|
572
|
+
/**
|
|
573
|
+
* Implements the direct light.
|
|
574
|
+
*
|
|
575
|
+
* @param {Object} lightData - The light data.
|
|
576
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
577
|
+
*/
|
|
452
578
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
453
579
|
|
|
454
580
|
const dotNL = transformedNormalView.dot( lightDirection ).clamp();
|
|
@@ -475,6 +601,13 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
475
601
|
|
|
476
602
|
}
|
|
477
603
|
|
|
604
|
+
/**
|
|
605
|
+
* This method is intended for implementing the direct light term for
|
|
606
|
+
* rect area light nodes.
|
|
607
|
+
*
|
|
608
|
+
* @param {Object} input - The input data.
|
|
609
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
610
|
+
*/
|
|
478
611
|
directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
|
|
479
612
|
|
|
480
613
|
const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
|
|
@@ -488,8 +621,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
488
621
|
|
|
489
622
|
const uv = LTC_Uv( { N, V, roughness } );
|
|
490
623
|
|
|
491
|
-
const t1 = ltc_1.
|
|
492
|
-
const t2 = ltc_2.
|
|
624
|
+
const t1 = ltc_1.sample( uv ).toVar();
|
|
625
|
+
const t2 = ltc_2.sample( uv ).toVar();
|
|
493
626
|
|
|
494
627
|
const mInv = mat3(
|
|
495
628
|
vec3( t1.x, 0, t1.y ),
|
|
@@ -507,21 +640,40 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
507
640
|
|
|
508
641
|
}
|
|
509
642
|
|
|
510
|
-
|
|
643
|
+
/**
|
|
644
|
+
* Implements the indirect lighting.
|
|
645
|
+
*
|
|
646
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
647
|
+
*/
|
|
648
|
+
indirect( builder ) {
|
|
511
649
|
|
|
512
|
-
this.indirectDiffuse(
|
|
513
|
-
this.indirectSpecular(
|
|
514
|
-
this.ambientOcclusion(
|
|
650
|
+
this.indirectDiffuse( builder );
|
|
651
|
+
this.indirectSpecular( builder );
|
|
652
|
+
this.ambientOcclusion( builder );
|
|
515
653
|
|
|
516
654
|
}
|
|
517
655
|
|
|
518
|
-
|
|
656
|
+
/**
|
|
657
|
+
* Implements the indirect diffuse term.
|
|
658
|
+
*
|
|
659
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
660
|
+
*/
|
|
661
|
+
indirectDiffuse( builder ) {
|
|
662
|
+
|
|
663
|
+
const { irradiance, reflectedLight } = builder.context;
|
|
519
664
|
|
|
520
665
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
521
666
|
|
|
522
667
|
}
|
|
523
668
|
|
|
524
|
-
|
|
669
|
+
/**
|
|
670
|
+
* Implements the indirect specular term.
|
|
671
|
+
*
|
|
672
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
673
|
+
*/
|
|
674
|
+
indirectSpecular( builder ) {
|
|
675
|
+
|
|
676
|
+
const { radiance, iblIrradiance, reflectedLight } = builder.context;
|
|
525
677
|
|
|
526
678
|
if ( this.sheen === true ) {
|
|
527
679
|
|
|
@@ -553,8 +705,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
553
705
|
|
|
554
706
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
555
707
|
|
|
556
|
-
const singleScattering = vec3().
|
|
557
|
-
const multiScattering = vec3().
|
|
708
|
+
const singleScattering = vec3().toVar( 'singleScattering' );
|
|
709
|
+
const multiScattering = vec3().toVar( 'multiScattering' );
|
|
558
710
|
const cosineWeightedIrradiance = iblIrradiance.mul( 1 / Math.PI );
|
|
559
711
|
|
|
560
712
|
this.computeMultiscattering( singleScattering, multiScattering, specularF90 );
|
|
@@ -570,7 +722,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
570
722
|
|
|
571
723
|
}
|
|
572
724
|
|
|
573
|
-
|
|
725
|
+
/**
|
|
726
|
+
* Implements the ambient occlusion term.
|
|
727
|
+
*
|
|
728
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
729
|
+
*/
|
|
730
|
+
ambientOcclusion( builder ) {
|
|
731
|
+
|
|
732
|
+
const { ambientOcclusion, reflectedLight } = builder.context;
|
|
574
733
|
|
|
575
734
|
const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
576
735
|
|
|
@@ -596,7 +755,12 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
596
755
|
|
|
597
756
|
}
|
|
598
757
|
|
|
599
|
-
|
|
758
|
+
/**
|
|
759
|
+
* Used for final lighting accumulations depending on the requested features.
|
|
760
|
+
*
|
|
761
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
762
|
+
*/
|
|
763
|
+
finish( { context } ) {
|
|
600
764
|
|
|
601
765
|
const { outgoingLight } = context;
|
|
602
766
|
|
|
@@ -1,23 +1,46 @@
|
|
|
1
1
|
import LightingModel from '../core/LightingModel.js';
|
|
2
2
|
import { diffuseColor } from '../core/PropertyNode.js';
|
|
3
|
-
import { float } from '../
|
|
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() );
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import LightingModel from '../core/LightingModel.js';
|
|
2
2
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
3
3
|
import { diffuseColor } from '../core/PropertyNode.js';
|
|
4
|
-
import { normalGeometry } from '../accessors/
|
|
5
|
-
import { Fn, float, vec2, vec3 } from '../
|
|
4
|
+
import { normalGeometry } from '../accessors/Normal.js';
|
|
5
|
+
import { Fn, float, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
6
6
|
import { mix, smoothstep } from '../math/MathNode.js';
|
|
7
7
|
import { materialReference } from '../accessors/MaterialReferenceNode.js';
|
|
8
8
|
|
|
9
|
-
const getGradientIrradiance = Fn( ( { normal, lightDirection, builder } ) => {
|
|
9
|
+
const getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, builder } ) => {
|
|
10
10
|
|
|
11
11
|
// dotNL will be from -1.0 to 1.0
|
|
12
12
|
const dotNL = normal.dot( lightDirection );
|
|
@@ -28,9 +28,21 @@ const getGradientIrradiance = Fn( ( { normal, lightDirection, builder } ) => {
|
|
|
28
28
|
|
|
29
29
|
} );
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.
|
|
33
|
+
*
|
|
34
|
+
* @augments LightingModel
|
|
35
|
+
*/
|
|
31
36
|
class ToonLightingModel extends LightingModel {
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
|
|
40
|
+
* reduced to a small number of discrete shades to create a comic-like, flat look.
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} lightData - The light data.
|
|
43
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
44
|
+
*/
|
|
45
|
+
direct( { lightDirection, lightColor, reflectedLight }, builder ) {
|
|
34
46
|
|
|
35
47
|
const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
|
|
36
48
|
|
|
@@ -38,7 +50,14 @@ class ToonLightingModel extends LightingModel {
|
|
|
38
50
|
|
|
39
51
|
}
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Implements the indirect lighting.
|
|
55
|
+
*
|
|
56
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
57
|
+
*/
|
|
58
|
+
indirect( builder ) {
|
|
59
|
+
|
|
60
|
+
const { ambientOcclusion, irradiance, reflectedLight } = builder.context;
|
|
42
61
|
|
|
43
62
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
44
63
|
|