super-three 0.177.0 → 0.181.0
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 +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
* const timer = new Timer();
|
|
12
12
|
* timer.connect( document ); // use Page Visibility API
|
|
13
13
|
* ```
|
|
14
|
-
*
|
|
15
|
-
* @three_import import { Timer } from 'three/addons/misc/Timer.js';
|
|
16
14
|
*/
|
|
17
15
|
class Timer {
|
|
18
16
|
|
|
@@ -23,7 +21,7 @@ class Timer {
|
|
|
23
21
|
|
|
24
22
|
this._previousTime = 0;
|
|
25
23
|
this._currentTime = 0;
|
|
26
|
-
this._startTime = now();
|
|
24
|
+
this._startTime = performance.now();
|
|
27
25
|
|
|
28
26
|
this._delta = 0;
|
|
29
27
|
this._elapsed = 0;
|
|
@@ -129,7 +127,7 @@ class Timer {
|
|
|
129
127
|
*/
|
|
130
128
|
reset() {
|
|
131
129
|
|
|
132
|
-
this._currentTime = now() - this._startTime;
|
|
130
|
+
this._currentTime = performance.now() - this._startTime;
|
|
133
131
|
|
|
134
132
|
return this;
|
|
135
133
|
|
|
@@ -164,7 +162,7 @@ class Timer {
|
|
|
164
162
|
} else {
|
|
165
163
|
|
|
166
164
|
this._previousTime = this._currentTime;
|
|
167
|
-
this._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;
|
|
165
|
+
this._currentTime = ( timestamp !== undefined ? timestamp : performance.now() ) - this._startTime;
|
|
168
166
|
|
|
169
167
|
this._delta = ( this._currentTime - this._previousTime ) * this._timescale;
|
|
170
168
|
this._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas
|
|
@@ -177,46 +175,10 @@ class Timer {
|
|
|
177
175
|
|
|
178
176
|
}
|
|
179
177
|
|
|
180
|
-
/**
|
|
181
|
-
* A special version of a timer with a fixed time delta value.
|
|
182
|
-
* Can be useful for testing and debugging purposes.
|
|
183
|
-
*
|
|
184
|
-
* @augments Timer
|
|
185
|
-
*/
|
|
186
|
-
class FixedTimer extends Timer {
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Constructs a new timer.
|
|
190
|
-
*
|
|
191
|
-
* @param {number} [fps=60] - The fixed FPS of this timer.
|
|
192
|
-
*/
|
|
193
|
-
constructor( fps = 60 ) {
|
|
194
|
-
|
|
195
|
-
super();
|
|
196
|
-
this._delta = ( 1 / fps ) * 1000;
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
update() {
|
|
201
|
-
|
|
202
|
-
this._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas
|
|
203
|
-
|
|
204
|
-
return this;
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
function now() {
|
|
211
|
-
|
|
212
|
-
return performance.now();
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
|
|
216
178
|
function handleVisibilityChange() {
|
|
217
179
|
|
|
218
180
|
if ( this._document.hidden === false ) this.reset();
|
|
219
181
|
|
|
220
182
|
}
|
|
221
183
|
|
|
222
|
-
export { Timer
|
|
184
|
+
export { Timer };
|
package/src/extras/Controls.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventDispatcher } from '../core/EventDispatcher.js';
|
|
2
|
+
import { warn } from '../utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Abstract base class for controls.
|
|
@@ -12,7 +13,7 @@ class Controls extends EventDispatcher {
|
|
|
12
13
|
* Constructs a new controls instance.
|
|
13
14
|
*
|
|
14
15
|
* @param {Object3D} object - The object that is managed by the controls.
|
|
15
|
-
* @param {?
|
|
16
|
+
* @param {?HTMLElement} domElement - The HTML element used for event listeners.
|
|
16
17
|
*/
|
|
17
18
|
constructor( object, domElement = null ) {
|
|
18
19
|
|
|
@@ -28,7 +29,7 @@ class Controls extends EventDispatcher {
|
|
|
28
29
|
/**
|
|
29
30
|
* The HTML element used for event listeners.
|
|
30
31
|
*
|
|
31
|
-
* @type {?
|
|
32
|
+
* @type {?HTMLElement}
|
|
32
33
|
* @default null
|
|
33
34
|
*/
|
|
34
35
|
this.domElement = domElement;
|
|
@@ -78,13 +79,13 @@ class Controls extends EventDispatcher {
|
|
|
78
79
|
* Connects the controls to the DOM. This method has so called "side effects" since
|
|
79
80
|
* it adds the module's event listeners to the DOM.
|
|
80
81
|
*
|
|
81
|
-
* @param {
|
|
82
|
+
* @param {HTMLElement} element - The DOM element to connect to.
|
|
82
83
|
*/
|
|
83
84
|
connect( element ) {
|
|
84
85
|
|
|
85
86
|
if ( element === undefined ) {
|
|
86
87
|
|
|
87
|
-
|
|
88
|
+
warn( 'Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185
|
|
88
89
|
return;
|
|
89
90
|
|
|
90
91
|
}
|
package/src/extras/DataUtils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { clamp } from '../math/MathUtils.js';
|
|
2
|
+
import { warn } from '../utils.js';
|
|
2
3
|
|
|
3
4
|
// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
|
|
4
5
|
|
|
@@ -148,7 +149,7 @@ function _generateTables() {
|
|
|
148
149
|
*/
|
|
149
150
|
function toHalfFloat( val ) {
|
|
150
151
|
|
|
151
|
-
if ( Math.abs( val ) > 65504 )
|
|
152
|
+
if ( Math.abs( val ) > 65504 ) warn( 'DataUtils.toHalfFloat(): Value out of range.' );
|
|
152
153
|
|
|
153
154
|
val = clamp( val, - 65504, 65504 );
|
|
154
155
|
|
package/src/extras/Earcut.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import earcut from './lib/earcut.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* An implementation of the earcut polygon triangulation algorithm.
|
|
5
|
+
* The code is a port of [mapbox/earcut](https://github.com/mapbox/earcut).
|
|
6
|
+
*
|
|
7
|
+
* @see https://github.com/mapbox/earcut
|
|
8
|
+
*/
|
|
3
9
|
class Earcut {
|
|
4
10
|
|
|
5
11
|
/**
|
package/src/extras/ImageUtils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createElementNS } from '../utils.js';
|
|
1
|
+
import { createElementNS, warn } from '../utils.js';
|
|
2
2
|
import { SRGBToLinear } from '../math/ColorManagement.js';
|
|
3
3
|
|
|
4
4
|
let _canvas;
|
|
@@ -125,7 +125,7 @@ class ImageUtils {
|
|
|
125
125
|
|
|
126
126
|
} else {
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
warn( 'ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
|
|
129
129
|
return image;
|
|
130
130
|
|
|
131
131
|
}
|
|
@@ -22,19 +22,22 @@ import { Color } from '../math/Color.js';
|
|
|
22
22
|
import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';
|
|
23
23
|
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
|
24
24
|
import { BoxGeometry } from '../geometries/BoxGeometry.js';
|
|
25
|
+
import { error, warn } from '../utils.js';
|
|
25
26
|
|
|
26
27
|
const LOD_MIN = 4;
|
|
27
28
|
|
|
28
|
-
// The standard deviations (radians) associated with the extra mips.
|
|
29
|
-
//
|
|
30
|
-
// geometric shadowing function. These sigma values squared must match the
|
|
31
|
-
// variance #defines in cube_uv_reflection_fragment.glsl.js.
|
|
29
|
+
// The standard deviations (radians) associated with the extra mips.
|
|
30
|
+
// Used for scene blur in fromScene() method.
|
|
32
31
|
const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
33
32
|
|
|
34
33
|
// The maximum length of the blur for loop. Smaller sigmas will use fewer
|
|
35
34
|
// samples and exit early, but not recompile the shader.
|
|
35
|
+
// Used for scene blur in fromScene() method.
|
|
36
36
|
const MAX_SAMPLES = 20;
|
|
37
37
|
|
|
38
|
+
// GGX VNDF importance sampling configuration
|
|
39
|
+
const GGX_SAMPLES = 256;
|
|
40
|
+
|
|
38
41
|
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
39
42
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
40
43
|
let _oldTarget = null;
|
|
@@ -42,24 +45,6 @@ let _oldActiveCubeFace = 0;
|
|
|
42
45
|
let _oldActiveMipmapLevel = 0;
|
|
43
46
|
let _oldXrEnabled = false;
|
|
44
47
|
|
|
45
|
-
// Golden Ratio
|
|
46
|
-
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
47
|
-
const INV_PHI = 1 / PHI;
|
|
48
|
-
|
|
49
|
-
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
50
|
-
// same axis), used as axis directions evenly spread on a sphere.
|
|
51
|
-
const _axisDirections = [
|
|
52
|
-
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
|
|
53
|
-
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
54
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
55
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
56
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
58
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
59
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
60
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
61
|
-
/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
|
|
62
|
-
|
|
63
48
|
const _origin = /*@__PURE__*/ new Vector3();
|
|
64
49
|
|
|
65
50
|
/**
|
|
@@ -73,9 +58,11 @@ const _origin = /*@__PURE__*/ new Vector3();
|
|
|
73
58
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
74
59
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
75
60
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
|
|
61
|
+
* The prefiltering uses GGX VNDF (Visible Normal Distribution Function)
|
|
62
|
+
* importance sampling based on "Sampling the GGX Distribution of Visible Normals"
|
|
63
|
+
* (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF
|
|
64
|
+
* used in material rendering for physically-based image-based lighting.
|
|
65
|
+
*/
|
|
79
66
|
class PMREMGenerator {
|
|
80
67
|
|
|
81
68
|
/**
|
|
@@ -90,15 +77,17 @@ class PMREMGenerator {
|
|
|
90
77
|
|
|
91
78
|
this._lodMax = 0;
|
|
92
79
|
this._cubeSize = 0;
|
|
93
|
-
this._lodPlanes = [];
|
|
94
80
|
this._sizeLods = [];
|
|
95
81
|
this._sigmas = [];
|
|
82
|
+
this._lodMeshes = [];
|
|
83
|
+
|
|
84
|
+
this._backgroundBox = null;
|
|
96
85
|
|
|
97
|
-
this._blurMaterial = null;
|
|
98
86
|
this._cubemapMaterial = null;
|
|
99
87
|
this._equirectMaterial = null;
|
|
100
88
|
|
|
101
|
-
this.
|
|
89
|
+
this._blurMaterial = null;
|
|
90
|
+
this._ggxMaterial = null;
|
|
102
91
|
|
|
103
92
|
}
|
|
104
93
|
|
|
@@ -223,6 +212,13 @@ class PMREMGenerator {
|
|
|
223
212
|
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
224
213
|
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
225
214
|
|
|
215
|
+
if ( this._backgroundBox !== null ) {
|
|
216
|
+
|
|
217
|
+
this._backgroundBox.geometry.dispose();
|
|
218
|
+
this._backgroundBox.material.dispose();
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
226
222
|
}
|
|
227
223
|
|
|
228
224
|
// private interface
|
|
@@ -237,12 +233,13 @@ class PMREMGenerator {
|
|
|
237
233
|
_dispose() {
|
|
238
234
|
|
|
239
235
|
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
236
|
+
if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
|
|
240
237
|
|
|
241
238
|
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
242
239
|
|
|
243
|
-
for ( let i = 0; i < this.
|
|
240
|
+
for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
|
|
244
241
|
|
|
245
|
-
this.
|
|
242
|
+
this._lodMeshes[ i ].geometry.dispose();
|
|
246
243
|
|
|
247
244
|
}
|
|
248
245
|
|
|
@@ -314,7 +311,7 @@ class PMREMGenerator {
|
|
|
314
311
|
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
315
312
|
|
|
316
313
|
const { _lodMax } = this;
|
|
317
|
-
( {
|
|
314
|
+
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
318
315
|
|
|
319
316
|
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
320
317
|
|
|
@@ -326,8 +323,8 @@ class PMREMGenerator {
|
|
|
326
323
|
|
|
327
324
|
_compileMaterial( material ) {
|
|
328
325
|
|
|
329
|
-
const
|
|
330
|
-
this._renderer.compile(
|
|
326
|
+
const mesh = new Mesh( new BufferGeometry(), material );
|
|
327
|
+
this._renderer.compile( mesh, _flatCamera );
|
|
331
328
|
|
|
332
329
|
}
|
|
333
330
|
|
|
@@ -347,16 +344,36 @@ class PMREMGenerator {
|
|
|
347
344
|
renderer.toneMapping = NoToneMapping;
|
|
348
345
|
renderer.autoClear = false;
|
|
349
346
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
347
|
+
// https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812
|
|
348
|
+
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
349
|
+
|
|
350
|
+
if ( reversedDepthBuffer ) {
|
|
351
|
+
|
|
352
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
353
|
+
renderer.clearDepth();
|
|
354
|
+
renderer.setRenderTarget( null );
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if ( this._backgroundBox === null ) {
|
|
356
359
|
|
|
357
|
-
|
|
360
|
+
this._backgroundBox = new Mesh(
|
|
361
|
+
new BoxGeometry(),
|
|
362
|
+
new MeshBasicMaterial( {
|
|
363
|
+
name: 'PMREM.Background',
|
|
364
|
+
side: BackSide,
|
|
365
|
+
depthWrite: false,
|
|
366
|
+
depthTest: false,
|
|
367
|
+
} )
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const backgroundBox = this._backgroundBox;
|
|
373
|
+
const backgroundMaterial = backgroundBox.material;
|
|
358
374
|
|
|
359
375
|
let useSolidColor = false;
|
|
376
|
+
|
|
360
377
|
const background = scene.background;
|
|
361
378
|
|
|
362
379
|
if ( background ) {
|
|
@@ -417,9 +434,6 @@ class PMREMGenerator {
|
|
|
417
434
|
|
|
418
435
|
}
|
|
419
436
|
|
|
420
|
-
backgroundBox.geometry.dispose();
|
|
421
|
-
backgroundBox.material.dispose();
|
|
422
|
-
|
|
423
437
|
renderer.toneMapping = toneMapping;
|
|
424
438
|
renderer.autoClear = originalAutoClear;
|
|
425
439
|
scene.background = background;
|
|
@@ -453,7 +467,9 @@ class PMREMGenerator {
|
|
|
453
467
|
}
|
|
454
468
|
|
|
455
469
|
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
456
|
-
|
|
470
|
+
|
|
471
|
+
const mesh = this._lodMeshes[ 0 ];
|
|
472
|
+
mesh.material = material;
|
|
457
473
|
|
|
458
474
|
const uniforms = material.uniforms;
|
|
459
475
|
|
|
@@ -473,19 +489,82 @@ class PMREMGenerator {
|
|
|
473
489
|
const renderer = this._renderer;
|
|
474
490
|
const autoClear = renderer.autoClear;
|
|
475
491
|
renderer.autoClear = false;
|
|
476
|
-
const n = this._lodPlanes.length;
|
|
477
492
|
|
|
493
|
+
const n = this._lodMeshes.length;
|
|
494
|
+
|
|
495
|
+
// Use GGX VNDF importance sampling
|
|
478
496
|
for ( let i = 1; i < n; i ++ ) {
|
|
479
497
|
|
|
480
|
-
|
|
498
|
+
this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
|
|
499
|
+
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
renderer.autoClear = autoClear;
|
|
503
|
+
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
|
|
508
|
+
* Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
|
|
509
|
+
* GGX BRDF for physically-based rendering. Reads from the previous LOD level and
|
|
510
|
+
* applies incremental roughness filtering to avoid over-blurring.
|
|
511
|
+
*
|
|
512
|
+
* @private
|
|
513
|
+
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
514
|
+
* @param {number} lodIn - Source LOD level to read from
|
|
515
|
+
* @param {number} lodOut - Target LOD level to write to
|
|
516
|
+
*/
|
|
517
|
+
_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
|
|
518
|
+
|
|
519
|
+
const renderer = this._renderer;
|
|
520
|
+
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
481
521
|
|
|
482
|
-
|
|
522
|
+
if ( this._ggxMaterial === null ) {
|
|
483
523
|
|
|
484
|
-
|
|
524
|
+
const width = 3 * Math.max( this._cubeSize, 16 );
|
|
525
|
+
const height = 4 * this._cubeSize;
|
|
526
|
+
this._ggxMaterial = _getGGXShader( this._lodMax, width, height );
|
|
485
527
|
|
|
486
528
|
}
|
|
487
529
|
|
|
488
|
-
|
|
530
|
+
const ggxMaterial = this._ggxMaterial;
|
|
531
|
+
const ggxMesh = this._lodMeshes[ lodOut ];
|
|
532
|
+
ggxMesh.material = ggxMaterial;
|
|
533
|
+
|
|
534
|
+
const ggxUniforms = ggxMaterial.uniforms;
|
|
535
|
+
|
|
536
|
+
// Calculate incremental roughness between LOD levels
|
|
537
|
+
const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
|
|
538
|
+
const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
|
|
539
|
+
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
540
|
+
|
|
541
|
+
// Apply blur strength mapping for better quality across the roughness range
|
|
542
|
+
const blurStrength = 0.05 + targetRoughness * 0.95;
|
|
543
|
+
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
544
|
+
|
|
545
|
+
// Calculate viewport position based on output LOD level
|
|
546
|
+
const { _lodMax } = this;
|
|
547
|
+
const outputSize = this._sizeLods[ lodOut ];
|
|
548
|
+
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
549
|
+
const y = 4 * ( this._cubeSize - outputSize );
|
|
550
|
+
|
|
551
|
+
// Read from previous LOD with incremental roughness
|
|
552
|
+
ggxUniforms[ 'envMap' ].value = cubeUVRenderTarget.texture;
|
|
553
|
+
ggxUniforms[ 'roughness' ].value = adjustedRoughness;
|
|
554
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodIn; // Sample from input LOD
|
|
555
|
+
|
|
556
|
+
_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
557
|
+
renderer.setRenderTarget( pingPongRenderTarget );
|
|
558
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
559
|
+
|
|
560
|
+
// Copy from pingPong back to cubeUV (simple direct copy)
|
|
561
|
+
ggxUniforms[ 'envMap' ].value = pingPongRenderTarget.texture;
|
|
562
|
+
ggxUniforms[ 'roughness' ].value = 0.0; // Direct copy
|
|
563
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodOut; // Read from the level we just wrote
|
|
564
|
+
|
|
565
|
+
_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
566
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
567
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
489
568
|
|
|
490
569
|
}
|
|
491
570
|
|
|
@@ -496,6 +575,8 @@ class PMREMGenerator {
|
|
|
496
575
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
497
576
|
* accurate at the poles, but still does a decent job.
|
|
498
577
|
*
|
|
578
|
+
* Used for initial scene blur in fromScene() method when sigma > 0.
|
|
579
|
+
*
|
|
499
580
|
* @private
|
|
500
581
|
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
501
582
|
* @param {number} lodIn
|
|
@@ -534,7 +615,7 @@ class PMREMGenerator {
|
|
|
534
615
|
|
|
535
616
|
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
536
617
|
|
|
537
|
-
|
|
618
|
+
error(
|
|
538
619
|
'blur direction must be either latitudinal or longitudinal!' );
|
|
539
620
|
|
|
540
621
|
}
|
|
@@ -542,7 +623,9 @@ class PMREMGenerator {
|
|
|
542
623
|
// Number of standard deviations at which to cut off the discrete approximation.
|
|
543
624
|
const STANDARD_DEVIATIONS = 3;
|
|
544
625
|
|
|
545
|
-
const blurMesh =
|
|
626
|
+
const blurMesh = this._lodMeshes[ lodOut ];
|
|
627
|
+
blurMesh.material = blurMaterial;
|
|
628
|
+
|
|
546
629
|
const blurUniforms = blurMaterial.uniforms;
|
|
547
630
|
|
|
548
631
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
@@ -552,7 +635,7 @@ class PMREMGenerator {
|
|
|
552
635
|
|
|
553
636
|
if ( samples > MAX_SAMPLES ) {
|
|
554
637
|
|
|
555
|
-
|
|
638
|
+
warn( `sigmaRadians, ${
|
|
556
639
|
sigmaRadians}, is too large and will clip, as it requested ${
|
|
557
640
|
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
558
641
|
|
|
@@ -616,9 +699,9 @@ class PMREMGenerator {
|
|
|
616
699
|
|
|
617
700
|
function _createPlanes( lodMax ) {
|
|
618
701
|
|
|
619
|
-
const lodPlanes = [];
|
|
620
702
|
const sizeLods = [];
|
|
621
703
|
const sigmas = [];
|
|
704
|
+
const lodMeshes = [];
|
|
622
705
|
|
|
623
706
|
let lod = lodMax;
|
|
624
707
|
|
|
@@ -680,7 +763,7 @@ function _createPlanes( lodMax ) {
|
|
|
680
763
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
681
764
|
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
682
765
|
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
683
|
-
|
|
766
|
+
lodMeshes.push( new Mesh( planes, null ) );
|
|
684
767
|
|
|
685
768
|
if ( lod > LOD_MIN ) {
|
|
686
769
|
|
|
@@ -690,7 +773,7 @@ function _createPlanes( lodMax ) {
|
|
|
690
773
|
|
|
691
774
|
}
|
|
692
775
|
|
|
693
|
-
return {
|
|
776
|
+
return { lodMeshes, sizeLods, sigmas };
|
|
694
777
|
|
|
695
778
|
}
|
|
696
779
|
|
|
@@ -711,6 +794,147 @@ function _setViewport( target, x, y, width, height ) {
|
|
|
711
794
|
|
|
712
795
|
}
|
|
713
796
|
|
|
797
|
+
function _getGGXShader( lodMax, width, height ) {
|
|
798
|
+
|
|
799
|
+
const shaderMaterial = new ShaderMaterial( {
|
|
800
|
+
|
|
801
|
+
name: 'PMREMGGXConvolution',
|
|
802
|
+
|
|
803
|
+
defines: {
|
|
804
|
+
'GGX_SAMPLES': GGX_SAMPLES,
|
|
805
|
+
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
806
|
+
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
807
|
+
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
808
|
+
},
|
|
809
|
+
|
|
810
|
+
uniforms: {
|
|
811
|
+
'envMap': { value: null },
|
|
812
|
+
'roughness': { value: 0.0 },
|
|
813
|
+
'mipInt': { value: 0 }
|
|
814
|
+
},
|
|
815
|
+
|
|
816
|
+
vertexShader: _getCommonVertexShader(),
|
|
817
|
+
|
|
818
|
+
fragmentShader: /* glsl */`
|
|
819
|
+
|
|
820
|
+
precision highp float;
|
|
821
|
+
precision highp int;
|
|
822
|
+
|
|
823
|
+
varying vec3 vOutputDirection;
|
|
824
|
+
|
|
825
|
+
uniform sampler2D envMap;
|
|
826
|
+
uniform float roughness;
|
|
827
|
+
uniform float mipInt;
|
|
828
|
+
|
|
829
|
+
#define ENVMAP_TYPE_CUBE_UV
|
|
830
|
+
#include <cube_uv_reflection_fragment>
|
|
831
|
+
|
|
832
|
+
#define PI 3.14159265359
|
|
833
|
+
|
|
834
|
+
// Van der Corput radical inverse
|
|
835
|
+
float radicalInverse_VdC(uint bits) {
|
|
836
|
+
bits = (bits << 16u) | (bits >> 16u);
|
|
837
|
+
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
|
|
838
|
+
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
|
|
839
|
+
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
|
|
840
|
+
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
|
|
841
|
+
return float(bits) * 2.3283064365386963e-10; // / 0x100000000
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// Hammersley sequence
|
|
845
|
+
vec2 hammersley(uint i, uint N) {
|
|
846
|
+
return vec2(float(i) / float(N), radicalInverse_VdC(i));
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// GGX VNDF importance sampling (Eric Heitz 2018)
|
|
850
|
+
// "Sampling the GGX Distribution of Visible Normals"
|
|
851
|
+
// https://jcgt.org/published/0007/04/01/
|
|
852
|
+
vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
|
|
853
|
+
float alpha = roughness * roughness;
|
|
854
|
+
|
|
855
|
+
// Section 3.2: Transform view direction to hemisphere configuration
|
|
856
|
+
vec3 Vh = normalize(vec3(alpha * V.x, alpha * V.y, V.z));
|
|
857
|
+
|
|
858
|
+
// Section 4.1: Orthonormal basis
|
|
859
|
+
float lensq = Vh.x * Vh.x + Vh.y * Vh.y;
|
|
860
|
+
vec3 T1 = lensq > 0.0 ? vec3(-Vh.y, Vh.x, 0.0) / sqrt(lensq) : vec3(1.0, 0.0, 0.0);
|
|
861
|
+
vec3 T2 = cross(Vh, T1);
|
|
862
|
+
|
|
863
|
+
// Section 4.2: Parameterization of projected area
|
|
864
|
+
float r = sqrt(Xi.x);
|
|
865
|
+
float phi = 2.0 * PI * Xi.y;
|
|
866
|
+
float t1 = r * cos(phi);
|
|
867
|
+
float t2 = r * sin(phi);
|
|
868
|
+
float s = 0.5 * (1.0 + Vh.z);
|
|
869
|
+
t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;
|
|
870
|
+
|
|
871
|
+
// Section 4.3: Reprojection onto hemisphere
|
|
872
|
+
vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * Vh;
|
|
873
|
+
|
|
874
|
+
// Section 3.4: Transform back to ellipsoid configuration
|
|
875
|
+
return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
void main() {
|
|
879
|
+
vec3 N = normalize(vOutputDirection);
|
|
880
|
+
vec3 V = N; // Assume view direction equals normal for pre-filtering
|
|
881
|
+
|
|
882
|
+
vec3 prefilteredColor = vec3(0.0);
|
|
883
|
+
float totalWeight = 0.0;
|
|
884
|
+
|
|
885
|
+
// For very low roughness, just sample the environment directly
|
|
886
|
+
if (roughness < 0.001) {
|
|
887
|
+
gl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
// Tangent space basis for VNDF sampling
|
|
892
|
+
vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
|
|
893
|
+
vec3 tangent = normalize(cross(up, N));
|
|
894
|
+
vec3 bitangent = cross(N, tangent);
|
|
895
|
+
|
|
896
|
+
for(uint i = 0u; i < uint(GGX_SAMPLES); i++) {
|
|
897
|
+
vec2 Xi = hammersley(i, uint(GGX_SAMPLES));
|
|
898
|
+
|
|
899
|
+
// For PMREM, V = N, so in tangent space V is always (0, 0, 1)
|
|
900
|
+
vec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);
|
|
901
|
+
|
|
902
|
+
// Transform H back to world space
|
|
903
|
+
vec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);
|
|
904
|
+
vec3 L = normalize(2.0 * dot(V, H) * H - V);
|
|
905
|
+
|
|
906
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
907
|
+
|
|
908
|
+
if(NdotL > 0.0) {
|
|
909
|
+
// Sample environment at fixed mip level
|
|
910
|
+
// VNDF importance sampling handles the distribution filtering
|
|
911
|
+
vec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);
|
|
912
|
+
|
|
913
|
+
// Weight by NdotL for the split-sum approximation
|
|
914
|
+
// VNDF PDF naturally accounts for the visible microfacet distribution
|
|
915
|
+
prefilteredColor += sampleColor * NdotL;
|
|
916
|
+
totalWeight += NdotL;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
if (totalWeight > 0.0) {
|
|
921
|
+
prefilteredColor = prefilteredColor / totalWeight;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
gl_FragColor = vec4(prefilteredColor, 1.0);
|
|
925
|
+
}
|
|
926
|
+
`,
|
|
927
|
+
|
|
928
|
+
blending: NoBlending,
|
|
929
|
+
depthTest: false,
|
|
930
|
+
depthWrite: false
|
|
931
|
+
|
|
932
|
+
} );
|
|
933
|
+
|
|
934
|
+
return shaderMaterial;
|
|
935
|
+
|
|
936
|
+
}
|
|
937
|
+
|
|
714
938
|
function _getBlurShader( lodMax, width, height ) {
|
|
715
939
|
|
|
716
940
|
const weights = new Float32Array( MAX_SAMPLES );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type } from '../constants.js';
|
|
1
|
+
import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type } from '../constants.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Scales the texture as large as possible within its surface without cropping
|
|
@@ -215,6 +215,7 @@ function getTextureTypeByteLength( type ) {
|
|
|
215
215
|
case FloatType:
|
|
216
216
|
return { byteLength: 4, components: 1 };
|
|
217
217
|
case UnsignedInt5999Type:
|
|
218
|
+
case UnsignedInt101111Type:
|
|
218
219
|
return { byteLength: 4, components: 3 };
|
|
219
220
|
|
|
220
221
|
}
|