@plastic-software/three 0.167.4 → 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 +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- 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/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
|
@@ -1,21 +1,69 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from './Node.js';
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Class for representing shader varyings as nodes. Varyings are create from
|
|
7
|
+
* existing nodes like the following:
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const positionLocal = positionGeometry.toVarying( 'vPositionLocal' );
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @augments Node
|
|
14
|
+
*/
|
|
5
15
|
class VaryingNode extends Node {
|
|
6
16
|
|
|
17
|
+
static get type() {
|
|
18
|
+
|
|
19
|
+
return 'VaryingNode';
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new varying node.
|
|
25
|
+
*
|
|
26
|
+
* @param {Node} node - The node for which a varying should be created.
|
|
27
|
+
* @param {?string} name - The name of the varying in the shader.
|
|
28
|
+
*/
|
|
7
29
|
constructor( node, name = null ) {
|
|
8
30
|
|
|
9
31
|
super();
|
|
10
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The node for which a varying should be created.
|
|
35
|
+
*
|
|
36
|
+
* @type {Node}
|
|
37
|
+
*/
|
|
11
38
|
this.node = node;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The name of the varying in the shader. If no name is defined,
|
|
42
|
+
* the node system auto-generates one.
|
|
43
|
+
*
|
|
44
|
+
* @type {?string}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
12
47
|
this.name = name;
|
|
13
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
14
56
|
this.isVaryingNode = true;
|
|
15
57
|
|
|
16
58
|
}
|
|
17
59
|
|
|
18
|
-
|
|
60
|
+
/**
|
|
61
|
+
* The method is overwritten so it always returns `true`.
|
|
62
|
+
*
|
|
63
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
64
|
+
* @return {boolean} Whether this node is global or not.
|
|
65
|
+
*/
|
|
66
|
+
isGlobal( /*builder*/ ) {
|
|
19
67
|
|
|
20
68
|
return true;
|
|
21
69
|
|
|
@@ -35,6 +83,12 @@ class VaryingNode extends Node {
|
|
|
35
83
|
|
|
36
84
|
}
|
|
37
85
|
|
|
86
|
+
/**
|
|
87
|
+
* This method performs the setup of a varying node with the current node builder.
|
|
88
|
+
*
|
|
89
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
90
|
+
* @return {NodeVarying} The node varying from the node builder.
|
|
91
|
+
*/
|
|
38
92
|
setupVarying( builder ) {
|
|
39
93
|
|
|
40
94
|
const properties = builder.getNodeProperties( this );
|
|
@@ -77,7 +131,9 @@ class VaryingNode extends Node {
|
|
|
77
131
|
const properties = builder.getNodeProperties( this );
|
|
78
132
|
const varying = this.setupVarying( builder );
|
|
79
133
|
|
|
80
|
-
|
|
134
|
+
const needsReassign = builder.shaderStage === 'fragment' && properties.reassignPosition === true && builder.context.needsPositionReassign;
|
|
135
|
+
|
|
136
|
+
if ( properties.propertyName === undefined || needsReassign ) {
|
|
81
137
|
|
|
82
138
|
const type = this.getNodeType( builder );
|
|
83
139
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
@@ -87,6 +143,17 @@ class VaryingNode extends Node {
|
|
|
87
143
|
|
|
88
144
|
properties.propertyName = propertyName;
|
|
89
145
|
|
|
146
|
+
if ( needsReassign ) {
|
|
147
|
+
|
|
148
|
+
// once reassign varying in fragment stage
|
|
149
|
+
properties.reassignPosition = false;
|
|
150
|
+
|
|
151
|
+
} else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
|
|
152
|
+
|
|
153
|
+
properties.reassignPosition = true;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
90
157
|
}
|
|
91
158
|
|
|
92
159
|
return builder.getPropertyName( varying );
|
|
@@ -97,8 +164,42 @@ class VaryingNode extends Node {
|
|
|
97
164
|
|
|
98
165
|
export default VaryingNode;
|
|
99
166
|
|
|
100
|
-
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for creating a varying node.
|
|
169
|
+
*
|
|
170
|
+
* @tsl
|
|
171
|
+
* @function
|
|
172
|
+
* @param {Node} node - The node for which a varying should be created.
|
|
173
|
+
* @param {?string} name - The name of the varying in the shader.
|
|
174
|
+
* @returns {VaryingNode}
|
|
175
|
+
*/
|
|
176
|
+
export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Computes a node in the vertex stage.
|
|
180
|
+
*
|
|
181
|
+
* @tsl
|
|
182
|
+
* @function
|
|
183
|
+
* @param {Node} node - The node which should be executed in the vertex stage.
|
|
184
|
+
* @returns {VaryingNode}
|
|
185
|
+
*/
|
|
186
|
+
export const vertexStage = ( node ) => varying( node );
|
|
187
|
+
|
|
188
|
+
addMethodChaining( 'toVarying', varying );
|
|
189
|
+
addMethodChaining( 'toVertexStage', vertexStage );
|
|
190
|
+
|
|
191
|
+
// Deprecated
|
|
192
|
+
|
|
193
|
+
addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
|
|
194
|
+
|
|
195
|
+
console.warn( 'TSL.VaryingNode: .varying() has been renamed to .toVarying().' );
|
|
196
|
+
return varying( ...params );
|
|
197
|
+
|
|
198
|
+
} );
|
|
199
|
+
|
|
200
|
+
addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
|
|
101
201
|
|
|
102
|
-
|
|
202
|
+
console.warn( 'TSL.VaryingNode: .vertexStage() has been renamed to .toVertexStage().' );
|
|
203
|
+
return varying( ...params );
|
|
103
204
|
|
|
104
|
-
|
|
205
|
+
} );
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Possible shader stages.
|
|
3
|
+
*
|
|
4
|
+
* @property {string} VERTEX The vertex shader stage.
|
|
5
|
+
* @property {string} FRAGMENT The fragment shader stage.
|
|
6
|
+
*/
|
|
1
7
|
export const NodeShaderStage = {
|
|
2
8
|
VERTEX: 'vertex',
|
|
3
9
|
FRAGMENT: 'fragment'
|
|
4
10
|
};
|
|
5
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Update types of a node.
|
|
14
|
+
*
|
|
15
|
+
* @property {string} NONE The update method is not executed.
|
|
16
|
+
* @property {string} FRAME The update method is executed per frame.
|
|
17
|
+
* @property {string} RENDER The update method is executed per render. A frame might be produced by multiple render calls so this value allows more detailed updates than FRAME.
|
|
18
|
+
* @property {string} OBJECT The update method is executed per {@link Object3D} that uses the node for rendering.
|
|
19
|
+
*/
|
|
6
20
|
export const NodeUpdateType = {
|
|
7
21
|
NONE: 'none',
|
|
8
22
|
FRAME: 'frame',
|
|
@@ -10,6 +24,19 @@ export const NodeUpdateType = {
|
|
|
10
24
|
OBJECT: 'object'
|
|
11
25
|
};
|
|
12
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Data types of a node.
|
|
29
|
+
*
|
|
30
|
+
* @property {string} BOOLEAN Boolean type.
|
|
31
|
+
* @property {string} INTEGER Integer type.
|
|
32
|
+
* @property {string} FLOAT Float type.
|
|
33
|
+
* @property {string} VECTOR2 Two-dimensional vector type.
|
|
34
|
+
* @property {string} VECTOR3 Three-dimensional vector type.
|
|
35
|
+
* @property {string} VECTOR4 Four-dimensional vector type.
|
|
36
|
+
* @property {string} MATRIX2 2x2 matrix type.
|
|
37
|
+
* @property {string} MATRIX3 3x3 matrix type.
|
|
38
|
+
* @property {string} MATRIX4 4x4 matrix type.
|
|
39
|
+
*/
|
|
13
40
|
export const NodeType = {
|
|
14
41
|
BOOLEAN: 'bool',
|
|
15
42
|
INTEGER: 'int',
|
|
@@ -22,6 +49,19 @@ export const NodeType = {
|
|
|
22
49
|
MATRIX4: 'mat4'
|
|
23
50
|
};
|
|
24
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Access types of a node. These are relevant for compute and storage usage.
|
|
54
|
+
*
|
|
55
|
+
* @property {string} READ_ONLY Read-only access
|
|
56
|
+
* @property {string} WRITE_ONLY Write-only access.
|
|
57
|
+
* @property {string} READ_WRITE Read and write access.
|
|
58
|
+
*/
|
|
59
|
+
export const NodeAccess = {
|
|
60
|
+
READ_ONLY: 'readOnly',
|
|
61
|
+
WRITE_ONLY: 'writeOnly',
|
|
62
|
+
READ_WRITE: 'readWrite',
|
|
63
|
+
};
|
|
64
|
+
|
|
25
65
|
export const defaultShaderStages = [ 'fragment', 'vertex' ];
|
|
26
66
|
export const defaultBuildStages = [ 'setup', 'analyze', 'generate' ];
|
|
27
67
|
export const shaderStages = [ ...defaultShaderStages, 'compute' ];
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
2
|
+
import { mix, min, step } from '../math/MathNode.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Represents a "Color Burn" blend mode.
|
|
6
|
+
*
|
|
7
|
+
* It's designed to darken the base layer's colors based on the color of the blend layer.
|
|
8
|
+
* It significantly increases the contrast of the base layer, making the colors more vibrant and saturated.
|
|
9
|
+
* The darker the color in the blend layer, the stronger the darkening and contrast effect on the base layer.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @param {Node<vec3>} base - The base color.
|
|
14
|
+
* @param {Node<vec3>} blend - The blend color. A white (#ffffff) blend color does not alter the base color.
|
|
15
|
+
* @return {Node<vec3>} The result.
|
|
16
|
+
*/
|
|
17
|
+
export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
18
|
+
|
|
19
|
+
return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
|
|
20
|
+
|
|
21
|
+
} ).setLayout( {
|
|
22
|
+
name: 'blendBurn',
|
|
23
|
+
type: 'vec3',
|
|
24
|
+
inputs: [
|
|
25
|
+
{ name: 'base', type: 'vec3' },
|
|
26
|
+
{ name: 'blend', type: 'vec3' }
|
|
27
|
+
]
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Represents a "Color Dodge" blend mode.
|
|
32
|
+
*
|
|
33
|
+
* It's designed to lighten the base layer's colors based on the color of the blend layer.
|
|
34
|
+
* It significantly increases the brightness of the base layer, making the colors lighter and more vibrant.
|
|
35
|
+
* The brighter the color in the blend layer, the stronger the lightening and contrast effect on the base layer.
|
|
36
|
+
*
|
|
37
|
+
* @tsl
|
|
38
|
+
* @function
|
|
39
|
+
* @param {Node<vec3>} base - The base color.
|
|
40
|
+
* @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
|
|
41
|
+
* @return {Node<vec3>} The result.
|
|
42
|
+
*/
|
|
43
|
+
export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
44
|
+
|
|
45
|
+
return min( base.div( blend.oneMinus() ), 1.0 );
|
|
46
|
+
|
|
47
|
+
} ).setLayout( {
|
|
48
|
+
name: 'blendDodge',
|
|
49
|
+
type: 'vec3',
|
|
50
|
+
inputs: [
|
|
51
|
+
{ name: 'base', type: 'vec3' },
|
|
52
|
+
{ name: 'blend', type: 'vec3' }
|
|
53
|
+
]
|
|
54
|
+
} );
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Represents a "Screen" blend mode.
|
|
58
|
+
*
|
|
59
|
+
* Similar to `blendDodge()`, this mode also lightens the base layer's colors based on the color of the blend layer.
|
|
60
|
+
* The "Screen" blend mode is better for general brightening whereas the "Dodge" results in more subtle and nuanced
|
|
61
|
+
* effects.
|
|
62
|
+
*
|
|
63
|
+
* @tsl
|
|
64
|
+
* @function
|
|
65
|
+
* @param {Node<vec3>} base - The base color.
|
|
66
|
+
* @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
|
|
67
|
+
* @return {Node<vec3>} The result.
|
|
68
|
+
*/
|
|
69
|
+
export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
70
|
+
|
|
71
|
+
return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
|
|
72
|
+
|
|
73
|
+
} ).setLayout( {
|
|
74
|
+
name: 'blendScreen',
|
|
75
|
+
type: 'vec3',
|
|
76
|
+
inputs: [
|
|
77
|
+
{ name: 'base', type: 'vec3' },
|
|
78
|
+
{ name: 'blend', type: 'vec3' }
|
|
79
|
+
]
|
|
80
|
+
} );
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Represents a "Overlay" blend mode.
|
|
84
|
+
*
|
|
85
|
+
* It's designed to increase the contrast of the base layer based on the color of the blend layer.
|
|
86
|
+
* It amplifies the existing colors and contrast in the base layer, making lighter areas lighter and darker areas darker.
|
|
87
|
+
* The color of the blend layer significantly influences the resulting contrast and color shift in the base layer.
|
|
88
|
+
*
|
|
89
|
+
* @tsl
|
|
90
|
+
* @function
|
|
91
|
+
* @param {Node<vec3>} base - The base color.
|
|
92
|
+
* @param {Node<vec3>} blend - The blend color
|
|
93
|
+
* @return {Node<vec3>} The result.
|
|
94
|
+
*/
|
|
95
|
+
export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
96
|
+
|
|
97
|
+
return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
|
|
98
|
+
|
|
99
|
+
} ).setLayout( {
|
|
100
|
+
name: 'blendOverlay',
|
|
101
|
+
type: 'vec3',
|
|
102
|
+
inputs: [
|
|
103
|
+
{ name: 'base', type: 'vec3' },
|
|
104
|
+
{ name: 'blend', type: 'vec3' }
|
|
105
|
+
]
|
|
106
|
+
} );
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.
|
|
110
|
+
* It assumes both input colors have non-premultiplied alpha.
|
|
111
|
+
*
|
|
112
|
+
* @tsl
|
|
113
|
+
* @function
|
|
114
|
+
* @param {Node<vec4>} base - The base color.
|
|
115
|
+
* @param {Node<vec4>} blend - The blend color
|
|
116
|
+
* @return {Node<vec4>} The result.
|
|
117
|
+
*/
|
|
118
|
+
export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
119
|
+
|
|
120
|
+
const outAlpha = blend.a.add( base.a.mul( blend.a.oneMinus() ) );
|
|
121
|
+
|
|
122
|
+
return vec4( blend.rgb.mul( blend.a ).add( base.rgb.mul( base.a ).mul( blend.a.oneMinus() ) ).div( outAlpha ), outAlpha );
|
|
123
|
+
|
|
124
|
+
} ).setLayout( {
|
|
125
|
+
name: 'blendColor',
|
|
126
|
+
type: 'vec4',
|
|
127
|
+
inputs: [
|
|
128
|
+
{ name: 'base', type: 'vec4' },
|
|
129
|
+
{ name: 'blend', type: 'vec4' }
|
|
130
|
+
]
|
|
131
|
+
} );
|
|
132
|
+
|
|
133
|
+
// Deprecated
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @tsl
|
|
137
|
+
* @function
|
|
138
|
+
* @deprecated since r171. Use {@link blendBurn} instead.
|
|
139
|
+
*
|
|
140
|
+
* @param {...any} params
|
|
141
|
+
* @returns {Function}
|
|
142
|
+
*/
|
|
143
|
+
export const burn = ( ...params ) => { // @deprecated, r171
|
|
144
|
+
|
|
145
|
+
console.warn( 'THREE.TSL: "burn" has been renamed. Use "blendBurn" instead.' );
|
|
146
|
+
return blendBurn( params );
|
|
147
|
+
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @tsl
|
|
152
|
+
* @function
|
|
153
|
+
* @deprecated since r171. Use {@link blendDodge} instead.
|
|
154
|
+
*
|
|
155
|
+
* @param {...any} params
|
|
156
|
+
* @returns {Function}
|
|
157
|
+
*/
|
|
158
|
+
export const dodge = ( ...params ) => { // @deprecated, r171
|
|
159
|
+
|
|
160
|
+
console.warn( 'THREE.TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
|
|
161
|
+
return blendDodge( params );
|
|
162
|
+
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @tsl
|
|
167
|
+
* @function
|
|
168
|
+
* @deprecated since r171. Use {@link blendScreen} instead.
|
|
169
|
+
*
|
|
170
|
+
* @param {...any} params
|
|
171
|
+
* @returns {Function}
|
|
172
|
+
*/
|
|
173
|
+
export const screen = ( ...params ) => { // @deprecated, r171
|
|
174
|
+
|
|
175
|
+
console.warn( 'THREE.TSL: "screen" has been renamed. Use "blendScreen" instead.' );
|
|
176
|
+
return blendScreen( params );
|
|
177
|
+
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @tsl
|
|
182
|
+
* @function
|
|
183
|
+
* @deprecated since r171. Use {@link blendOverlay} instead.
|
|
184
|
+
*
|
|
185
|
+
* @param {...any} params
|
|
186
|
+
* @returns {Function}
|
|
187
|
+
*/
|
|
188
|
+
export const overlay = ( ...params ) => { // @deprecated, r171
|
|
189
|
+
|
|
190
|
+
console.warn( 'THREE.TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
|
|
191
|
+
return blendOverlay( params );
|
|
192
|
+
|
|
193
|
+
};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { positionView } from '../accessors/PositionNode.js';
|
|
2
|
+
import { uv } from '../accessors/UV.js';
|
|
3
|
+
import { normalView } from '../accessors/Normal.js';
|
|
4
|
+
import { positionView } from '../accessors/Position.js';
|
|
6
5
|
import { faceDirection } from './FrontFacingNode.js';
|
|
7
|
-
import {
|
|
6
|
+
import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
8
7
|
|
|
9
8
|
// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
|
|
10
9
|
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
@@ -45,13 +44,46 @@ const perturbNormalArb = Fn( ( inputs ) => {
|
|
|
45
44
|
|
|
46
45
|
} );
|
|
47
46
|
|
|
47
|
+
/**
|
|
48
|
+
* This class can be used for applying bump maps to materials.
|
|
49
|
+
*
|
|
50
|
+
* ```js
|
|
51
|
+
* material.normalNode = bumpMap( texture( bumpTex ) );
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @augments TempNode
|
|
55
|
+
*/
|
|
48
56
|
class BumpMapNode extends TempNode {
|
|
49
57
|
|
|
58
|
+
static get type() {
|
|
59
|
+
|
|
60
|
+
return 'BumpMapNode';
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Constructs a new bump map node.
|
|
66
|
+
*
|
|
67
|
+
* @param {Node<float>} textureNode - Represents the bump map data.
|
|
68
|
+
* @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
69
|
+
*/
|
|
50
70
|
constructor( textureNode, scaleNode = null ) {
|
|
51
71
|
|
|
52
72
|
super( 'vec3' );
|
|
53
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Represents the bump map data.
|
|
76
|
+
*
|
|
77
|
+
* @type {Node<float>}
|
|
78
|
+
*/
|
|
54
79
|
this.textureNode = textureNode;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Controls the intensity of the bump effect.
|
|
83
|
+
*
|
|
84
|
+
* @type {?Node<float>}
|
|
85
|
+
* @default null
|
|
86
|
+
*/
|
|
55
87
|
this.scaleNode = scaleNode;
|
|
56
88
|
|
|
57
89
|
}
|
|
@@ -73,8 +105,13 @@ class BumpMapNode extends TempNode {
|
|
|
73
105
|
|
|
74
106
|
export default BumpMapNode;
|
|
75
107
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
108
|
+
/**
|
|
109
|
+
* TSL function for creating a bump map node.
|
|
110
|
+
*
|
|
111
|
+
* @tsl
|
|
112
|
+
* @function
|
|
113
|
+
* @param {Node<float>} textureNode - Represents the bump map data.
|
|
114
|
+
* @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
115
|
+
* @returns {BumpMapNode}
|
|
116
|
+
*/
|
|
117
|
+
export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { dot, max, mix } from '../math/MathNode.js';
|
|
2
|
+
import { add } from '../math/OperatorNode.js';
|
|
3
|
+
import { Fn, If, float, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
5
|
+
import { Vector3 } from '../../math/Vector3.js';
|
|
6
|
+
import { LinearSRGBColorSpace } from '../../constants.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Computes a grayscale value for the given RGB color value.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @param {Node<vec3>} color - The color value to compute the grayscale for.
|
|
14
|
+
* @return {Node<vec3>} The grayscale color.
|
|
15
|
+
*/
|
|
16
|
+
export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
17
|
+
|
|
18
|
+
return luminance( color.rgb );
|
|
19
|
+
|
|
20
|
+
} );
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Super-saturates or desaturates the given RGB color.
|
|
24
|
+
*
|
|
25
|
+
* @tsl
|
|
26
|
+
* @function
|
|
27
|
+
* @param {Node<vec3>} color - The input color.
|
|
28
|
+
* @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.
|
|
29
|
+
* @return {Node<vec3>} The saturated color.
|
|
30
|
+
*/
|
|
31
|
+
export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
32
|
+
|
|
33
|
+
return adjustment.mix( luminance( color.rgb ), color.rgb );
|
|
34
|
+
|
|
35
|
+
} );
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Selectively enhance the intensity of less saturated RGB colors. Can result
|
|
39
|
+
* in a more natural and visually appealing image with enhanced color depth
|
|
40
|
+
* compared to {@link ColorAdjustment#saturation}.
|
|
41
|
+
*
|
|
42
|
+
* @tsl
|
|
43
|
+
* @function
|
|
44
|
+
* @param {Node<vec3>} color - The input color.
|
|
45
|
+
* @param {Node<float>} [adjustment=1] - Controls the intensity of the vibrance effect.
|
|
46
|
+
* @return {Node<vec3>} The updated color.
|
|
47
|
+
*/
|
|
48
|
+
export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
49
|
+
|
|
50
|
+
const average = add( color.r, color.g, color.b ).div( 3.0 );
|
|
51
|
+
|
|
52
|
+
const mx = color.r.max( color.g.max( color.b ) );
|
|
53
|
+
const amt = mx.sub( average ).mul( adjustment ).mul( - 3.0 );
|
|
54
|
+
|
|
55
|
+
return mix( color.rgb, mx, amt );
|
|
56
|
+
|
|
57
|
+
} );
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Updates the hue component of the given RGB color while preserving its luminance and saturation.
|
|
61
|
+
*
|
|
62
|
+
* @tsl
|
|
63
|
+
* @function
|
|
64
|
+
* @param {Node<vec3>} color - The input color.
|
|
65
|
+
* @param {Node<float>} [adjustment=1] - Defines the degree of hue rotation in radians. A positive value rotates the hue clockwise, while a negative value rotates it counterclockwise.
|
|
66
|
+
* @return {Node<vec3>} The updated color.
|
|
67
|
+
*/
|
|
68
|
+
export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
69
|
+
|
|
70
|
+
const k = vec3( 0.57735, 0.57735, 0.57735 );
|
|
71
|
+
|
|
72
|
+
const cosAngle = adjustment.cos();
|
|
73
|
+
|
|
74
|
+
return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) );
|
|
75
|
+
|
|
76
|
+
} );
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Computes the luminance for the given RGB color value.
|
|
80
|
+
*
|
|
81
|
+
* @tsl
|
|
82
|
+
* @function
|
|
83
|
+
* @param {Node<vec3>} color - The color value to compute the luminance for.
|
|
84
|
+
* @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
|
|
85
|
+
* @return {Node<vec3>} The luminance.
|
|
86
|
+
*/
|
|
87
|
+
export const luminance = (
|
|
88
|
+
color,
|
|
89
|
+
luminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) )
|
|
90
|
+
) => dot( color, luminanceCoefficients );
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Color Decision List (CDL) v1.2
|
|
94
|
+
*
|
|
95
|
+
* Compact representation of color grading information, defined by slope, offset, power, and
|
|
96
|
+
* saturation. The CDL should be typically be given input in a log space (such as LogC, ACEScc,
|
|
97
|
+
* or AgX Log), and will return output in the same space. Output may require clamping >=0.
|
|
98
|
+
*
|
|
99
|
+
* @tsl
|
|
100
|
+
* @function
|
|
101
|
+
* @param {Node<vec4>} color Input (-Infinity < input < +Infinity)
|
|
102
|
+
* @param {Node<vec3>} slope Slope (0 ≤ slope < +Infinity)
|
|
103
|
+
* @param {Node<vec3>} offset Offset (-Infinity < offset < +Infinity; typically -1 < offset < 1)
|
|
104
|
+
* @param {Node<vec3>} power Power (0 < power < +Infinity)
|
|
105
|
+
* @param {Node<float>} saturation Saturation (0 ≤ saturation < +Infinity; typically 0 ≤ saturation < 4)
|
|
106
|
+
* @param {Node<vec3>} luminanceCoefficients Luminance coefficients for saturation term, typically Rec. 709
|
|
107
|
+
* @return {Node<vec4>} Output, -Infinity < output < +Infinity
|
|
108
|
+
*
|
|
109
|
+
* References:
|
|
110
|
+
* - ASC CDL v1.2
|
|
111
|
+
* - {@link https://blender.stackexchange.com/a/55239/43930}
|
|
112
|
+
* - {@link https://docs.acescentral.com/specifications/acescc/}
|
|
113
|
+
*/
|
|
114
|
+
export const cdl = /*@__PURE__*/ Fn( ( [
|
|
115
|
+
color,
|
|
116
|
+
slope = vec3( 1 ),
|
|
117
|
+
offset = vec3( 0 ),
|
|
118
|
+
power = vec3( 1 ),
|
|
119
|
+
saturation = float( 1 ),
|
|
120
|
+
// ASC CDL v1.2 explicitly requires Rec. 709 luminance coefficients.
|
|
121
|
+
luminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3(), LinearSRGBColorSpace ) )
|
|
122
|
+
] ) => {
|
|
123
|
+
|
|
124
|
+
// NOTE: The ASC CDL v1.2 defines a [0, 1] clamp on the slope+offset term, and another on the
|
|
125
|
+
// saturation term. Per the ACEScc specification and Filament, limits may be omitted to support
|
|
126
|
+
// values outside [0, 1], requiring a workaround for negative values in the power expression.
|
|
127
|
+
|
|
128
|
+
const luma = color.rgb.dot( vec3( luminanceCoefficients ) );
|
|
129
|
+
|
|
130
|
+
const v = max( color.rgb.mul( slope ).add( offset ), 0.0 ).toVar();
|
|
131
|
+
const pv = v.pow( power ).toVar();
|
|
132
|
+
|
|
133
|
+
If( v.r.greaterThan( 0.0 ), () => { v.r.assign( pv.r ); } ); // eslint-disable-line
|
|
134
|
+
If( v.g.greaterThan( 0.0 ), () => { v.g.assign( pv.g ); } ); // eslint-disable-line
|
|
135
|
+
If( v.b.greaterThan( 0.0 ), () => { v.b.assign( pv.b ); } ); // eslint-disable-line
|
|
136
|
+
|
|
137
|
+
v.assign( luma.add( v.sub( luma ).mul( saturation ) ) );
|
|
138
|
+
|
|
139
|
+
return vec4( v.rgb, color.a );
|
|
140
|
+
|
|
141
|
+
} );
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { mix } from '../math/MathNode.js';
|
|
2
|
+
import { Fn } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Converts the given color value from sRGB to linear-sRGB color space.
|
|
6
|
+
*
|
|
7
|
+
* @tsl
|
|
8
|
+
* @function
|
|
9
|
+
* @param {Node<vec3>} color - The sRGB color.
|
|
10
|
+
* @return {Node<vec3>} The linear-sRGB color.
|
|
11
|
+
*/
|
|
12
|
+
export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
13
|
+
|
|
14
|
+
const a = color.mul( 0.9478672986 ).add( 0.0521327014 ).pow( 2.4 );
|
|
15
|
+
const b = color.mul( 0.0773993808 );
|
|
16
|
+
const factor = color.lessThanEqual( 0.04045 );
|
|
17
|
+
|
|
18
|
+
const rgbResult = mix( a, b, factor );
|
|
19
|
+
|
|
20
|
+
return rgbResult;
|
|
21
|
+
|
|
22
|
+
} ).setLayout( {
|
|
23
|
+
name: 'sRGBTransferEOTF',
|
|
24
|
+
type: 'vec3',
|
|
25
|
+
inputs: [
|
|
26
|
+
{ name: 'color', type: 'vec3' }
|
|
27
|
+
]
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Converts the given color value from linear-sRGB to sRGB color space.
|
|
32
|
+
*
|
|
33
|
+
* @tsl
|
|
34
|
+
* @function
|
|
35
|
+
* @param {Node<vec3>} color - The linear-sRGB color.
|
|
36
|
+
* @return {Node<vec3>} The sRGB color.
|
|
37
|
+
*/
|
|
38
|
+
export const sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
39
|
+
|
|
40
|
+
const a = color.pow( 0.41666 ).mul( 1.055 ).sub( 0.055 );
|
|
41
|
+
const b = color.mul( 12.92 );
|
|
42
|
+
const factor = color.lessThanEqual( 0.0031308 );
|
|
43
|
+
|
|
44
|
+
const rgbResult = mix( a, b, factor );
|
|
45
|
+
|
|
46
|
+
return rgbResult;
|
|
47
|
+
|
|
48
|
+
} ).setLayout( {
|
|
49
|
+
name: 'sRGBTransferOETF',
|
|
50
|
+
type: 'vec3',
|
|
51
|
+
inputs: [
|
|
52
|
+
{ name: 'color', type: 'vec3' }
|
|
53
|
+
]
|
|
54
|
+
} );
|