@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
|
@@ -13,16 +13,13 @@ const D_GGX_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB, dotNH, dotTH, do
|
|
|
13
13
|
|
|
14
14
|
return RECIPROCAL_PI.mul( a2.mul( w2.pow2() ) );
|
|
15
15
|
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{ name: 'dotTH', type: 'float', qualifier: 'in' },
|
|
24
|
-
{ name: 'dotBH', type: 'float', qualifier: 'in' }
|
|
25
|
-
]
|
|
16
|
+
}, {
|
|
17
|
+
alphaT: 'float',
|
|
18
|
+
alphaB: 'float',
|
|
19
|
+
dotNH: 'float',
|
|
20
|
+
dotTH: 'float',
|
|
21
|
+
dotBH: 'float',
|
|
22
|
+
return: 'float'
|
|
26
23
|
} );
|
|
27
24
|
|
|
28
25
|
export default D_GGX_Anisotropic;
|
|
@@ -22,15 +22,7 @@ const LTC_Uv = /*@__PURE__*/ Fn( ( { N, V, roughness } ) => {
|
|
|
22
22
|
|
|
23
23
|
return uv;
|
|
24
24
|
|
|
25
|
-
} )
|
|
26
|
-
name: 'LTC_Uv',
|
|
27
|
-
type: 'vec2',
|
|
28
|
-
inputs: [
|
|
29
|
-
{ name: 'N', type: 'vec3' },
|
|
30
|
-
{ name: 'V', type: 'vec3' },
|
|
31
|
-
{ name: 'roughness', type: 'float' }
|
|
32
|
-
]
|
|
33
|
-
} );
|
|
25
|
+
}, { N: 'vec3', V: 'vec3', roughness: 'float', return: 'vec2' } );
|
|
34
26
|
|
|
35
27
|
const LTC_ClippedSphereFormFactor = /*@__PURE__*/ Fn( ( { f } ) => {
|
|
36
28
|
|
|
@@ -41,13 +33,7 @@ const LTC_ClippedSphereFormFactor = /*@__PURE__*/ Fn( ( { f } ) => {
|
|
|
41
33
|
|
|
42
34
|
return max( l.mul( l ).add( f.z ).div( l.add( 1.0 ) ), 0 );
|
|
43
35
|
|
|
44
|
-
} )
|
|
45
|
-
name: 'LTC_ClippedSphereFormFactor',
|
|
46
|
-
type: 'float',
|
|
47
|
-
inputs: [
|
|
48
|
-
{ name: 'f', type: 'vec3' }
|
|
49
|
-
]
|
|
50
|
-
} );
|
|
36
|
+
}, { f: 'vec3', return: 'float' } );
|
|
51
37
|
|
|
52
38
|
const LTC_EdgeVectorFormFactor = /*@__PURE__*/ Fn( ( { v1, v2 } ) => {
|
|
53
39
|
|
|
@@ -63,14 +49,7 @@ const LTC_EdgeVectorFormFactor = /*@__PURE__*/ Fn( ( { v1, v2 } ) => {
|
|
|
63
49
|
|
|
64
50
|
return v1.cross( v2 ).mul( theta_sintheta );
|
|
65
51
|
|
|
66
|
-
} )
|
|
67
|
-
name: 'LTC_EdgeVectorFormFactor',
|
|
68
|
-
type: 'vec3',
|
|
69
|
-
inputs: [
|
|
70
|
-
{ name: 'v1', type: 'vec3' },
|
|
71
|
-
{ name: 'v2', type: 'vec3' }
|
|
72
|
-
]
|
|
73
|
-
} );
|
|
52
|
+
}, { v1: 'vec3', v2: 'vec3', return: 'vec3' } );
|
|
74
53
|
|
|
75
54
|
const LTC_Evaluate = /*@__PURE__*/ Fn( ( { N, V, P, mInv, p0, p1, p2, p3 } ) => {
|
|
76
55
|
|
|
@@ -112,19 +91,16 @@ const LTC_Evaluate = /*@__PURE__*/ Fn( ( { N, V, P, mInv, p0, p1, p2, p3 } ) =>
|
|
|
112
91
|
|
|
113
92
|
return result;
|
|
114
93
|
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
{ name: 'p2', type: 'vec3' },
|
|
126
|
-
{ name: 'p3', type: 'vec3' }
|
|
127
|
-
]
|
|
94
|
+
}, {
|
|
95
|
+
N: 'vec3',
|
|
96
|
+
V: 'vec3',
|
|
97
|
+
P: 'vec3',
|
|
98
|
+
mInv: 'mat3',
|
|
99
|
+
p0: 'vec3',
|
|
100
|
+
p1: 'vec3',
|
|
101
|
+
p2: 'vec3',
|
|
102
|
+
p3: 'vec3',
|
|
103
|
+
return: 'vec3'
|
|
128
104
|
} );
|
|
129
105
|
|
|
130
106
|
const LTC_Evaluate_Volume = /*@__PURE__*/ Fn( ( { P, p0, p1, p2, p3 } ) => {
|
|
@@ -160,16 +136,13 @@ const LTC_Evaluate_Volume = /*@__PURE__*/ Fn( ( { P, p0, p1, p2, p3 } ) => {
|
|
|
160
136
|
|
|
161
137
|
return result;
|
|
162
138
|
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
{ name: 'p2', type: 'vec3' },
|
|
171
|
-
{ name: 'p3', type: 'vec3' }
|
|
172
|
-
]
|
|
139
|
+
}, {
|
|
140
|
+
P: 'vec3',
|
|
141
|
+
p0: 'vec3',
|
|
142
|
+
p1: 'vec3',
|
|
143
|
+
p2: 'vec3',
|
|
144
|
+
p3: 'vec3',
|
|
145
|
+
return: 'vec3'
|
|
173
146
|
} );
|
|
174
147
|
|
|
175
148
|
export { LTC_Evaluate, LTC_Evaluate_Volume, LTC_Uv };
|
|
@@ -8,14 +8,6 @@ const Schlick_to_F0 = /*@__PURE__*/ Fn( ( { f, f90, dotVH } ) => {
|
|
|
8
8
|
|
|
9
9
|
return f.sub( vec3( f90 ).mul( x5 ) ).div( x5.oneMinus() );
|
|
10
10
|
|
|
11
|
-
} )
|
|
12
|
-
name: 'Schlick_to_F0',
|
|
13
|
-
type: 'vec3',
|
|
14
|
-
inputs: [
|
|
15
|
-
{ name: 'f', type: 'vec3' },
|
|
16
|
-
{ name: 'f90', type: 'float' },
|
|
17
|
-
{ name: 'dotVH', type: 'float' }
|
|
18
|
-
]
|
|
19
|
-
} );
|
|
11
|
+
}, { f: 'vec3', f90: 'float', dotVH: 'float', return: 'vec3' } );
|
|
20
12
|
|
|
21
13
|
export default Schlick_to_F0;
|
|
@@ -13,14 +13,6 @@ const V_GGX_SmithCorrelated = /*@__PURE__*/ Fn( ( { alpha, dotNL, dotNV } ) => {
|
|
|
13
13
|
|
|
14
14
|
return div( 0.5, gv.add( gl ).max( EPSILON ) );
|
|
15
15
|
|
|
16
|
-
} )
|
|
17
|
-
name: 'V_GGX_SmithCorrelated',
|
|
18
|
-
type: 'float',
|
|
19
|
-
inputs: [
|
|
20
|
-
{ name: 'alpha', type: 'float' },
|
|
21
|
-
{ name: 'dotNL', type: 'float' },
|
|
22
|
-
{ name: 'dotNV', type: 'float' }
|
|
23
|
-
]
|
|
24
|
-
} ); // validated
|
|
16
|
+
}, { alpha: 'float', dotNL: 'float', dotNV: 'float', return: 'float' } ); // validated
|
|
25
17
|
|
|
26
18
|
export default V_GGX_SmithCorrelated;
|
|
@@ -11,19 +11,16 @@ const V_GGX_SmithCorrelated_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB,
|
|
|
11
11
|
|
|
12
12
|
return div( 0.5, gv.add( gl ).max( EPSILON ) );
|
|
13
13
|
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{ name: 'dotNV', type: 'float', qualifier: 'in' },
|
|
25
|
-
{ name: 'dotNL', type: 'float', qualifier: 'in' }
|
|
26
|
-
]
|
|
14
|
+
}, {
|
|
15
|
+
alphaT: 'float',
|
|
16
|
+
alphaB: 'float',
|
|
17
|
+
dotTV: 'float',
|
|
18
|
+
dotBV: 'float',
|
|
19
|
+
dotTL: 'float',
|
|
20
|
+
dotBL: 'float',
|
|
21
|
+
dotNV: 'float',
|
|
22
|
+
dotNL: 'float',
|
|
23
|
+
return: 'float'
|
|
27
24
|
} );
|
|
28
25
|
|
|
29
26
|
export default V_GGX_SmithCorrelated_Anisotropic;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
2
|
+
import BRDF_EON, { EON_DirectionalAlbedo } from './BSDF/BRDF_EON.js';
|
|
2
3
|
import BRDF_GGX from './BSDF/BRDF_GGX.js';
|
|
3
4
|
import DFGLUT from './BSDF/DFGLUT.js';
|
|
4
5
|
import EnvironmentBRDF from './BSDF/EnvironmentBRDF.js';
|
|
@@ -7,7 +8,7 @@ import Schlick_to_F0 from './BSDF/Schlick_to_F0.js';
|
|
|
7
8
|
import BRDF_Sheen from './BSDF/BRDF_Sheen.js';
|
|
8
9
|
import { LTC_Evaluate, LTC_Uv } from './BSDF/LTC.js';
|
|
9
10
|
import LightingModel from '../core/LightingModel.js';
|
|
10
|
-
import { diffuseColor, diffuseContribution, specularColor, specularColorBlended, specularF90, roughness, metalness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion, retroreflectivity } from '../core/PropertyNode.js';
|
|
11
|
+
import { diffuseColor, diffuseContribution, diffuseRoughness, specularColor, specularColorBlended, specularF90, roughness, metalness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion, retroreflectivity } from '../core/PropertyNode.js';
|
|
11
12
|
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
12
13
|
import { positionViewDirection, positionView, positionWorld } from '../accessors/Position.js';
|
|
13
14
|
import { Fn, float, vec2, vec3, vec4, mat3, If } from '../tsl/TSLBase.js';
|
|
@@ -40,16 +41,13 @@ const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, mod
|
|
|
40
41
|
// The thickness is specified in local space.
|
|
41
42
|
return normalize( refractionVector ).mul( thickness.mul( modelScale ) );
|
|
42
43
|
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{ name: 'ior', type: 'float' },
|
|
51
|
-
{ name: 'modelMatrix', type: 'mat4' }
|
|
52
|
-
]
|
|
44
|
+
}, {
|
|
45
|
+
n: 'vec3',
|
|
46
|
+
v: 'vec3',
|
|
47
|
+
thickness: 'float',
|
|
48
|
+
ior: 'float',
|
|
49
|
+
modelMatrix: 'mat4',
|
|
50
|
+
return: 'vec3'
|
|
53
51
|
} );
|
|
54
52
|
|
|
55
53
|
const applyIorToRoughness = /*@__PURE__*/ Fn( ( [ roughness, ior ] ) => {
|
|
@@ -58,14 +56,7 @@ const applyIorToRoughness = /*@__PURE__*/ Fn( ( [ roughness, ior ] ) => {
|
|
|
58
56
|
// an IOR of 1.5 results in the default amount of microfacet refraction.
|
|
59
57
|
return roughness.mul( clamp( ior.mul( 2.0 ).sub( 2.0 ), 0.0, 1.0 ) );
|
|
60
58
|
|
|
61
|
-
} )
|
|
62
|
-
name: 'applyIorToRoughness',
|
|
63
|
-
type: 'float',
|
|
64
|
-
inputs: [
|
|
65
|
-
{ name: 'roughness', type: 'float' },
|
|
66
|
-
{ name: 'ior', type: 'float' }
|
|
67
|
-
]
|
|
68
|
-
} );
|
|
59
|
+
}, { roughness: 'float', ior: 'float', return: 'float' } );
|
|
69
60
|
|
|
70
61
|
const viewportBackSideTexture = /*@__PURE__*/ viewportMipTexture();
|
|
71
62
|
const viewportFrontSideTexture = /*@__PURE__*/ viewportOpaqueMipTexture();
|
|
@@ -98,15 +89,7 @@ const volumeAttenuation = /*@__PURE__*/ Fn( ( [ transmissionDistance, attenuatio
|
|
|
98
89
|
// Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.
|
|
99
90
|
return vec3( 1.0 );
|
|
100
91
|
|
|
101
|
-
} )
|
|
102
|
-
name: 'volumeAttenuation',
|
|
103
|
-
type: 'vec3',
|
|
104
|
-
inputs: [
|
|
105
|
-
{ name: 'transmissionDistance', type: 'float' },
|
|
106
|
-
{ name: 'attenuationColor', type: 'vec3' },
|
|
107
|
-
{ name: 'attenuationDistance', type: 'float' }
|
|
108
|
-
]
|
|
109
|
-
} );
|
|
92
|
+
}, { transmissionDistance: 'float', attenuationColor: 'vec3', attenuationDistance: 'float', return: 'vec3' } );
|
|
110
93
|
|
|
111
94
|
const getIBLVolumeRefraction = /*@__PURE__*/ Fn( ( [ n, v, roughness, diffuseColor, specularColor, specularF90, position, modelMatrix, viewMatrix, projMatrix, ior, thickness, attenuationColor, attenuationDistance, dispersion ] ) => {
|
|
112
95
|
|
|
@@ -294,16 +277,13 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
|
|
|
294
277
|
// Since out of gamut colors might be produced, negative color values are clamped to 0.
|
|
295
278
|
return I.max( vec3( 0.0 ) );
|
|
296
279
|
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
{ name: 'thinFilmThickness', type: 'float' },
|
|
305
|
-
{ name: 'baseF0', type: 'vec3' }
|
|
306
|
-
]
|
|
280
|
+
}, {
|
|
281
|
+
outsideIOR: 'float',
|
|
282
|
+
eta2: 'float',
|
|
283
|
+
cosTheta1: 'float',
|
|
284
|
+
thinFilmThickness: 'float',
|
|
285
|
+
baseF0: 'vec3',
|
|
286
|
+
return: 'vec3'
|
|
307
287
|
} );
|
|
308
288
|
|
|
309
289
|
//
|
|
@@ -325,7 +305,7 @@ const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
|
|
|
325
305
|
|
|
326
306
|
return DG.saturate();
|
|
327
307
|
|
|
328
|
-
} );
|
|
308
|
+
}, { normal: 'vec3', viewDir: 'vec3', roughness: 'float', return: 'float' } );
|
|
329
309
|
|
|
330
310
|
const clearcoatF0 = vec3( 0.04 );
|
|
331
311
|
const clearcoatF90 = float( 1 );
|
|
@@ -348,8 +328,9 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
348
328
|
* @param {boolean} [transmission=false] - Whether transmission is supported or not.
|
|
349
329
|
* @param {boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
350
330
|
* @param {boolean} [retroreflection=false] - Whether retroreflection is supported or not.
|
|
331
|
+
* @param {boolean} [diffuseRoughness=false] - Whether EON rough diffuse reflection is supported or not.
|
|
351
332
|
*/
|
|
352
|
-
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, retroreflection = false ) {
|
|
333
|
+
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, retroreflection = false, diffuseRoughness = false ) {
|
|
353
334
|
|
|
354
335
|
super();
|
|
355
336
|
|
|
@@ -409,6 +390,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
409
390
|
*/
|
|
410
391
|
this.retroreflection = retroreflection;
|
|
411
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Whether EON rough diffuse reflection is supported or not.
|
|
395
|
+
*
|
|
396
|
+
* @type {boolean}
|
|
397
|
+
* @default false
|
|
398
|
+
*/
|
|
399
|
+
this.diffuseRoughness = diffuseRoughness;
|
|
400
|
+
|
|
412
401
|
/**
|
|
413
402
|
* The clear coat radiance.
|
|
414
403
|
*
|
|
@@ -481,6 +470,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
481
470
|
*/
|
|
482
471
|
this.dfg = null;
|
|
483
472
|
|
|
473
|
+
/**
|
|
474
|
+
* The EON directional albedo, shared by the indirect lighting paths.
|
|
475
|
+
*
|
|
476
|
+
* @type {?Node}
|
|
477
|
+
* @default null
|
|
478
|
+
*/
|
|
479
|
+
this.eonDirectionalAlbedo = null;
|
|
480
|
+
|
|
484
481
|
/**
|
|
485
482
|
* The multi-scattering energy compensation for direct lighting.
|
|
486
483
|
*
|
|
@@ -489,6 +486,22 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
489
486
|
*/
|
|
490
487
|
this.multiScatteringCompensation = null;
|
|
491
488
|
|
|
489
|
+
/**
|
|
490
|
+
* The dielectric single-scattering term, shared by the indirect lighting paths.
|
|
491
|
+
*
|
|
492
|
+
* @type {?Node}
|
|
493
|
+
* @default null
|
|
494
|
+
*/
|
|
495
|
+
this.singleScatteringDielectric = null;
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* The dielectric multi-scattering term, shared by the indirect lighting paths.
|
|
499
|
+
*
|
|
500
|
+
* @type {?Node}
|
|
501
|
+
* @default null
|
|
502
|
+
*/
|
|
503
|
+
this.multiScatteringDielectric = null;
|
|
504
|
+
|
|
492
505
|
}
|
|
493
506
|
|
|
494
507
|
/**
|
|
@@ -588,6 +601,17 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
588
601
|
// Compensate for the energy lost to multiple scattering, tinting the added term by F0 ( equation 16 )
|
|
589
602
|
this.multiScatteringCompensation = specularColorBlended.mul( Ess.reciprocal().sub( 1.0 ) ).add( 1.0 ).toConst( 'multiScatteringCompensation' );
|
|
590
603
|
|
|
604
|
+
this.singleScatteringDielectric = vec3().toVar( 'singleScatteringDielectric' );
|
|
605
|
+
this.multiScatteringDielectric = vec3().toVar( 'multiScatteringDielectric' );
|
|
606
|
+
|
|
607
|
+
this.computeMultiscattering( this.singleScatteringDielectric, this.multiScatteringDielectric, specularF90, specularColor, this.iridescenceF0Dielectric );
|
|
608
|
+
|
|
609
|
+
if ( this.diffuseRoughness === true ) {
|
|
610
|
+
|
|
611
|
+
this.eonDirectionalAlbedo = EON_DirectionalAlbedo( { diffuseColor: diffuseColor.rgb, roughness: diffuseRoughness, dotNV: dotNV } );
|
|
612
|
+
|
|
613
|
+
}
|
|
614
|
+
|
|
591
615
|
super.start( builder );
|
|
592
616
|
|
|
593
617
|
}
|
|
@@ -653,7 +677,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
653
677
|
const dotVH = positionViewDirection.dot( halfDir ).clamp();
|
|
654
678
|
let F = F_Schlick( { f0: specularColor, f90: specularF90, dotVH } );
|
|
655
679
|
|
|
656
|
-
let specularBRDF = BRDF_GGX( { lightDirection, f0: specularColorBlended, f90:
|
|
680
|
+
let specularBRDF = BRDF_GGX( { lightDirection, f0: specularColorBlended, f90: specularF90, roughness, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy } );
|
|
657
681
|
|
|
658
682
|
if ( this.retroreflection === true ) {
|
|
659
683
|
|
|
@@ -663,14 +687,18 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
663
687
|
const retroHalfDir = lightDirection.add( retroViewDirection ).normalize();
|
|
664
688
|
const dotRetroVH = retroViewDirection.dot( retroHalfDir ).clamp();
|
|
665
689
|
const retroF = F_Schlick( { f0: specularColor, f90: specularF90, dotVH: dotRetroVH } );
|
|
666
|
-
const retroSpecularBRDF = BRDF_GGX( { lightDirection, viewDirection: retroViewDirection, f0: specularColorBlended, f90:
|
|
690
|
+
const retroSpecularBRDF = BRDF_GGX( { lightDirection, viewDirection: retroViewDirection, f0: specularColorBlended, f90: specularF90, roughness, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy } );
|
|
667
691
|
|
|
668
692
|
F = mix( F, retroF, retroreflectivity.clamp() );
|
|
669
693
|
specularBRDF = mix( specularBRDF, retroSpecularBRDF, retroreflectivity.clamp() );
|
|
670
694
|
|
|
671
695
|
}
|
|
672
696
|
|
|
673
|
-
|
|
697
|
+
const diffuseBRDF = this.diffuseRoughness
|
|
698
|
+
? BRDF_EON( { lightDirection, diffuseColor: diffuseColor.rgb, roughness: diffuseRoughness } ).mul( metalness.oneMinus() )
|
|
699
|
+
: BRDF_Lambert( { diffuseColor: diffuseContribution } );
|
|
700
|
+
|
|
701
|
+
reflectedLight.directDiffuse.addAssign( irradiance.mul( diffuseBRDF ).mul( F.oneMinus() ) );
|
|
674
702
|
|
|
675
703
|
reflectedLight.directSpecular.addAssign( irradiance.mul( specularBRDF ).mul( this.multiScatteringCompensation ) );
|
|
676
704
|
|
|
@@ -760,12 +788,14 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
760
788
|
const { irradiance, reflectedLight } = builder.context;
|
|
761
789
|
|
|
762
790
|
// Energy reflected by the specular lobe is not available to the diffuse layer
|
|
763
|
-
const singleScattering =
|
|
764
|
-
const multiScattering =
|
|
791
|
+
const singleScattering = this.singleScatteringDielectric;
|
|
792
|
+
const multiScattering = this.multiScatteringDielectric;
|
|
765
793
|
|
|
766
|
-
|
|
794
|
+
const diffuseBRDF = this.diffuseRoughness
|
|
795
|
+
? this.eonDirectionalAlbedo.mul( metalness.oneMinus(), 1 / Math.PI )
|
|
796
|
+
: BRDF_Lambert( { diffuseColor: diffuseContribution } );
|
|
767
797
|
|
|
768
|
-
const diffuse = irradiance.mul(
|
|
798
|
+
const diffuse = irradiance.mul( diffuseBRDF ).mul( singleScattering.add( multiScattering ).oneMinus() ).toVar();
|
|
769
799
|
|
|
770
800
|
if ( this.sheen === true ) {
|
|
771
801
|
|
|
@@ -824,12 +854,11 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
824
854
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
825
855
|
// Compute multiscattering separately for dielectric and metallic, then mix
|
|
826
856
|
|
|
827
|
-
const singleScatteringDielectric =
|
|
828
|
-
const multiScatteringDielectric =
|
|
857
|
+
const singleScatteringDielectric = this.singleScatteringDielectric;
|
|
858
|
+
const multiScatteringDielectric = this.multiScatteringDielectric;
|
|
829
859
|
const singleScatteringMetallic = vec3().toVar( 'singleScatteringMetallic' );
|
|
830
860
|
const multiScatteringMetallic = vec3().toVar( 'multiScatteringMetallic' );
|
|
831
861
|
|
|
832
|
-
this.computeMultiscattering( singleScatteringDielectric, multiScatteringDielectric, specularF90, specularColor, this.iridescenceF0Dielectric );
|
|
833
862
|
this.computeMultiscattering( singleScatteringMetallic, multiScatteringMetallic, specularF90, diffuseColor.rgb, this.iridescenceF0Metallic );
|
|
834
863
|
|
|
835
864
|
// Mix based on metalness
|
|
@@ -839,7 +868,11 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
839
868
|
// Diffuse energy conservation uses dielectric path
|
|
840
869
|
const totalScatteringDielectric = singleScatteringDielectric.add( multiScatteringDielectric );
|
|
841
870
|
|
|
842
|
-
const
|
|
871
|
+
const diffuseAlbedo = this.diffuseRoughness
|
|
872
|
+
? this.eonDirectionalAlbedo.mul( metalness.oneMinus() )
|
|
873
|
+
: diffuseContribution;
|
|
874
|
+
|
|
875
|
+
const diffuse = diffuseAlbedo.mul( totalScatteringDielectric.oneMinus() );
|
|
843
876
|
|
|
844
877
|
const cosineWeightedIrradiance = iblIrradiance.mul( 1 / Math.PI );
|
|
845
878
|
|
|
@@ -9,7 +9,7 @@ import { modelRadius } from '../accessors/ModelNode.js';
|
|
|
9
9
|
import { LTC_Evaluate_Volume } from './BSDF/LTC.js';
|
|
10
10
|
|
|
11
11
|
const scatteringDensity = property( 'vec3' );
|
|
12
|
-
const linearDepthRay = property( '
|
|
12
|
+
const linearDepthRay = property( 'float' ); // always assigned a scalar (see `start()`) - not a per-channel value
|
|
13
13
|
const outgoingRayLight = property( 'vec3' );
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -8,13 +8,13 @@ const hash2D = /*@__PURE__*/ Fn( ( [ value ] ) => {
|
|
|
8
8
|
|
|
9
9
|
return fract( mul( 1.0e4, sin( mul( 17.0, value.x ).add( mul( 0.1, value.y ) ) ) ).mul( add( 0.1, abs( sin( mul( 13.0, value.y ).add( value.x ) ) ) ) ) );
|
|
10
10
|
|
|
11
|
-
} );
|
|
11
|
+
}, { value: 'vec2', return: 'float' } );
|
|
12
12
|
|
|
13
13
|
const hash3D = /*@__PURE__*/ Fn( ( [ value ] ) => {
|
|
14
14
|
|
|
15
15
|
return hash2D( vec2( hash2D( value.xy ), value.z ) );
|
|
16
16
|
|
|
17
|
-
} );
|
|
17
|
+
}, { value: 'vec3', return: 'float' } );
|
|
18
18
|
|
|
19
19
|
const getAlphaHashThreshold = /*@__PURE__*/ Fn( ( [ position ] ) => {
|
|
20
20
|
|
|
@@ -57,12 +57,6 @@ const getAlphaHashThreshold = /*@__PURE__*/ Fn( ( [ position ] ) => {
|
|
|
57
57
|
// Avoids ατ == 0. Could also do ατ =1-ατ
|
|
58
58
|
return clamp( threshold, 1.0e-6, 1.0 );
|
|
59
59
|
|
|
60
|
-
} )
|
|
61
|
-
name: 'getAlphaHashThreshold',
|
|
62
|
-
type: 'float',
|
|
63
|
-
inputs: [
|
|
64
|
-
{ name: 'position', type: 'vec3' }
|
|
65
|
-
]
|
|
66
|
-
} );
|
|
60
|
+
}, { position: 'vec3', return: 'float' } );
|
|
67
61
|
|
|
68
62
|
export default getAlphaHashThreshold;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { positionWorld } from '../../accessors/Position.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Fn, min, normalize, EPSILON } from '../../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
|
|
@@ -20,17 +20,16 @@ import { float, Fn, min, normalize, vec3 } from '../../tsl/TSLBase.js';
|
|
|
20
20
|
*/
|
|
21
21
|
const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
|
|
22
22
|
|
|
23
|
-
const nDir = normalize( normal ).
|
|
24
|
-
const
|
|
25
|
-
const rbmin = cubeSize.mul( - 0.5 ).add( cubePos ).sub( positionWorld ).div( nDir ).toVar();
|
|
26
|
-
const rbminmax = vec3().toVar();
|
|
27
|
-
rbminmax.x = nDir.x.greaterThan( float( 0 ) ).select( rbmax.x, rbmin.x );
|
|
28
|
-
rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
|
|
29
|
-
rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
|
|
23
|
+
const nDir = normalize( normal ).toConst();
|
|
24
|
+
const positive = nDir.greaterThanEqual( 0 );
|
|
30
25
|
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
26
|
+
// keep axis-aligned directions away from zero so the distances stay finite
|
|
27
|
+
const safeDir = positive.select( nDir.max( EPSILON ), nDir.min( EPSILON.negate() ) );
|
|
28
|
+
const extent = cubeSize.mul( 0.5 ).toConst();
|
|
29
|
+
const distances = positive.select( extent, extent.negate() ).add( cubePos ).sub( positionWorld ).div( safeDir ).toConst();
|
|
30
|
+
|
|
31
|
+
const correction = min( distances.x, distances.y, distances.z ).toConst();
|
|
32
|
+
return positionWorld.add( nDir.mul( correction ) ).sub( cubePos );
|
|
34
33
|
|
|
35
34
|
} );
|
|
36
35
|
|
|
@@ -7,7 +7,9 @@ const getRoughness = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
|
7
7
|
|
|
8
8
|
const geometryRoughness = getGeometryRoughness();
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// Minimum roughness, so even a perfect mirror samples a prefiltered level of the environment map.
|
|
11
|
+
// Matches Filament's desktop MIN_PERCEPTUAL_ROUGHNESS: https://github.com/google/filament/blob/main/shaders/src/surface_material.fs
|
|
12
|
+
let roughnessFactor = roughness.max( 0.045 );
|
|
11
13
|
roughnessFactor = roughnessFactor.add( geometryRoughness );
|
|
12
14
|
roughnessFactor = roughnessFactor.min( 1.0 );
|
|
13
15
|
|