@needle-tools/three 0.162.12 → 0.169.2
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 +3 -3
- package/build/three.cjs +29789 -1941
- package/build/three.module.js +29095 -1933
- package/build/three.module.min.js +2 -2
- package/build/three.webgpu.js +80003 -0
- package/build/three.webgpu.min.js +6 -0
- package/build/three.webgpu.nodes.js +79951 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +2 -5
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/controls/ArcballControls.js +174 -158
- package/examples/jsm/controls/DragControls.js +260 -132
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +790 -797
- package/examples/jsm/controls/PointerLockControls.js +24 -15
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +98 -63
- package/examples/jsm/csm/CSMShader.js +4 -4
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/environments/RoomEnvironment.js +2 -6
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +77 -8
- package/examples/jsm/exporters/KTX2Exporter.js +21 -13
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +9 -7
- package/examples/jsm/exporters/USDZExporter.js +55 -11
- package/examples/jsm/geometries/DecalGeometry.js +4 -1
- package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/ViewHelper.js +75 -61
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/LightProbeGenerator.js +24 -10
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
- package/examples/jsm/lines/LineMaterial.js +1 -17
- package/examples/jsm/lines/LineSegments2.js +15 -0
- package/examples/jsm/lines/Wireframe.js +16 -1
- package/examples/jsm/lines/webgpu/Line2.js +20 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +9 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -2
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +77 -78
- package/examples/jsm/loaders/GLTFLoader.js +76 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -22
- package/examples/jsm/loaders/LDrawLoader.js +3 -2
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/MMDLoader.js +31 -12
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +45 -21
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +8 -5
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/USDZLoader.js +124 -76
- package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
- package/examples/jsm/loaders/VRMLLoader.js +11 -11
- package/examples/jsm/loaders/VTKLoader.js +80 -6
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/misc/GPUComputationRenderer.js +9 -25
- package/examples/jsm/misc/Timer.js +1 -1
- package/examples/jsm/modifiers/CurveModifier.js +11 -9
- package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
- package/examples/jsm/objects/InstancedPoints.js +2 -2
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/objects/LensflareMesh.js +322 -0
- package/examples/jsm/objects/SkyMesh.js +187 -0
- package/examples/jsm/objects/Water2Mesh.js +158 -0
- package/examples/jsm/objects/WaterMesh.js +101 -0
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +25 -5
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/OutlinePass.js +31 -46
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +168 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +6 -12
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
- package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +7 -4
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +19 -5
- package/examples/jsm/shaders/BleachBypassShader.js +1 -2
- package/examples/jsm/shaders/ColorifyShader.js +1 -2
- package/examples/jsm/shaders/FXAAShader.js +0 -2
- package/examples/jsm/shaders/GTAOShader.js +1 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
- package/examples/jsm/shaders/OutputShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +47 -5
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +24 -22
- package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
- package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/SortUtils.js +8 -5
- package/examples/jsm/utils/TextureUtils.js +3 -2
- package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +11 -8
- package/src/Three.WebGPU.Nodes.js +200 -0
- package/src/Three.WebGPU.js +201 -0
- package/src/Three.js +23 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
- package/src/animation/tracks/StringKeyframeTrack.js +10 -1
- package/src/audio/Audio.js +2 -2
- package/src/constants.js +6 -7
- package/src/core/BufferAttribute.js +0 -9
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +0 -9
- package/src/core/Object3D.js +34 -29
- package/src/core/Raycaster.js +6 -2
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/Controls.js +32 -0
- package/src/extras/PMREMGenerator.js +12 -11
- package/src/extras/TextureUtils.js +210 -0
- package/src/geometries/CylinderGeometry.js +11 -4
- package/src/lights/Light.js +1 -0
- package/src/lights/LightShadow.js +5 -0
- package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
- package/src/loaders/FileLoader.js +5 -1
- package/src/loaders/LoaderUtils.js +3 -1
- package/src/loaders/MaterialLoader.js +8 -1
- package/src/loaders/ObjectLoader.js +36 -2
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +27 -5
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +22 -18
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +21 -1
- package/src/materials/Material.js +4 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +69 -68
- package/src/materials/nodes/LineBasicNodeMaterial.js +31 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +15 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +47 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +57 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +44 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +248 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +10 -7
- package/src/materials/nodes/MeshStandardNodeMaterial.js +108 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +38 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +198 -157
- package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -1
- package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +10 -7
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +123 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +108 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
- package/src/math/Box2.js +4 -4
- package/src/math/Box3.js +6 -6
- package/src/math/ColorManagement.js +10 -0
- package/src/math/Matrix2.js +54 -0
- package/src/math/Spherical.js +4 -5
- package/src/math/Triangle.js +24 -0
- package/src/math/Vector4.js +13 -0
- package/src/nodes/Nodes.js +164 -0
- package/src/nodes/TSL.js +179 -0
- package/src/nodes/accessors/AccessorsUtils.js +25 -0
- package/src/nodes/accessors/BatchNode.js +128 -0
- package/src/nodes/accessors/Bitangent.js +13 -0
- package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +44 -6
- package/{examples/jsm → src}/nodes/accessors/BufferNode.js +13 -4
- package/src/nodes/accessors/Camera.js +13 -0
- package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +22 -15
- package/src/nodes/accessors/CubeTextureNode.js +79 -0
- package/src/nodes/accessors/InstanceNode.js +144 -0
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +24 -0
- package/src/nodes/accessors/Lights.js +51 -0
- package/src/nodes/accessors/MaterialNode.js +441 -0
- package/src/nodes/accessors/MaterialProperties.js +3 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +10 -5
- package/src/nodes/accessors/ModelNode.js +72 -0
- package/src/nodes/accessors/ModelViewProjectionNode.js +42 -0
- package/{examples/jsm → src}/nodes/accessors/MorphNode.js +51 -33
- package/src/nodes/accessors/Normal.js +88 -0
- package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +18 -34
- package/src/nodes/accessors/PointUVNode.js +30 -0
- package/src/nodes/accessors/Position.js +10 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
- package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +58 -9
- package/src/nodes/accessors/ReflectVector.js +10 -0
- package/src/nodes/accessors/RendererReferenceNode.js +35 -0
- package/{examples/jsm → src}/nodes/accessors/SceneNode.js +9 -6
- package/src/nodes/accessors/SkinningNode.js +191 -0
- package/src/nodes/accessors/StorageBufferNode.js +147 -0
- package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +35 -10
- package/src/nodes/accessors/Tangent.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +103 -0
- package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
- package/{examples/jsm → src}/nodes/accessors/TextureNode.js +123 -39
- package/src/nodes/accessors/TextureSizeNode.js +36 -0
- package/src/nodes/accessors/UV.js +3 -0
- package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +33 -15
- package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +10 -7
- package/src/nodes/accessors/VelocityNode.js +134 -0
- package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +9 -5
- package/{examples/jsm → src}/nodes/code/CodeNode.js +9 -5
- package/{examples/jsm → src}/nodes/code/ExpressionNode.js +10 -6
- package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +8 -5
- package/{examples/jsm → src}/nodes/code/FunctionNode.js +8 -31
- package/{examples/jsm → src}/nodes/code/ScriptableNode.js +24 -7
- package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +11 -8
- package/{examples/jsm → src}/nodes/core/AssignNode.js +12 -9
- package/{examples/jsm → src}/nodes/core/AttributeNode.js +29 -12
- package/{examples/jsm → src}/nodes/core/BypassNode.js +11 -7
- package/src/nodes/core/CacheNode.js +50 -0
- package/{examples/jsm → src}/nodes/core/ConstNode.js +6 -3
- package/{examples/jsm → src}/nodes/core/ContextNode.js +27 -11
- package/src/nodes/core/IndexNode.js +99 -0
- package/{examples/jsm → src}/nodes/core/InputNode.js +7 -3
- package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
- package/src/nodes/core/MRTNode.js +85 -0
- package/{examples/jsm → src}/nodes/core/Node.js +114 -57
- package/{examples/jsm → src}/nodes/core/NodeBuilder.js +327 -90
- package/src/nodes/core/NodeCache.js +36 -0
- package/{examples/jsm → src}/nodes/core/NodeFrame.js +52 -10
- package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
- package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
- package/{examples/jsm → src}/nodes/core/NodeUtils.js +56 -8
- package/{examples/jsm → src}/nodes/core/OutputStructNode.js +13 -12
- package/{examples/jsm → src}/nodes/core/ParameterNode.js +7 -4
- package/src/nodes/core/PropertyNode.js +88 -0
- package/{examples/jsm → src}/nodes/core/StackNode.js +31 -11
- package/{examples/jsm → src}/nodes/core/StructTypeNode.js +7 -3
- package/{examples/jsm → src}/nodes/core/TempNode.js +10 -6
- package/src/nodes/core/UniformGroupNode.js +59 -0
- package/{examples/jsm → src}/nodes/core/UniformNode.js +37 -5
- package/{examples/jsm → src}/nodes/core/VarNode.js +14 -14
- package/src/nodes/core/VaryingNode.js +108 -0
- package/{examples/jsm → src}/nodes/display/AfterImageNode.js +38 -28
- package/src/nodes/display/AnaglyphPassNode.js +67 -0
- package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +33 -30
- package/src/nodes/display/BleachBypass.js +26 -0
- package/src/nodes/display/BlendMode.js +54 -0
- package/src/nodes/display/BloomNode.js +341 -0
- package/{examples/jsm → src}/nodes/display/BumpMapNode.js +20 -38
- package/src/nodes/display/ColorAdjustment.js +46 -0
- package/src/nodes/display/ColorSpaceFunctions.js +38 -0
- package/src/nodes/display/ColorSpaceNode.js +114 -0
- package/src/nodes/display/DenoiseNode.js +204 -0
- package/src/nodes/display/DepthOfFieldNode.js +124 -0
- package/src/nodes/display/DotScreenNode.js +66 -0
- package/src/nodes/display/FXAANode.js +332 -0
- package/src/nodes/display/FilmNode.js +56 -0
- package/src/nodes/display/FrontFacingNode.js +45 -0
- package/src/nodes/display/GTAONode.js +331 -0
- package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +47 -24
- package/src/nodes/display/Lut3DNode.js +57 -0
- package/src/nodes/display/MotionBlur.js +25 -0
- package/{examples/jsm → src}/nodes/display/NormalMapNode.js +14 -14
- package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
- package/src/nodes/display/PassNode.js +378 -0
- package/src/nodes/display/PixelationPassNode.js +213 -0
- package/{examples/jsm → src}/nodes/display/PosterizeNode.js +8 -7
- package/src/nodes/display/RGBShiftNode.js +53 -0
- package/src/nodes/display/RenderOutputNode.js +60 -0
- package/src/nodes/display/SSAAPassNode.js +287 -0
- package/src/nodes/display/ScreenNode.js +181 -0
- package/src/nodes/display/Sepia.js +17 -0
- package/src/nodes/display/SobelOperatorNode.js +126 -0
- package/src/nodes/display/StereoCompositePassNode.js +110 -0
- package/src/nodes/display/StereoPassNode.js +83 -0
- package/src/nodes/display/ToneMappingFunctions.js +190 -0
- package/src/nodes/display/ToneMappingNode.js +67 -0
- package/src/nodes/display/ToonOutlinePassNode.js +111 -0
- package/src/nodes/display/TransitionNode.js +80 -0
- package/src/nodes/display/ViewportDepthNode.js +125 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +33 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +39 -0
- package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +20 -14
- package/src/nodes/fog/FogExp2Node.js +35 -0
- package/src/nodes/fog/FogNode.js +50 -0
- package/src/nodes/fog/FogRangeNode.js +36 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +59 -0
- package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +131 -0
- package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/src/nodes/functions/BasicLightingModel.js +78 -0
- package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +11 -9
- package/src/nodes/functions/PhysicalLightingModel.js +633 -0
- package/src/nodes/functions/ShadowMaskModel.js +31 -0
- package/src/nodes/functions/ToonLightingModel.js +51 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
- package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/{examples/jsm → src}/nodes/geometry/RangeNode.js +28 -11
- package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
- package/src/nodes/gpgpu/BarrierNode.js +40 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
- package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +10 -6
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
- package/src/nodes/lighting/AONode.js +27 -0
- package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +6 -8
- package/src/nodes/lighting/AnalyticLightNode.js +522 -0
- package/src/nodes/lighting/BasicEnvironmentNode.js +30 -0
- package/src/nodes/lighting/BasicLightMapNode.js +32 -0
- package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +7 -9
- package/src/nodes/lighting/EnvironmentNode.js +138 -0
- package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +12 -11
- package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +7 -9
- package/src/nodes/lighting/IrradianceNode.js +27 -0
- package/src/nodes/lighting/LightProbeNode.js +53 -0
- package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
- package/src/nodes/lighting/LightingContextNode.js +67 -0
- package/{examples/jsm → src}/nodes/lighting/LightingNode.js +9 -3
- package/src/nodes/lighting/LightsNode.js +250 -0
- package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +12 -13
- package/src/nodes/lighting/RectAreaLightNode.js +97 -0
- package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +14 -16
- package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +127 -0
- package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
- package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
- package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +48 -13
- package/src/nodes/math/Hash.js +13 -0
- package/src/nodes/math/MathNode.js +407 -0
- package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
- package/src/nodes/math/OperatorNode.js +319 -0
- package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
- package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
- package/src/nodes/pmrem/PMREMNode.js +240 -0
- package/src/nodes/pmrem/PMREMUtils.js +288 -0
- package/src/nodes/procedural/Checker.js +14 -0
- package/src/nodes/tsl/TSLBase.js +30 -0
- package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +122 -96
- package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +9 -5
- package/{examples/jsm → src}/nodes/utils/ConvertNode.js +7 -3
- package/src/nodes/utils/CubeMapNode.js +160 -0
- package/src/nodes/utils/Discard.js +8 -0
- package/src/nodes/utils/EquirectUVNode.js +36 -0
- package/src/nodes/utils/FlipNode.js +68 -0
- package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +11 -5
- package/{examples/jsm → src}/nodes/utils/JoinNode.js +6 -3
- package/{examples/jsm → src}/nodes/utils/LoopNode.js +23 -12
- package/src/nodes/utils/MatcapUVNode.js +33 -0
- package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +16 -7
- package/{examples/jsm → src}/nodes/utils/OscNode.js +12 -8
- package/src/nodes/utils/Packing.js +4 -0
- package/src/nodes/utils/RTTNode.js +133 -0
- package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +21 -5
- package/{examples/jsm → src}/nodes/utils/RemapNode.js +12 -8
- package/{examples/jsm → src}/nodes/utils/RotateNode.js +8 -13
- package/{examples/jsm → src}/nodes/utils/SetNode.js +7 -4
- package/{examples/jsm → src}/nodes/utils/SplitNode.js +7 -3
- package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +10 -6
- package/src/nodes/utils/SpriteUtils.js +47 -0
- package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +11 -12
- package/{examples/jsm → src}/nodes/utils/TimerNode.js +8 -5
- package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +11 -9
- package/src/nodes/utils/UVUtils.js +19 -0
- package/src/nodes/utils/ViewportUtils.js +14 -0
- package/src/objects/BatchedMesh.js +302 -144
- package/src/objects/InstancedMesh.js +11 -1
- package/src/objects/LOD.js +21 -0
- package/src/objects/Line.js +67 -43
- package/src/objects/Mesh.js +7 -23
- package/src/objects/Points.js +2 -0
- package/src/renderers/WebGLRenderer.js +473 -224
- package/{examples/jsm → src}/renderers/common/Animation.js +3 -0
- package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
- package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
- package/{examples/jsm → src}/renderers/common/Background.js +18 -10
- package/src/renderers/common/BindGroup.js +18 -0
- package/src/renderers/common/Bindings.js +203 -0
- package/src/renderers/common/BundleGroup.js +26 -0
- package/src/renderers/common/ChainMap.js +59 -0
- package/{examples/jsm → src}/renderers/common/ClippingContext.js +24 -12
- package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
- package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
- package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
- package/{examples/jsm → src}/renderers/common/Info.js +35 -15
- package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
- package/src/renderers/common/PostProcessing.js +90 -0
- package/src/renderers/common/QuadMesh.js +55 -0
- package/src/renderers/common/RenderBundle.js +18 -0
- package/src/renderers/common/RenderBundles.js +38 -0
- package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -2
- package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderList.js +11 -2
- package/src/renderers/common/RenderObject.js +413 -0
- package/{examples/jsm → src}/renderers/common/RenderObjects.js +9 -2
- package/{examples/jsm → src}/renderers/common/Renderer.js +431 -83
- package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
- package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
- package/{examples/jsm → src}/renderers/common/Textures.js +15 -15
- package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
- package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
- package/src/renderers/common/extras/PMREMGenerator.js +771 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
- package/src/renderers/common/nodes/NodeLibrary.js +118 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +64 -0
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
- package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +106 -68
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +38 -25
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +19 -11
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsLib.js +3 -0
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +42 -38
- package/src/renderers/webgl/WebGLBackground.js +24 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +23 -22
- package/src/renderers/webgl/WebGLCapabilities.js +44 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +7 -20
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +23 -21
- package/src/renderers/webgl/WebGLLights.js +21 -44
- package/src/renderers/webgl/WebGLMaterials.js +9 -8
- package/src/renderers/webgl/WebGLMorphtargets.js +78 -217
- package/src/renderers/webgl/WebGLProgram.js +46 -78
- package/src/renderers/webgl/WebGLPrograms.js +37 -40
- package/src/renderers/webgl/WebGLProperties.js +7 -0
- package/src/renderers/webgl/WebGLRenderStates.js +15 -9
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +35 -58
- package/src/renderers/webgl/WebGLTextures.js +313 -358
- package/src/renderers/webgl/WebGLUniforms.js +12 -2
- package/src/renderers/webgl/WebGLUniformsGroups.js +8 -8
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +389 -152
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +145 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +245 -44
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +7 -1
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +21 -3
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +271 -43
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +6 -23
- package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +318 -141
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
- package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +10 -7
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
- package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +424 -95
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +37 -18
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +86 -32
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +10 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +68 -27
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +235 -68
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +43 -5
- package/src/renderers/webxr/WebXRDepthSensing.js +11 -6
- package/src/renderers/webxr/WebXRManager.js +53 -38
- package/src/scenes/Scene.js +7 -1
- package/src/textures/CompressedArrayTexture.js +14 -0
- package/src/textures/DataArrayTexture.js +14 -0
- package/src/textures/DepthTexture.js +1 -3
- package/src/textures/Texture.js +12 -2
- package/src/utils.js +62 -1
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/nodes/Nodes.js +0 -195
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +0 -10
- package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
- package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
- package/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
- package/examples/jsm/nodes/accessors/ModelNode.js +0 -33
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
- package/examples/jsm/nodes/accessors/NormalNode.js +0 -96
- package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
- package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
- package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -72
- package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
- package/examples/jsm/nodes/accessors/UVNode.js +0 -47
- package/examples/jsm/nodes/core/CacheNode.js +0 -49
- package/examples/jsm/nodes/core/IndexNode.js +0 -66
- package/examples/jsm/nodes/core/NodeCache.js +0 -26
- package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
- package/examples/jsm/nodes/core/PropertyNode.js +0 -72
- package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
- package/examples/jsm/nodes/core/VaryingNode.js +0 -65
- package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
- package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
- package/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
- package/examples/jsm/nodes/display/PassNode.js +0 -183
- package/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
- package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
- package/examples/jsm/nodes/display/ViewportNode.js +0 -134
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
- package/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
- package/examples/jsm/nodes/fog/FogNode.js +0 -38
- package/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
- package/examples/jsm/nodes/lighting/AONode.js +0 -27
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
- package/examples/jsm/nodes/lighting/LightNode.js +0 -57
- package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
- package/examples/jsm/nodes/lighting/LightsNode.js +0 -188
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +0 -130
- package/examples/jsm/nodes/math/HashNode.js +0 -34
- package/examples/jsm/nodes/math/MathNode.js +0 -391
- package/examples/jsm/nodes/math/OperatorNode.js +0 -274
- package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
- package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
- package/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
- package/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
- package/examples/jsm/nodes/utils/PackingNode.js +0 -55
- package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/objects/QuadMesh.js +0 -66
- package/examples/jsm/renderers/common/Bindings.js +0 -173
- package/examples/jsm/renderers/common/ChainMap.js +0 -89
- package/examples/jsm/renderers/common/PostProcessing.js +0 -25
- package/examples/jsm/renderers/common/RenderObject.js +0 -221
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
- package/examples/jsm/utils/GPUStatsPanel.js +0 -128
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
- /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
- /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
- /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
- /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
- /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
- /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
- /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
|
@@ -1269,18 +1269,18 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1269
1269
|
const inDataView = info.viewer;
|
|
1270
1270
|
const inOffset = { value: info.offset.value };
|
|
1271
1271
|
|
|
1272
|
-
const outBuffer = new Uint16Array( info.
|
|
1272
|
+
const outBuffer = new Uint16Array( info.columns * info.lines * ( info.inputChannels.length * info.type ) );
|
|
1273
1273
|
const bitmap = new Uint8Array( BITMAP_SIZE );
|
|
1274
1274
|
|
|
1275
1275
|
// Setup channel info
|
|
1276
1276
|
let outBufferEnd = 0;
|
|
1277
|
-
const pizChannelData = new Array( info.
|
|
1278
|
-
for ( let i = 0; i <
|
|
1277
|
+
const pizChannelData = new Array( info.inputChannels.length );
|
|
1278
|
+
for ( let i = 0, il = info.inputChannels.length; i < il; i ++ ) {
|
|
1279
1279
|
|
|
1280
1280
|
pizChannelData[ i ] = {};
|
|
1281
1281
|
pizChannelData[ i ][ 'start' ] = outBufferEnd;
|
|
1282
1282
|
pizChannelData[ i ][ 'end' ] = pizChannelData[ i ][ 'start' ];
|
|
1283
|
-
pizChannelData[ i ][ 'nx' ] = info.
|
|
1283
|
+
pizChannelData[ i ][ 'nx' ] = info.columns;
|
|
1284
1284
|
pizChannelData[ i ][ 'ny' ] = info.lines;
|
|
1285
1285
|
pizChannelData[ i ][ 'size' ] = info.type;
|
|
1286
1286
|
|
|
@@ -1319,7 +1319,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1319
1319
|
hufUncompress( info.array, inDataView, inOffset, length, outBuffer, outBufferEnd );
|
|
1320
1320
|
|
|
1321
1321
|
// Wavelet decoding
|
|
1322
|
-
for ( let i = 0; i < info.
|
|
1322
|
+
for ( let i = 0; i < info.inputChannels.length; ++ i ) {
|
|
1323
1323
|
|
|
1324
1324
|
const cd = pizChannelData[ i ];
|
|
1325
1325
|
|
|
@@ -1347,7 +1347,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1347
1347
|
const tmpBuffer = new Uint8Array( outBuffer.buffer.byteLength );
|
|
1348
1348
|
for ( let y = 0; y < info.lines; y ++ ) {
|
|
1349
1349
|
|
|
1350
|
-
for ( let c = 0; c < info.
|
|
1350
|
+
for ( let c = 0; c < info.inputChannels.length; c ++ ) {
|
|
1351
1351
|
|
|
1352
1352
|
const cd = pizChannelData[ c ];
|
|
1353
1353
|
|
|
@@ -1372,8 +1372,9 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1372
1372
|
|
|
1373
1373
|
const rawBuffer = fflate.unzlibSync( compressed );
|
|
1374
1374
|
|
|
1375
|
-
const
|
|
1376
|
-
const tmpBuffer =
|
|
1375
|
+
const byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes;
|
|
1376
|
+
const tmpBuffer = new ArrayBuffer( byteSize );
|
|
1377
|
+
const viewer = new DataView( tmpBuffer );
|
|
1377
1378
|
|
|
1378
1379
|
let tmpBufferEnd = 0;
|
|
1379
1380
|
let writePtr = 0;
|
|
@@ -1381,26 +1382,27 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1381
1382
|
|
|
1382
1383
|
for ( let y = 0; y < info.lines; y ++ ) {
|
|
1383
1384
|
|
|
1384
|
-
for ( let c = 0; c < info.
|
|
1385
|
+
for ( let c = 0; c < info.inputChannels.length; c ++ ) {
|
|
1385
1386
|
|
|
1386
1387
|
let pixel = 0;
|
|
1387
1388
|
|
|
1388
|
-
|
|
1389
|
+
const type = info.inputChannels[ c ].pixelType;
|
|
1390
|
+
switch ( type ) {
|
|
1389
1391
|
|
|
1390
1392
|
case 1:
|
|
1391
1393
|
|
|
1392
1394
|
ptr[ 0 ] = tmpBufferEnd;
|
|
1393
|
-
ptr[ 1 ] = ptr[ 0 ] + info.
|
|
1394
|
-
tmpBufferEnd = ptr[ 1 ] + info.
|
|
1395
|
+
ptr[ 1 ] = ptr[ 0 ] + info.columns;
|
|
1396
|
+
tmpBufferEnd = ptr[ 1 ] + info.columns;
|
|
1395
1397
|
|
|
1396
|
-
for ( let j = 0; j < info.
|
|
1398
|
+
for ( let j = 0; j < info.columns; ++ j ) {
|
|
1397
1399
|
|
|
1398
1400
|
const diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 8 ) | rawBuffer[ ptr[ 1 ] ++ ];
|
|
1399
1401
|
|
|
1400
1402
|
pixel += diff;
|
|
1401
1403
|
|
|
1402
|
-
|
|
1403
|
-
writePtr
|
|
1404
|
+
viewer.setUint16( writePtr, pixel, true );
|
|
1405
|
+
writePtr += 2;
|
|
1404
1406
|
|
|
1405
1407
|
}
|
|
1406
1408
|
|
|
@@ -1409,18 +1411,18 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1409
1411
|
case 2:
|
|
1410
1412
|
|
|
1411
1413
|
ptr[ 0 ] = tmpBufferEnd;
|
|
1412
|
-
ptr[ 1 ] = ptr[ 0 ] + info.
|
|
1413
|
-
ptr[ 2 ] = ptr[ 1 ] + info.
|
|
1414
|
-
tmpBufferEnd = ptr[ 2 ] + info.
|
|
1414
|
+
ptr[ 1 ] = ptr[ 0 ] + info.columns;
|
|
1415
|
+
ptr[ 2 ] = ptr[ 1 ] + info.columns;
|
|
1416
|
+
tmpBufferEnd = ptr[ 2 ] + info.columns;
|
|
1415
1417
|
|
|
1416
|
-
for ( let j = 0; j < info.
|
|
1418
|
+
for ( let j = 0; j < info.columns; ++ j ) {
|
|
1417
1419
|
|
|
1418
1420
|
const diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 24 ) | ( rawBuffer[ ptr[ 1 ] ++ ] << 16 ) | ( rawBuffer[ ptr[ 2 ] ++ ] << 8 );
|
|
1419
1421
|
|
|
1420
1422
|
pixel += diff;
|
|
1421
1423
|
|
|
1422
|
-
|
|
1423
|
-
writePtr
|
|
1424
|
+
viewer.setUint32( writePtr, pixel, true );
|
|
1425
|
+
writePtr += 4;
|
|
1424
1426
|
|
|
1425
1427
|
}
|
|
1426
1428
|
|
|
@@ -1432,7 +1434,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1432
1434
|
|
|
1433
1435
|
}
|
|
1434
1436
|
|
|
1435
|
-
return
|
|
1437
|
+
return viewer;
|
|
1436
1438
|
|
|
1437
1439
|
}
|
|
1438
1440
|
|
|
@@ -1440,7 +1442,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1440
1442
|
|
|
1441
1443
|
const inDataView = info.viewer;
|
|
1442
1444
|
const inOffset = { value: info.offset.value };
|
|
1443
|
-
const outBuffer = new Uint8Array( info.
|
|
1445
|
+
const outBuffer = new Uint8Array( info.columns * info.lines * ( info.inputChannels.length * info.type * INT16_SIZE ) );
|
|
1444
1446
|
|
|
1445
1447
|
// Read compression header information
|
|
1446
1448
|
const dwaHeader = {
|
|
@@ -1488,9 +1490,9 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1488
1490
|
|
|
1489
1491
|
// Classify channels
|
|
1490
1492
|
const channels = EXRHeader.channels;
|
|
1491
|
-
const channelData = new Array( info.
|
|
1493
|
+
const channelData = new Array( info.inputChannels.length );
|
|
1492
1494
|
|
|
1493
|
-
for ( let i = 0; i < info.
|
|
1495
|
+
for ( let i = 0; i < info.inputChannels.length; ++ i ) {
|
|
1494
1496
|
|
|
1495
1497
|
const cd = channelData[ i ] = {};
|
|
1496
1498
|
const channel = channels[ i ];
|
|
@@ -1500,7 +1502,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1500
1502
|
cd.decoded = false;
|
|
1501
1503
|
cd.type = channel.pixelType;
|
|
1502
1504
|
cd.pLinear = channel.pLinear;
|
|
1503
|
-
cd.width = info.
|
|
1505
|
+
cd.width = info.columns;
|
|
1504
1506
|
cd.height = info.lines;
|
|
1505
1507
|
|
|
1506
1508
|
}
|
|
@@ -1509,7 +1511,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1509
1511
|
idx: new Array( 3 )
|
|
1510
1512
|
};
|
|
1511
1513
|
|
|
1512
|
-
for ( let offset = 0; offset < info.
|
|
1514
|
+
for ( let offset = 0; offset < info.inputChannels.length; ++ offset ) {
|
|
1513
1515
|
|
|
1514
1516
|
const cd = channelData[ offset ];
|
|
1515
1517
|
|
|
@@ -1886,10 +1888,10 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1886
1888
|
|
|
1887
1889
|
function parseBox2i( dataView, offset ) {
|
|
1888
1890
|
|
|
1889
|
-
const xMin =
|
|
1890
|
-
const yMin =
|
|
1891
|
-
const xMax =
|
|
1892
|
-
const yMax =
|
|
1891
|
+
const xMin = parseInt32( dataView, offset );
|
|
1892
|
+
const yMin = parseInt32( dataView, offset );
|
|
1893
|
+
const xMax = parseInt32( dataView, offset );
|
|
1894
|
+
const yMax = parseInt32( dataView, offset );
|
|
1893
1895
|
|
|
1894
1896
|
return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };
|
|
1895
1897
|
|
|
@@ -1898,7 +1900,9 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1898
1900
|
function parseLineOrder( dataView, offset ) {
|
|
1899
1901
|
|
|
1900
1902
|
const lineOrders = [
|
|
1901
|
-
'INCREASING_Y'
|
|
1903
|
+
'INCREASING_Y',
|
|
1904
|
+
'DECREASING_Y',
|
|
1905
|
+
'RANDOM_Y',
|
|
1902
1906
|
];
|
|
1903
1907
|
|
|
1904
1908
|
const lineOrder = parseUint8( dataView, offset );
|
|
@@ -1907,6 +1911,45 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1907
1911
|
|
|
1908
1912
|
}
|
|
1909
1913
|
|
|
1914
|
+
function parseEnvmap( dataView, offset ) {
|
|
1915
|
+
|
|
1916
|
+
const envmaps = [
|
|
1917
|
+
'ENVMAP_LATLONG',
|
|
1918
|
+
'ENVMAP_CUBE'
|
|
1919
|
+
];
|
|
1920
|
+
|
|
1921
|
+
const envmap = parseUint8( dataView, offset );
|
|
1922
|
+
|
|
1923
|
+
return envmaps[ envmap ];
|
|
1924
|
+
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
function parseTiledesc( dataView, offset ) {
|
|
1928
|
+
|
|
1929
|
+
const levelModes = [
|
|
1930
|
+
'ONE_LEVEL',
|
|
1931
|
+
'MIPMAP_LEVELS',
|
|
1932
|
+
'RIPMAP_LEVELS',
|
|
1933
|
+
];
|
|
1934
|
+
|
|
1935
|
+
const roundingModes = [
|
|
1936
|
+
'ROUND_DOWN',
|
|
1937
|
+
'ROUND_UP',
|
|
1938
|
+
];
|
|
1939
|
+
|
|
1940
|
+
const xSize = parseUint32( dataView, offset );
|
|
1941
|
+
const ySize = parseUint32( dataView, offset );
|
|
1942
|
+
const modes = parseUint8( dataView, offset );
|
|
1943
|
+
|
|
1944
|
+
return {
|
|
1945
|
+
xSize: xSize,
|
|
1946
|
+
ySize: ySize,
|
|
1947
|
+
levelMode: levelModes[ modes & 0xf ],
|
|
1948
|
+
roundingMode: roundingModes[ modes >> 4 ]
|
|
1949
|
+
};
|
|
1950
|
+
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1910
1953
|
function parseV2f( dataView, offset ) {
|
|
1911
1954
|
|
|
1912
1955
|
const x = parseFloat32( dataView, offset );
|
|
@@ -1948,6 +1991,14 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1948
1991
|
|
|
1949
1992
|
return parseBox2i( dataView, offset );
|
|
1950
1993
|
|
|
1994
|
+
} else if ( type === 'envmap' ) {
|
|
1995
|
+
|
|
1996
|
+
return parseEnvmap( dataView, offset );
|
|
1997
|
+
|
|
1998
|
+
} else if ( type === 'tiledesc' ) {
|
|
1999
|
+
|
|
2000
|
+
return parseTiledesc( dataView, offset );
|
|
2001
|
+
|
|
1951
2002
|
} else if ( type === 'lineOrder' ) {
|
|
1952
2003
|
|
|
1953
2004
|
return parseLineOrder( dataView, offset );
|
|
@@ -1990,6 +2041,163 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1990
2041
|
|
|
1991
2042
|
}
|
|
1992
2043
|
|
|
2044
|
+
function roundLog2( x, mode ) {
|
|
2045
|
+
|
|
2046
|
+
const log2 = Math.log2( x );
|
|
2047
|
+
return mode == 'ROUND_DOWN' ? Math.floor( log2 ) : Math.ceil( log2 );
|
|
2048
|
+
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
function calculateTileLevels( tiledesc, w, h ) {
|
|
2052
|
+
|
|
2053
|
+
let num = 0;
|
|
2054
|
+
|
|
2055
|
+
switch ( tiledesc.levelMode ) {
|
|
2056
|
+
|
|
2057
|
+
case 'ONE_LEVEL':
|
|
2058
|
+
num = 1;
|
|
2059
|
+
break;
|
|
2060
|
+
|
|
2061
|
+
case 'MIPMAP_LEVELS':
|
|
2062
|
+
num = roundLog2( Math.max( w, h ), tiledesc.roundingMode ) + 1;
|
|
2063
|
+
break;
|
|
2064
|
+
|
|
2065
|
+
case 'RIPMAP_LEVELS':
|
|
2066
|
+
throw new Error( 'THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.' );
|
|
2067
|
+
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
return num;
|
|
2071
|
+
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
function calculateTiles( count, dataSize, size, roundingMode ) {
|
|
2075
|
+
|
|
2076
|
+
const tiles = new Array( count );
|
|
2077
|
+
|
|
2078
|
+
for ( let i = 0; i < count; i ++ ) {
|
|
2079
|
+
|
|
2080
|
+
const b = ( 1 << i );
|
|
2081
|
+
let s = ( dataSize / b ) | 0;
|
|
2082
|
+
|
|
2083
|
+
if ( roundingMode == 'ROUND_UP' && s * b < dataSize ) s += 1;
|
|
2084
|
+
|
|
2085
|
+
const l = Math.max( s, 1 );
|
|
2086
|
+
|
|
2087
|
+
tiles[ i ] = ( ( l + size - 1 ) / size ) | 0;
|
|
2088
|
+
|
|
2089
|
+
}
|
|
2090
|
+
|
|
2091
|
+
return tiles;
|
|
2092
|
+
|
|
2093
|
+
}
|
|
2094
|
+
|
|
2095
|
+
function parseTiles() {
|
|
2096
|
+
|
|
2097
|
+
const EXRDecoder = this;
|
|
2098
|
+
const offset = EXRDecoder.offset;
|
|
2099
|
+
const tmpOffset = { value: 0 };
|
|
2100
|
+
|
|
2101
|
+
for ( let tile = 0; tile < EXRDecoder.tileCount; tile ++ ) {
|
|
2102
|
+
|
|
2103
|
+
const tileX = parseInt32( EXRDecoder.viewer, offset );
|
|
2104
|
+
const tileY = parseInt32( EXRDecoder.viewer, offset );
|
|
2105
|
+
offset.value += 8; // skip levels - only parsing top-level
|
|
2106
|
+
EXRDecoder.size = parseUint32( EXRDecoder.viewer, offset );
|
|
2107
|
+
|
|
2108
|
+
const startX = tileX * EXRDecoder.blockWidth;
|
|
2109
|
+
const startY = tileY * EXRDecoder.blockHeight;
|
|
2110
|
+
EXRDecoder.columns = ( startX + EXRDecoder.blockWidth > EXRDecoder.width ) ? EXRDecoder.width - startX : EXRDecoder.blockWidth;
|
|
2111
|
+
EXRDecoder.lines = ( startY + EXRDecoder.blockHeight > EXRDecoder.height ) ? EXRDecoder.height - startY : EXRDecoder.blockHeight;
|
|
2112
|
+
|
|
2113
|
+
const bytesBlockLine = EXRDecoder.columns * EXRDecoder.totalBytes;
|
|
2114
|
+
const isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesBlockLine;
|
|
2115
|
+
const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
|
|
2116
|
+
|
|
2117
|
+
offset.value += EXRDecoder.size;
|
|
2118
|
+
|
|
2119
|
+
for ( let line = 0; line < EXRDecoder.lines; line ++ ) {
|
|
2120
|
+
|
|
2121
|
+
const lineOffset = line * EXRDecoder.columns * EXRDecoder.totalBytes;
|
|
2122
|
+
|
|
2123
|
+
for ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {
|
|
2124
|
+
|
|
2125
|
+
const name = EXRHeader.channels[ channelID ].name;
|
|
2126
|
+
const lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;
|
|
2127
|
+
const cOff = EXRDecoder.decodeChannels[ name ];
|
|
2128
|
+
|
|
2129
|
+
if ( cOff === undefined ) continue;
|
|
2130
|
+
|
|
2131
|
+
tmpOffset.value = lineOffset + lOff;
|
|
2132
|
+
const outLineOffset = ( EXRDecoder.height - ( 1 + startY + line ) ) * EXRDecoder.outLineWidth;
|
|
2133
|
+
|
|
2134
|
+
for ( let x = 0; x < EXRDecoder.columns; x ++ ) {
|
|
2135
|
+
|
|
2136
|
+
const outIndex = outLineOffset + ( x + startX ) * EXRDecoder.outputChannels + cOff;
|
|
2137
|
+
EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
|
|
2138
|
+
|
|
2139
|
+
}
|
|
2140
|
+
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
}
|
|
2144
|
+
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
}
|
|
2148
|
+
|
|
2149
|
+
function parseScanline() {
|
|
2150
|
+
|
|
2151
|
+
const EXRDecoder = this;
|
|
2152
|
+
const offset = EXRDecoder.offset;
|
|
2153
|
+
const tmpOffset = { value: 0 };
|
|
2154
|
+
|
|
2155
|
+
for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.blockHeight; scanlineBlockIdx ++ ) {
|
|
2156
|
+
|
|
2157
|
+
const line = parseInt32( EXRDecoder.viewer, offset ) - EXRHeader.dataWindow.yMin; // line_no
|
|
2158
|
+
EXRDecoder.size = parseUint32( EXRDecoder.viewer, offset ); // data_len
|
|
2159
|
+
EXRDecoder.lines = ( ( line + EXRDecoder.blockHeight > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.blockHeight );
|
|
2160
|
+
|
|
2161
|
+
const bytesPerLine = EXRDecoder.columns * EXRDecoder.totalBytes;
|
|
2162
|
+
const isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesPerLine;
|
|
2163
|
+
const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
|
|
2164
|
+
|
|
2165
|
+
offset.value += EXRDecoder.size;
|
|
2166
|
+
|
|
2167
|
+
for ( let line_y = 0; line_y < EXRDecoder.blockHeight; line_y ++ ) {
|
|
2168
|
+
|
|
2169
|
+
const scan_y = scanlineBlockIdx * EXRDecoder.blockHeight;
|
|
2170
|
+
const true_y = line_y + EXRDecoder.scanOrder( scan_y );
|
|
2171
|
+
if ( true_y >= EXRDecoder.height ) continue;
|
|
2172
|
+
|
|
2173
|
+
const lineOffset = line_y * bytesPerLine;
|
|
2174
|
+
const outLineOffset = ( EXRDecoder.height - 1 - true_y ) * EXRDecoder.outLineWidth;
|
|
2175
|
+
|
|
2176
|
+
for ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {
|
|
2177
|
+
|
|
2178
|
+
const name = EXRHeader.channels[ channelID ].name;
|
|
2179
|
+
const lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;
|
|
2180
|
+
const cOff = EXRDecoder.decodeChannels[ name ];
|
|
2181
|
+
|
|
2182
|
+
if ( cOff === undefined ) continue;
|
|
2183
|
+
|
|
2184
|
+
tmpOffset.value = lineOffset + lOff;
|
|
2185
|
+
|
|
2186
|
+
for ( let x = 0; x < EXRDecoder.columns; x ++ ) {
|
|
2187
|
+
|
|
2188
|
+
const outIndex = outLineOffset + x * EXRDecoder.outputChannels + cOff;
|
|
2189
|
+
EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
|
|
2190
|
+
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
}
|
|
2194
|
+
|
|
2195
|
+
}
|
|
2196
|
+
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
}
|
|
2200
|
+
|
|
1993
2201
|
function parseHeader( dataView, buffer, offset ) {
|
|
1994
2202
|
|
|
1995
2203
|
const EXRHeader = {};
|
|
@@ -2045,7 +2253,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2045
2253
|
|
|
2046
2254
|
}
|
|
2047
2255
|
|
|
2048
|
-
if ( ( spec & ~
|
|
2256
|
+
if ( ( spec & ~ 0x06 ) != 0 ) { // unsupported deep-image, multi-part
|
|
2049
2257
|
|
|
2050
2258
|
console.error( 'THREE.EXRHeader:', EXRHeader );
|
|
2051
2259
|
throw new Error( 'THREE.EXRLoader: Provided file is currently unsupported.' );
|
|
@@ -2065,11 +2273,13 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2065
2273
|
offset: offset,
|
|
2066
2274
|
width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
|
|
2067
2275
|
height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
|
|
2068
|
-
|
|
2069
|
-
|
|
2276
|
+
inputChannels: EXRHeader.channels,
|
|
2277
|
+
channelByteOffsets: {},
|
|
2278
|
+
scanOrder: null,
|
|
2279
|
+
totalBytes: null,
|
|
2280
|
+
columns: null,
|
|
2070
2281
|
lines: null,
|
|
2071
|
-
|
|
2072
|
-
type: EXRHeader.channels[ 0 ].pixelType,
|
|
2282
|
+
type: null,
|
|
2073
2283
|
uncompress: null,
|
|
2074
2284
|
getter: null,
|
|
2075
2285
|
format: null,
|
|
@@ -2079,42 +2289,42 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2079
2289
|
switch ( EXRHeader.compression ) {
|
|
2080
2290
|
|
|
2081
2291
|
case 'NO_COMPRESSION':
|
|
2082
|
-
EXRDecoder.
|
|
2292
|
+
EXRDecoder.blockHeight = 1;
|
|
2083
2293
|
EXRDecoder.uncompress = uncompressRAW;
|
|
2084
2294
|
break;
|
|
2085
2295
|
|
|
2086
2296
|
case 'RLE_COMPRESSION':
|
|
2087
|
-
EXRDecoder.
|
|
2297
|
+
EXRDecoder.blockHeight = 1;
|
|
2088
2298
|
EXRDecoder.uncompress = uncompressRLE;
|
|
2089
2299
|
break;
|
|
2090
2300
|
|
|
2091
2301
|
case 'ZIPS_COMPRESSION':
|
|
2092
|
-
EXRDecoder.
|
|
2302
|
+
EXRDecoder.blockHeight = 1;
|
|
2093
2303
|
EXRDecoder.uncompress = uncompressZIP;
|
|
2094
2304
|
break;
|
|
2095
2305
|
|
|
2096
2306
|
case 'ZIP_COMPRESSION':
|
|
2097
|
-
EXRDecoder.
|
|
2307
|
+
EXRDecoder.blockHeight = 16;
|
|
2098
2308
|
EXRDecoder.uncompress = uncompressZIP;
|
|
2099
2309
|
break;
|
|
2100
2310
|
|
|
2101
2311
|
case 'PIZ_COMPRESSION':
|
|
2102
|
-
EXRDecoder.
|
|
2312
|
+
EXRDecoder.blockHeight = 32;
|
|
2103
2313
|
EXRDecoder.uncompress = uncompressPIZ;
|
|
2104
2314
|
break;
|
|
2105
2315
|
|
|
2106
2316
|
case 'PXR24_COMPRESSION':
|
|
2107
|
-
EXRDecoder.
|
|
2317
|
+
EXRDecoder.blockHeight = 16;
|
|
2108
2318
|
EXRDecoder.uncompress = uncompressPXR;
|
|
2109
2319
|
break;
|
|
2110
2320
|
|
|
2111
2321
|
case 'DWAA_COMPRESSION':
|
|
2112
|
-
EXRDecoder.
|
|
2322
|
+
EXRDecoder.blockHeight = 32;
|
|
2113
2323
|
EXRDecoder.uncompress = uncompressDWA;
|
|
2114
2324
|
break;
|
|
2115
2325
|
|
|
2116
2326
|
case 'DWAB_COMPRESSION':
|
|
2117
|
-
EXRDecoder.
|
|
2327
|
+
EXRDecoder.blockHeight = 256;
|
|
2118
2328
|
EXRDecoder.uncompress = uncompressDWA;
|
|
2119
2329
|
break;
|
|
2120
2330
|
|
|
@@ -2123,7 +2333,42 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2123
2333
|
|
|
2124
2334
|
}
|
|
2125
2335
|
|
|
2126
|
-
|
|
2336
|
+
const channels = {};
|
|
2337
|
+
for ( const channel of EXRHeader.channels ) {
|
|
2338
|
+
|
|
2339
|
+
switch ( channel.name ) {
|
|
2340
|
+
|
|
2341
|
+
case 'Y':
|
|
2342
|
+
case 'R':
|
|
2343
|
+
case 'G':
|
|
2344
|
+
case 'B':
|
|
2345
|
+
case 'A':
|
|
2346
|
+
channels[ channel.name ] = true;
|
|
2347
|
+
EXRDecoder.type = channel.pixelType;
|
|
2348
|
+
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
// RGB images will be converted to RGBA format, preventing software emulation in select devices.
|
|
2354
|
+
let fillAlpha = false;
|
|
2355
|
+
|
|
2356
|
+
if ( channels.R && channels.G && channels.B ) {
|
|
2357
|
+
|
|
2358
|
+
fillAlpha = ! channels.A;
|
|
2359
|
+
EXRDecoder.outputChannels = 4;
|
|
2360
|
+
EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
|
|
2361
|
+
|
|
2362
|
+
} else if ( channels.Y ) {
|
|
2363
|
+
|
|
2364
|
+
EXRDecoder.outputChannels = 1;
|
|
2365
|
+
EXRDecoder.decodeChannels = { Y: 0 };
|
|
2366
|
+
|
|
2367
|
+
} else {
|
|
2368
|
+
|
|
2369
|
+
throw new Error( 'EXRLoader.parse: file contains unsupported data channels.' );
|
|
2370
|
+
|
|
2371
|
+
}
|
|
2127
2372
|
|
|
2128
2373
|
if ( EXRDecoder.type == 1 ) {
|
|
2129
2374
|
|
|
@@ -2132,12 +2377,10 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2132
2377
|
|
|
2133
2378
|
case FloatType:
|
|
2134
2379
|
EXRDecoder.getter = parseFloat16;
|
|
2135
|
-
EXRDecoder.inputSize = INT16_SIZE;
|
|
2136
2380
|
break;
|
|
2137
2381
|
|
|
2138
2382
|
case HalfFloatType:
|
|
2139
2383
|
EXRDecoder.getter = parseUint16;
|
|
2140
|
-
EXRDecoder.inputSize = INT16_SIZE;
|
|
2141
2384
|
break;
|
|
2142
2385
|
|
|
2143
2386
|
}
|
|
@@ -2149,12 +2392,10 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2149
2392
|
|
|
2150
2393
|
case FloatType:
|
|
2151
2394
|
EXRDecoder.getter = parseFloat32;
|
|
2152
|
-
EXRDecoder.inputSize = FLOAT32_SIZE;
|
|
2153
2395
|
break;
|
|
2154
2396
|
|
|
2155
2397
|
case HalfFloatType:
|
|
2156
2398
|
EXRDecoder.getter = decodeFloat32;
|
|
2157
|
-
EXRDecoder.inputSize = FLOAT32_SIZE;
|
|
2158
2399
|
|
|
2159
2400
|
}
|
|
2160
2401
|
|
|
@@ -2164,15 +2405,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2164
2405
|
|
|
2165
2406
|
}
|
|
2166
2407
|
|
|
2167
|
-
EXRDecoder.
|
|
2168
|
-
|
|
2169
|
-
for ( let i = 0; i < EXRDecoder.blockCount; i ++ )
|
|
2170
|
-
parseInt64( dataView, offset ); // scanlineOffset
|
|
2171
|
-
|
|
2172
|
-
// we should be passed the scanline offset table, ready to start reading pixel data.
|
|
2173
|
-
|
|
2174
|
-
// RGB images will be converted to RGBA format, preventing software emulation in select devices.
|
|
2175
|
-
EXRDecoder.outputChannels = ( ( EXRDecoder.channels == 3 ) ? 4 : EXRDecoder.channels );
|
|
2408
|
+
EXRDecoder.columns = EXRDecoder.width;
|
|
2176
2409
|
const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
|
|
2177
2410
|
|
|
2178
2411
|
switch ( outputType ) {
|
|
@@ -2181,7 +2414,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2181
2414
|
EXRDecoder.byteArray = new Float32Array( size );
|
|
2182
2415
|
|
|
2183
2416
|
// Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
|
|
2184
|
-
if (
|
|
2417
|
+
if ( fillAlpha )
|
|
2185
2418
|
EXRDecoder.byteArray.fill( 1, 0, size );
|
|
2186
2419
|
|
|
2187
2420
|
break;
|
|
@@ -2189,7 +2422,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2189
2422
|
case HalfFloatType:
|
|
2190
2423
|
EXRDecoder.byteArray = new Uint16Array( size );
|
|
2191
2424
|
|
|
2192
|
-
if (
|
|
2425
|
+
if ( fillAlpha )
|
|
2193
2426
|
EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
|
|
2194
2427
|
|
|
2195
2428
|
break;
|
|
@@ -2200,7 +2433,31 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2200
2433
|
|
|
2201
2434
|
}
|
|
2202
2435
|
|
|
2203
|
-
|
|
2436
|
+
let byteOffset = 0;
|
|
2437
|
+
for ( const channel of EXRHeader.channels ) {
|
|
2438
|
+
|
|
2439
|
+
if ( EXRDecoder.decodeChannels[ channel.name ] !== undefined ) {
|
|
2440
|
+
|
|
2441
|
+
EXRDecoder.channelByteOffsets[ channel.name ] = byteOffset;
|
|
2442
|
+
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2445
|
+
byteOffset += channel.pixelType * 2;
|
|
2446
|
+
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
EXRDecoder.totalBytes = byteOffset;
|
|
2450
|
+
EXRDecoder.outLineWidth = EXRDecoder.width * EXRDecoder.outputChannels;
|
|
2451
|
+
|
|
2452
|
+
if ( EXRHeader.lineOrder === 'INCREASING_Y' ) {
|
|
2453
|
+
|
|
2454
|
+
EXRDecoder.scanOrder = ( y ) => y;
|
|
2455
|
+
|
|
2456
|
+
} else {
|
|
2457
|
+
|
|
2458
|
+
EXRDecoder.scanOrder = ( y ) => EXRDecoder.height - 1 - y;
|
|
2459
|
+
|
|
2460
|
+
}
|
|
2204
2461
|
|
|
2205
2462
|
if ( EXRDecoder.outputChannels == 4 ) {
|
|
2206
2463
|
|
|
@@ -2214,58 +2471,55 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2214
2471
|
|
|
2215
2472
|
}
|
|
2216
2473
|
|
|
2217
|
-
|
|
2474
|
+
if ( EXRHeader.spec.singleTile ) {
|
|
2218
2475
|
|
|
2219
|
-
|
|
2476
|
+
EXRDecoder.blockHeight = EXRHeader.tiles.ySize;
|
|
2477
|
+
EXRDecoder.blockWidth = EXRHeader.tiles.xSize;
|
|
2220
2478
|
|
|
2221
|
-
|
|
2479
|
+
const numXLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );
|
|
2480
|
+
// const numYLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );
|
|
2222
2481
|
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
const offset = { value: 0 };
|
|
2482
|
+
const numXTiles = calculateTiles( numXLevels, EXRDecoder.width, EXRHeader.tiles.xSize, EXRHeader.tiles.roundingMode );
|
|
2483
|
+
const numYTiles = calculateTiles( numXLevels, EXRDecoder.height, EXRHeader.tiles.ySize, EXRHeader.tiles.roundingMode );
|
|
2226
2484
|
|
|
2227
|
-
|
|
2228
|
-
const EXRHeader = parseHeader( bufferDataView, buffer, offset );
|
|
2485
|
+
EXRDecoder.tileCount = numXTiles[ 0 ] * numYTiles[ 0 ];
|
|
2229
2486
|
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };
|
|
2235
|
-
|
|
2236
|
-
for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
|
|
2487
|
+
for ( let l = 0; l < numXLevels; l ++ )
|
|
2488
|
+
for ( let y = 0; y < numYTiles[ l ]; y ++ )
|
|
2489
|
+
for ( let x = 0; x < numXTiles[ l ]; x ++ )
|
|
2490
|
+
parseInt64( dataView, offset ); // tileOffset
|
|
2237
2491
|
|
|
2238
|
-
|
|
2239
|
-
EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
|
|
2240
|
-
EXRDecoder.lines = ( ( line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.scanlineBlockSize );
|
|
2492
|
+
EXRDecoder.decode = parseTiles.bind( EXRDecoder );
|
|
2241
2493
|
|
|
2242
|
-
|
|
2243
|
-
const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
|
|
2244
|
-
|
|
2245
|
-
offset.value += EXRDecoder.size;
|
|
2494
|
+
} else {
|
|
2246
2495
|
|
|
2247
|
-
|
|
2496
|
+
EXRDecoder.blockWidth = EXRDecoder.width;
|
|
2497
|
+
const blockCount = Math.ceil( EXRDecoder.height / EXRDecoder.blockHeight );
|
|
2248
2498
|
|
|
2249
|
-
|
|
2250
|
-
|
|
2499
|
+
for ( let i = 0; i < blockCount; i ++ )
|
|
2500
|
+
parseInt64( dataView, offset ); // scanlineOffset
|
|
2251
2501
|
|
|
2252
|
-
|
|
2502
|
+
EXRDecoder.decode = parseScanline.bind( EXRDecoder );
|
|
2253
2503
|
|
|
2254
|
-
|
|
2504
|
+
}
|
|
2255
2505
|
|
|
2256
|
-
|
|
2506
|
+
return EXRDecoder;
|
|
2257
2507
|
|
|
2258
|
-
|
|
2259
|
-
const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
|
|
2260
|
-
EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
|
|
2508
|
+
}
|
|
2261
2509
|
|
|
2262
|
-
|
|
2510
|
+
// start parsing file [START]
|
|
2511
|
+
const offset = { value: 0 };
|
|
2512
|
+
const bufferDataView = new DataView( buffer );
|
|
2513
|
+
const uInt8Array = new Uint8Array( buffer );
|
|
2263
2514
|
|
|
2264
|
-
|
|
2515
|
+
// get header information and validate format.
|
|
2516
|
+
const EXRHeader = parseHeader( bufferDataView, buffer, offset );
|
|
2265
2517
|
|
|
2266
|
-
|
|
2518
|
+
// get input compression information and prepare decoding.
|
|
2519
|
+
const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
|
|
2267
2520
|
|
|
2268
|
-
|
|
2521
|
+
// parse input data
|
|
2522
|
+
EXRDecoder.decode();
|
|
2269
2523
|
|
|
2270
2524
|
return {
|
|
2271
2525
|
header: EXRHeader,
|