@unikia/upe-renderer 0.186.110 → 0.187.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { default as TextureNode/*, texture*/ } from '../accessors/TextureNode.js';
|
|
3
3
|
import { NodeUpdateType } from '../core/constants.js';
|
|
4
4
|
import { context } from '../tsl/TSLBase.js';
|
|
5
|
+
import { mergeContext } from '../core/NodeUtils.js';
|
|
5
6
|
import { uniform } from '../core/UniformNode.js';
|
|
6
7
|
import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDepthNode.js';
|
|
7
8
|
|
|
8
|
-
import { HalfFloatType, FloatType } from '../../constants.js';
|
|
9
|
+
import { HalfFloatType, FloatType, DepthStencilFormat, UnsignedInt248Type } from '../../constants.js';
|
|
9
10
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
11
|
import { Vector4 } from '../../math/Vector4.js';
|
|
11
12
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
@@ -57,6 +58,12 @@ class PassTextureNode extends TextureNode {
|
|
|
57
58
|
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
isCacheable( /*builder*/ ) {
|
|
62
|
+
|
|
63
|
+
return true;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
60
67
|
setup( builder ) {
|
|
61
68
|
|
|
62
69
|
const properties = builder.getNodeProperties( this );
|
|
@@ -177,9 +184,9 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
177
184
|
* postProcessing.outputNode = scenePass;
|
|
178
185
|
* ```
|
|
179
186
|
*
|
|
180
|
-
* @augments
|
|
187
|
+
* @augments Node
|
|
181
188
|
*/
|
|
182
|
-
class PassNode extends
|
|
189
|
+
class PassNode extends Node {
|
|
183
190
|
|
|
184
191
|
static get type() {
|
|
185
192
|
|
|
@@ -250,7 +257,23 @@ class PassNode extends TempNode {
|
|
|
250
257
|
|
|
251
258
|
if ( this.scope === PassNode.DEPTH || options.depthBuffer !== false ) {
|
|
252
259
|
|
|
253
|
-
|
|
260
|
+
if ( options.depthTexture !== undefined ) {
|
|
261
|
+
|
|
262
|
+
depthTexture = options.depthTexture;
|
|
263
|
+
|
|
264
|
+
} else {
|
|
265
|
+
|
|
266
|
+
depthTexture = new DepthTexture();
|
|
267
|
+
|
|
268
|
+
if ( renderTarget.stencilBuffer === true ) {
|
|
269
|
+
|
|
270
|
+
depthTexture.format = DepthStencilFormat;
|
|
271
|
+
depthTexture.type = UnsignedInt248Type;
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
254
277
|
depthTexture.isRenderTargetTexture = true;
|
|
255
278
|
//depthTexture.type = FloatType;
|
|
256
279
|
depthTexture.name = 'depth';
|
|
@@ -277,7 +300,7 @@ class PassNode extends TempNode {
|
|
|
277
300
|
* Whether the pass is transparent.
|
|
278
301
|
*
|
|
279
302
|
* @type {boolean}
|
|
280
|
-
* @default
|
|
303
|
+
* @default true
|
|
281
304
|
*/
|
|
282
305
|
this.transparent = true;
|
|
283
306
|
|
|
@@ -487,6 +510,12 @@ class PassNode extends TempNode {
|
|
|
487
510
|
|
|
488
511
|
}
|
|
489
512
|
|
|
513
|
+
isCacheable( /*builder*/ ) {
|
|
514
|
+
|
|
515
|
+
return false;
|
|
516
|
+
|
|
517
|
+
}
|
|
518
|
+
|
|
490
519
|
/**
|
|
491
520
|
* Sets the resolution scale for the pass.
|
|
492
521
|
* The resolution scale is a factor that is multiplied with the renderer's width and height.
|
|
@@ -785,13 +814,25 @@ class PassNode extends TempNode {
|
|
|
785
814
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
786
815
|
const currentMRT = renderer.getMRT();
|
|
787
816
|
|
|
817
|
+
const currentContextNode = renderer.contextNode;
|
|
818
|
+
|
|
819
|
+
// the render target is configured like in setup() and updateBefore(), so the pipelines match the ones of the render
|
|
820
|
+
|
|
821
|
+
this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
|
|
822
|
+
|
|
823
|
+
renderer.getDrawingBufferSize( _size );
|
|
824
|
+
this.setSize( _size.width, _size.height );
|
|
825
|
+
|
|
788
826
|
renderer.setRenderTarget( this.renderTarget );
|
|
789
827
|
renderer.setMRT( this._mrt );
|
|
790
828
|
|
|
829
|
+
if ( this.contextNode !== null ) renderer.contextNode = this._getContextNode( renderer );
|
|
830
|
+
|
|
791
831
|
await renderer.compileAsync( this.scene, this.camera );
|
|
792
832
|
|
|
793
833
|
renderer.setRenderTarget( currentRenderTarget );
|
|
794
834
|
renderer.setMRT( currentMRT );
|
|
835
|
+
renderer.contextNode = currentContextNode;
|
|
795
836
|
|
|
796
837
|
}
|
|
797
838
|
|
|
@@ -889,16 +930,7 @@ class PassNode extends TempNode {
|
|
|
889
930
|
|
|
890
931
|
if ( this.contextNode !== null ) {
|
|
891
932
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
this._contextNodeCache = {
|
|
895
|
-
version: this.version,
|
|
896
|
-
context: context( { ...renderer.contextNode.getFlowContextData(), ...this.contextNode.getFlowContextData() } )
|
|
897
|
-
};
|
|
898
|
-
|
|
899
|
-
}
|
|
900
|
-
|
|
901
|
-
renderer.contextNode = this._contextNodeCache.context;
|
|
933
|
+
renderer.contextNode = this._getContextNode( renderer );
|
|
902
934
|
|
|
903
935
|
}
|
|
904
936
|
|
|
@@ -926,6 +958,33 @@ class PassNode extends TempNode {
|
|
|
926
958
|
|
|
927
959
|
}
|
|
928
960
|
|
|
961
|
+
/**
|
|
962
|
+
* Returns the context node of the pass merged with the context node of the renderer.
|
|
963
|
+
*
|
|
964
|
+
* @private
|
|
965
|
+
* @param {Renderer} renderer - The renderer.
|
|
966
|
+
* @return {ContextNode} The context node.
|
|
967
|
+
*/
|
|
968
|
+
_getContextNode( renderer ) {
|
|
969
|
+
|
|
970
|
+
const rendererContextNode = renderer.contextNode;
|
|
971
|
+
const cache = this._contextNodeCache;
|
|
972
|
+
|
|
973
|
+
if ( cache === null || cache.version !== this.version || cache.rendererContextNode !== rendererContextNode || cache.rendererVersion !== rendererContextNode.version ) {
|
|
974
|
+
|
|
975
|
+
this._contextNodeCache = {
|
|
976
|
+
version: this.version,
|
|
977
|
+
rendererContextNode,
|
|
978
|
+
rendererVersion: rendererContextNode.version,
|
|
979
|
+
context: context( mergeContext( rendererContextNode.getFlowContextData(), this.contextNode.getFlowContextData() ) )
|
|
980
|
+
};
|
|
981
|
+
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
return this._contextNodeCache.context;
|
|
985
|
+
|
|
986
|
+
}
|
|
987
|
+
|
|
929
988
|
/**
|
|
930
989
|
* Sets the size of the pass's render target. Honors the pixel ratio.
|
|
931
990
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject, vec4 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { premultiplyAlpha, unpremultiplyAlpha } from './PremultiplyAlphaFunctions.js';
|
|
4
4
|
|
|
@@ -26,9 +26,9 @@ import { ColorManagement } from '../../math/ColorManagement.js';
|
|
|
26
26
|
* postProcessing.outputNode = outputPass;
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
-
* @augments
|
|
29
|
+
* @augments Node
|
|
30
30
|
*/
|
|
31
|
-
class RenderOutputNode extends
|
|
31
|
+
class RenderOutputNode extends Node {
|
|
32
32
|
|
|
33
33
|
static get type() {
|
|
34
34
|
|
|
@@ -69,6 +69,15 @@ class RenderOutputNode extends TempNode {
|
|
|
69
69
|
*/
|
|
70
70
|
this.outputColorSpace = outputColorSpace;
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Whether the color node uses premultiplied alpha. The output
|
|
74
|
+
* uses the same alpha mode.
|
|
75
|
+
*
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
this.premultipliedAlpha = true;
|
|
80
|
+
|
|
72
81
|
/**
|
|
73
82
|
* This flag can be used for type testing.
|
|
74
83
|
*
|
|
@@ -113,7 +122,11 @@ class RenderOutputNode extends TempNode {
|
|
|
113
122
|
outputNode = vec4( outputNode.rgb, outputNode.a.clamp( 0.0, 1.0 ) );
|
|
114
123
|
|
|
115
124
|
// unpremultiply
|
|
116
|
-
|
|
125
|
+
if ( this.premultipliedAlpha === true ) {
|
|
126
|
+
|
|
127
|
+
outputNode = unpremultiplyAlpha( outputNode );
|
|
128
|
+
|
|
129
|
+
}
|
|
117
130
|
|
|
118
131
|
// tone mapping
|
|
119
132
|
const toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;
|
|
@@ -134,7 +147,11 @@ class RenderOutputNode extends TempNode {
|
|
|
134
147
|
}
|
|
135
148
|
|
|
136
149
|
// premultiply in output color space
|
|
137
|
-
|
|
150
|
+
if ( this.premultipliedAlpha === true ) {
|
|
151
|
+
|
|
152
|
+
outputNode = premultiplyAlpha( outputNode );
|
|
153
|
+
|
|
154
|
+
}
|
|
138
155
|
|
|
139
156
|
return outputNode;
|
|
140
157
|
|
|
@@ -16,14 +16,7 @@ export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
16
16
|
|
|
17
17
|
return color.mul( exposure ).clamp();
|
|
18
18
|
|
|
19
|
-
} )
|
|
20
|
-
name: 'linearToneMapping',
|
|
21
|
-
type: 'vec3',
|
|
22
|
-
inputs: [
|
|
23
|
-
{ name: 'color', type: 'vec3' },
|
|
24
|
-
{ name: 'exposure', type: 'float' }
|
|
25
|
-
]
|
|
26
|
-
} );
|
|
19
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
27
20
|
|
|
28
21
|
/**
|
|
29
22
|
* Reinhard tone mapping.
|
|
@@ -42,14 +35,7 @@ export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =>
|
|
|
42
35
|
|
|
43
36
|
return color.div( color.add( 1.0 ) ).clamp();
|
|
44
37
|
|
|
45
|
-
} )
|
|
46
|
-
name: 'reinhardToneMapping',
|
|
47
|
-
type: 'vec3',
|
|
48
|
-
inputs: [
|
|
49
|
-
{ name: 'color', type: 'vec3' },
|
|
50
|
-
{ name: 'exposure', type: 'float' }
|
|
51
|
-
]
|
|
52
|
-
} );
|
|
38
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
53
39
|
|
|
54
40
|
/**
|
|
55
41
|
* Cineon tone mapping.
|
|
@@ -73,25 +59,18 @@ export const cineonToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
73
59
|
|
|
74
60
|
return a.div( b ).pow( 2.2 );
|
|
75
61
|
|
|
76
|
-
} )
|
|
77
|
-
name: 'cineonToneMapping',
|
|
78
|
-
type: 'vec3',
|
|
79
|
-
inputs: [
|
|
80
|
-
{ name: 'color', type: 'vec3' },
|
|
81
|
-
{ name: 'exposure', type: 'float' }
|
|
82
|
-
]
|
|
83
|
-
} );
|
|
62
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
84
63
|
|
|
85
64
|
// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs
|
|
86
65
|
|
|
87
66
|
const RRTAndODTFit = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
88
67
|
|
|
89
68
|
const a = color.mul( color.add( 0.0245786 ) ).sub( 0.000090537 );
|
|
90
|
-
const b = color.mul( color.
|
|
69
|
+
const b = color.mul( color.mul( 0.983729 ).add( 0.4329510 ) ).add( 0.238081 );
|
|
91
70
|
|
|
92
71
|
return a.div( b );
|
|
93
72
|
|
|
94
|
-
} );
|
|
73
|
+
}, { color: 'vec3', return: 'vec3' } );
|
|
95
74
|
|
|
96
75
|
/**
|
|
97
76
|
* ACESFilmic tone mapping.
|
|
@@ -132,14 +111,7 @@ export const acesFilmicToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =
|
|
|
132
111
|
// Clamp to [0, 1]
|
|
133
112
|
return color.clamp();
|
|
134
113
|
|
|
135
|
-
} )
|
|
136
|
-
name: 'acesFilmicToneMapping',
|
|
137
|
-
type: 'vec3',
|
|
138
|
-
inputs: [
|
|
139
|
-
{ name: 'color', type: 'vec3' },
|
|
140
|
-
{ name: 'exposure', type: 'float' }
|
|
141
|
-
]
|
|
142
|
-
} );
|
|
114
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
143
115
|
|
|
144
116
|
const LINEAR_REC2020_TO_LINEAR_SRGB = /*@__PURE__*/ mat3( vec3( 1.6605, - 0.1246, - 0.0182 ), vec3( - 0.5876, 1.1329, - 0.1006 ), vec3( - 0.0728, - 0.0083, 1.1187 ) );
|
|
145
117
|
const LINEAR_SRGB_TO_LINEAR_REC2020 = /*@__PURE__*/ mat3( vec3( 0.6274, 0.0691, 0.0164 ), vec3( 0.3293, 0.9195, 0.0880 ), vec3( 0.0433, 0.0113, 0.8956 ) );
|
|
@@ -152,7 +124,7 @@ const agxDefaultContrastApprox = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {
|
|
|
152
124
|
|
|
153
125
|
return float( 15.5 ).mul( x4.mul( x2 ) ).sub( mul( 40.14, x4.mul( x ) ) ).add( mul( 31.96, x4 ).sub( mul( 6.868, x2.mul( x ) ) ).add( mul( 0.4298, x2 ).add( mul( 0.1191, x ).sub( 0.00232 ) ) ) );
|
|
154
126
|
|
|
155
|
-
} );
|
|
127
|
+
}, { x: 'vec3', return: 'vec3' } );
|
|
156
128
|
|
|
157
129
|
/**
|
|
158
130
|
* AgX tone mapping.
|
|
@@ -185,14 +157,7 @@ export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
185
157
|
|
|
186
158
|
return colortone;
|
|
187
159
|
|
|
188
|
-
} )
|
|
189
|
-
name: 'agxToneMapping',
|
|
190
|
-
type: 'vec3',
|
|
191
|
-
inputs: [
|
|
192
|
-
{ name: 'color', type: 'vec3' },
|
|
193
|
-
{ name: 'exposure', type: 'float' }
|
|
194
|
-
]
|
|
195
|
-
} );
|
|
160
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
196
161
|
|
|
197
162
|
/**
|
|
198
163
|
* Neutral tone mapping.
|
|
@@ -232,11 +197,4 @@ export const neutralToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
|
|
|
232
197
|
|
|
233
198
|
return mix( color, vec3( newPeak ), g );
|
|
234
199
|
|
|
235
|
-
} )
|
|
236
|
-
name: 'neutralToneMapping',
|
|
237
|
-
type: 'vec3',
|
|
238
|
-
inputs: [
|
|
239
|
-
{ name: 'color', type: 'vec3' },
|
|
240
|
-
{ name: 'exposure', type: 'float' }
|
|
241
|
-
]
|
|
242
|
-
} );
|
|
200
|
+
}, { color: 'vec3', exposure: 'float', return: 'vec3' } );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject, vec4 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { rendererReference } from '../accessors/RendererReferenceNode.js';
|
|
4
4
|
|
|
@@ -9,9 +9,9 @@ import { error } from '../../utils.js';
|
|
|
9
9
|
/**
|
|
10
10
|
* This node represents a tone mapping operation.
|
|
11
11
|
*
|
|
12
|
-
* @augments
|
|
12
|
+
* @augments Node
|
|
13
13
|
*/
|
|
14
|
-
class ToneMappingNode extends
|
|
14
|
+
class ToneMappingNode extends Node {
|
|
15
15
|
|
|
16
16
|
static get type() {
|
|
17
17
|
|
|
@@ -64,13 +64,38 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
64
64
|
*/
|
|
65
65
|
this.alphaNode = alphaNode;
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* The outline material for toon materials without node modifications.
|
|
69
|
+
*
|
|
70
|
+
* @private
|
|
71
|
+
* @type {NodeMaterial}
|
|
72
|
+
*/
|
|
73
|
+
this._outlineMaterial = this._createMaterial();
|
|
74
|
+
|
|
67
75
|
/**
|
|
68
76
|
* An internal material cache.
|
|
69
77
|
*
|
|
70
78
|
* @private
|
|
71
|
-
* @type {
|
|
79
|
+
* @type {Map<Material, NodeMaterial>}
|
|
80
|
+
*/
|
|
81
|
+
this._materialCache = new Map();
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Disposes the outline material of a disposed toon material.
|
|
85
|
+
*
|
|
86
|
+
* @private
|
|
87
|
+
* @type {Function}
|
|
72
88
|
*/
|
|
73
|
-
this.
|
|
89
|
+
this._onMaterialDispose = ( event ) => {
|
|
90
|
+
|
|
91
|
+
const originalMaterial = event.target;
|
|
92
|
+
|
|
93
|
+
originalMaterial.removeEventListener( 'dispose', this._onMaterialDispose );
|
|
94
|
+
|
|
95
|
+
this._materialCache.get( originalMaterial ).dispose();
|
|
96
|
+
this._materialCache.delete( originalMaterial );
|
|
97
|
+
|
|
98
|
+
};
|
|
74
99
|
|
|
75
100
|
/**
|
|
76
101
|
* The name of this pass.
|
|
@@ -115,6 +140,27 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
115
140
|
|
|
116
141
|
}
|
|
117
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
145
|
+
*/
|
|
146
|
+
dispose() {
|
|
147
|
+
|
|
148
|
+
super.dispose();
|
|
149
|
+
|
|
150
|
+
this._outlineMaterial.dispose();
|
|
151
|
+
|
|
152
|
+
for ( const [ originalMaterial, outlineMaterial ] of this._materialCache ) {
|
|
153
|
+
|
|
154
|
+
originalMaterial.removeEventListener( 'dispose', this._onMaterialDispose );
|
|
155
|
+
|
|
156
|
+
outlineMaterial.dispose();
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
this._materialCache.clear();
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
118
164
|
/**
|
|
119
165
|
* Creates the material used for outline rendering.
|
|
120
166
|
*
|
|
@@ -158,14 +204,32 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
158
204
|
*/
|
|
159
205
|
_getOutlineMaterial( originalMaterial ) {
|
|
160
206
|
|
|
207
|
+
if ( ! originalMaterial.positionNode ) return this._outlineMaterial; // early out if there are no node modifications
|
|
208
|
+
|
|
209
|
+
let force = false;
|
|
161
210
|
let outlineMaterial = this._materialCache.get( originalMaterial );
|
|
162
211
|
|
|
212
|
+
// create
|
|
213
|
+
|
|
163
214
|
if ( outlineMaterial === undefined ) {
|
|
164
215
|
|
|
165
216
|
outlineMaterial = this._createMaterial();
|
|
166
217
|
|
|
167
218
|
this._materialCache.set( originalMaterial, outlineMaterial );
|
|
168
219
|
|
|
220
|
+
originalMaterial.addEventListener( 'dispose', this._onMaterialDispose );
|
|
221
|
+
|
|
222
|
+
force = true;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// update
|
|
227
|
+
|
|
228
|
+
if ( outlineMaterial.version !== originalMaterial.version || force === true ) {
|
|
229
|
+
|
|
230
|
+
outlineMaterial.positionNode = originalMaterial.positionNode || null;
|
|
231
|
+
outlineMaterial.version = originalMaterial.version;
|
|
232
|
+
|
|
169
233
|
}
|
|
170
234
|
|
|
171
235
|
return outlineMaterial;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { float, Fn, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
|
|
2
|
+
import { EPSILON, float, Fn, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
import { cameraNear, cameraFar } from '../accessors/Camera.js';
|
|
4
4
|
import { positionView } from '../accessors/Position.js';
|
|
5
5
|
import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
|
|
@@ -61,6 +61,12 @@ class ViewportDepthNode extends Node {
|
|
|
61
61
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
isCacheable( /*builder*/ ) {
|
|
65
|
+
|
|
66
|
+
return false;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
64
70
|
generate( builder ) {
|
|
65
71
|
|
|
66
72
|
const { scope } = this;
|
|
@@ -92,7 +98,7 @@ class ViewportDepthNode extends Node {
|
|
|
92
98
|
|
|
93
99
|
} else if ( scope === ViewportDepthNode.DEPTH ) {
|
|
94
100
|
|
|
95
|
-
if ( camera.
|
|
101
|
+
if ( camera.isOrthographicCamera !== true ) {
|
|
96
102
|
|
|
97
103
|
node = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );
|
|
98
104
|
|
|
@@ -106,7 +112,7 @@ class ViewportDepthNode extends Node {
|
|
|
106
112
|
|
|
107
113
|
if ( value !== null ) {
|
|
108
114
|
|
|
109
|
-
if ( camera.
|
|
115
|
+
if ( camera.isOrthographicCamera !== true ) {
|
|
110
116
|
|
|
111
117
|
const viewZ = perspectiveDepthToViewZ( value, cameraNear, cameraFar );
|
|
112
118
|
|
|
@@ -276,7 +282,7 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
|
|
|
276
282
|
// we modify the formula here to use 'viewZ' instead of 'w'. The other functions expect a negative viewZ,
|
|
277
283
|
// so we do the same here, hence the 'viewZ.negate()' call.
|
|
278
284
|
// For visual representation of this depth curve, see https://www.desmos.com/calculator/uyqk0vex1u
|
|
279
|
-
near = near.max(
|
|
285
|
+
near = near.max( EPSILON ).toVar();
|
|
280
286
|
const numerator = log2( viewZ.negate().div( near ) );
|
|
281
287
|
const denominator = log2( far.div( near ) );
|
|
282
288
|
return numerator.div( denominator );
|
|
@@ -303,6 +309,30 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
|
|
|
303
309
|
|
|
304
310
|
};
|
|
305
311
|
|
|
312
|
+
/**
|
|
313
|
+
* TSL function for retrieving the depth value as produced by the camera's projection matrix.
|
|
314
|
+
*
|
|
315
|
+
* @tsl
|
|
316
|
+
* @function
|
|
317
|
+
* @param {Node<float>} depth - The depth value.
|
|
318
|
+
* @param {Node<float>} near - The camera's near value.
|
|
319
|
+
* @param {Node<float>} far - The camera's far value.
|
|
320
|
+
* @returns {Node<float>}
|
|
321
|
+
*/
|
|
322
|
+
export const projectionDepth = /*@__PURE__*/ Fn( ( [ depth, near, far ], builder ) => {
|
|
323
|
+
|
|
324
|
+
if ( builder.renderer.logarithmicDepthBuffer === true ) {
|
|
325
|
+
|
|
326
|
+
const viewZ = logarithmicDepthToViewZ( depth, near, far );
|
|
327
|
+
|
|
328
|
+
return viewZToPerspectiveDepth( viewZ, near, far );
|
|
329
|
+
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return depth;
|
|
333
|
+
|
|
334
|
+
} );
|
|
335
|
+
|
|
306
336
|
/**
|
|
307
337
|
* TSL function for defining a value for the current fragment's depth.
|
|
308
338
|
*
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { normalView as NormalView } from '../../accessors/Normal.js';
|
|
2
|
+
import { positionViewDirection } from '../../accessors/Position.js';
|
|
3
|
+
import { Fn } from '../../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
const EON_EPSILON = 1e-7;
|
|
6
|
+
const FON_A_COEFFICIENT = 0.5 - 2 / ( 3 * Math.PI );
|
|
7
|
+
const FON_AVERAGE_ALBEDO_COEFFICIENT = 2 / 3 - 28 / ( 15 * Math.PI );
|
|
8
|
+
|
|
9
|
+
const FON_DirectionalAlbedo = /*@__PURE__*/ Fn( ( { mu, roughness, A } ) => {
|
|
10
|
+
|
|
11
|
+
const muComp = mu.oneMinus();
|
|
12
|
+
const gOverPi = muComp.mul(
|
|
13
|
+
muComp.mul(
|
|
14
|
+
muComp.mul(
|
|
15
|
+
muComp.mul( 0.0714429953 ).sub( 0.332181442 )
|
|
16
|
+
).add( 0.491881867 )
|
|
17
|
+
).add( 0.0571085289 )
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
return A.mul( roughness.mul( gOverPi ).add( 1.0 ) );
|
|
21
|
+
|
|
22
|
+
}, { mu: 'float', roughness: 'float', A: 'float', return: 'float' } );
|
|
23
|
+
|
|
24
|
+
// Portsmouth et al. 2025, "EON: A Practical Energy-Preserving Rough Diffuse BRDF"
|
|
25
|
+
// https://jcgt.org/published/0014/01/06/
|
|
26
|
+
const BRDF_EON = /*@__PURE__*/ Fn( ( { lightDirection, diffuseColor, roughness, normalView = NormalView, viewDirection = positionViewDirection } ) => {
|
|
27
|
+
|
|
28
|
+
const rho = diffuseColor.clamp();
|
|
29
|
+
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
30
|
+
const dotNV = normalView.dot( viewDirection ).clamp();
|
|
31
|
+
const s = lightDirection.dot( viewDirection ).sub( dotNL.mul( dotNV ) );
|
|
32
|
+
const sOverT = s.greaterThan( 0.0 ).select( s.div( dotNL.max( dotNV ).max( EON_EPSILON ) ), s );
|
|
33
|
+
|
|
34
|
+
const A = roughness.mul( FON_A_COEFFICIENT ).add( 1.0 ).reciprocal();
|
|
35
|
+
const singleScatter = rho.mul( 1 / Math.PI, A, roughness.mul( sOverT ).add( 1.0 ) );
|
|
36
|
+
|
|
37
|
+
const averageAlbedo = A.mul( roughness.mul( FON_AVERAGE_ALBEDO_COEFFICIENT ).add( 1.0 ) );
|
|
38
|
+
const albedoV = FON_DirectionalAlbedo( { mu: dotNV, roughness, A } );
|
|
39
|
+
const albedoL = FON_DirectionalAlbedo( { mu: dotNL, roughness, A } );
|
|
40
|
+
const rhoMultiScatter = rho.mul( rho, averageAlbedo ).div( rho.mul( averageAlbedo.oneMinus() ).oneMinus().max( EON_EPSILON ) );
|
|
41
|
+
const multiScatter = rhoMultiScatter.mul(
|
|
42
|
+
1 / Math.PI,
|
|
43
|
+
albedoV.oneMinus().max( EON_EPSILON ),
|
|
44
|
+
albedoL.oneMinus().max( EON_EPSILON )
|
|
45
|
+
).div( averageAlbedo.oneMinus().max( EON_EPSILON ) );
|
|
46
|
+
const eon = singleScatter.add( multiScatter );
|
|
47
|
+
|
|
48
|
+
return roughness.lessThanEqual( EON_EPSILON ).select( rho.mul( 1 / Math.PI ), eon );
|
|
49
|
+
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
export const EON_DirectionalAlbedo = /*@__PURE__*/ Fn( ( { diffuseColor, roughness, dotNV } ) => {
|
|
53
|
+
|
|
54
|
+
const rho = diffuseColor.clamp();
|
|
55
|
+
const A = roughness.mul( FON_A_COEFFICIENT ).add( 1.0 ).reciprocal();
|
|
56
|
+
const directionalAlbedo = FON_DirectionalAlbedo( { mu: dotNV.clamp(), roughness, A } );
|
|
57
|
+
const averageAlbedo = A.mul( roughness.mul( FON_AVERAGE_ALBEDO_COEFFICIENT ).add( 1.0 ) );
|
|
58
|
+
const rhoMultiScatter = rho.mul( rho, averageAlbedo ).div( rho.mul( averageAlbedo.oneMinus() ).oneMinus().max( EON_EPSILON ) );
|
|
59
|
+
const eonAlbedo = rho.mul( directionalAlbedo ).add( rhoMultiScatter.mul( directionalAlbedo.oneMinus() ) );
|
|
60
|
+
|
|
61
|
+
return roughness.lessThanEqual( EON_EPSILON ).select( rho, eonAlbedo );
|
|
62
|
+
|
|
63
|
+
}, { diffuseColor: 'vec3', roughness: 'float', dotNV: 'float', return: 'vec3' } );
|
|
64
|
+
|
|
65
|
+
export default BRDF_EON;
|
|
@@ -11,7 +11,7 @@ import { Fn, defined } from '../../tsl/TSLBase.js';
|
|
|
11
11
|
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
|
12
12
|
const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, normalView = NormalView, viewDirection = positionViewDirection, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {
|
|
13
13
|
|
|
14
|
-
const alpha = roughness.pow2(); //
|
|
14
|
+
const alpha = roughness.max( 0.045 ).pow2(); // punctual lights need a minimum roughness to show a highlight
|
|
15
15
|
|
|
16
16
|
const halfDir = lightDirection.add( viewDirection ).normalize();
|
|
17
17
|
|
|
@@ -38,8 +38,10 @@ const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, no
|
|
|
38
38
|
const dotBV = anisotropyB.dot( viewDirection );
|
|
39
39
|
const dotBH = anisotropyB.dot( halfDir );
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const clampedAlphaT = alphaT.max( alpha );
|
|
42
|
+
|
|
43
|
+
V = V_GGX_SmithCorrelated_Anisotropic( { alphaT: clampedAlphaT, alphaB: alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } );
|
|
44
|
+
D = D_GGX_Anisotropic( { alphaT: clampedAlphaT, alphaB: alpha, dotNH, dotTH, dotBH } );
|
|
43
45
|
|
|
44
46
|
} else {
|
|
45
47
|
|
|
@@ -15,14 +15,7 @@ const D_Charlie = /*@__PURE__*/ Fn( ( { roughness, dotNH } ) => {
|
|
|
15
15
|
|
|
16
16
|
return float( 2.0 ).add( invAlpha ).mul( sin2h.pow( invAlpha.mul( 0.5 ) ) ).div( 2.0 * Math.PI );
|
|
17
17
|
|
|
18
|
-
} )
|
|
19
|
-
name: 'D_Charlie',
|
|
20
|
-
type: 'float',
|
|
21
|
-
inputs: [
|
|
22
|
-
{ name: 'roughness', type: 'float' },
|
|
23
|
-
{ name: 'dotNH', type: 'float' }
|
|
24
|
-
]
|
|
25
|
-
} );
|
|
18
|
+
}, { roughness: 'float', dotNH: 'float', return: 'float' } );
|
|
26
19
|
|
|
27
20
|
// https://github.com/google/filament/blob/master/shaders/src/brdf.fs
|
|
28
21
|
const V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => {
|
|
@@ -30,14 +23,7 @@ const V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => {
|
|
|
30
23
|
// Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886"
|
|
31
24
|
return float( 1.0 ).div( float( 4.0 ).mul( dotNL.add( dotNV ).sub( dotNL.mul( dotNV ) ) ) ).clamp();
|
|
32
25
|
|
|
33
|
-
} )
|
|
34
|
-
name: 'V_Neubelt',
|
|
35
|
-
type: 'float',
|
|
36
|
-
inputs: [
|
|
37
|
-
{ name: 'dotNV', type: 'float' },
|
|
38
|
-
{ name: 'dotNL', type: 'float' }
|
|
39
|
-
]
|
|
40
|
-
} );
|
|
26
|
+
}, { dotNV: 'float', dotNL: 'float', return: 'float' } );
|
|
41
27
|
|
|
42
28
|
const BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
|
|
43
29
|
|
|
@@ -11,13 +11,6 @@ const D_GGX = /*@__PURE__*/ Fn( ( { alpha, dotNH } ) => {
|
|
|
11
11
|
|
|
12
12
|
return a2.div( denom.pow2() ).mul( 1 / Math.PI );
|
|
13
13
|
|
|
14
|
-
} )
|
|
15
|
-
name: 'D_GGX',
|
|
16
|
-
type: 'float',
|
|
17
|
-
inputs: [
|
|
18
|
-
{ name: 'alpha', type: 'float' },
|
|
19
|
-
{ name: 'dotNH', type: 'float' }
|
|
20
|
-
]
|
|
21
|
-
} ); // validated
|
|
14
|
+
}, { alpha: 'float', dotNH: 'float', return: 'float' } ); // validated
|
|
22
15
|
|
|
23
16
|
export default D_GGX;
|