@needle-tools/three 0.145.4 → 0.146.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 +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 +75 -19
- 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,17 @@ 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';
|
|
16
|
+
import * as fflate from '../libs/fflate.module.js';
|
|
17
17
|
|
|
18
|
+
function makeNameSafe(str){
|
|
19
|
+
return str.replace(/[^a-zA-Z0-9_]/g, '');
|
|
20
|
+
}
|
|
18
21
|
|
|
19
22
|
class USDZDocument {
|
|
20
23
|
|
|
@@ -111,7 +114,7 @@ class USDZDocument {
|
|
|
111
114
|
customLayerData = {
|
|
112
115
|
string creator = "Three.js USDZExporter"
|
|
113
116
|
}
|
|
114
|
-
defaultPrim = "${this.name}"
|
|
117
|
+
defaultPrim = "${makeNameSafe(this.name)}"
|
|
115
118
|
metersPerUnit = 1
|
|
116
119
|
upAxis = "Y"
|
|
117
120
|
startTimeCode = 0
|
|
@@ -131,7 +134,7 @@ export class USDZObject {
|
|
|
131
134
|
|
|
132
135
|
static createEmptyParent( object ) {
|
|
133
136
|
|
|
134
|
-
const emptyParent = new USDZObject( generateUUID(), object.name + '_empty_' + ( this._id ++ ), object.matrix );
|
|
137
|
+
const emptyParent = new USDZObject( MathUtils.generateUUID(), object.name + '_empty_' + ( this._id ++ ), object.matrix );
|
|
135
138
|
const parent = object.parent;
|
|
136
139
|
parent.add( emptyParent );
|
|
137
140
|
emptyParent.add( object );
|
|
@@ -141,13 +144,14 @@ export class USDZObject {
|
|
|
141
144
|
|
|
142
145
|
}
|
|
143
146
|
|
|
144
|
-
constructor( id, name, matrix, mesh, material ) {
|
|
147
|
+
constructor( id, name, matrix, mesh, material, camera ) {
|
|
145
148
|
|
|
146
149
|
this.uuid = id;
|
|
147
|
-
this.name = name;
|
|
150
|
+
this.name = makeNameSafe(name);
|
|
148
151
|
this.matrix = matrix;
|
|
149
152
|
this.geometry = mesh;
|
|
150
153
|
this.material = material;
|
|
154
|
+
this.camera = camera;
|
|
151
155
|
this.parent = null;
|
|
152
156
|
this.children = [];
|
|
153
157
|
this._eventListeners = {};
|
|
@@ -170,7 +174,7 @@ export class USDZObject {
|
|
|
170
174
|
|
|
171
175
|
clone() {
|
|
172
176
|
|
|
173
|
-
const clone = new USDZObject( generateUUID(), this.name, this.matrix, this.mesh, this.material );
|
|
177
|
+
const clone = new USDZObject( MathUtils.generateUUID(), this.name, this.matrix, this.mesh, this.material );
|
|
174
178
|
clone.isDynamic = this.isDynamic;
|
|
175
179
|
return clone;
|
|
176
180
|
|
|
@@ -340,8 +344,13 @@ class USDZExporterContext {
|
|
|
340
344
|
|
|
341
345
|
class USDZExporter {
|
|
342
346
|
|
|
343
|
-
|
|
347
|
+
constructor(){
|
|
348
|
+
this.debug = false;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
async parse( scene, extensions, sceneAnchoringOptions = { ar: { anchoring: { type: 'plane' }, planeAnchoring: { alignment: 'horizontal' } } } ) {
|
|
344
352
|
|
|
353
|
+
this.sceneAnchoringOptions = sceneAnchoringOptions;
|
|
345
354
|
const context = new USDZExporterContext( scene, this, extensions );
|
|
346
355
|
extensions = context.extensions;
|
|
347
356
|
|
|
@@ -368,7 +377,6 @@ class USDZExporter {
|
|
|
368
377
|
|
|
369
378
|
invokeAll( context, 'onAfterHierarchy' );
|
|
370
379
|
|
|
371
|
-
|
|
372
380
|
const header = context.document.buildHeader();
|
|
373
381
|
const final = header + '\n' + context.output;
|
|
374
382
|
|
|
@@ -376,7 +384,8 @@ class USDZExporter {
|
|
|
376
384
|
this.lastUsda = final;
|
|
377
385
|
|
|
378
386
|
// full output file
|
|
379
|
-
|
|
387
|
+
if(this.debug)
|
|
388
|
+
console.log( final );
|
|
380
389
|
|
|
381
390
|
files[ modelFileName ] = fflate.strToU8( final );
|
|
382
391
|
context.output = null;
|
|
@@ -445,6 +454,11 @@ function traverseVisible( object, parentModel, context ) {
|
|
|
445
454
|
const name = getObjectId( object );
|
|
446
455
|
model = new USDZObject( object.uuid, name, object.matrix, geometry, material );
|
|
447
456
|
|
|
457
|
+
} else if ( object.isCamera ) {
|
|
458
|
+
|
|
459
|
+
const name = getObjectId( object );
|
|
460
|
+
model = new USDZObject( object.uuid, name, object.matrix, undefined, undefined, object );
|
|
461
|
+
|
|
448
462
|
} else {
|
|
449
463
|
|
|
450
464
|
const name = getObjectId( object );
|
|
@@ -505,6 +519,22 @@ function parseDocument( context ) {
|
|
|
505
519
|
const writer = new CodeWriter();
|
|
506
520
|
|
|
507
521
|
writer.beginBlock( `def Xform "${context.document.name}"` );
|
|
522
|
+
|
|
523
|
+
writer.beginBlock( `def Scope "Scenes" (
|
|
524
|
+
kind = "sceneLibrary"
|
|
525
|
+
)`);
|
|
526
|
+
|
|
527
|
+
writer.beginBlock(`def Xform "Scene" (
|
|
528
|
+
customData = {
|
|
529
|
+
bool preliminary_collidesWithEnvironment = 0
|
|
530
|
+
string sceneName = "Scene"
|
|
531
|
+
}
|
|
532
|
+
sceneName = "Scene"
|
|
533
|
+
)`);
|
|
534
|
+
|
|
535
|
+
writer.appendLine(`token preliminary:anchoring:type = "${context.exporter.sceneAnchoringOptions.ar.anchoring.type}"`);
|
|
536
|
+
writer.appendLine(`token preliminary:planeAnchoring:alignment = "${context.exporter.sceneAnchoringOptions.ar.planeAnchoring.alignment}"`);
|
|
537
|
+
writer.appendLine();
|
|
508
538
|
|
|
509
539
|
for ( const child of context.document.children ) {
|
|
510
540
|
|
|
@@ -512,6 +542,8 @@ function parseDocument( context ) {
|
|
|
512
542
|
|
|
513
543
|
}
|
|
514
544
|
|
|
545
|
+
writer.closeBlock();
|
|
546
|
+
writer.closeBlock();
|
|
515
547
|
writer.closeBlock();
|
|
516
548
|
|
|
517
549
|
context.output += writer.toString();
|
|
@@ -699,11 +731,10 @@ export function buildXform( model, writer, context ) {
|
|
|
699
731
|
const matrix = model.matrix;
|
|
700
732
|
const geometry = model.geometry;
|
|
701
733
|
const material = model.material;
|
|
734
|
+
const camera = model.camera;
|
|
702
735
|
const name = model.name;
|
|
703
736
|
const transform = buildMatrix( matrix );
|
|
704
737
|
|
|
705
|
-
// console.log(model.name, model.getPath());
|
|
706
|
-
|
|
707
738
|
if ( matrix.determinant() < 0 ) {
|
|
708
739
|
|
|
709
740
|
console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', path );
|
|
@@ -712,6 +743,8 @@ export function buildXform( model, writer, context ) {
|
|
|
712
743
|
|
|
713
744
|
if ( geometry )
|
|
714
745
|
writer.beginBlock( `def Xform "${name}" (prepend references = @./geometries/Geometry_${geometry.id}.usd@</Geometry>)` );
|
|
746
|
+
else if ( camera )
|
|
747
|
+
writer.beginBlock( `def Camera "${name}"` );
|
|
715
748
|
else
|
|
716
749
|
writer.beginBlock( `def Xform "${name}"` );
|
|
717
750
|
|
|
@@ -719,6 +752,29 @@ export function buildXform( model, writer, context ) {
|
|
|
719
752
|
writer.appendLine( `rel material:binding = </Materials/Material_${material.id}>` );
|
|
720
753
|
writer.appendLine( `matrix4d xformOp:transform = ${transform}` );
|
|
721
754
|
writer.appendLine( 'uniform token[] xformOpOrder = ["xformOp:transform"]' );
|
|
755
|
+
|
|
756
|
+
if ( camera ) {
|
|
757
|
+
|
|
758
|
+
if ( camera.isOrthographicCamera ) {
|
|
759
|
+
|
|
760
|
+
writer.appendLine(`float2 clippingRange = (${camera.near}, ${camera.far})`);
|
|
761
|
+
writer.appendLine(`float horizontalAperture = ${(( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10).toPrecision( PRECISION )}`);
|
|
762
|
+
writer.appendLine(`float verticalAperture = ${(( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10).toPrecision( PRECISION )}`);
|
|
763
|
+
writer.appendLine(`token projection = "orthographic"`);
|
|
764
|
+
|
|
765
|
+
} else {
|
|
766
|
+
|
|
767
|
+
writer.appendLine(`float2 clippingRange = (${camera.near.toPrecision( PRECISION )}, ${camera.far.toPrecision( PRECISION )})`);
|
|
768
|
+
writer.appendLine(`float focalLength = ${camera.getFocalLength().toPrecision( PRECISION )}`);
|
|
769
|
+
writer.appendLine(`float focusDistance = ${camera.focus.toPrecision( PRECISION )}`);
|
|
770
|
+
writer.appendLine(`float horizontalAperture = ${camera.getFilmWidth().toPrecision( PRECISION )}`);
|
|
771
|
+
writer.appendLine(`token projection = "perspective"`);
|
|
772
|
+
writer.appendLine(`float verticalAperture = ${camera.getFilmHeight().toPrecision( PRECISION )}`);
|
|
773
|
+
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
}
|
|
777
|
+
|
|
722
778
|
if ( model.onSerialize ) {
|
|
723
779
|
|
|
724
780
|
model.onSerialize( writer, context );
|
|
@@ -984,7 +1040,7 @@ function buildMaterial( material, textures ) {
|
|
|
984
1040
|
|
|
985
1041
|
}
|
|
986
1042
|
|
|
987
|
-
if ( material.map
|
|
1043
|
+
if ( material.map?.image ) {
|
|
988
1044
|
|
|
989
1045
|
inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
|
|
990
1046
|
|
|
@@ -1007,7 +1063,7 @@ function buildMaterial( material, textures ) {
|
|
|
1007
1063
|
|
|
1008
1064
|
}
|
|
1009
1065
|
|
|
1010
|
-
if ( material.emissiveMap
|
|
1066
|
+
if ( material.emissiveMap?.image ) {
|
|
1011
1067
|
|
|
1012
1068
|
inputs.push( `${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>` );
|
|
1013
1069
|
|
|
@@ -1019,7 +1075,7 @@ function buildMaterial( material, textures ) {
|
|
|
1019
1075
|
|
|
1020
1076
|
}
|
|
1021
1077
|
|
|
1022
|
-
if ( material.normalMap
|
|
1078
|
+
if ( material.normalMap?.image ) {
|
|
1023
1079
|
|
|
1024
1080
|
inputs.push( `${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>` );
|
|
1025
1081
|
|
|
@@ -1027,7 +1083,7 @@ function buildMaterial( material, textures ) {
|
|
|
1027
1083
|
|
|
1028
1084
|
}
|
|
1029
1085
|
|
|
1030
|
-
if ( material.aoMap
|
|
1086
|
+
if ( material.aoMap?.image ) {
|
|
1031
1087
|
|
|
1032
1088
|
inputs.push( `${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>` );
|
|
1033
1089
|
|
|
@@ -1035,7 +1091,7 @@ function buildMaterial( material, textures ) {
|
|
|
1035
1091
|
|
|
1036
1092
|
}
|
|
1037
1093
|
|
|
1038
|
-
if ( material.roughnessMap
|
|
1094
|
+
if ( material.roughnessMap?.image && material.roughness === 1 ) {
|
|
1039
1095
|
|
|
1040
1096
|
inputs.push( `${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>` );
|
|
1041
1097
|
|
|
@@ -1047,7 +1103,7 @@ function buildMaterial( material, textures ) {
|
|
|
1047
1103
|
|
|
1048
1104
|
}
|
|
1049
1105
|
|
|
1050
|
-
if ( material.metalnessMap
|
|
1106
|
+
if ( material.metalnessMap?.image && material.metalness === 1 ) {
|
|
1051
1107
|
|
|
1052
1108
|
inputs.push( `${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>` );
|
|
1053
1109
|
|
|
@@ -1059,7 +1115,7 @@ function buildMaterial( material, textures ) {
|
|
|
1059
1115
|
|
|
1060
1116
|
}
|
|
1061
1117
|
|
|
1062
|
-
if ( material.alphaMap
|
|
1118
|
+
if ( material.alphaMap?.image ) {
|
|
1063
1119
|
|
|
1064
1120
|
inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>` );
|
|
1065
1121
|
inputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );
|