@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,8 +1,8 @@
|
|
|
1
|
-
import { Box3, Vector3, Vector4, Matrix4, Layers, Storage3DTexture, StorageBufferAttribute, StorageTexture3DNode,
|
|
2
|
-
import { Fn, If, Loop,
|
|
1
|
+
import { Box3, Vector3, Vector4, Matrix4, Layers, Storage3DTexture, StorageBufferAttribute, StorageTexture3DNode, RendererUtils, HalfFloatType, UnsignedByteType, RGBAFormat, LinearFilter, LinearMipmapLinearFilter, ClampToEdgeWrapping, MathUtils } from 'three/webgpu';
|
|
2
|
+
import { Fn, If, Loop, uniform, uniformArray, storage, instanceIndex, textureStore, texture3D, texture, cubeTexture, float, int, uint, vec2, vec3, vec4, ivec3, uvec3, max, min, abs, dot, cross, normalize, floor, sign, select, countOneBits, atomicOr, smoothstep, hash, length, PI, getDistanceAttenuation, viewZToPerspectiveDepth, viewZToReversedPerspectiveDepth } from 'three/tsl';
|
|
3
3
|
|
|
4
|
-
import { collectSceneTriangles, computeSceneBounds, TRIANGLE_STRIDE } from './VXGISceneCollector.js';
|
|
5
|
-
import { createConeTracer } from './VXGIConeTracer.js';
|
|
4
|
+
import { collectSceneTriangles, computeSceneBounds, computeSolidVoxels, TRIANGLE_STRIDE } from './VXGISceneCollector.js';
|
|
5
|
+
import { createConeTracer, gather } from './VXGIConeTracer.js';
|
|
6
6
|
|
|
7
7
|
const _box = /*@__PURE__*/ new Box3();
|
|
8
8
|
const _size = /*@__PURE__*/ new Vector3();
|
|
@@ -44,28 +44,6 @@ class MipStorageTexture3DNode extends StorageTexture3DNode {
|
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* Cube texture node without the material's environment rotation, which requires a material and
|
|
49
|
-
* scene context that compute passes lack. Used for point light shadow maps.
|
|
50
|
-
*
|
|
51
|
-
* @private
|
|
52
|
-
*/
|
|
53
|
-
class PlainCubeTextureNode extends CubeTextureNode {
|
|
54
|
-
|
|
55
|
-
setupUV( builder, uvNode ) {
|
|
56
|
-
|
|
57
|
-
if ( this.value.isDepthTexture === true ) {
|
|
58
|
-
|
|
59
|
-
return vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return vec3( uvNode.x.negate(), uvNode.yz );
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
47
|
/**
|
|
70
48
|
* Holds the voxel representation of a scene for {@link VXGINode}: an anisotropic opacity
|
|
71
49
|
* mip chain, a direct radiance volume and a radiance volume with cached bounces.
|
|
@@ -76,6 +54,8 @@ class PlainCubeTextureNode extends CubeTextureNode {
|
|
|
76
54
|
* along the axis, averaging across it), radiance is stored opacity-premultiplied and indirect bounces
|
|
77
55
|
* are cached in the volume via cone tracing. Only direct lights are injected.
|
|
78
56
|
* Voxelization uses conservative rasterization along the dominant triangle axis in a compute shader.
|
|
57
|
+
* The interiors of closed meshes are filled, so cones starting inside an object (e.g. near contact
|
|
58
|
+
* points) are blocked.
|
|
79
59
|
*
|
|
80
60
|
* Direct light is injected per voxel instead of splatting photons from a light-view map as in the
|
|
81
61
|
* paper: the shadow maps rendered by the renderer are the light-view maps, and every occupied voxel
|
|
@@ -91,6 +71,8 @@ class PlainCubeTextureNode extends CubeTextureNode {
|
|
|
91
71
|
* - {@link https://research.nvidia.com/publication/2011-09_interactive-indirect-illumination-using-voxel-cone-tracing}:
|
|
92
72
|
* Crassin et al., Interactive Indirect Illumination Using Voxel Cone Tracing, Pacific Graphics 2011.
|
|
93
73
|
* - {@link https://developer.nvidia.com/content/basics-gpu-voxelization}: Basics of GPU voxelization.
|
|
74
|
+
* - {@link https://doi.org/10.1145/1882261.1866201}: Schwarz and Seidel, Fast Parallel Surface and Solid
|
|
75
|
+
* Voxelization on GPUs, ACM Transactions on Graphics 2010.
|
|
94
76
|
*
|
|
95
77
|
* Note: This class can only be used with `WebGPURenderer` and a WebGPU backend.
|
|
96
78
|
*
|
|
@@ -326,6 +308,7 @@ class VXGIVolume {
|
|
|
326
308
|
|
|
327
309
|
this._occupancyAttribute = null;
|
|
328
310
|
this._triangleIdAttribute = null;
|
|
311
|
+
this._solidAttribute = null;
|
|
329
312
|
this._triangleAttribute = null;
|
|
330
313
|
this._trianglesNode = null;
|
|
331
314
|
this._triangleCount = 0;
|
|
@@ -453,7 +436,7 @@ class VXGIVolume {
|
|
|
453
436
|
this.voxelSizeNode.value = voxelSize;
|
|
454
437
|
this.maxLevelNode.value = levels - 1;
|
|
455
438
|
|
|
456
|
-
if ( gridSize.equals( this._gridSize ) === false || levels !== this._levels || this._directional !== this.directionalRadiance ) {
|
|
439
|
+
if ( this._allocated === false || gridSize.equals( this._gridSize ) === false || levels !== this._levels || this._directional !== this.directionalRadiance ) {
|
|
457
440
|
|
|
458
441
|
this._allocateGrid( gridSize, levels );
|
|
459
442
|
|
|
@@ -475,12 +458,21 @@ class VXGIVolume {
|
|
|
475
458
|
|
|
476
459
|
this._triangleCount = count;
|
|
477
460
|
this._triangleCountNode.value = count;
|
|
461
|
+
|
|
462
|
+
if ( this._triangleAttribute !== null ) this._triangleAttribute.dispose();
|
|
463
|
+
|
|
478
464
|
this._triangleAttribute = new StorageBufferAttribute( count > 0 ? data : new Float32Array( TRIANGLE_STRIDE ), 4 );
|
|
479
465
|
this._trianglesNode = storage( this._triangleAttribute, 'vec4', this._triangleAttribute.count ).toReadOnly();
|
|
480
466
|
|
|
467
|
+
const solid = this._solidAttribute.array;
|
|
468
|
+
|
|
469
|
+
solid.fill( 0 );
|
|
470
|
+
computeSolidVoxels( scene, { boundsMin: this.boundsMinNode.value, voxelSize, gridSize, layers: this.layers, exclude: this._exclude }, new Uint8Array( solid.buffer ) );
|
|
471
|
+
this._solidAttribute.needsUpdate = true;
|
|
472
|
+
|
|
481
473
|
// kernels depend on the triangle buffer and grid
|
|
482
474
|
|
|
483
|
-
this.
|
|
475
|
+
this._disposeKernels();
|
|
484
476
|
const kernels = this._getKernels();
|
|
485
477
|
|
|
486
478
|
renderer.compute( kernels.clear );
|
|
@@ -540,6 +532,7 @@ class VXGIVolume {
|
|
|
540
532
|
|
|
541
533
|
this._occupancyAttribute = new StorageBufferAttribute( this._voxelCount, 1, Uint32Array );
|
|
542
534
|
this._triangleIdAttribute = new StorageBufferAttribute( this._voxelCount, 1, Uint32Array );
|
|
535
|
+
this._solidAttribute = new StorageBufferAttribute( Math.ceil( this._voxelCount / 4 ), 1, Uint32Array );
|
|
543
536
|
|
|
544
537
|
}
|
|
545
538
|
|
|
@@ -561,6 +554,8 @@ class VXGIVolume {
|
|
|
561
554
|
|
|
562
555
|
_disposeGrid() {
|
|
563
556
|
|
|
557
|
+
this._disposeKernels();
|
|
558
|
+
|
|
564
559
|
this.opacityTexture.dispose();
|
|
565
560
|
this.radianceTexture.dispose();
|
|
566
561
|
this.directionalTexture.dispose();
|
|
@@ -585,9 +580,27 @@ class VXGIVolume {
|
|
|
585
580
|
|
|
586
581
|
}
|
|
587
582
|
|
|
588
|
-
this._occupancyAttribute
|
|
589
|
-
|
|
590
|
-
|
|
583
|
+
if ( this._occupancyAttribute !== null ) {
|
|
584
|
+
|
|
585
|
+
this._occupancyAttribute.dispose();
|
|
586
|
+
this._triangleIdAttribute.dispose();
|
|
587
|
+
this._solidAttribute.dispose();
|
|
588
|
+
|
|
589
|
+
this._occupancyAttribute = null;
|
|
590
|
+
this._triangleIdAttribute = null;
|
|
591
|
+
this._solidAttribute = null;
|
|
592
|
+
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
if ( this._triangleAttribute !== null ) {
|
|
596
|
+
|
|
597
|
+
this._triangleAttribute.dispose();
|
|
598
|
+
|
|
599
|
+
this._triangleAttribute = null;
|
|
600
|
+
this._trianglesNode = null;
|
|
601
|
+
|
|
602
|
+
}
|
|
603
|
+
|
|
591
604
|
this._allocated = false;
|
|
592
605
|
|
|
593
606
|
}
|
|
@@ -702,6 +715,8 @@ class VXGIVolume {
|
|
|
702
715
|
|
|
703
716
|
if ( kernels.inject[ index ] === null || kernels.injectKey[ index ] !== this._lightsKey ) {
|
|
704
717
|
|
|
718
|
+
if ( kernels.inject[ index ] !== null ) kernels.inject[ index ].dispose();
|
|
719
|
+
|
|
705
720
|
kernels.inject[ index ] = this._createInjectKernel( renderer, index );
|
|
706
721
|
kernels.injectKey[ index ] = this._lightsKey;
|
|
707
722
|
|
|
@@ -777,6 +792,22 @@ class VXGIVolume {
|
|
|
777
792
|
|
|
778
793
|
}
|
|
779
794
|
|
|
795
|
+
_disposeKernels() {
|
|
796
|
+
|
|
797
|
+
if ( this._kernels === null ) return;
|
|
798
|
+
|
|
799
|
+
const { clear, voxelize, resolve, opacityMips, radianceMips, inject, bounce } = this._kernels;
|
|
800
|
+
|
|
801
|
+
for ( const kernel of [ clear, voxelize, resolve, ...opacityMips, ...radianceMips.flat(), ...inject, ...bounce ] ) {
|
|
802
|
+
|
|
803
|
+
if ( kernel !== null ) kernel.dispose();
|
|
804
|
+
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
this._kernels = null;
|
|
808
|
+
|
|
809
|
+
}
|
|
810
|
+
|
|
780
811
|
_getLevelSize( level ) {
|
|
781
812
|
|
|
782
813
|
return [ this._gridSize.x >> level, this._gridSize.y >> level, this._gridSize.z >> level ];
|
|
@@ -926,6 +957,7 @@ class VXGIVolume {
|
|
|
926
957
|
_createResolveKernel() {
|
|
927
958
|
|
|
928
959
|
const occupancy = storage( this._occupancyAttribute, 'uint', this._voxelCount ).toReadOnly();
|
|
960
|
+
const solid = storage( this._solidAttribute, 'uint', this._solidAttribute.count ).toReadOnly();
|
|
929
961
|
const opacityTexture = this.opacityTexture;
|
|
930
962
|
const voxelCount = this._voxelCountNode;
|
|
931
963
|
const size = this._getLevelSize( 0 );
|
|
@@ -935,7 +967,8 @@ class VXGIVolume {
|
|
|
935
967
|
If( instanceIndex.lessThan( voxelCount ), () => {
|
|
936
968
|
|
|
937
969
|
const coords = this._coords( instanceIndex, size ).toConst();
|
|
938
|
-
const
|
|
970
|
+
const solidBits = solid.element( instanceIndex.shiftRight( uint( 2 ) ) ).shiftRight( instanceIndex.bitAnd( uint( 3 ) ).mul( uint( 8 ) ) ).bitAnd( uint( 0xFF ) );
|
|
971
|
+
const bits = occupancy.element( instanceIndex ).bitOr( solidBits ).toConst();
|
|
939
972
|
|
|
940
973
|
// per-axis coverage from the 2x2x2 sub-voxel occupancy
|
|
941
974
|
|
|
@@ -1280,7 +1313,7 @@ class VXGIVolume {
|
|
|
1280
1313
|
|
|
1281
1314
|
If( viewZ.greaterThanEqual( near ).and( viewZ.lessThanEqual( far ) ), () => {
|
|
1282
1315
|
|
|
1283
|
-
const depth =
|
|
1316
|
+
const depth = cubeTexture( shadowTexture, normalize( lightToVoxel ) ).r; // depth cubes need an integer level, which the compute path emits by default
|
|
1284
1317
|
|
|
1285
1318
|
if ( reversedDepth ) {
|
|
1286
1319
|
|
|
@@ -1383,35 +1416,12 @@ class VXGIVolume {
|
|
|
1383
1416
|
|
|
1384
1417
|
const direct = texture3D( directTexture, vec3( coords ).add( 0.5 ).div( vec3( size[ 0 ], size[ 1 ], size[ 2 ] ) ), float( 0 ) ).toConst();
|
|
1385
1418
|
|
|
1386
|
-
// tangent frame
|
|
1387
|
-
|
|
1388
|
-
const up = select( abs( normal.y ).lessThan( 0.99 ), vec3( 0, 1, 0 ), vec3( 1, 0, 0 ) );
|
|
1389
|
-
const tangent = normalize( cross( normal, up ) ).toConst();
|
|
1390
|
-
const bitangent = cross( normal, tangent ).toConst();
|
|
1391
|
-
|
|
1392
1419
|
const rotation = hash( instanceIndex ).toConst();
|
|
1393
|
-
const
|
|
1420
|
+
const origin = position.add( normal.mul( voxelSize.mul( 1.5 ) ) ).toConst();
|
|
1394
1421
|
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
// cosine-weighted directions, rotated per voxel
|
|
1398
|
-
|
|
1399
|
-
const u1 = float( c ).add( 0.5 ).div( BOUNCE_CONE_COUNT ).toConst();
|
|
1400
|
-
const u2 = fract( float( c ).mul( 0.618034 ).add( rotation ) ).toConst();
|
|
1401
|
-
const sinTheta = sqrt( u1 ).toConst();
|
|
1402
|
-
const cosTheta = sqrt( u1.oneMinus() ).toConst();
|
|
1403
|
-
const phi = u2.mul( PI.mul( 2 ) ).toConst();
|
|
1404
|
-
|
|
1405
|
-
const direction = normalize( tangent.mul( cos( phi ).mul( sinTheta ) ).add( bitangent.mul( sin( phi ).mul( sinTheta ) ) ).add( normal.mul( cosTheta ) ) ).toConst();
|
|
1406
|
-
const origin = position.add( normal.mul( voxelSize.mul( 1.5 ) ) ).toConst();
|
|
1407
|
-
|
|
1408
|
-
const cone = trace( origin, direction, tanHalfAngle, traceDistance );
|
|
1409
|
-
|
|
1410
|
-
gathered.addAssign( cone.color );
|
|
1411
|
-
|
|
1412
|
-
} );
|
|
1422
|
+
const { color } = gather( trace, origin, normal, BOUNCE_CONE_COUNT, tanHalfAngle, traceDistance, rotation, 0.5 );
|
|
1413
1423
|
|
|
1414
|
-
const bounce = albedo.mul(
|
|
1424
|
+
const bounce = albedo.mul( color );
|
|
1415
1425
|
|
|
1416
1426
|
result.assign( vec4( direct.rgb.add( bounce.mul( direct.a ) ), direct.a ) );
|
|
1417
1427
|
|
|
@@ -3,9 +3,14 @@ import { SunLightShadow } from './SunLightShadow.js';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A sun-like light that gets emitted in a specific direction, with rays that
|
|
6
|
-
* are all parallel, and casts
|
|
6
|
+
* are all parallel, and casts Cascaded Shadow Maps (CSM) via {@link SunLightShadow},
|
|
7
7
|
* suited for lighting large scenes.
|
|
8
8
|
*
|
|
9
|
+
* Please be aware that `SunLight` is not a good fit for small, bounded scenes like
|
|
10
|
+
* dioramas, single rooms or model-viewers. Small scenes don't benefit from
|
|
11
|
+
* CSM because most content will be located in the last shadow cascade with the
|
|
12
|
+
* lowest shadow map resolution.
|
|
13
|
+
*
|
|
9
14
|
* Unlike {@link DirectionalLight}, the light has no target: like
|
|
10
15
|
* {@link HemisphereLight}, its direction is defined by its position. The
|
|
11
16
|
* light shines from its position towards the origin and points straight
|
|
@@ -18,10 +23,10 @@ import { SunLightShadow } from './SunLightShadow.js';
|
|
|
18
23
|
* scene.add( sun );
|
|
19
24
|
* ```
|
|
20
25
|
*
|
|
21
|
-
* When used with `WebGPURenderer`, the light must be
|
|
22
|
-
*
|
|
26
|
+
* When used with `WebGPURenderer`, the light must be assigned its node
|
|
27
|
+
* implementation first:
|
|
23
28
|
* ```js
|
|
24
|
-
*
|
|
29
|
+
* SunLight.registerNode( SunLightNode );
|
|
25
30
|
* ```
|
|
26
31
|
*
|
|
27
32
|
* @augments Light
|
|
@@ -3,10 +3,10 @@ import { cameraViewMatrix, lightPosition } from 'three/tsl';
|
|
|
3
3
|
import { sunShadow } from './SunShadowNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Module for representing sun lights as nodes. Register it with
|
|
7
|
-
*
|
|
6
|
+
* Module for representing sun lights as nodes. Register it with {@link SunLight}
|
|
7
|
+
* to use the light with `WebGPURenderer`:
|
|
8
8
|
* ```js
|
|
9
|
-
*
|
|
9
|
+
* SunLight.registerNode( SunLightNode );
|
|
10
10
|
* ```
|
|
11
11
|
*
|
|
12
12
|
* @augments AnalyticLightNode
|
|
@@ -179,7 +179,7 @@ ShaderLib[ 'line' ] = {
|
|
|
179
179
|
#ifdef WORLD_UNITS
|
|
180
180
|
|
|
181
181
|
vec3 worldDir = normalize( end.xyz - start.xyz );
|
|
182
|
-
vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );
|
|
182
|
+
vec3 tmpFwd = perspective ? normalize( mix( start.xyz, end.xyz, 0.5 ) ) : vec3( 0.0, 0.0, - 1.0 );
|
|
183
183
|
vec3 worldUp = normalize( cross( worldDir, tmpFwd ) );
|
|
184
184
|
vec3 worldFwd = cross( worldDir, worldUp );
|
|
185
185
|
worldPos = position.y < 0.5 ? start: end;
|
|
@@ -213,7 +213,9 @@ ShaderLib[ 'line' ] = {
|
|
|
213
213
|
// shift the depth of the projected points so the line
|
|
214
214
|
// segments overlap neatly
|
|
215
215
|
vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;
|
|
216
|
-
|
|
216
|
+
|
|
217
|
+
// only shift the depth of vertices in front of the camera (#35137)
|
|
218
|
+
if ( clip.w > 0.0 ) clip.z = clipPose.z * clip.w;
|
|
217
219
|
|
|
218
220
|
#else
|
|
219
221
|
|
|
@@ -349,15 +351,29 @@ ShaderLib[ 'line' ] = {
|
|
|
349
351
|
|
|
350
352
|
#ifdef WORLD_UNITS
|
|
351
353
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
354
|
+
float len;
|
|
355
|
+
|
|
356
|
+
if ( isOrthographic ) {
|
|
357
|
+
|
|
358
|
+
// View rays are parallel to the z axis so the distance reduces to camera-space XY
|
|
359
|
+
vec2 lineDir = worldEnd.xy - worldStart.xy;
|
|
360
|
+
float t = clamp( dot( worldPos.xy - worldStart.xy, lineDir ) / dot( lineDir, lineDir ), 0.0, 1.0 );
|
|
361
|
+
len = length( worldStart.xy + lineDir * t - worldPos.xy );
|
|
362
|
+
|
|
363
|
+
} else {
|
|
364
|
+
|
|
365
|
+
// Find the closest points on the view ray and the line segment
|
|
366
|
+
vec3 rayEnd = normalize( worldPos.xyz ) * 1e5;
|
|
367
|
+
vec3 lineDir = worldEnd - worldStart;
|
|
368
|
+
vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );
|
|
369
|
+
|
|
370
|
+
vec3 p1 = worldStart + lineDir * params.x;
|
|
371
|
+
vec3 p2 = rayEnd * params.y;
|
|
372
|
+
vec3 delta = p1 - p2;
|
|
373
|
+
len = length( delta );
|
|
374
|
+
|
|
375
|
+
}
|
|
356
376
|
|
|
357
|
-
vec3 p1 = worldStart + lineDir * params.x;
|
|
358
|
-
vec3 p2 = rayEnd * params.y;
|
|
359
|
-
vec3 delta = p1 - p2;
|
|
360
|
-
float len = length( delta );
|
|
361
377
|
float norm = len / linewidth;
|
|
362
378
|
|
|
363
379
|
#ifndef USE_DASH
|
|
@@ -147,10 +147,13 @@ class Rhino3dmLoader extends Loader {
|
|
|
147
147
|
load( url, onLoad, onProgress, onError ) {
|
|
148
148
|
|
|
149
149
|
const loader = new FileLoader( this.manager );
|
|
150
|
+
loader.setPriority( this.priority );
|
|
151
|
+
loader.setCache( this.cache );
|
|
150
152
|
|
|
151
153
|
loader.setPath( this.path );
|
|
152
154
|
loader.setResponseType( 'arraybuffer' );
|
|
153
155
|
loader.setRequestHeader( this.requestHeader );
|
|
156
|
+
loader.setWithCredentials( this.withCredentials );
|
|
154
157
|
|
|
155
158
|
this.url = url;
|
|
156
159
|
|
|
@@ -378,6 +381,8 @@ class Rhino3dmLoader extends Loader {
|
|
|
378
381
|
}
|
|
379
382
|
|
|
380
383
|
const textureLoader = new TextureLoader();
|
|
384
|
+
textureLoader.setPriority( this.priority );
|
|
385
|
+
textureLoader.setCache( this.cache );
|
|
381
386
|
|
|
382
387
|
for ( let i = 0; i < material.textures.length; i ++ ) {
|
|
383
388
|
|
|
@@ -532,7 +537,7 @@ class Rhino3dmLoader extends Loader {
|
|
|
532
537
|
|
|
533
538
|
if ( renderEnvironment ) {
|
|
534
539
|
|
|
535
|
-
new EXRLoader().load( renderEnvironment.image, function ( texture ) {
|
|
540
|
+
new EXRLoader().setPriority( this.priority ).setCache( this.cache ).load( renderEnvironment.image, function ( texture ) {
|
|
536
541
|
|
|
537
542
|
texture.mapping = EquirectangularReflectionMapping;
|
|
538
543
|
mat.envMap = texture;
|
|
@@ -967,6 +972,8 @@ class Rhino3dmLoader extends Loader {
|
|
|
967
972
|
|
|
968
973
|
// Load rhino3dm wrapper.
|
|
969
974
|
const jsLoader = new FileLoader( this.manager );
|
|
975
|
+
jsLoader.setPriority( this.priority );
|
|
976
|
+
jsLoader.setCache( this.cache );
|
|
970
977
|
jsLoader.setPath( this.libraryPath );
|
|
971
978
|
const jsContent = new Promise( ( resolve, reject ) => {
|
|
972
979
|
|
|
@@ -976,6 +983,8 @@ class Rhino3dmLoader extends Loader {
|
|
|
976
983
|
|
|
977
984
|
// Load rhino3dm WASM binary.
|
|
978
985
|
const binaryLoader = new FileLoader( this.manager );
|
|
986
|
+
binaryLoader.setPriority( this.priority );
|
|
987
|
+
binaryLoader.setCache( this.cache );
|
|
979
988
|
binaryLoader.setPath( this.libraryPath );
|
|
980
989
|
binaryLoader.setResponseType( 'arraybuffer' );
|
|
981
990
|
const binaryContent = new Promise( ( resolve, reject ) => {
|
|
@@ -92,6 +92,8 @@ class ThreeMFLoader extends Loader {
|
|
|
92
92
|
|
|
93
93
|
const scope = this;
|
|
94
94
|
const loader = new FileLoader( scope.manager );
|
|
95
|
+
loader.setPriority( scope.priority );
|
|
96
|
+
loader.setCache( scope.cache );
|
|
95
97
|
loader.setPath( scope.path );
|
|
96
98
|
loader.setResponseType( 'arraybuffer' );
|
|
97
99
|
loader.setRequestHeader( scope.requestHeader );
|
|
@@ -132,6 +134,8 @@ class ThreeMFLoader extends Loader {
|
|
|
132
134
|
|
|
133
135
|
const scope = this;
|
|
134
136
|
const textureLoader = new TextureLoader( this.manager );
|
|
137
|
+
textureLoader.setPriority( this.priority );
|
|
138
|
+
textureLoader.setCache( this.cache );
|
|
135
139
|
|
|
136
140
|
function loadDocument( data ) {
|
|
137
141
|
|
|
@@ -181,7 +185,7 @@ class ThreeMFLoader extends Loader {
|
|
|
181
185
|
|
|
182
186
|
rootModelFile = file;
|
|
183
187
|
|
|
184
|
-
} else if ( file.match( /^3D
|
|
188
|
+
} else if ( file.match( /^3D\/.*\/[^\/]*\.model$/ ) ) {
|
|
185
189
|
|
|
186
190
|
modelPartNames.push( file ); // sub models
|
|
187
191
|
|
|
@@ -53,6 +53,8 @@ class AMFLoader extends Loader {
|
|
|
53
53
|
const scope = this;
|
|
54
54
|
|
|
55
55
|
const loader = new FileLoader( scope.manager );
|
|
56
|
+
loader.setPriority( scope.priority );
|
|
57
|
+
loader.setCache( scope.cache );
|
|
56
58
|
loader.setPath( scope.path );
|
|
57
59
|
loader.setResponseType( 'arraybuffer' );
|
|
58
60
|
loader.setRequestHeader( scope.requestHeader );
|
|
@@ -76,6 +76,8 @@ class BVHLoader extends Loader {
|
|
|
76
76
|
const scope = this;
|
|
77
77
|
|
|
78
78
|
const loader = new FileLoader( scope.manager );
|
|
79
|
+
loader.setPriority( scope.priority );
|
|
80
|
+
loader.setCache( scope.cache );
|
|
79
81
|
loader.setPath( scope.path );
|
|
80
82
|
loader.setRequestHeader( scope.requestHeader );
|
|
81
83
|
loader.setWithCredentials( scope.withCredentials );
|
|
@@ -47,6 +47,8 @@ class ColladaLoader extends Loader {
|
|
|
47
47
|
const path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;
|
|
48
48
|
|
|
49
49
|
const loader = new FileLoader( scope.manager );
|
|
50
|
+
loader.setPriority( scope.priority );
|
|
51
|
+
loader.setCache( scope.cache );
|
|
50
52
|
loader.setPath( scope.path );
|
|
51
53
|
loader.setRequestHeader( scope.requestHeader );
|
|
52
54
|
loader.setWithCredentials( scope.withCredentials );
|
|
@@ -106,6 +108,8 @@ class ColladaLoader extends Loader {
|
|
|
106
108
|
|
|
107
109
|
// Setup texture loaders
|
|
108
110
|
const textureLoader = new TextureLoader( this.manager );
|
|
111
|
+
textureLoader.setPriority( this.priority );
|
|
112
|
+
textureLoader.setCache( this.cache );
|
|
109
113
|
textureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );
|
|
110
114
|
|
|
111
115
|
let tgaLoader;
|
|
@@ -113,7 +117,11 @@ class ColladaLoader extends Loader {
|
|
|
113
117
|
if ( TGALoader ) {
|
|
114
118
|
|
|
115
119
|
tgaLoader = new TGALoader( this.manager );
|
|
120
|
+
tgaLoader.setPriority( this.priority );
|
|
121
|
+
tgaLoader.setCache( this.cache );
|
|
116
122
|
tgaLoader.setPath( this.resourcePath || path );
|
|
123
|
+
tgaLoader.setRequestHeader( this.requestHeader );
|
|
124
|
+
tgaLoader.setWithCredentials( this.withCredentials );
|
|
117
125
|
|
|
118
126
|
}
|
|
119
127
|
|
|
@@ -359,7 +359,7 @@ class DDSLoader extends CompressedTextureLoader {
|
|
|
359
359
|
|
|
360
360
|
} else {
|
|
361
361
|
|
|
362
|
-
dataLength = Math.
|
|
362
|
+
dataLength = Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * blockBytes;
|
|
363
363
|
byteArray = new Uint8Array( buffer, dataOffset, dataLength );
|
|
364
364
|
|
|
365
365
|
}
|
|
@@ -163,6 +163,8 @@ class DRACOLoader extends Loader {
|
|
|
163
163
|
load( url, onLoad, onProgress, onError ) {
|
|
164
164
|
|
|
165
165
|
const loader = new FileLoader( this.manager );
|
|
166
|
+
loader.setPriority( this.priority );
|
|
167
|
+
loader.setCache( this.cache );
|
|
166
168
|
|
|
167
169
|
loader.setPath( this.path );
|
|
168
170
|
loader.setResponseType( 'arraybuffer' );
|
|
@@ -358,6 +360,8 @@ class DRACOLoader extends Loader {
|
|
|
358
360
|
_loadLibrary( url, responseType ) {
|
|
359
361
|
|
|
360
362
|
const loader = new FileLoader( this.manager );
|
|
363
|
+
loader.setPriority( this.priority );
|
|
364
|
+
loader.setCache( this.cache );
|
|
361
365
|
loader.setResponseType( responseType );
|
|
362
366
|
loader.setWithCredentials( this.withCredentials );
|
|
363
367
|
|
|
@@ -725,7 +729,7 @@ function DRACOWorker() {
|
|
|
725
729
|
|
|
726
730
|
let dstOffset = 0;
|
|
727
731
|
|
|
728
|
-
for ( let i = 0
|
|
732
|
+
for ( let i = 0; i < count; i ++ ) {
|
|
729
733
|
|
|
730
734
|
for ( let j = 0; j < itemSize; j ++ ) {
|
|
731
735
|
|