@needle-tools/three 0.145.4 → 0.146.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/README.md +1 -1
- package/build/three.cjs +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +38 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +14 -18
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +234 -168
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +64 -17
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +10 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -14,7 +14,9 @@ class WebGPU {
|
|
|
14
14
|
|
|
15
15
|
static getErrorMessage() {
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
let message = 'Your browser does not support <a href="https://gpuweb.github.io/gpuweb/" style="color:blue">WebGPU</a>';
|
|
18
|
+
|
|
19
|
+
if ( !! window.chrome ) message += '<br>Try: <b>chrome://flags/#enable-unsafe-webgpu</b>';
|
|
18
20
|
|
|
19
21
|
const element = document.createElement( 'div' );
|
|
20
22
|
element.id = 'webgpumessage';
|
|
@@ -603,22 +603,62 @@ class OrbitControls extends EventDispatcher {
|
|
|
603
603
|
switch ( event.code ) {
|
|
604
604
|
|
|
605
605
|
case scope.keys.UP:
|
|
606
|
-
|
|
606
|
+
|
|
607
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
608
|
+
|
|
609
|
+
rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
610
|
+
|
|
611
|
+
} else {
|
|
612
|
+
|
|
613
|
+
pan( 0, scope.keyPanSpeed );
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
|
|
607
617
|
needsUpdate = true;
|
|
608
618
|
break;
|
|
609
619
|
|
|
610
620
|
case scope.keys.BOTTOM:
|
|
611
|
-
|
|
621
|
+
|
|
622
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
623
|
+
|
|
624
|
+
rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
625
|
+
|
|
626
|
+
} else {
|
|
627
|
+
|
|
628
|
+
pan( 0, - scope.keyPanSpeed );
|
|
629
|
+
|
|
630
|
+
}
|
|
631
|
+
|
|
612
632
|
needsUpdate = true;
|
|
613
633
|
break;
|
|
614
634
|
|
|
615
635
|
case scope.keys.LEFT:
|
|
616
|
-
|
|
636
|
+
|
|
637
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
638
|
+
|
|
639
|
+
rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
640
|
+
|
|
641
|
+
} else {
|
|
642
|
+
|
|
643
|
+
pan( scope.keyPanSpeed, 0 );
|
|
644
|
+
|
|
645
|
+
}
|
|
646
|
+
|
|
617
647
|
needsUpdate = true;
|
|
618
648
|
break;
|
|
619
649
|
|
|
620
650
|
case scope.keys.RIGHT:
|
|
621
|
-
|
|
651
|
+
|
|
652
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
653
|
+
|
|
654
|
+
rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
655
|
+
|
|
656
|
+
} else {
|
|
657
|
+
|
|
658
|
+
pan( - scope.keyPanSpeed, 0 );
|
|
659
|
+
|
|
660
|
+
}
|
|
661
|
+
|
|
622
662
|
needsUpdate = true;
|
|
623
663
|
break;
|
|
624
664
|
|
|
@@ -20,16 +20,10 @@ import {
|
|
|
20
20
|
Scene,
|
|
21
21
|
Source,
|
|
22
22
|
sRGBEncoding,
|
|
23
|
-
Texture,
|
|
24
23
|
CompressedTexture,
|
|
25
|
-
PlaneGeometry,
|
|
26
|
-
ShaderMaterial,
|
|
27
|
-
Mesh,
|
|
28
|
-
PerspectiveCamera,
|
|
29
|
-
WebGLRenderer,
|
|
30
|
-
Uniform,
|
|
31
24
|
Vector3
|
|
32
25
|
} from 'three';
|
|
26
|
+
import { decompress } from './../utils/TextureUtils.js';
|
|
33
27
|
|
|
34
28
|
class GLTFExporter {
|
|
35
29
|
|
|
@@ -49,12 +43,6 @@ class GLTFExporter {
|
|
|
49
43
|
|
|
50
44
|
} );
|
|
51
45
|
|
|
52
|
-
this.register( function ( writer ) {
|
|
53
|
-
|
|
54
|
-
return new GLTFMaterialsPBRSpecularGlossiness( writer );
|
|
55
|
-
|
|
56
|
-
} );
|
|
57
|
-
|
|
58
46
|
this.register( function ( writer ) {
|
|
59
47
|
|
|
60
48
|
return new GLTFMaterialsTransmissionExtension( writer );
|
|
@@ -551,13 +539,6 @@ class GLTFWriter {
|
|
|
551
539
|
|
|
552
540
|
}
|
|
553
541
|
|
|
554
|
-
// Clean up in case we had to create a temporary renderer for blitting compressed textures.
|
|
555
|
-
if (this.temporaryRenderer) {
|
|
556
|
-
|
|
557
|
-
this.temporaryRenderer.dispose();
|
|
558
|
-
|
|
559
|
-
}
|
|
560
|
-
|
|
561
542
|
}
|
|
562
543
|
|
|
563
544
|
/**
|
|
@@ -736,49 +717,6 @@ class GLTFWriter {
|
|
|
736
717
|
|
|
737
718
|
}
|
|
738
719
|
|
|
739
|
-
buildReadableTexture( map, maxTextureSize ) {
|
|
740
|
-
|
|
741
|
-
const fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );
|
|
742
|
-
const fullscreenQuadMaterial = new ShaderMaterial( {
|
|
743
|
-
uniforms: { blitTexture: new Uniform( map ) },
|
|
744
|
-
vertexShader: `
|
|
745
|
-
varying vec2 vUv;
|
|
746
|
-
void main(){
|
|
747
|
-
vUv = uv;
|
|
748
|
-
gl_Position = vec4(position.xy * 1.0,0.,.999999);
|
|
749
|
-
}`,
|
|
750
|
-
fragmentShader: `
|
|
751
|
-
uniform sampler2D blitTexture;
|
|
752
|
-
varying vec2 vUv;
|
|
753
|
-
void main(){
|
|
754
|
-
gl_FragColor = vec4(vUv.xy, 0, 1);
|
|
755
|
-
gl_FragColor = texture2D( blitTexture, vUv);
|
|
756
|
-
}`
|
|
757
|
-
} );
|
|
758
|
-
|
|
759
|
-
const fullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );
|
|
760
|
-
fullscreenQuad.frustrumCulled = false;
|
|
761
|
-
|
|
762
|
-
const temporaryCam = new PerspectiveCamera();
|
|
763
|
-
const temporaryScene = new Scene();
|
|
764
|
-
temporaryScene.add( fullscreenQuad );
|
|
765
|
-
|
|
766
|
-
if (!this.temporaryRenderer) {
|
|
767
|
-
|
|
768
|
-
this.temporaryRenderer = new WebGLRenderer( { antialias: false } );
|
|
769
|
-
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
this.temporaryRenderer.setSize( Math.min(map.image.width, maxTextureSize), Math.min(map.image.height, maxTextureSize) );
|
|
773
|
-
this.temporaryRenderer.clear();
|
|
774
|
-
this.temporaryRenderer.render( temporaryScene, temporaryCam );
|
|
775
|
-
|
|
776
|
-
const readableTexture = new Texture( this.temporaryRenderer.domElement );
|
|
777
|
-
readableTexture.userData.mimeType = 'image/png';
|
|
778
|
-
return readableTexture;
|
|
779
|
-
|
|
780
|
-
}
|
|
781
|
-
|
|
782
720
|
buildMetalRoughTexture( metalnessMap, roughnessMap ) {
|
|
783
721
|
|
|
784
722
|
if ( metalnessMap === roughnessMap ) return metalnessMap;
|
|
@@ -807,17 +745,17 @@ class GLTFWriter {
|
|
|
807
745
|
|
|
808
746
|
console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
|
|
809
747
|
|
|
810
|
-
if ( typeof CompressedTexture !== 'undefined') {
|
|
748
|
+
if ( typeof CompressedTexture !== 'undefined' ) {
|
|
811
749
|
|
|
812
750
|
if ( metalnessMap instanceof CompressedTexture ) {
|
|
813
751
|
|
|
814
|
-
metalnessMap =
|
|
752
|
+
metalnessMap = decompress( metalnessMap );
|
|
815
753
|
|
|
816
754
|
}
|
|
817
755
|
|
|
818
756
|
if ( roughnessMap instanceof CompressedTexture ) {
|
|
819
757
|
|
|
820
|
-
roughnessMap =
|
|
758
|
+
roughnessMap = decompress( roughnessMap );
|
|
821
759
|
|
|
822
760
|
}
|
|
823
761
|
|
|
@@ -1215,6 +1153,7 @@ class GLTFWriter {
|
|
|
1215
1153
|
console.error( 'GLTFExporter: Only RGBAFormat is supported.', image );
|
|
1216
1154
|
|
|
1217
1155
|
}
|
|
1156
|
+
|
|
1218
1157
|
if ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {
|
|
1219
1158
|
|
|
1220
1159
|
console.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );
|
|
@@ -1341,13 +1280,14 @@ class GLTFWriter {
|
|
|
1341
1280
|
let modifiedMap = map;
|
|
1342
1281
|
|
|
1343
1282
|
// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture
|
|
1344
|
-
// TODO: how to detect that a texture isn't readable?
|
|
1345
1283
|
if ( typeof CompressedTexture !== 'undefined' && map instanceof CompressedTexture ) {
|
|
1346
1284
|
|
|
1347
|
-
modifiedMap =
|
|
1285
|
+
modifiedMap = decompress( map, options.maxTextureSize );
|
|
1286
|
+
// remove from cache, as the underlaying canvas is always the same between decompressed textures
|
|
1287
|
+
cache.images.delete( modifiedMap.image );
|
|
1348
1288
|
|
|
1349
1289
|
}
|
|
1350
|
-
|
|
1290
|
+
|
|
1351
1291
|
let mimeType = modifiedMap.userData.mimeType;
|
|
1352
1292
|
|
|
1353
1293
|
if ( mimeType === 'image/webp' ) mimeType = 'image/png';
|
|
@@ -1423,9 +1363,11 @@ class GLTFWriter {
|
|
|
1423
1363
|
}
|
|
1424
1364
|
|
|
1425
1365
|
// pbrMetallicRoughness.metallicRoughnessTexture
|
|
1426
|
-
|
|
1366
|
+
const metalnessMap = material.metalnessMap?.image ? material.metalnessMap : undefined;
|
|
1367
|
+
const roughnessMap = material.roughnessMap?.image ? material.roughnessMap : undefined;
|
|
1368
|
+
if ( metalnessMap || roughnessMap ) {
|
|
1427
1369
|
|
|
1428
|
-
const metalRoughTexture = this.buildMetalRoughTexture(
|
|
1370
|
+
const metalRoughTexture = this.buildMetalRoughTexture( metalnessMap, roughnessMap );
|
|
1429
1371
|
|
|
1430
1372
|
const metalRoughMapDef = { index: this.processTexture( metalRoughTexture ) };
|
|
1431
1373
|
this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
|
|
@@ -1434,7 +1376,7 @@ class GLTFWriter {
|
|
|
1434
1376
|
}
|
|
1435
1377
|
|
|
1436
1378
|
// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture
|
|
1437
|
-
if ( material.map ) {
|
|
1379
|
+
if ( material.map?.image ) {
|
|
1438
1380
|
|
|
1439
1381
|
const baseColorMapDef = { index: this.processTexture( material.map ) };
|
|
1440
1382
|
this.applyTextureTransform( baseColorMapDef, material.map );
|
|
@@ -1463,7 +1405,7 @@ class GLTFWriter {
|
|
|
1463
1405
|
}
|
|
1464
1406
|
|
|
1465
1407
|
// emissiveTexture
|
|
1466
|
-
if ( material.emissiveMap ) {
|
|
1408
|
+
if ( material.emissiveMap?.image ) {
|
|
1467
1409
|
|
|
1468
1410
|
const emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };
|
|
1469
1411
|
this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
|
|
@@ -1474,7 +1416,7 @@ class GLTFWriter {
|
|
|
1474
1416
|
}
|
|
1475
1417
|
|
|
1476
1418
|
// normalTexture
|
|
1477
|
-
if ( material.normalMap ) {
|
|
1419
|
+
if ( material.normalMap?.image ) {
|
|
1478
1420
|
|
|
1479
1421
|
const normalMapDef = { index: this.processTexture( material.normalMap ) };
|
|
1480
1422
|
|
|
@@ -1492,7 +1434,7 @@ class GLTFWriter {
|
|
|
1492
1434
|
}
|
|
1493
1435
|
|
|
1494
1436
|
// occlusionTexture
|
|
1495
|
-
if ( material.aoMap ) {
|
|
1437
|
+
if ( material.aoMap?.image ) {
|
|
1496
1438
|
|
|
1497
1439
|
const occlusionMapDef = {
|
|
1498
1440
|
index: this.processTexture( material.aoMap ),
|
|
@@ -2413,62 +2355,6 @@ class GLTFMaterialsUnlitExtension {
|
|
|
2413
2355
|
|
|
2414
2356
|
}
|
|
2415
2357
|
|
|
2416
|
-
/**
|
|
2417
|
-
* Specular-Glossiness Extension
|
|
2418
|
-
*
|
|
2419
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
|
|
2420
|
-
*/
|
|
2421
|
-
class GLTFMaterialsPBRSpecularGlossiness {
|
|
2422
|
-
|
|
2423
|
-
constructor( writer ) {
|
|
2424
|
-
|
|
2425
|
-
this.writer = writer;
|
|
2426
|
-
this.name = 'KHR_materials_pbrSpecularGlossiness';
|
|
2427
|
-
|
|
2428
|
-
}
|
|
2429
|
-
|
|
2430
|
-
writeMaterial( material, materialDef ) {
|
|
2431
|
-
|
|
2432
|
-
if ( ! material.isGLTFSpecularGlossinessMaterial ) return;
|
|
2433
|
-
|
|
2434
|
-
const writer = this.writer;
|
|
2435
|
-
const extensionsUsed = writer.extensionsUsed;
|
|
2436
|
-
|
|
2437
|
-
const extensionDef = {};
|
|
2438
|
-
|
|
2439
|
-
if ( materialDef.pbrMetallicRoughness.baseColorFactor ) {
|
|
2440
|
-
|
|
2441
|
-
extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
|
|
2442
|
-
|
|
2443
|
-
}
|
|
2444
|
-
|
|
2445
|
-
const specularFactor = [ 1, 1, 1 ];
|
|
2446
|
-
material.specular.toArray( specularFactor, 0 );
|
|
2447
|
-
extensionDef.specularFactor = specularFactor;
|
|
2448
|
-
extensionDef.glossinessFactor = material.glossiness;
|
|
2449
|
-
|
|
2450
|
-
if ( materialDef.pbrMetallicRoughness.baseColorTexture ) {
|
|
2451
|
-
|
|
2452
|
-
extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
|
|
2453
|
-
|
|
2454
|
-
}
|
|
2455
|
-
|
|
2456
|
-
if ( material.specularMap ) {
|
|
2457
|
-
|
|
2458
|
-
const specularMapDef = { index: writer.processTexture( material.specularMap ) };
|
|
2459
|
-
writer.applyTextureTransform( specularMapDef, material.specularMap );
|
|
2460
|
-
extensionDef.specularGlossinessTexture = specularMapDef;
|
|
2461
|
-
|
|
2462
|
-
}
|
|
2463
|
-
|
|
2464
|
-
materialDef.extensions = materialDef.extensions || {};
|
|
2465
|
-
materialDef.extensions[ this.name ] = extensionDef;
|
|
2466
|
-
extensionsUsed[ this.name ] = true;
|
|
2467
|
-
|
|
2468
|
-
}
|
|
2469
|
-
|
|
2470
|
-
}
|
|
2471
|
-
|
|
2472
2358
|
/**
|
|
2473
2359
|
* Clearcoat Materials Extension
|
|
2474
2360
|
*
|
|
@@ -7,14 +7,13 @@ import {
|
|
|
7
7
|
Mesh,
|
|
8
8
|
ShaderMaterial,
|
|
9
9
|
WebGLRenderer,
|
|
10
|
+
MathUtils,
|
|
10
11
|
Matrix4,
|
|
11
12
|
RepeatWrapping,
|
|
12
13
|
MirroredRepeatWrapping,
|
|
13
14
|
DoubleSide
|
|
14
15
|
} from 'three';
|
|
15
|
-
import * as fflate from '
|
|
16
|
-
import { generateUUID } from 'three/src/math/mathutils.js';
|
|
17
|
-
|
|
16
|
+
import * as fflate from '../libs/fflate.module.js';
|
|
18
17
|
|
|
19
18
|
class USDZDocument {
|
|
20
19
|
|
|
@@ -131,7 +130,7 @@ export class USDZObject {
|
|
|
131
130
|
|
|
132
131
|
static createEmptyParent( object ) {
|
|
133
132
|
|
|
134
|
-
const emptyParent = new USDZObject( generateUUID(), object.name + '_empty_' + ( this._id ++ ), object.matrix );
|
|
133
|
+
const emptyParent = new USDZObject( MathUtils.generateUUID(), object.name + '_empty_' + ( this._id ++ ), object.matrix );
|
|
135
134
|
const parent = object.parent;
|
|
136
135
|
parent.add( emptyParent );
|
|
137
136
|
emptyParent.add( object );
|
|
@@ -141,13 +140,14 @@ export class USDZObject {
|
|
|
141
140
|
|
|
142
141
|
}
|
|
143
142
|
|
|
144
|
-
constructor( id, name, matrix, mesh, material ) {
|
|
143
|
+
constructor( id, name, matrix, mesh, material, camera ) {
|
|
145
144
|
|
|
146
145
|
this.uuid = id;
|
|
147
146
|
this.name = name;
|
|
148
147
|
this.matrix = matrix;
|
|
149
148
|
this.geometry = mesh;
|
|
150
149
|
this.material = material;
|
|
150
|
+
this.camera = camera;
|
|
151
151
|
this.parent = null;
|
|
152
152
|
this.children = [];
|
|
153
153
|
this._eventListeners = {};
|
|
@@ -170,7 +170,7 @@ export class USDZObject {
|
|
|
170
170
|
|
|
171
171
|
clone() {
|
|
172
172
|
|
|
173
|
-
const clone = new USDZObject( generateUUID(), this.name, this.matrix, this.mesh, this.material );
|
|
173
|
+
const clone = new USDZObject( MathUtils.generateUUID(), this.name, this.matrix, this.mesh, this.material );
|
|
174
174
|
clone.isDynamic = this.isDynamic;
|
|
175
175
|
return clone;
|
|
176
176
|
|
|
@@ -340,8 +340,9 @@ class USDZExporterContext {
|
|
|
340
340
|
|
|
341
341
|
class USDZExporter {
|
|
342
342
|
|
|
343
|
-
async parse( scene, extensions ) {
|
|
343
|
+
async parse( scene, extensions, sceneAnchoringOptions = { ar: { anchoring: { type: 'plane' }, planeAnchoring: { alignment: 'horizontal' } } } ) {
|
|
344
344
|
|
|
345
|
+
this.sceneAnchoringOptions = sceneAnchoringOptions;
|
|
345
346
|
const context = new USDZExporterContext( scene, this, extensions );
|
|
346
347
|
extensions = context.extensions;
|
|
347
348
|
|
|
@@ -368,7 +369,6 @@ class USDZExporter {
|
|
|
368
369
|
|
|
369
370
|
invokeAll( context, 'onAfterHierarchy' );
|
|
370
371
|
|
|
371
|
-
|
|
372
372
|
const header = context.document.buildHeader();
|
|
373
373
|
const final = header + '\n' + context.output;
|
|
374
374
|
|
|
@@ -445,6 +445,11 @@ function traverseVisible( object, parentModel, context ) {
|
|
|
445
445
|
const name = getObjectId( object );
|
|
446
446
|
model = new USDZObject( object.uuid, name, object.matrix, geometry, material );
|
|
447
447
|
|
|
448
|
+
} else if ( object.isCamera ) {
|
|
449
|
+
|
|
450
|
+
const name = getObjectId( object );
|
|
451
|
+
model = new USDZObject( object.uuid, name, object.matrix, undefined, undefined, object );
|
|
452
|
+
|
|
448
453
|
} else {
|
|
449
454
|
|
|
450
455
|
const name = getObjectId( object );
|
|
@@ -505,6 +510,22 @@ function parseDocument( context ) {
|
|
|
505
510
|
const writer = new CodeWriter();
|
|
506
511
|
|
|
507
512
|
writer.beginBlock( `def Xform "${context.document.name}"` );
|
|
513
|
+
|
|
514
|
+
writer.beginBlock( `def Scope "Scenes" (
|
|
515
|
+
kind = "sceneLibrary"
|
|
516
|
+
)`);
|
|
517
|
+
|
|
518
|
+
writer.beginBlock(`def Xform "Scene" (
|
|
519
|
+
customData = {
|
|
520
|
+
bool preliminary_collidesWithEnvironment = 0
|
|
521
|
+
string sceneName = "Scene"
|
|
522
|
+
}
|
|
523
|
+
sceneName = "Scene"
|
|
524
|
+
)`);
|
|
525
|
+
|
|
526
|
+
writer.appendLine(`token preliminary:anchoring:type = "${context.exporter.sceneAnchoringOptions.ar.anchoring.type}"`);
|
|
527
|
+
writer.appendLine(`token preliminary:planeAnchoring:alignment = "${context.exporter.sceneAnchoringOptions.ar.planeAnchoring.alignment}"`);
|
|
528
|
+
writer.appendLine();
|
|
508
529
|
|
|
509
530
|
for ( const child of context.document.children ) {
|
|
510
531
|
|
|
@@ -512,6 +533,8 @@ function parseDocument( context ) {
|
|
|
512
533
|
|
|
513
534
|
}
|
|
514
535
|
|
|
536
|
+
writer.closeBlock();
|
|
537
|
+
writer.closeBlock();
|
|
515
538
|
writer.closeBlock();
|
|
516
539
|
|
|
517
540
|
context.output += writer.toString();
|
|
@@ -699,11 +722,10 @@ export function buildXform( model, writer, context ) {
|
|
|
699
722
|
const matrix = model.matrix;
|
|
700
723
|
const geometry = model.geometry;
|
|
701
724
|
const material = model.material;
|
|
725
|
+
const camera = model.camera;
|
|
702
726
|
const name = model.name;
|
|
703
727
|
const transform = buildMatrix( matrix );
|
|
704
728
|
|
|
705
|
-
// console.log(model.name, model.getPath());
|
|
706
|
-
|
|
707
729
|
if ( matrix.determinant() < 0 ) {
|
|
708
730
|
|
|
709
731
|
console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', path );
|
|
@@ -712,6 +734,8 @@ export function buildXform( model, writer, context ) {
|
|
|
712
734
|
|
|
713
735
|
if ( geometry )
|
|
714
736
|
writer.beginBlock( `def Xform "${name}" (prepend references = @./geometries/Geometry_${geometry.id}.usd@</Geometry>)` );
|
|
737
|
+
else if ( camera )
|
|
738
|
+
writer.beginBlock( `def Camera "${name}"` );
|
|
715
739
|
else
|
|
716
740
|
writer.beginBlock( `def Xform "${name}"` );
|
|
717
741
|
|
|
@@ -719,6 +743,29 @@ export function buildXform( model, writer, context ) {
|
|
|
719
743
|
writer.appendLine( `rel material:binding = </Materials/Material_${material.id}>` );
|
|
720
744
|
writer.appendLine( `matrix4d xformOp:transform = ${transform}` );
|
|
721
745
|
writer.appendLine( 'uniform token[] xformOpOrder = ["xformOp:transform"]' );
|
|
746
|
+
|
|
747
|
+
if ( camera ) {
|
|
748
|
+
|
|
749
|
+
if ( camera.isOrthographicCamera ) {
|
|
750
|
+
|
|
751
|
+
writer.appendLine(`float2 clippingRange = (${camera.near}, ${camera.far})`);
|
|
752
|
+
writer.appendLine(`float horizontalAperture = ${(( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10).toPrecision( PRECISION )}`);
|
|
753
|
+
writer.appendLine(`float verticalAperture = ${(( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10).toPrecision( PRECISION )}`);
|
|
754
|
+
writer.appendLine(`token projection = "orthographic"`);
|
|
755
|
+
|
|
756
|
+
} else {
|
|
757
|
+
|
|
758
|
+
writer.appendLine(`float2 clippingRange = (${camera.near.toPrecision( PRECISION )}, ${camera.far.toPrecision( PRECISION )})`);
|
|
759
|
+
writer.appendLine(`float focalLength = ${camera.getFocalLength().toPrecision( PRECISION )}`);
|
|
760
|
+
writer.appendLine(`float focusDistance = ${camera.focus.toPrecision( PRECISION )}`);
|
|
761
|
+
writer.appendLine(`float horizontalAperture = ${camera.getFilmWidth().toPrecision( PRECISION )}`);
|
|
762
|
+
writer.appendLine(`token projection = "perspective"`);
|
|
763
|
+
writer.appendLine(`float verticalAperture = ${camera.getFilmHeight().toPrecision( PRECISION )}`);
|
|
764
|
+
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
}
|
|
768
|
+
|
|
722
769
|
if ( model.onSerialize ) {
|
|
723
770
|
|
|
724
771
|
model.onSerialize( writer, context );
|
|
@@ -984,7 +1031,7 @@ function buildMaterial( material, textures ) {
|
|
|
984
1031
|
|
|
985
1032
|
}
|
|
986
1033
|
|
|
987
|
-
if ( material.map
|
|
1034
|
+
if ( material.map?.image ) {
|
|
988
1035
|
|
|
989
1036
|
inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
|
|
990
1037
|
|
|
@@ -1007,7 +1054,7 @@ function buildMaterial( material, textures ) {
|
|
|
1007
1054
|
|
|
1008
1055
|
}
|
|
1009
1056
|
|
|
1010
|
-
if ( material.emissiveMap
|
|
1057
|
+
if ( material.emissiveMap?.image ) {
|
|
1011
1058
|
|
|
1012
1059
|
inputs.push( `${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>` );
|
|
1013
1060
|
|
|
@@ -1019,7 +1066,7 @@ function buildMaterial( material, textures ) {
|
|
|
1019
1066
|
|
|
1020
1067
|
}
|
|
1021
1068
|
|
|
1022
|
-
if ( material.normalMap
|
|
1069
|
+
if ( material.normalMap?.image ) {
|
|
1023
1070
|
|
|
1024
1071
|
inputs.push( `${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>` );
|
|
1025
1072
|
|
|
@@ -1027,7 +1074,7 @@ function buildMaterial( material, textures ) {
|
|
|
1027
1074
|
|
|
1028
1075
|
}
|
|
1029
1076
|
|
|
1030
|
-
if ( material.aoMap
|
|
1077
|
+
if ( material.aoMap?.image ) {
|
|
1031
1078
|
|
|
1032
1079
|
inputs.push( `${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>` );
|
|
1033
1080
|
|
|
@@ -1035,7 +1082,7 @@ function buildMaterial( material, textures ) {
|
|
|
1035
1082
|
|
|
1036
1083
|
}
|
|
1037
1084
|
|
|
1038
|
-
if ( material.roughnessMap
|
|
1085
|
+
if ( material.roughnessMap?.image && material.roughness === 1 ) {
|
|
1039
1086
|
|
|
1040
1087
|
inputs.push( `${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>` );
|
|
1041
1088
|
|
|
@@ -1047,7 +1094,7 @@ function buildMaterial( material, textures ) {
|
|
|
1047
1094
|
|
|
1048
1095
|
}
|
|
1049
1096
|
|
|
1050
|
-
if ( material.metalnessMap
|
|
1097
|
+
if ( material.metalnessMap?.image && material.metalness === 1 ) {
|
|
1051
1098
|
|
|
1052
1099
|
inputs.push( `${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>` );
|
|
1053
1100
|
|
|
@@ -1059,7 +1106,7 @@ function buildMaterial( material, textures ) {
|
|
|
1059
1106
|
|
|
1060
1107
|
}
|
|
1061
1108
|
|
|
1062
|
-
if ( material.alphaMap
|
|
1109
|
+
if ( material.alphaMap?.image ) {
|
|
1063
1110
|
|
|
1064
1111
|
inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>` );
|
|
1065
1112
|
inputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );
|