@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
|
@@ -6,28 +6,51 @@ import { uniformArray } from './UniformArrayNode.js';
|
|
|
6
6
|
import { builtin } from './BuiltinNode.js';
|
|
7
7
|
import { screenSize } from '../display/ScreenNode.js';
|
|
8
8
|
|
|
9
|
-
// Cache
|
|
9
|
+
// Cache single-camera uniforms globally. Array uniforms are cached per renderer and
|
|
10
|
+
// camera count so cameras with different array sizes cannot overwrite each other's
|
|
11
|
+
// buffers, while builders with matching counts still share them.
|
|
12
|
+
|
|
13
|
+
const _cameraArrays = /*@__PURE__*/ new WeakMap();
|
|
14
|
+
|
|
15
|
+
function getCameraArray( renderer, camera, name, create ) {
|
|
16
|
+
|
|
17
|
+
let arrays = _cameraArrays.get( renderer );
|
|
18
|
+
|
|
19
|
+
if ( arrays === undefined ) {
|
|
20
|
+
|
|
21
|
+
arrays = new Map();
|
|
22
|
+
_cameraArrays.set( renderer, arrays );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const key = name + ':' + camera.cameras.length;
|
|
27
|
+
|
|
28
|
+
let array = arrays.get( key );
|
|
29
|
+
|
|
30
|
+
if ( array === undefined ) {
|
|
31
|
+
|
|
32
|
+
array = create( camera );
|
|
33
|
+
arrays.set( key, array );
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return array;
|
|
38
|
+
|
|
39
|
+
}
|
|
10
40
|
|
|
11
41
|
let _cameraProjectionMatrixBase = null;
|
|
12
|
-
let _cameraProjectionMatrixArray = null;
|
|
13
42
|
|
|
14
43
|
let _cameraProjectionMatrixInverseBase = null;
|
|
15
|
-
let _cameraProjectionMatrixInverseArray = null;
|
|
16
44
|
|
|
17
45
|
let _cameraViewMatrixBase = null;
|
|
18
|
-
let _cameraViewMatrixArray = null;
|
|
19
46
|
|
|
20
47
|
let _cameraWorldMatrixBase = null;
|
|
21
|
-
let _cameraWorldMatrixArray = null;
|
|
22
48
|
|
|
23
49
|
let _cameraNormalMatrixBase = null;
|
|
24
|
-
let _cameraNormalMatrixArray = null;
|
|
25
50
|
|
|
26
51
|
let _cameraPositionBase = null;
|
|
27
|
-
let _cameraPositionArray = null;
|
|
28
52
|
|
|
29
53
|
let _cameraViewportBase = null;
|
|
30
|
-
let _cameraViewportArray = null;
|
|
31
54
|
|
|
32
55
|
/**
|
|
33
56
|
* TSL object that represents the current `index` value of the camera if used ArrayCamera.
|
|
@@ -59,31 +82,29 @@ export const cameraFar = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraFar' )
|
|
|
59
82
|
* @tsl
|
|
60
83
|
* @type {UniformNode<mat4>}
|
|
61
84
|
*/
|
|
62
|
-
export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
85
|
+
export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
63
86
|
|
|
64
87
|
let cameraProjectionMatrix;
|
|
65
88
|
|
|
66
89
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
67
90
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
for ( const subCamera of camera.cameras ) {
|
|
91
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraProjectionMatrices', ( camera ) => {
|
|
71
92
|
|
|
72
|
-
|
|
93
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.projectionMatrix );
|
|
73
94
|
|
|
74
|
-
|
|
95
|
+
return uniformArray( values ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' ).onRenderUpdate( ( { camera }, self ) => {
|
|
75
96
|
|
|
76
|
-
|
|
97
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
77
98
|
|
|
78
|
-
|
|
99
|
+
self.array[ i ] = camera.cameras[ i ].projectionMatrix;
|
|
79
100
|
|
|
80
|
-
|
|
101
|
+
}
|
|
81
102
|
|
|
82
|
-
|
|
103
|
+
} );
|
|
83
104
|
|
|
84
|
-
}
|
|
105
|
+
} );
|
|
85
106
|
|
|
86
|
-
cameraProjectionMatrix =
|
|
107
|
+
cameraProjectionMatrix = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
87
108
|
|
|
88
109
|
} else {
|
|
89
110
|
|
|
@@ -107,31 +128,29 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
107
128
|
* @tsl
|
|
108
129
|
* @type {UniformNode<mat4>}
|
|
109
130
|
*/
|
|
110
|
-
export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
131
|
+
export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
111
132
|
|
|
112
133
|
let cameraProjectionMatrixInverse;
|
|
113
134
|
|
|
114
135
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
115
136
|
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
for ( const subCamera of camera.cameras ) {
|
|
137
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraProjectionMatricesInverse', ( camera ) => {
|
|
119
138
|
|
|
120
|
-
|
|
139
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.projectionMatrixInverse );
|
|
121
140
|
|
|
122
|
-
|
|
141
|
+
return uniformArray( values ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' ).onRenderUpdate( ( { camera }, self ) => {
|
|
123
142
|
|
|
124
|
-
|
|
143
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
125
144
|
|
|
126
|
-
|
|
145
|
+
self.array[ i ] = camera.cameras[ i ].projectionMatrixInverse;
|
|
127
146
|
|
|
128
|
-
|
|
147
|
+
}
|
|
129
148
|
|
|
130
|
-
|
|
149
|
+
} );
|
|
131
150
|
|
|
132
|
-
}
|
|
151
|
+
} );
|
|
133
152
|
|
|
134
|
-
cameraProjectionMatrixInverse =
|
|
153
|
+
cameraProjectionMatrixInverse = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
135
154
|
|
|
136
155
|
} else {
|
|
137
156
|
|
|
@@ -155,31 +174,29 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
|
|
|
155
174
|
* @tsl
|
|
156
175
|
* @type {UniformNode<mat4>}
|
|
157
176
|
*/
|
|
158
|
-
export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
177
|
+
export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
159
178
|
|
|
160
179
|
let cameraViewMatrix;
|
|
161
180
|
|
|
162
181
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
163
182
|
|
|
164
|
-
const
|
|
183
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraViewMatrices', ( camera ) => {
|
|
165
184
|
|
|
166
|
-
|
|
185
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.matrixWorldInverse );
|
|
167
186
|
|
|
168
|
-
|
|
187
|
+
return uniformArray( values ).setGroup( renderGroup ).setName( 'cameraViewMatrices' ).onRenderUpdate( ( { camera }, self ) => {
|
|
169
188
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if ( _cameraViewMatrixArray === null ) {
|
|
189
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
173
190
|
|
|
174
|
-
|
|
191
|
+
self.array[ i ] = camera.cameras[ i ].matrixWorldInverse;
|
|
175
192
|
|
|
176
|
-
|
|
193
|
+
}
|
|
177
194
|
|
|
178
|
-
|
|
195
|
+
} );
|
|
179
196
|
|
|
180
|
-
}
|
|
197
|
+
} );
|
|
181
198
|
|
|
182
|
-
cameraViewMatrix =
|
|
199
|
+
cameraViewMatrix = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
183
200
|
|
|
184
201
|
} else {
|
|
185
202
|
|
|
@@ -203,31 +220,29 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
203
220
|
* @tsl
|
|
204
221
|
* @type {UniformNode<mat4>}
|
|
205
222
|
*/
|
|
206
|
-
export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
223
|
+
export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
207
224
|
|
|
208
225
|
let cameraWorldMatrix;
|
|
209
226
|
|
|
210
227
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
211
228
|
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
for ( const subCamera of camera.cameras ) {
|
|
229
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraWorldMatrices', ( camera ) => {
|
|
215
230
|
|
|
216
|
-
|
|
231
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.matrixWorld );
|
|
217
232
|
|
|
218
|
-
|
|
233
|
+
return uniformArray( values ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' ).onRenderUpdate( ( { camera }, self ) => {
|
|
219
234
|
|
|
220
|
-
|
|
235
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
221
236
|
|
|
222
|
-
|
|
237
|
+
self.array[ i ] = camera.cameras[ i ].matrixWorld;
|
|
223
238
|
|
|
224
|
-
|
|
239
|
+
}
|
|
225
240
|
|
|
226
|
-
|
|
241
|
+
} );
|
|
227
242
|
|
|
228
|
-
}
|
|
243
|
+
} );
|
|
229
244
|
|
|
230
|
-
cameraWorldMatrix =
|
|
245
|
+
cameraWorldMatrix = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
231
246
|
|
|
232
247
|
} else {
|
|
233
248
|
|
|
@@ -251,31 +266,29 @@ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
251
266
|
* @tsl
|
|
252
267
|
* @type {UniformNode<mat3>}
|
|
253
268
|
*/
|
|
254
|
-
export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
269
|
+
export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
255
270
|
|
|
256
271
|
let cameraNormalMatrix;
|
|
257
272
|
|
|
258
273
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
259
274
|
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
for ( const subCamera of camera.cameras ) {
|
|
275
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraNormalMatrices', ( camera ) => {
|
|
263
276
|
|
|
264
|
-
|
|
277
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.normalMatrix );
|
|
265
278
|
|
|
266
|
-
|
|
279
|
+
return uniformArray( values ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' ).onRenderUpdate( ( { camera }, self ) => {
|
|
267
280
|
|
|
268
|
-
|
|
281
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
269
282
|
|
|
270
|
-
|
|
283
|
+
self.array[ i ] = camera.cameras[ i ].normalMatrix;
|
|
271
284
|
|
|
272
|
-
|
|
285
|
+
}
|
|
273
286
|
|
|
274
|
-
|
|
287
|
+
} );
|
|
275
288
|
|
|
276
|
-
}
|
|
289
|
+
} );
|
|
277
290
|
|
|
278
|
-
cameraNormalMatrix =
|
|
291
|
+
cameraNormalMatrix = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
279
292
|
|
|
280
293
|
} else {
|
|
281
294
|
|
|
@@ -299,23 +312,23 @@ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
299
312
|
* @tsl
|
|
300
313
|
* @type {UniformNode<vec3>}
|
|
301
314
|
*/
|
|
302
|
-
export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
315
|
+
export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
303
316
|
|
|
304
317
|
let cameraPosition;
|
|
305
318
|
|
|
306
319
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
307
320
|
|
|
308
|
-
const
|
|
321
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraPositions', ( camera ) => {
|
|
309
322
|
|
|
310
|
-
|
|
323
|
+
const positions = [];
|
|
311
324
|
|
|
312
|
-
|
|
325
|
+
for ( let i = 0, l = camera.cameras.length; i < l; i ++ ) {
|
|
313
326
|
|
|
314
|
-
|
|
327
|
+
positions.push( new Vector3() );
|
|
315
328
|
|
|
316
|
-
|
|
329
|
+
}
|
|
317
330
|
|
|
318
|
-
|
|
331
|
+
return uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => {
|
|
319
332
|
|
|
320
333
|
const subCameras = camera.cameras;
|
|
321
334
|
const array = self.array;
|
|
@@ -328,13 +341,9 @@ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
328
341
|
|
|
329
342
|
} );
|
|
330
343
|
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
_cameraPositionArray.array = positions;
|
|
334
|
-
|
|
335
|
-
}
|
|
344
|
+
} );
|
|
336
345
|
|
|
337
|
-
cameraPosition =
|
|
346
|
+
cameraPosition = cameraArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
338
347
|
|
|
339
348
|
} else {
|
|
340
349
|
|
|
@@ -359,31 +368,29 @@ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
359
368
|
* @tsl
|
|
360
369
|
* @type {UniformNode<vec4>}
|
|
361
370
|
*/
|
|
362
|
-
export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
371
|
+
export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera, renderer } ) => {
|
|
363
372
|
|
|
364
373
|
let cameraViewport;
|
|
365
374
|
|
|
366
375
|
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
367
376
|
|
|
368
|
-
const
|
|
369
|
-
|
|
370
|
-
for ( const subCamera of camera.cameras ) {
|
|
377
|
+
const cameraArray = getCameraArray( renderer, camera, 'cameraViewports', ( camera ) => {
|
|
371
378
|
|
|
372
|
-
|
|
379
|
+
const values = camera.cameras.map( ( subCamera ) => subCamera.viewport );
|
|
373
380
|
|
|
374
|
-
|
|
381
|
+
return uniformArray( values, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' ).onRenderUpdate( ( { camera }, self ) => {
|
|
375
382
|
|
|
376
|
-
|
|
383
|
+
for ( let i = 0; i < camera.cameras.length; i ++ ) {
|
|
377
384
|
|
|
378
|
-
|
|
385
|
+
self.array[ i ] = camera.cameras[ i ].viewport;
|
|
379
386
|
|
|
380
|
-
|
|
387
|
+
}
|
|
381
388
|
|
|
382
|
-
|
|
389
|
+
} );
|
|
383
390
|
|
|
384
|
-
}
|
|
391
|
+
} );
|
|
385
392
|
|
|
386
|
-
cameraViewport =
|
|
393
|
+
cameraViewport = cameraArray.element( cameraIndex );
|
|
387
394
|
|
|
388
395
|
} else {
|
|
389
396
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import Node from '../core/Node.js';
|
|
3
|
-
import { Fn, bool, float } from '../tsl/TSLBase.js';
|
|
3
|
+
import { Fn, bool, float, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { cameraWorldMatrix } from './Camera.js';
|
|
4
5
|
import { positionView } from './Position.js';
|
|
5
6
|
import { diffuseColor } from '../core/PropertyNode.js';
|
|
6
7
|
import { Loop } from '../utils/LoopNode.js';
|
|
@@ -44,6 +45,12 @@ class ClippingNode extends Node {
|
|
|
44
45
|
|
|
45
46
|
}
|
|
46
47
|
|
|
48
|
+
isCacheable( /*builder*/ ) {
|
|
49
|
+
|
|
50
|
+
return false;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
/**
|
|
48
55
|
* Setups the node depending on the selected scope.
|
|
49
56
|
*
|
|
@@ -59,6 +66,10 @@ class ClippingNode extends Node {
|
|
|
59
66
|
|
|
60
67
|
this.hardwareClipping = builder.hardwareClipping;
|
|
61
68
|
|
|
69
|
+
// with ArrayCamera, clipping planes are in world space
|
|
70
|
+
|
|
71
|
+
this.position = builder.camera.isArrayCamera === true ? cameraWorldMatrix.mul( vec4( positionView, 1 ) ).xyz : positionView;
|
|
72
|
+
|
|
62
73
|
if ( this.scope === ClippingNode.ALPHA_TO_COVERAGE ) {
|
|
63
74
|
|
|
64
75
|
return this.setupAlphaToCoverage( intersectionPlanes, unionPlanes );
|
|
@@ -101,7 +112,7 @@ class ClippingNode extends Node {
|
|
|
101
112
|
|
|
102
113
|
const plane = clippingPlanes.element( i );
|
|
103
114
|
|
|
104
|
-
distanceToPlane.assign(
|
|
115
|
+
distanceToPlane.assign( this.position.dot( plane.xyz ).negate().add( plane.w ) );
|
|
105
116
|
distanceGradient.assign( distanceToPlane.fwidth().div( 2.0 ) );
|
|
106
117
|
|
|
107
118
|
clipOpacity.mulAssign( smoothstep( distanceGradient.negate(), distanceGradient, distanceToPlane ) );
|
|
@@ -121,7 +132,7 @@ class ClippingNode extends Node {
|
|
|
121
132
|
|
|
122
133
|
const plane = clippingPlanes.element( i );
|
|
123
134
|
|
|
124
|
-
distanceToPlane.assign(
|
|
135
|
+
distanceToPlane.assign( this.position.dot( plane.xyz ).negate().add( plane.w ) );
|
|
125
136
|
distanceGradient.assign( distanceToPlane.fwidth().div( 2.0 ) );
|
|
126
137
|
|
|
127
138
|
intersectionClipOpacity.mulAssign( smoothstep( distanceGradient.negate(), distanceGradient, distanceToPlane ).oneMinus() );
|
|
@@ -160,7 +171,7 @@ class ClippingNode extends Node {
|
|
|
160
171
|
Loop( numUnionPlanes, ( { i } ) => {
|
|
161
172
|
|
|
162
173
|
const plane = clippingPlanes.element( i );
|
|
163
|
-
|
|
174
|
+
this.position.dot( plane.xyz ).greaterThan( plane.w ).discard();
|
|
164
175
|
|
|
165
176
|
} );
|
|
166
177
|
|
|
@@ -176,7 +187,7 @@ class ClippingNode extends Node {
|
|
|
176
187
|
Loop( numIntersectionPlanes, ( { i } ) => {
|
|
177
188
|
|
|
178
189
|
const plane = clippingPlanes.element( i );
|
|
179
|
-
clipped.assign(
|
|
190
|
+
clipped.assign( this.position.dot( plane.xyz ).greaterThan( plane.w ).and( clipped ) );
|
|
180
191
|
|
|
181
192
|
} );
|
|
182
193
|
|
|
@@ -210,7 +221,7 @@ class ClippingNode extends Node {
|
|
|
210
221
|
|
|
211
222
|
const plane = clippingPlanes.element( i );
|
|
212
223
|
|
|
213
|
-
const distance =
|
|
224
|
+
const distance = this.position.dot( plane.xyz ).sub( plane.w ).negate();
|
|
214
225
|
hw_clip_distances.element( i ).assign( distance );
|
|
215
226
|
|
|
216
227
|
} );
|
|
@@ -3,7 +3,6 @@ import { reflectVector, refractVector } from './ReflectVector.js';
|
|
|
3
3
|
import { nodeObject, nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
|
|
6
|
-
import { materialEnvRotation } from './MaterialProperties.js';
|
|
7
6
|
|
|
8
7
|
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
9
8
|
import { error } from '../../utils.js';
|
|
@@ -111,26 +110,7 @@ class CubeTextureNode extends TextureNode {
|
|
|
111
110
|
|
|
112
111
|
const texture = this.value;
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
if ( texture.isDepthTexture === true ) {
|
|
116
|
-
|
|
117
|
-
if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem ) {
|
|
118
|
-
|
|
119
|
-
return vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return uvNode;
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// rotate first
|
|
128
|
-
|
|
129
|
-
uvNode = materialEnvRotation.mul( uvNode );
|
|
130
|
-
|
|
131
|
-
// flip
|
|
132
|
-
|
|
133
|
-
if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ! texture.isRenderTargetTexture ) {
|
|
113
|
+
if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ( ! texture.isRenderTargetTexture && ! texture.isDepthTexture ) ) {
|
|
134
114
|
|
|
135
115
|
uvNode = vec3( uvNode.x.negate(), uvNode.yz );
|
|
136
116
|
|
|
@@ -187,7 +167,7 @@ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = nu
|
|
|
187
167
|
|
|
188
168
|
if ( value && value.isCubeTextureNode === true ) {
|
|
189
169
|
|
|
190
|
-
textureNode =
|
|
170
|
+
textureNode = value.clone();
|
|
191
171
|
textureNode.referenceNode = value; // Ensure the reference is set to the original node
|
|
192
172
|
|
|
193
173
|
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
@@ -205,11 +185,19 @@ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = nu
|
|
|
205
185
|
};
|
|
206
186
|
|
|
207
187
|
/**
|
|
208
|
-
* TSL function for creating a uniform cube texture node.
|
|
188
|
+
* TSL function for creating a non-mergeable uniform cube texture node.
|
|
209
189
|
*
|
|
210
190
|
* @tsl
|
|
211
191
|
* @function
|
|
212
192
|
* @param {?CubeTexture} [value=EmptyTexture] - The cube texture.
|
|
213
193
|
* @returns {CubeTextureNode}
|
|
214
194
|
*/
|
|
215
|
-
export const uniformCubeTexture = ( value = EmptyTexture ) =>
|
|
195
|
+
export const uniformCubeTexture = ( value = EmptyTexture ) => {
|
|
196
|
+
|
|
197
|
+
const textureNode = cubeTextureBase( value );
|
|
198
|
+
|
|
199
|
+
textureNode.mergeable = false;
|
|
200
|
+
|
|
201
|
+
return textureNode;
|
|
202
|
+
|
|
203
|
+
};
|