@plastic-software/three 0.179.0 → 0.181.1
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/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- 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 +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- 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 +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- 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 +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- 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/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 +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- 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 +22 -5
- 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 +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -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 +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- 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 +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -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 +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -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 +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -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/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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- 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 +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -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} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- 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 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- 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 +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- 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 +48 -41
- 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 +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.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 +6 -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 +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- 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 +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -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 +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
HalfFloatType,
|
|
10
10
|
LinearFilter,
|
|
11
11
|
LinearMipmapLinearFilter,
|
|
12
|
+
NearestFilter,
|
|
13
|
+
NearestMipmapNearestFilter,
|
|
12
14
|
LinearSRGBColorSpace,
|
|
13
15
|
Loader,
|
|
14
16
|
NoColorSpace,
|
|
@@ -19,6 +21,7 @@ import {
|
|
|
19
21
|
RGBA_S3TC_DXT3_Format,
|
|
20
22
|
RGBA_ETC2_EAC_Format,
|
|
21
23
|
RGBA_PVRTC_4BPPV1_Format,
|
|
24
|
+
RGBA_PVRTC_2BPPV1_Format,
|
|
22
25
|
RGBA_S3TC_DXT1_Format,
|
|
23
26
|
RGBA_S3TC_DXT5_Format,
|
|
24
27
|
RGB_BPTC_UNSIGNED_Format,
|
|
@@ -26,10 +29,17 @@ import {
|
|
|
26
29
|
RGB_ETC2_Format,
|
|
27
30
|
RGB_PVRTC_4BPPV1_Format,
|
|
28
31
|
RGB_S3TC_DXT1_Format,
|
|
32
|
+
SIGNED_RED_GREEN_RGTC2_Format,
|
|
33
|
+
SIGNED_RED_RGTC1_Format,
|
|
34
|
+
RED_GREEN_RGTC2_Format,
|
|
35
|
+
RED_RGTC1_Format,
|
|
36
|
+
RGBFormat,
|
|
29
37
|
RGFormat,
|
|
30
38
|
RedFormat,
|
|
31
39
|
SRGBColorSpace,
|
|
32
|
-
UnsignedByteType
|
|
40
|
+
UnsignedByteType,
|
|
41
|
+
UnsignedInt5999Type,
|
|
42
|
+
UnsignedInt101111Type
|
|
33
43
|
} from 'three';
|
|
34
44
|
import { WorkerPool } from '../utils/WorkerPool.js';
|
|
35
45
|
import {
|
|
@@ -42,6 +52,7 @@ import {
|
|
|
42
52
|
KHR_SUPERCOMPRESSION_NONE,
|
|
43
53
|
KHR_SUPERCOMPRESSION_ZSTD,
|
|
44
54
|
VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
|
|
55
|
+
VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,
|
|
45
56
|
VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
|
|
46
57
|
VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
|
|
47
58
|
VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
|
|
@@ -52,12 +63,18 @@ import {
|
|
|
52
63
|
VK_FORMAT_BC1_RGB_UNORM_BLOCK,
|
|
53
64
|
VK_FORMAT_BC3_SRGB_BLOCK,
|
|
54
65
|
VK_FORMAT_BC3_UNORM_BLOCK,
|
|
66
|
+
VK_FORMAT_BC4_SNORM_BLOCK,
|
|
67
|
+
VK_FORMAT_BC4_UNORM_BLOCK,
|
|
55
68
|
VK_FORMAT_BC5_SNORM_BLOCK,
|
|
56
69
|
VK_FORMAT_BC5_UNORM_BLOCK,
|
|
57
70
|
VK_FORMAT_BC7_SRGB_BLOCK,
|
|
58
71
|
VK_FORMAT_BC7_UNORM_BLOCK,
|
|
59
72
|
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
|
|
60
73
|
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
|
|
74
|
+
VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
|
|
75
|
+
VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
|
|
76
|
+
VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
|
|
77
|
+
VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
|
|
61
78
|
VK_FORMAT_R16G16B16A16_SFLOAT,
|
|
62
79
|
VK_FORMAT_R16G16_SFLOAT,
|
|
63
80
|
VK_FORMAT_R16_SFLOAT,
|
|
@@ -70,6 +87,8 @@ import {
|
|
|
70
87
|
VK_FORMAT_R8G8_UNORM,
|
|
71
88
|
VK_FORMAT_R8_SRGB,
|
|
72
89
|
VK_FORMAT_R8_UNORM,
|
|
90
|
+
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
|
|
91
|
+
VK_FORMAT_B10G11R11_UFLOAT_PACK32,
|
|
73
92
|
VK_FORMAT_UNDEFINED
|
|
74
93
|
} from '../libs/ktx-parse.module.js';
|
|
75
94
|
import { ZSTDDecoder } from '../libs/zstddec.module.js';
|
|
@@ -94,9 +113,9 @@ let _zstd;
|
|
|
94
113
|
* This loader relies on Web Assembly which is not supported in older browsers.
|
|
95
114
|
*
|
|
96
115
|
* References:
|
|
97
|
-
* - [KTX specification]
|
|
98
|
-
* - [DFD]
|
|
99
|
-
* - [BasisU HDR]
|
|
116
|
+
* - [KTX specification](http://github.khronos.org/KTX-Specification/)
|
|
117
|
+
* - [DFD](https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor)
|
|
118
|
+
* - [BasisU HDR](https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0)
|
|
100
119
|
*
|
|
101
120
|
* ```js
|
|
102
121
|
* const loader = new KTX2Loader();
|
|
@@ -175,22 +194,17 @@ class KTX2Loader extends Loader {
|
|
|
175
194
|
* Async version of {@link KTX2Loader#detectSupport}.
|
|
176
195
|
*
|
|
177
196
|
* @async
|
|
178
|
-
* @
|
|
197
|
+
* @deprecated
|
|
198
|
+
* @param {WebGPURenderer} renderer - The renderer.
|
|
179
199
|
* @return {Promise} A Promise that resolves when the support has been detected.
|
|
180
200
|
*/
|
|
181
201
|
async detectSupportAsync( renderer ) {
|
|
182
202
|
|
|
183
|
-
|
|
184
|
-
astcSupported: await renderer.hasFeatureAsync( 'texture-compression-astc' ),
|
|
185
|
-
astcHDRSupported: false, // https://github.com/gpuweb/gpuweb/issues/3856
|
|
186
|
-
etc1Supported: await renderer.hasFeatureAsync( 'texture-compression-etc1' ),
|
|
187
|
-
etc2Supported: await renderer.hasFeatureAsync( 'texture-compression-etc2' ),
|
|
188
|
-
dxtSupported: await renderer.hasFeatureAsync( 'texture-compression-bc' ),
|
|
189
|
-
bptcSupported: await renderer.hasFeatureAsync( 'texture-compression-bptc' ),
|
|
190
|
-
pvrtcSupported: await renderer.hasFeatureAsync( 'texture-compression-pvrtc' )
|
|
191
|
-
};
|
|
203
|
+
console.warn( 'KTX2Loader: "detectSupportAsync()" has been deprecated. Use "detectSupport()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
|
|
192
204
|
|
|
193
|
-
|
|
205
|
+
await renderer.init();
|
|
206
|
+
|
|
207
|
+
return this.detectSupport( renderer );
|
|
194
208
|
|
|
195
209
|
}
|
|
196
210
|
|
|
@@ -210,8 +224,8 @@ class KTX2Loader extends Loader {
|
|
|
210
224
|
astcHDRSupported: false, // https://github.com/gpuweb/gpuweb/issues/3856
|
|
211
225
|
etc1Supported: renderer.hasFeature( 'texture-compression-etc1' ),
|
|
212
226
|
etc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),
|
|
213
|
-
dxtSupported: renderer.hasFeature( 'texture-compression-
|
|
214
|
-
bptcSupported: renderer.hasFeature( 'texture-compression-
|
|
227
|
+
dxtSupported: renderer.hasFeature( 'texture-compression-s3tc' ),
|
|
228
|
+
bptcSupported: renderer.hasFeature( 'texture-compression-bc' ),
|
|
215
229
|
pvrtcSupported: renderer.hasFeature( 'texture-compression-pvrtc' )
|
|
216
230
|
};
|
|
217
231
|
|
|
@@ -229,6 +243,21 @@ class KTX2Loader extends Loader {
|
|
|
229
243
|
|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
|
|
230
244
|
};
|
|
231
245
|
|
|
246
|
+
if ( typeof navigator !== 'undefined' &&
|
|
247
|
+
navigator.platform.indexOf( 'Linux' ) >= 0 && navigator.userAgent.indexOf( 'Firefox' ) >= 0 &&
|
|
248
|
+
this.workerConfig.astcSupported && this.workerConfig.etc2Supported &&
|
|
249
|
+
this.workerConfig.bptcSupported && this.workerConfig.dxtSupported ) {
|
|
250
|
+
|
|
251
|
+
// On Linux, Mesa drivers for AMD and Intel GPUs expose ETC2 and ASTC even though the hardware doesn't support these.
|
|
252
|
+
// Using these extensions will result in expensive software decompression on the main thread inside the driver, causing performance issues.
|
|
253
|
+
// When using ANGLE (e.g. via Chrome), these extensions are not exposed except for some specific Intel GPU models - however, Firefox doesn't perform this filtering.
|
|
254
|
+
// Since a granular filter is a little too fragile and we can transcode into other GPU formats, disable formats that are likely to be emulated.
|
|
255
|
+
|
|
256
|
+
this.workerConfig.astcSupported = false;
|
|
257
|
+
this.workerConfig.etc2Supported = false;
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
232
261
|
}
|
|
233
262
|
|
|
234
263
|
return this;
|
|
@@ -330,6 +359,7 @@ class KTX2Loader extends Loader {
|
|
|
330
359
|
loader.setPath( this.path );
|
|
331
360
|
loader.setCrossOrigin( this.crossOrigin );
|
|
332
361
|
loader.setWithCredentials( this.withCredentials );
|
|
362
|
+
loader.setRequestHeader( this.requestHeader );
|
|
333
363
|
loader.setResponseType( 'arraybuffer' );
|
|
334
364
|
|
|
335
365
|
loader.load( url, ( buffer ) => {
|
|
@@ -827,13 +857,9 @@ KTX2Loader.BasisWorker = function () {
|
|
|
827
857
|
];
|
|
828
858
|
|
|
829
859
|
const OPTIONS = {
|
|
830
|
-
// TODO: For ETC1S we intentionally sort by _UASTC_ priority, preserving
|
|
831
|
-
// a historical accident shown to avoid performance pitfalls for Linux with
|
|
832
|
-
// Firefox & AMD GPU (RadeonSI). Further work needed.
|
|
833
|
-
// See https://github.com/mrdoob/three.js/pull/29730.
|
|
834
860
|
[ BasisFormat.ETC1S ]: FORMAT_OPTIONS
|
|
835
861
|
.filter( ( opt ) => opt.basisFormat.includes( BasisFormat.ETC1S ) )
|
|
836
|
-
.sort( ( a, b ) => a.
|
|
862
|
+
.sort( ( a, b ) => a.priorityETC1S - b.priorityETC1S ),
|
|
837
863
|
|
|
838
864
|
[ BasisFormat.UASTC ]: FORMAT_OPTIONS
|
|
839
865
|
.filter( ( opt ) => opt.basisFormat.includes( BasisFormat.UASTC ) )
|
|
@@ -918,74 +944,114 @@ KTX2Loader.BasisWorker = function () {
|
|
|
918
944
|
// Parsing for non-Basis textures. These textures may have supercompression
|
|
919
945
|
// like Zstd, but they do not require transcoding.
|
|
920
946
|
|
|
921
|
-
const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );
|
|
947
|
+
const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGBFormat, RGFormat, RedFormat ] );
|
|
922
948
|
|
|
923
949
|
const FORMAT_MAP = {
|
|
924
950
|
|
|
925
951
|
[ VK_FORMAT_R32G32B32A32_SFLOAT ]: RGBAFormat,
|
|
926
|
-
[ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,
|
|
927
|
-
[ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,
|
|
928
|
-
[ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,
|
|
929
|
-
|
|
930
952
|
[ VK_FORMAT_R32G32_SFLOAT ]: RGFormat,
|
|
931
|
-
[ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,
|
|
932
|
-
[ VK_FORMAT_R8G8_UNORM ]: RGFormat,
|
|
933
|
-
[ VK_FORMAT_R8G8_SRGB ]: RGFormat,
|
|
934
|
-
|
|
935
953
|
[ VK_FORMAT_R32_SFLOAT ]: RedFormat,
|
|
954
|
+
|
|
955
|
+
[ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,
|
|
956
|
+
[ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,
|
|
936
957
|
[ VK_FORMAT_R16_SFLOAT ]: RedFormat,
|
|
958
|
+
|
|
959
|
+
[ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,
|
|
960
|
+
[ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,
|
|
961
|
+
[ VK_FORMAT_R8G8_SRGB ]: RGFormat,
|
|
962
|
+
[ VK_FORMAT_R8G8_UNORM ]: RGFormat,
|
|
937
963
|
[ VK_FORMAT_R8_SRGB ]: RedFormat,
|
|
938
964
|
[ VK_FORMAT_R8_UNORM ]: RedFormat,
|
|
939
965
|
|
|
940
|
-
[
|
|
966
|
+
[ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: RGBFormat,
|
|
967
|
+
[ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: RGBFormat,
|
|
968
|
+
|
|
941
969
|
[ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: RGBA_ETC2_EAC_Format,
|
|
970
|
+
[ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
|
|
942
971
|
|
|
943
972
|
[ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_4x4_Format,
|
|
944
973
|
[ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: RGBA_ASTC_4x4_Format,
|
|
945
974
|
[ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: RGBA_ASTC_4x4_Format,
|
|
975
|
+
[ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_6x6_Format,
|
|
946
976
|
[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,
|
|
947
977
|
[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,
|
|
948
978
|
|
|
949
|
-
[ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
|
|
950
979
|
[ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: RGBA_S3TC_DXT1_Format,
|
|
951
|
-
[
|
|
980
|
+
[ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
|
|
952
981
|
[ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: RGB_S3TC_DXT1_Format,
|
|
982
|
+
[ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
|
|
953
983
|
|
|
954
984
|
[ VK_FORMAT_BC3_SRGB_BLOCK ]: RGBA_S3TC_DXT3_Format,
|
|
955
985
|
[ VK_FORMAT_BC3_UNORM_BLOCK ]: RGBA_S3TC_DXT3_Format,
|
|
956
986
|
|
|
957
|
-
[
|
|
958
|
-
[
|
|
987
|
+
[ VK_FORMAT_BC4_SNORM_BLOCK ]: SIGNED_RED_RGTC1_Format,
|
|
988
|
+
[ VK_FORMAT_BC4_UNORM_BLOCK ]: RED_RGTC1_Format,
|
|
989
|
+
|
|
990
|
+
[ VK_FORMAT_BC5_SNORM_BLOCK ]: SIGNED_RED_GREEN_RGTC2_Format,
|
|
991
|
+
[ VK_FORMAT_BC5_UNORM_BLOCK ]: RED_GREEN_RGTC2_Format,
|
|
959
992
|
|
|
960
993
|
[ VK_FORMAT_BC7_SRGB_BLOCK ]: RGBA_BPTC_Format,
|
|
961
994
|
[ VK_FORMAT_BC7_UNORM_BLOCK ]: RGBA_BPTC_Format,
|
|
962
995
|
|
|
996
|
+
[ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
|
|
997
|
+
[ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
|
|
998
|
+
[ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
|
|
999
|
+
[ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
|
|
1000
|
+
|
|
963
1001
|
};
|
|
964
1002
|
|
|
965
1003
|
const TYPE_MAP = {
|
|
966
1004
|
|
|
967
1005
|
[ VK_FORMAT_R32G32B32A32_SFLOAT ]: FloatType,
|
|
968
|
-
[ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,
|
|
969
|
-
[ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,
|
|
970
|
-
[ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,
|
|
971
|
-
|
|
972
1006
|
[ VK_FORMAT_R32G32_SFLOAT ]: FloatType,
|
|
973
|
-
[ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,
|
|
974
|
-
[ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,
|
|
975
|
-
[ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,
|
|
976
|
-
|
|
977
1007
|
[ VK_FORMAT_R32_SFLOAT ]: FloatType,
|
|
1008
|
+
|
|
1009
|
+
[ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,
|
|
1010
|
+
[ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,
|
|
978
1011
|
[ VK_FORMAT_R16_SFLOAT ]: HalfFloatType,
|
|
1012
|
+
|
|
1013
|
+
[ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,
|
|
1014
|
+
[ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,
|
|
1015
|
+
[ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,
|
|
1016
|
+
[ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,
|
|
979
1017
|
[ VK_FORMAT_R8_SRGB ]: UnsignedByteType,
|
|
980
1018
|
[ VK_FORMAT_R8_UNORM ]: UnsignedByteType,
|
|
981
1019
|
|
|
982
|
-
[
|
|
1020
|
+
[ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: UnsignedInt5999Type,
|
|
1021
|
+
[ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: UnsignedInt101111Type,
|
|
1022
|
+
|
|
983
1023
|
[ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: UnsignedByteType,
|
|
1024
|
+
[ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
|
|
984
1025
|
|
|
985
1026
|
[ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: HalfFloatType,
|
|
1027
|
+
[ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: UnsignedByteType,
|
|
1028
|
+
[ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: UnsignedByteType,
|
|
1029
|
+
[ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: HalfFloatType,
|
|
986
1030
|
[ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,
|
|
987
1031
|
[ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,
|
|
988
1032
|
|
|
1033
|
+
[ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: UnsignedByteType,
|
|
1034
|
+
[ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: UnsignedByteType,
|
|
1035
|
+
[ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: UnsignedByteType,
|
|
1036
|
+
[ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: UnsignedByteType,
|
|
1037
|
+
|
|
1038
|
+
[ VK_FORMAT_BC3_SRGB_BLOCK ]: UnsignedByteType,
|
|
1039
|
+
[ VK_FORMAT_BC3_UNORM_BLOCK ]: UnsignedByteType,
|
|
1040
|
+
|
|
1041
|
+
[ VK_FORMAT_BC4_SNORM_BLOCK ]: UnsignedByteType,
|
|
1042
|
+
[ VK_FORMAT_BC4_UNORM_BLOCK ]: UnsignedByteType,
|
|
1043
|
+
|
|
1044
|
+
[ VK_FORMAT_BC5_SNORM_BLOCK ]: UnsignedByteType,
|
|
1045
|
+
[ VK_FORMAT_BC5_UNORM_BLOCK ]: UnsignedByteType,
|
|
1046
|
+
|
|
1047
|
+
[ VK_FORMAT_BC7_SRGB_BLOCK ]: UnsignedByteType,
|
|
1048
|
+
[ VK_FORMAT_BC7_UNORM_BLOCK ]: UnsignedByteType,
|
|
1049
|
+
|
|
1050
|
+
[ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
|
|
1051
|
+
[ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
|
|
1052
|
+
[ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
|
|
1053
|
+
[ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
|
|
1054
|
+
|
|
989
1055
|
};
|
|
990
1056
|
|
|
991
1057
|
async function createRawTexture( container ) {
|
|
@@ -994,7 +1060,14 @@ async function createRawTexture( container ) {
|
|
|
994
1060
|
|
|
995
1061
|
if ( FORMAT_MAP[ vkFormat ] === undefined ) {
|
|
996
1062
|
|
|
997
|
-
throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat
|
|
1063
|
+
throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat: ' + vkFormat );
|
|
1064
|
+
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
// TODO: Merge the TYPE_MAP warning into the thrown error above, after r190.
|
|
1068
|
+
if ( TYPE_MAP[ vkFormat ] === undefined ) {
|
|
1069
|
+
|
|
1070
|
+
console.warn( 'THREE.KTX2Loader: Missing ".type" for vkFormat: ' + vkFormat );
|
|
998
1071
|
|
|
999
1072
|
}
|
|
1000
1073
|
|
|
@@ -1024,7 +1097,6 @@ async function createRawTexture( container ) {
|
|
|
1024
1097
|
|
|
1025
1098
|
const mipmaps = [];
|
|
1026
1099
|
|
|
1027
|
-
|
|
1028
1100
|
for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
|
|
1029
1101
|
|
|
1030
1102
|
const levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
|
|
@@ -1071,6 +1143,16 @@ async function createRawTexture( container ) {
|
|
|
1071
1143
|
|
|
1072
1144
|
);
|
|
1073
1145
|
|
|
1146
|
+
} else if ( TYPE_MAP[ vkFormat ] === UnsignedInt5999Type || TYPE_MAP[ vkFormat ] === UnsignedInt101111Type ) {
|
|
1147
|
+
|
|
1148
|
+
data = new Uint32Array(
|
|
1149
|
+
|
|
1150
|
+
levelData.buffer,
|
|
1151
|
+
levelData.byteOffset,
|
|
1152
|
+
levelData.byteLength / Uint32Array.BYTES_PER_ELEMENT
|
|
1153
|
+
|
|
1154
|
+
);
|
|
1155
|
+
|
|
1074
1156
|
} else {
|
|
1075
1157
|
|
|
1076
1158
|
data = levelData;
|
|
@@ -1088,6 +1170,9 @@ async function createRawTexture( container ) {
|
|
|
1088
1170
|
|
|
1089
1171
|
}
|
|
1090
1172
|
|
|
1173
|
+
// levelCount = 0 implies runtime-generated mipmaps.
|
|
1174
|
+
const useMipmaps = container.levelCount === 0 || mipmaps.length > 1;
|
|
1175
|
+
|
|
1091
1176
|
let texture;
|
|
1092
1177
|
|
|
1093
1178
|
if ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {
|
|
@@ -1095,14 +1180,16 @@ async function createRawTexture( container ) {
|
|
|
1095
1180
|
texture = container.pixelDepth === 0
|
|
1096
1181
|
? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )
|
|
1097
1182
|
: new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );
|
|
1183
|
+
texture.minFilter = useMipmaps ? NearestMipmapNearestFilter : NearestFilter;
|
|
1184
|
+
texture.magFilter = NearestFilter;
|
|
1185
|
+
texture.generateMipmaps = container.levelCount === 0;
|
|
1098
1186
|
|
|
1099
1187
|
} else {
|
|
1100
1188
|
|
|
1101
1189
|
if ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );
|
|
1102
1190
|
|
|
1103
1191
|
texture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );
|
|
1104
|
-
|
|
1105
|
-
texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
|
|
1192
|
+
texture.minFilter = useMipmaps ? LinearMipmapLinearFilter : LinearFilter;
|
|
1106
1193
|
texture.magFilter = LinearFilter;
|
|
1107
1194
|
|
|
1108
1195
|
}
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
* A loader for the KTX texture compression format.
|
|
7
7
|
*
|
|
8
8
|
* References:
|
|
9
|
-
* - [The KTX File Format and Tools]
|
|
10
|
-
* - [Babylon.JS khronosTextureContainer.ts]
|
|
9
|
+
* - [The KTX File Format and Tools](https://www.khronos.org/opengles/sdk/tools/KTX/)
|
|
10
|
+
* - [Babylon.JS khronosTextureContainer.ts](https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts)
|
|
11
11
|
*
|
|
12
12
|
* ```js
|
|
13
13
|
* const loader = new KTXLoader();
|
|
@@ -1749,7 +1749,7 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
|
|
|
1749
1749
|
/**
|
|
1750
1750
|
* A loader for the LDraw format.
|
|
1751
1751
|
*
|
|
1752
|
-
* [LDraw]
|
|
1752
|
+
* [LDraw](https://ldraw.org/} (LEGO Draw) is an [open format specification]{@link https://ldraw.org/article/218.html)
|
|
1753
1753
|
* for describing LEGO and other construction set 3D models.
|
|
1754
1754
|
*
|
|
1755
1755
|
* An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe just a single construction
|
|
@@ -12,8 +12,8 @@ import {
|
|
|
12
12
|
* A loader for the 3DL LUT format.
|
|
13
13
|
*
|
|
14
14
|
* References:
|
|
15
|
-
* - [3D LUTs]
|
|
16
|
-
* - [Format Spec for .3dl]
|
|
15
|
+
* - [3D LUTs](http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492)
|
|
16
|
+
* - [Format Spec for .3dl](https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258)
|
|
17
17
|
*
|
|
18
18
|
* ```js
|
|
19
19
|
* const loader = new LUT3dlLoader();
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
* A loader for the Cube LUT format.
|
|
13
13
|
*
|
|
14
14
|
* References:
|
|
15
|
-
* - [Cube LUT Specification]
|
|
15
|
+
* - [Cube LUT Specification](https://web.archive.org/web/20220220033515/https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf)
|
|
16
16
|
*
|
|
17
17
|
* ```js
|
|
18
18
|
* const loader = new LUTCubeLoader();
|
|
@@ -36,8 +36,8 @@ let _lwoTree;
|
|
|
36
36
|
* LWO3 and LWO2 formats are supported.
|
|
37
37
|
*
|
|
38
38
|
* References:
|
|
39
|
-
* - [LWO3 format specification]
|
|
40
|
-
* - [LWO2 format specification]
|
|
39
|
+
* - [LWO3 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html)
|
|
40
|
+
* - [LWO2 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html)
|
|
41
41
|
*
|
|
42
42
|
* ```js
|
|
43
43
|
* const loader = new LWOLoader();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
FileLoader, Loader,
|
|
2
|
+
FileLoader, Loader, ImageBitmapLoader, Texture, RepeatWrapping, MeshBasicNodeMaterial,
|
|
3
3
|
MeshPhysicalNodeMaterial, DoubleSide,
|
|
4
4
|
} from 'three/webgpu';
|
|
5
5
|
|
|
@@ -410,9 +410,15 @@ class MaterialXNode {
|
|
|
410
410
|
getTexture() {
|
|
411
411
|
|
|
412
412
|
const filePrefix = this.getRecursiveAttribute( 'fileprefix' ) || '';
|
|
413
|
+
const uri = filePrefix + this.value;
|
|
414
|
+
|
|
415
|
+
if ( this.materialX.textureCache.has( uri ) ) {
|
|
416
|
+
|
|
417
|
+
return this.materialX.textureCache.get( uri );
|
|
418
|
+
|
|
419
|
+
}
|
|
413
420
|
|
|
414
421
|
let loader = this.materialX.textureLoader;
|
|
415
|
-
const uri = filePrefix + this.value;
|
|
416
422
|
|
|
417
423
|
if ( uri ) {
|
|
418
424
|
|
|
@@ -421,9 +427,17 @@ class MaterialXNode {
|
|
|
421
427
|
|
|
422
428
|
}
|
|
423
429
|
|
|
424
|
-
const texture =
|
|
430
|
+
const texture = new Texture();
|
|
425
431
|
texture.wrapS = texture.wrapT = RepeatWrapping;
|
|
426
|
-
|
|
432
|
+
|
|
433
|
+
this.materialX.textureCache.set( uri, texture );
|
|
434
|
+
|
|
435
|
+
loader.load( uri, function ( imageBitmap ) {
|
|
436
|
+
|
|
437
|
+
texture.image = imageBitmap;
|
|
438
|
+
texture.needsUpdate = true;
|
|
439
|
+
|
|
440
|
+
} );
|
|
427
441
|
|
|
428
442
|
return texture;
|
|
429
443
|
|
|
@@ -1030,7 +1044,10 @@ class MaterialX {
|
|
|
1030
1044
|
this.nodesXLib = new Map();
|
|
1031
1045
|
//this.nodesXRefLib = new WeakMap();
|
|
1032
1046
|
|
|
1033
|
-
this.textureLoader = new
|
|
1047
|
+
this.textureLoader = new ImageBitmapLoader( manager );
|
|
1048
|
+
this.textureLoader.setOptions( { imageOrientation: 'flipY' } );
|
|
1049
|
+
|
|
1050
|
+
this.textureCache = new Map();
|
|
1034
1051
|
|
|
1035
1052
|
}
|
|
1036
1053
|
|
|
@@ -436,7 +436,7 @@ function ParserState() {
|
|
|
436
436
|
/**
|
|
437
437
|
* A loader for the OBJ format.
|
|
438
438
|
*
|
|
439
|
-
* The [OBJ format]
|
|
439
|
+
* The [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) is a simple data-format that
|
|
440
440
|
* represents 3D geometry in a human readable format as the position of each vertex, the UV position of
|
|
441
441
|
* each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list
|
|
442
442
|
* of vertices, and texture vertices.
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
/**
|
|
11
11
|
* A loader for the PDB format.
|
|
12
12
|
*
|
|
13
|
-
* The [Protein Data Bank]
|
|
13
|
+
* The [Protein Data Bank](https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format))
|
|
14
14
|
* file format is a textual file describing the three-dimensional structures of molecules.
|
|
15
15
|
*
|
|
16
16
|
* ```js
|