@needle-tools/three 0.145.2 → 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 +3559 -6924
- package/build/three.js +3559 -6924
- package/build/three.min.js +1 -2
- package/build/three.module.js +732 -339
- 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 +94 -28
- 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/WebGLCubeUVMaps.js +1 -1
- 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 );
|
|
@@ -783,9 +830,14 @@ function buildMesh( geometry ) {
|
|
|
783
830
|
interpolation = "vertex"
|
|
784
831
|
)
|
|
785
832
|
point3f[] points = [${buildVector3Array( attributes.position, count )}]
|
|
786
|
-
|
|
833
|
+
${attributes.uv ?
|
|
834
|
+
`float2[] primvars:st = [${buildVector2Array( attributes.uv, count )}] (
|
|
787
835
|
interpolation = "vertex"
|
|
788
|
-
)
|
|
836
|
+
)` : '' }
|
|
837
|
+
${attributes.uv2 ?
|
|
838
|
+
`float2[] primvars:st2 = [${buildVector2Array( attributes.uv2, count )}] (
|
|
839
|
+
interpolation = "vertex"
|
|
840
|
+
)` : '' }
|
|
789
841
|
uniform token subdivisionScheme = "none"
|
|
790
842
|
}
|
|
791
843
|
`;
|
|
@@ -934,26 +986,31 @@ function buildMaterial( material, textures ) {
|
|
|
934
986
|
}
|
|
935
987
|
|
|
936
988
|
textures[ id ] = texture;
|
|
989
|
+
const uvReader = mapType == 'occlusion' ? 'uvReader_st2' : 'uvReader_st';
|
|
990
|
+
|
|
991
|
+
const needsTextureTransform = ( repeat.x != 1 || repeat.y != 1 || offset.x != 0 || offset.y != 0 );
|
|
992
|
+
const textureTransformInput = `</Materials/Material_${material.id}/${uvReader}.outputs:result>`;
|
|
993
|
+
const textureTransformOutput = `</Materials/Material_${material.id}/Transform2d_${mapType}.outputs:result>`;
|
|
937
994
|
|
|
938
995
|
return `
|
|
939
|
-
def Shader "Transform2d_${mapType}" (
|
|
996
|
+
${needsTextureTransform ? `def Shader "Transform2d_${mapType}" (
|
|
940
997
|
sdrMetadata = {
|
|
941
998
|
string role = "math"
|
|
942
999
|
}
|
|
943
1000
|
)
|
|
944
1001
|
{
|
|
945
1002
|
uniform token info:id = "UsdTransform2d"
|
|
946
|
-
float2 inputs:in.connect =
|
|
1003
|
+
float2 inputs:in.connect = ${textureTransformInput}
|
|
947
1004
|
float2 inputs:scale = ${buildVector2( repeat )}
|
|
948
1005
|
float2 inputs:translation = ${buildVector2( offset )}
|
|
949
1006
|
float2 outputs:result
|
|
950
1007
|
}
|
|
951
|
-
|
|
952
|
-
|
|
1008
|
+
` : '' }
|
|
1009
|
+
def Shader "Texture_${texture.id}_${mapType}"
|
|
953
1010
|
{
|
|
954
1011
|
uniform token info:id = "UsdUVTexture"
|
|
955
1012
|
asset inputs:file = @textures/Texture_${id}.${isRGBA ? 'png' : 'jpg'}@
|
|
956
|
-
float2 inputs:st.connect =
|
|
1013
|
+
float2 inputs:st.connect = ${needsTextureTransform ? textureTransformOutput : textureTransformInput}
|
|
957
1014
|
float4 inputs:scale = (${color ? color.r + ', ' + color.g + ', ' + color.b : '1, 1, 1'}, ${opacity ? opacity : '1'})
|
|
958
1015
|
token inputs:wrapS = "${wrapS}"
|
|
959
1016
|
token inputs:wrapT = "${wrapT}"
|
|
@@ -966,13 +1023,15 @@ function buildMaterial( material, textures ) {
|
|
|
966
1023
|
|
|
967
1024
|
}
|
|
968
1025
|
|
|
1026
|
+
const effectiveOpacity = (material.transparent || material.alphaTest) ? material.opacity : 1;
|
|
1027
|
+
|
|
969
1028
|
if ( material.side === DoubleSide ) {
|
|
970
1029
|
|
|
971
1030
|
console.warn( 'THREE.USDZExporter: USDZ does not support double sided materials', material );
|
|
972
1031
|
|
|
973
1032
|
}
|
|
974
1033
|
|
|
975
|
-
if ( material.map
|
|
1034
|
+
if ( material.map?.image ) {
|
|
976
1035
|
|
|
977
1036
|
inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
|
|
978
1037
|
|
|
@@ -987,7 +1046,7 @@ function buildMaterial( material, textures ) {
|
|
|
987
1046
|
|
|
988
1047
|
}
|
|
989
1048
|
|
|
990
|
-
samplers.push( buildTexture( material.map, 'diffuse', material.color,
|
|
1049
|
+
samplers.push( buildTexture( material.map, 'diffuse', material.color, effectiveOpacity ) );
|
|
991
1050
|
|
|
992
1051
|
} else {
|
|
993
1052
|
|
|
@@ -995,7 +1054,7 @@ function buildMaterial( material, textures ) {
|
|
|
995
1054
|
|
|
996
1055
|
}
|
|
997
1056
|
|
|
998
|
-
if ( material.emissiveMap
|
|
1057
|
+
if ( material.emissiveMap?.image ) {
|
|
999
1058
|
|
|
1000
1059
|
inputs.push( `${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>` );
|
|
1001
1060
|
|
|
@@ -1007,7 +1066,7 @@ function buildMaterial( material, textures ) {
|
|
|
1007
1066
|
|
|
1008
1067
|
}
|
|
1009
1068
|
|
|
1010
|
-
if ( material.normalMap
|
|
1069
|
+
if ( material.normalMap?.image ) {
|
|
1011
1070
|
|
|
1012
1071
|
inputs.push( `${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>` );
|
|
1013
1072
|
|
|
@@ -1015,7 +1074,7 @@ function buildMaterial( material, textures ) {
|
|
|
1015
1074
|
|
|
1016
1075
|
}
|
|
1017
1076
|
|
|
1018
|
-
if ( material.aoMap
|
|
1077
|
+
if ( material.aoMap?.image ) {
|
|
1019
1078
|
|
|
1020
1079
|
inputs.push( `${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>` );
|
|
1021
1080
|
|
|
@@ -1023,7 +1082,7 @@ function buildMaterial( material, textures ) {
|
|
|
1023
1082
|
|
|
1024
1083
|
}
|
|
1025
1084
|
|
|
1026
|
-
if ( material.roughnessMap
|
|
1085
|
+
if ( material.roughnessMap?.image && material.roughness === 1 ) {
|
|
1027
1086
|
|
|
1028
1087
|
inputs.push( `${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>` );
|
|
1029
1088
|
|
|
@@ -1035,7 +1094,7 @@ function buildMaterial( material, textures ) {
|
|
|
1035
1094
|
|
|
1036
1095
|
}
|
|
1037
1096
|
|
|
1038
|
-
if ( material.metalnessMap
|
|
1097
|
+
if ( material.metalnessMap?.image && material.metalness === 1 ) {
|
|
1039
1098
|
|
|
1040
1099
|
inputs.push( `${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>` );
|
|
1041
1100
|
|
|
@@ -1047,7 +1106,7 @@ function buildMaterial( material, textures ) {
|
|
|
1047
1106
|
|
|
1048
1107
|
}
|
|
1049
1108
|
|
|
1050
|
-
if ( material.alphaMap
|
|
1109
|
+
if ( material.alphaMap?.image ) {
|
|
1051
1110
|
|
|
1052
1111
|
inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>` );
|
|
1053
1112
|
inputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );
|
|
@@ -1056,7 +1115,7 @@ function buildMaterial( material, textures ) {
|
|
|
1056
1115
|
|
|
1057
1116
|
} else {
|
|
1058
1117
|
|
|
1059
|
-
inputs.push( `${pad}float inputs:opacity = ${
|
|
1118
|
+
inputs.push( `${pad}float inputs:opacity = ${effectiveOpacity}` );
|
|
1060
1119
|
|
|
1061
1120
|
}
|
|
1062
1121
|
|
|
@@ -1080,12 +1139,19 @@ ${inputs.join( '\n' )}
|
|
|
1080
1139
|
}
|
|
1081
1140
|
|
|
1082
1141
|
token outputs:surface.connect = </Materials/Material_${material.id}/PreviewSurface.outputs:surface>
|
|
1083
|
-
token inputs:frame:stPrimvarName = "st"
|
|
1084
1142
|
|
|
1085
1143
|
def Shader "uvReader_st"
|
|
1086
1144
|
{
|
|
1087
1145
|
uniform token info:id = "UsdPrimvarReader_float2"
|
|
1088
|
-
token inputs:varname
|
|
1146
|
+
token inputs:varname = "st"
|
|
1147
|
+
float2 inputs:fallback = (0.0, 0.0)
|
|
1148
|
+
float2 outputs:result
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
def Shader "uvReader_st2"
|
|
1152
|
+
{
|
|
1153
|
+
uniform token info:id = "UsdPrimvarReader_float2"
|
|
1154
|
+
token inputs:varname = "st2"
|
|
1089
1155
|
float2 inputs:fallback = (0.0, 0.0)
|
|
1090
1156
|
float2 outputs:result
|
|
1091
1157
|
}
|