@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
|
@@ -57,13 +57,13 @@ const _compareToWebGPU = {
|
|
|
57
57
|
|
|
58
58
|
const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
|
|
59
59
|
|
|
60
|
-
function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap,
|
|
60
|
+
function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap, dataOffset, bytesPerRow, rowsPerImage, textureWidth, textureHeight ) {
|
|
61
61
|
|
|
62
62
|
_texelCopyTextureInfo.texture = textureGPU;
|
|
63
63
|
_texelCopyTextureInfo.mipLevel = mipLevel;
|
|
64
64
|
_texelCopyTextureInfo.origin.z = layerIndex;
|
|
65
65
|
|
|
66
|
-
_texelCopyBufferLayout.offset =
|
|
66
|
+
_texelCopyBufferLayout.offset = dataOffset;
|
|
67
67
|
_texelCopyBufferLayout.bytesPerRow = bytesPerRow;
|
|
68
68
|
_texelCopyBufferLayout.rowsPerImage = rowsPerImage;
|
|
69
69
|
|
|
@@ -527,7 +527,7 @@ class WebGPUTextureUtils {
|
|
|
527
527
|
const colorTexture = canvasTarget.colorTexture;
|
|
528
528
|
const colorTextureData = backend.get( colorTexture );
|
|
529
529
|
|
|
530
|
-
if ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
|
|
530
|
+
if ( colorTextureData.texture !== undefined && colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
|
|
531
531
|
|
|
532
532
|
return colorTextureData.texture;
|
|
533
533
|
|
|
@@ -552,8 +552,8 @@ class WebGPUTextureUtils {
|
|
|
552
552
|
|
|
553
553
|
//
|
|
554
554
|
|
|
555
|
-
colorTexture.
|
|
556
|
-
colorTexture.
|
|
555
|
+
colorTexture.image.width = width;
|
|
556
|
+
colorTexture.image.height = height;
|
|
557
557
|
colorTexture.samples = samples;
|
|
558
558
|
|
|
559
559
|
colorTextureData.texture = colorBuffer;
|
|
@@ -695,7 +695,15 @@ class WebGPUTextureUtils {
|
|
|
695
695
|
|
|
696
696
|
} else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
|
|
697
697
|
|
|
698
|
-
if ( texture.
|
|
698
|
+
if ( texture.isCompressedCubeTexture ) {
|
|
699
|
+
|
|
700
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
701
|
+
|
|
702
|
+
this._copyCompressedBufferToTexture( texture.image[ i ].mipmaps, textureData.texture, textureDescriptorGPU, null, i );
|
|
703
|
+
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
} else if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) {
|
|
699
707
|
|
|
700
708
|
this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU, texture.layerUpdates );
|
|
701
709
|
|
|
@@ -809,10 +817,10 @@ class WebGPUTextureUtils {
|
|
|
809
817
|
const format = textureData.textureDescriptorGPU.format;
|
|
810
818
|
const bytesPerTexel = this._getBytesPerTexel( format );
|
|
811
819
|
|
|
812
|
-
|
|
813
|
-
bytesPerRow = Math.ceil(
|
|
820
|
+
const unpaddedBytesPerRow = width * bytesPerTexel;
|
|
821
|
+
const bytesPerRow = Math.ceil( unpaddedBytesPerRow / 256 ) * 256; // copyTextureToBuffer() requires a multiple of 256
|
|
814
822
|
|
|
815
|
-
_bufferDescriptor.size =
|
|
823
|
+
_bufferDescriptor.size = height * bytesPerRow; // multiple of 256, so it also meets the 4-byte size alignment required by mapAsync()
|
|
816
824
|
_bufferDescriptor.usage = GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;
|
|
817
825
|
|
|
818
826
|
const readBuffer = device.createBuffer( _bufferDescriptor );
|
|
@@ -848,11 +856,22 @@ class WebGPUTextureUtils {
|
|
|
848
856
|
|
|
849
857
|
await readBuffer.mapAsync( GPUMapMode.READ );
|
|
850
858
|
|
|
851
|
-
|
|
859
|
+
// remove the row padding so the result is tightly packed
|
|
860
|
+
|
|
861
|
+
const paddedData = new Uint8Array( readBuffer.getMappedRange() );
|
|
862
|
+
const data = new Uint8Array( unpaddedBytesPerRow * height );
|
|
863
|
+
|
|
864
|
+
for ( let row = 0; row < height; row ++ ) {
|
|
865
|
+
|
|
866
|
+
const offset = row * bytesPerRow;
|
|
867
|
+
|
|
868
|
+
data.set( paddedData.subarray( offset, offset + unpaddedBytesPerRow ), row * unpaddedBytesPerRow );
|
|
869
|
+
|
|
870
|
+
}
|
|
852
871
|
|
|
853
872
|
readBuffer.destroy();
|
|
854
873
|
|
|
855
|
-
return new typedArrayType( buffer );
|
|
874
|
+
return new typedArrayType( data.buffer );
|
|
856
875
|
|
|
857
876
|
}
|
|
858
877
|
|
|
@@ -1130,8 +1149,9 @@ class WebGPUTextureUtils {
|
|
|
1130
1149
|
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
1131
1150
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
1132
1151
|
* @param {?Set<number>} [layerUpdates=null] - The layer indices to update.
|
|
1152
|
+
* @param {number} [faceIndex=-1] - The cube face the mipmaps belong to. Only relevant for compressed cube maps.
|
|
1133
1153
|
*/
|
|
1134
|
-
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null ) {
|
|
1154
|
+
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null, faceIndex = - 1 ) {
|
|
1135
1155
|
|
|
1136
1156
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
1137
1157
|
|
|
@@ -1155,11 +1175,15 @@ class WebGPUTextureUtils {
|
|
|
1155
1175
|
const textureWidth = Math.ceil( width / blockData.width ) * blockData.width;
|
|
1156
1176
|
const textureHeight = rowsPerImage * blockData.height;
|
|
1157
1177
|
|
|
1158
|
-
if (
|
|
1178
|
+
if ( faceIndex !== - 1 ) {
|
|
1179
|
+
|
|
1180
|
+
writeTextureLayer( device, textureGPU, i, faceIndex, mipmap, 0, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1181
|
+
|
|
1182
|
+
} else if ( activeLayerUpdates !== null ) {
|
|
1159
1183
|
|
|
1160
1184
|
for ( const layerIndex of activeLayerUpdates ) {
|
|
1161
1185
|
|
|
1162
|
-
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1186
|
+
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, layerIndex * bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1163
1187
|
|
|
1164
1188
|
}
|
|
1165
1189
|
|
|
@@ -1167,7 +1191,7 @@ class WebGPUTextureUtils {
|
|
|
1167
1191
|
|
|
1168
1192
|
for ( let layerIndex = 0; layerIndex < depth; layerIndex ++ ) {
|
|
1169
1193
|
|
|
1170
|
-
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1194
|
+
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, layerIndex * bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1171
1195
|
|
|
1172
1196
|
}
|
|
1173
1197
|
|
|
@@ -1178,11 +1202,11 @@ class WebGPUTextureUtils {
|
|
|
1178
1202
|
}
|
|
1179
1203
|
|
|
1180
1204
|
/**
|
|
1181
|
-
* This method is only relevant for compressed
|
|
1182
|
-
* data descriptor for the given GPU
|
|
1205
|
+
* This method is only relevant for compressed textures. It returns a block
|
|
1206
|
+
* data descriptor for the given GPU texture format.
|
|
1183
1207
|
*
|
|
1184
1208
|
* @private
|
|
1185
|
-
* @param {string} format - The GPU
|
|
1209
|
+
* @param {string} format - The GPU texture format.
|
|
1186
1210
|
* @return {Object} The block data descriptor.
|
|
1187
1211
|
*/
|
|
1188
1212
|
_getBlockData( format ) {
|
|
@@ -1218,6 +1242,8 @@ class WebGPUTextureUtils {
|
|
|
1218
1242
|
if ( format === GPUTextureFormat.ASTC12x10Unorm || format === GPUTextureFormat.ASTC12x10UnormSRGB ) return { byteLength: 16, width: 12, height: 10 };
|
|
1219
1243
|
if ( format === GPUTextureFormat.ASTC12x12Unorm || format === GPUTextureFormat.ASTC12x12UnormSRGB ) return { byteLength: 16, width: 12, height: 12 };
|
|
1220
1244
|
|
|
1245
|
+
return { byteLength: this._getBytesPerTexel( format ), width: 1, height: 1 }; // uncompressed data
|
|
1246
|
+
|
|
1221
1247
|
}
|
|
1222
1248
|
|
|
1223
1249
|
/**
|
|
@@ -1603,7 +1629,17 @@ export function getFormat( texture, device ) {
|
|
|
1603
1629
|
break;
|
|
1604
1630
|
|
|
1605
1631
|
case RGBAFormat:
|
|
1606
|
-
|
|
1632
|
+
|
|
1633
|
+
if ( type === HalfFloatType ) {
|
|
1634
|
+
|
|
1635
|
+
formatGPU = GPUTextureFormat.RGBA16Float;
|
|
1636
|
+
|
|
1637
|
+
} else {
|
|
1638
|
+
|
|
1639
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
|
|
1640
|
+
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1607
1643
|
break;
|
|
1608
1644
|
|
|
1609
1645
|
default:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HalfFloatType, UnsignedByteType } from '../../../constants.js';
|
|
2
|
-
import { GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
|
|
2
|
+
import { GPUIndexFormat, GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
|
|
3
3
|
|
|
4
4
|
const _commandList = [ null ];
|
|
5
5
|
|
|
@@ -177,7 +177,7 @@ class WebGPUUtils {
|
|
|
177
177
|
|
|
178
178
|
if ( renderContext.textures !== null ) {
|
|
179
179
|
|
|
180
|
-
format = this.getTextureFormatGPU( renderContext.textures[ 0 ] );
|
|
180
|
+
format = renderContext.textures.length > 0 ? this.getTextureFormatGPU( renderContext.textures[ 0 ] ) : null;
|
|
181
181
|
|
|
182
182
|
} else {
|
|
183
183
|
|
|
@@ -219,7 +219,7 @@ class WebGPUUtils {
|
|
|
219
219
|
|
|
220
220
|
if ( renderContext.textures !== null ) {
|
|
221
221
|
|
|
222
|
-
return renderContext.textures[ 0 ]
|
|
222
|
+
return renderContext.textures[ 0 ]?.colorSpace;
|
|
223
223
|
|
|
224
224
|
}
|
|
225
225
|
|
|
@@ -243,6 +243,23 @@ class WebGPUUtils {
|
|
|
243
243
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
/**
|
|
247
|
+
* Returns the GPU strip index format for the given object and geometry.
|
|
248
|
+
*
|
|
249
|
+
* @param {Object3D} object - The 3D object.
|
|
250
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
251
|
+
* @return {string|undefined} The GPU strip index format. `undefined` if the object is not rendered as an indexed strip.
|
|
252
|
+
*/
|
|
253
|
+
getStripIndexFormat( object, geometry ) {
|
|
254
|
+
|
|
255
|
+
if ( geometry.index !== null && object.isLine === true && object.isLineSegments !== true ) {
|
|
256
|
+
|
|
257
|
+
return ( geometry.index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
246
263
|
/**
|
|
247
264
|
* Returns a modified sample count from the given sample count value.
|
|
248
265
|
*
|
|
@@ -248,7 +248,7 @@ class WebXRController {
|
|
|
248
248
|
if ( jointPose !== null ) {
|
|
249
249
|
|
|
250
250
|
joint.matrix.fromArray( jointPose.transform.matrix );
|
|
251
|
-
joint.matrix.decompose( joint.position, joint.
|
|
251
|
+
joint.matrix.decompose( joint.position, joint.quaternion, joint.scale );
|
|
252
252
|
joint.matrixWorldNeedsUpdate = true;
|
|
253
253
|
joint.jointRadius = jointPose.radius;
|
|
254
254
|
|
|
@@ -297,7 +297,7 @@ class WebXRController {
|
|
|
297
297
|
if ( gripPose !== null ) {
|
|
298
298
|
|
|
299
299
|
grip.matrix.fromArray( gripPose.transform.matrix );
|
|
300
|
-
grip.matrix.decompose( grip.position, grip.
|
|
300
|
+
grip.matrix.decompose( grip.position, grip.quaternion, grip.scale );
|
|
301
301
|
grip.matrixWorldNeedsUpdate = true;
|
|
302
302
|
|
|
303
303
|
if ( gripPose.linearVelocity ) {
|
|
@@ -353,7 +353,7 @@ class WebXRController {
|
|
|
353
353
|
if ( inputPose !== null ) {
|
|
354
354
|
|
|
355
355
|
targetRay.matrix.fromArray( inputPose.transform.matrix );
|
|
356
|
-
targetRay.matrix.decompose( targetRay.position, targetRay.
|
|
356
|
+
targetRay.matrix.decompose( targetRay.position, targetRay.quaternion, targetRay.scale );
|
|
357
357
|
targetRay.matrixWorldNeedsUpdate = true;
|
|
358
358
|
|
|
359
359
|
if ( inputPose.linearVelocity ) {
|
|
@@ -2,7 +2,6 @@ import { ArrayCamera } from '../../cameras/ArrayCamera.js';
|
|
|
2
2
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
3
3
|
import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
|
|
4
4
|
import { Vector2 } from '../../math/Vector2.js';
|
|
5
|
-
import { Vector3 } from '../../math/Vector3.js';
|
|
6
5
|
import { Vector4 } from '../../math/Vector4.js';
|
|
7
6
|
import { RAD2DEG } from '../../math/MathUtils.js';
|
|
8
7
|
import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
|
|
@@ -632,82 +631,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
632
631
|
|
|
633
632
|
//
|
|
634
633
|
|
|
635
|
-
const cameraLPos = new Vector3();
|
|
636
|
-
const cameraRPos = new Vector3();
|
|
637
|
-
|
|
638
|
-
/**
|
|
639
|
-
* Assumes 2 cameras that are parallel and share an X-axis, and that
|
|
640
|
-
* the cameras' projection and world matrices have already been set.
|
|
641
|
-
* And that near and far planes are identical for both cameras.
|
|
642
|
-
* Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
|
|
643
|
-
*
|
|
644
|
-
* @param {ArrayCamera} camera - The camera to update.
|
|
645
|
-
* @param {PerspectiveCamera} cameraL - The left camera.
|
|
646
|
-
* @param {PerspectiveCamera} cameraR - The right camera.
|
|
647
|
-
*/
|
|
648
|
-
function setProjectionFromUnion( camera, cameraL, cameraR ) {
|
|
649
|
-
|
|
650
|
-
cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
|
|
651
|
-
cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
|
|
652
|
-
|
|
653
|
-
const ipd = cameraLPos.distanceTo( cameraRPos );
|
|
654
|
-
|
|
655
|
-
const projL = cameraL.projectionMatrix.elements;
|
|
656
|
-
const projR = cameraR.projectionMatrix.elements;
|
|
657
|
-
|
|
658
|
-
// VR systems will have identical far and near planes, and
|
|
659
|
-
// most likely identical top and bottom frustum extents.
|
|
660
|
-
// Use the left camera for these values.
|
|
661
|
-
const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
|
|
662
|
-
const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
|
|
663
|
-
const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
|
|
664
|
-
const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
|
|
665
|
-
|
|
666
|
-
const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
|
|
667
|
-
const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
|
|
668
|
-
const left = near * leftFov;
|
|
669
|
-
const right = near * rightFov;
|
|
670
|
-
|
|
671
|
-
// Calculate the new camera's position offset from the
|
|
672
|
-
// left camera. xOffset should be roughly half `ipd`.
|
|
673
|
-
const zOffset = ipd / ( - leftFov + rightFov );
|
|
674
|
-
const xOffset = zOffset * - leftFov;
|
|
675
|
-
|
|
676
|
-
// TODO: Better way to apply this offset?
|
|
677
|
-
cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
|
|
678
|
-
camera.translateX( xOffset );
|
|
679
|
-
camera.translateZ( zOffset );
|
|
680
|
-
camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
|
|
681
|
-
camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
|
|
682
|
-
|
|
683
|
-
// Check if the projection uses an infinite far plane.
|
|
684
|
-
if ( projL[ 10 ] === - 1.0 ) {
|
|
685
|
-
|
|
686
|
-
// Use the projection matrix from the left eye.
|
|
687
|
-
// The camera offset is sufficient to include the view volumes
|
|
688
|
-
// of both eyes (assuming symmetric projections).
|
|
689
|
-
camera.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
690
|
-
camera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
|
|
691
|
-
|
|
692
|
-
} else {
|
|
693
|
-
|
|
694
|
-
// Find the union of the frustum values of the cameras and scale
|
|
695
|
-
// the values so that the near plane's position does not change in world space,
|
|
696
|
-
// although must now be relative to the new union camera.
|
|
697
|
-
const near2 = near + zOffset;
|
|
698
|
-
const far2 = far + zOffset;
|
|
699
|
-
const left2 = left - xOffset;
|
|
700
|
-
const right2 = right + ( ipd - xOffset );
|
|
701
|
-
const top2 = topFov * far / far2 * near2;
|
|
702
|
-
const bottom2 = bottomFov * far / far2 * near2;
|
|
703
|
-
|
|
704
|
-
camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
|
|
705
|
-
camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
}
|
|
710
|
-
|
|
711
634
|
function updateCamera( camera, parent ) {
|
|
712
635
|
|
|
713
636
|
if ( parent === null ) {
|
|
@@ -780,19 +703,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
780
703
|
|
|
781
704
|
}
|
|
782
705
|
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
if ( cameras.length === 2 ) {
|
|
786
|
-
|
|
787
|
-
setProjectionFromUnion( cameraXR, cameraL, cameraR );
|
|
788
|
-
|
|
789
|
-
} else {
|
|
790
|
-
|
|
791
|
-
// assume single camera setup (AR)
|
|
792
|
-
|
|
793
|
-
cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
794
|
-
|
|
795
|
-
}
|
|
706
|
+
cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
707
|
+
cameraXR.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
|
|
796
708
|
|
|
797
709
|
// update user camera and its children
|
|
798
710
|
|
|
@@ -843,6 +755,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
843
755
|
* the XR camera. If you need the fov on app level, you have to compute in
|
|
844
756
|
* manually from the XR camera's projection matrices.
|
|
845
757
|
*
|
|
758
|
+
* The camera's transformation and projection matrix are derived from the first
|
|
759
|
+
* sub camera (e.g. the left eye in a stereo setup).
|
|
760
|
+
*
|
|
846
761
|
* @return {ArrayCamera} The XR camera.
|
|
847
762
|
*/
|
|
848
763
|
this.getCamera = function () {
|
package/src/scenes/Scene.js
CHANGED
|
@@ -124,9 +124,9 @@ class Scene extends Object3D {
|
|
|
124
124
|
|
|
125
125
|
super.copy( source, recursive );
|
|
126
126
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
this.background = source.background !== null ? source.background.clone() : null;
|
|
128
|
+
this.environment = source.environment !== null ? source.environment.clone() : null;
|
|
129
|
+
this.fog = source.fog !== null ? source.fog.clone() : null;
|
|
130
130
|
|
|
131
131
|
this.backgroundBlurriness = source.backgroundBlurriness;
|
|
132
132
|
this.backgroundIntensity = source.backgroundIntensity;
|
|
@@ -135,7 +135,7 @@ class Scene extends Object3D {
|
|
|
135
135
|
this.environmentIntensity = source.environmentIntensity;
|
|
136
136
|
this.environmentRotation.copy( source.environmentRotation );
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
this.overrideMaterial = source.overrideMaterial !== null ? source.overrideMaterial.clone() : null;
|
|
139
139
|
|
|
140
140
|
this.matrixAutoUpdate = source.matrixAutoUpdate;
|
|
141
141
|
|
|
@@ -12,7 +12,7 @@ class CompressedTexture extends Texture {
|
|
|
12
12
|
/**
|
|
13
13
|
* Constructs a new compressed texture.
|
|
14
14
|
*
|
|
15
|
-
* @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
|
|
15
|
+
* @param {Array<Object>} [mipmaps=[]] - This array holds for all mipmaps (including the bases mip)
|
|
16
16
|
* the data and dimensions.
|
|
17
17
|
* @param {number} width - The width of the texture.
|
|
18
18
|
* @param {number} height - The height of the texture.
|
|
@@ -26,7 +26,7 @@ class CompressedTexture extends Texture {
|
|
|
26
26
|
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
27
27
|
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
28
28
|
*/
|
|
29
|
-
constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
|
|
29
|
+
constructor( mipmaps = [], width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
|
|
30
30
|
|
|
31
31
|
super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
|
|
32
32
|
|
|
@@ -19,8 +19,8 @@ class DepthTexture extends Texture {
|
|
|
19
19
|
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
20
20
|
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
21
21
|
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
22
|
-
* @param {number} [magFilter=
|
|
23
|
-
* @param {number} [minFilter=
|
|
22
|
+
* @param {number} [magFilter=NearestFilter] - The mag filter value.
|
|
23
|
+
* @param {number} [minFilter=NearestFilter] - The min filter value.
|
|
24
24
|
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
25
|
* @param {number} [format=DepthFormat] - The texture format.
|
|
26
26
|
* @param {number} [depth=1] - The depth of the texture.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
|
+
import { TextureSource } from './TextureSource.js';
|
|
2
3
|
import { NearestFilter } from '../constants.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -80,6 +81,16 @@ class FramebufferTexture extends Texture {
|
|
|
80
81
|
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
copy( source ) {
|
|
85
|
+
|
|
86
|
+
super.copy( source );
|
|
87
|
+
|
|
88
|
+
this.source = new TextureSource( Object.assign( {}, source.image ) );
|
|
89
|
+
|
|
90
|
+
return this;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
83
94
|
}
|
|
84
95
|
|
|
85
96
|
export { FramebufferTexture };
|
package/src/textures/Texture.js
CHANGED
|
@@ -103,7 +103,7 @@ class Texture extends EventDispatcher {
|
|
|
103
103
|
* How the texture is applied to the object. The value `UVMapping`
|
|
104
104
|
* is the default, where texture or uv coordinates are used to apply the map.
|
|
105
105
|
*
|
|
106
|
-
* @type {(UVMapping|CubeReflectionMapping|CubeRefractionMapping|EquirectangularReflectionMapping|EquirectangularRefractionMapping
|
|
106
|
+
* @type {(UVMapping|CubeReflectionMapping|CubeRefractionMapping|EquirectangularReflectionMapping|EquirectangularRefractionMapping)}
|
|
107
107
|
* @default UVMapping
|
|
108
108
|
*/
|
|
109
109
|
this.mapping = mapping;
|
|
@@ -256,6 +256,17 @@ class Texture extends EventDispatcher {
|
|
|
256
256
|
*/
|
|
257
257
|
this.generateMipmaps = true;
|
|
258
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Whether the renderer regenerates the mipmaps automatically whenever the
|
|
261
|
+
* texture is uploaded, rendered to or copied into. Set this to `false` to
|
|
262
|
+
* pause the regeneration and write the mip levels yourself. Requires
|
|
263
|
+
* {@link Texture#generateMipmaps}.
|
|
264
|
+
*
|
|
265
|
+
* @type {boolean}
|
|
266
|
+
* @default true
|
|
267
|
+
*/
|
|
268
|
+
this.mipmapsAutoUpdate = true;
|
|
269
|
+
|
|
259
270
|
/**
|
|
260
271
|
* If set to `true`, the alpha channel, if present, is multiplied into the
|
|
261
272
|
* color channels when the texture is uploaded to the GPU.
|
|
@@ -368,6 +379,16 @@ class Texture extends EventDispatcher {
|
|
|
368
379
|
*/
|
|
369
380
|
this.pmremVersion = 0;
|
|
370
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Indicates whether this texture is a prefiltered cube environment map generated
|
|
384
|
+
* by {@link PMREMGenerator}.
|
|
385
|
+
*
|
|
386
|
+
* @type {boolean}
|
|
387
|
+
* @readonly
|
|
388
|
+
* @default false
|
|
389
|
+
*/
|
|
390
|
+
this.isPMREMTexture = false;
|
|
391
|
+
|
|
371
392
|
/**
|
|
372
393
|
* Whether the texture should use one of the 16 bit integer formats which are normalized
|
|
373
394
|
* to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled.
|
|
@@ -503,6 +524,7 @@ class Texture extends EventDispatcher {
|
|
|
503
524
|
this.matrix.copy( source.matrix );
|
|
504
525
|
|
|
505
526
|
this.generateMipmaps = source.generateMipmaps;
|
|
527
|
+
this.mipmapsAutoUpdate = source.mipmapsAutoUpdate;
|
|
506
528
|
this.premultiplyAlpha = source.premultiplyAlpha;
|
|
507
529
|
this.flipY = source.flipY;
|
|
508
530
|
this.unpackAlignment = source.unpackAlignment;
|
|
@@ -510,6 +532,7 @@ class Texture extends EventDispatcher {
|
|
|
510
532
|
|
|
511
533
|
this.renderTarget = source.renderTarget;
|
|
512
534
|
this.isRenderTargetTexture = source.isRenderTargetTexture;
|
|
535
|
+
this.isPMREMTexture = source.isPMREMTexture;
|
|
513
536
|
this.isArrayTexture = source.isArrayTexture;
|
|
514
537
|
|
|
515
538
|
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
@@ -621,6 +644,7 @@ class Texture extends EventDispatcher {
|
|
|
621
644
|
flipY: this.flipY,
|
|
622
645
|
|
|
623
646
|
generateMipmaps: this.generateMipmaps,
|
|
647
|
+
mipmapsAutoUpdate: this.mipmapsAutoUpdate,
|
|
624
648
|
premultiplyAlpha: this.premultiplyAlpha,
|
|
625
649
|
unpackAlignment: this.unpackAlignment
|
|
626
650
|
|
|
@@ -642,6 +666,10 @@ class Texture extends EventDispatcher {
|
|
|
642
666
|
* Frees the GPU-related resources allocated by this instance. Call this
|
|
643
667
|
* method whenever this instance is no longer used in your app.
|
|
644
668
|
*
|
|
669
|
+
* Textures that belong to a render target are managed by the render target.
|
|
670
|
+
* Calling this method on such a texture only dispatches the dispose event but
|
|
671
|
+
* does not free any GPU resources. Use {@link RenderTarget#dispose} instead.
|
|
672
|
+
*
|
|
645
673
|
* @fires Texture#dispose
|
|
646
674
|
*/
|
|
647
675
|
dispose() {
|
package/src/upe.js
CHANGED
package/src/utils.js
CHANGED
|
@@ -479,14 +479,14 @@ function toReversedProjectionMatrix( projectionMatrix ) {
|
|
|
479
479
|
* @type {Object}
|
|
480
480
|
*/
|
|
481
481
|
const ReversedDepthFuncs = {
|
|
482
|
-
[ NeverDepth ]:
|
|
482
|
+
[ NeverDepth ]: NeverDepth,
|
|
483
483
|
[ LessDepth ]: GreaterDepth,
|
|
484
|
-
[ EqualDepth ]:
|
|
484
|
+
[ EqualDepth ]: EqualDepth,
|
|
485
485
|
[ LessEqualDepth ]: GreaterEqualDepth,
|
|
486
486
|
|
|
487
|
-
[ AlwaysDepth ]:
|
|
487
|
+
[ AlwaysDepth ]: AlwaysDepth,
|
|
488
488
|
[ GreaterDepth ]: LessDepth,
|
|
489
|
-
[ NotEqualDepth ]:
|
|
489
|
+
[ NotEqualDepth ]: NotEqualDepth,
|
|
490
490
|
[ GreaterEqualDepth ]: LessEqualDepth,
|
|
491
491
|
};
|
|
492
492
|
|