super-three 0.181.0 → 0.184.0
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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -281,7 +281,7 @@ class TrackballControls extends Controls {
|
|
|
281
281
|
this.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );
|
|
282
282
|
this.domElement.addEventListener( 'contextmenu', this._onContextMenu );
|
|
283
283
|
|
|
284
|
-
this.domElement.style.touchAction = 'none'; //
|
|
284
|
+
this.domElement.style.touchAction = 'none'; // Disable touch scroll
|
|
285
285
|
|
|
286
286
|
}
|
|
287
287
|
|
|
@@ -291,13 +291,13 @@ class TrackballControls extends Controls {
|
|
|
291
291
|
window.removeEventListener( 'keyup', this._onKeyUp );
|
|
292
292
|
|
|
293
293
|
this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
|
|
294
|
-
this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
|
|
295
|
-
this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
|
|
294
|
+
this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
|
|
295
|
+
this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
|
|
296
296
|
this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
|
|
297
297
|
this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
|
|
298
298
|
this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
|
|
299
299
|
|
|
300
|
-
this.domElement.style.touchAction = '
|
|
300
|
+
this.domElement.style.touchAction = ''; // Restore touch scroll
|
|
301
301
|
|
|
302
302
|
}
|
|
303
303
|
|
|
@@ -660,8 +660,8 @@ function onPointerDown( event ) {
|
|
|
660
660
|
|
|
661
661
|
this.domElement.setPointerCapture( event.pointerId );
|
|
662
662
|
|
|
663
|
-
this.domElement.addEventListener( 'pointermove', this._onPointerMove );
|
|
664
|
-
this.domElement.addEventListener( 'pointerup', this._onPointerUp );
|
|
663
|
+
this.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
|
|
664
|
+
this.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
|
|
665
665
|
|
|
666
666
|
}
|
|
667
667
|
|
|
@@ -719,8 +719,8 @@ function onPointerUp( event ) {
|
|
|
719
719
|
|
|
720
720
|
this.domElement.releasePointerCapture( event.pointerId );
|
|
721
721
|
|
|
722
|
-
this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
|
|
723
|
-
this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
|
|
722
|
+
this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
|
|
723
|
+
this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
|
|
724
724
|
|
|
725
725
|
}
|
|
726
726
|
|
|
@@ -251,6 +251,33 @@ class TransformControls extends Controls {
|
|
|
251
251
|
*/
|
|
252
252
|
defineProperty( 'showZ', true );
|
|
253
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Whether the xy-plane helper should be visible or not.
|
|
256
|
+
*
|
|
257
|
+
* @name TransformControls#showXY
|
|
258
|
+
* @type {boolean}
|
|
259
|
+
* @default true
|
|
260
|
+
*/
|
|
261
|
+
defineProperty( 'showXY', true );
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Whether the yz-plane helper should be visible or not.
|
|
265
|
+
*
|
|
266
|
+
* @name TransformControls#showYZ
|
|
267
|
+
* @type {boolean}
|
|
268
|
+
* @default true
|
|
269
|
+
*/
|
|
270
|
+
defineProperty( 'showYZ', true );
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Whether the xz-axis helper should be visible or not.
|
|
274
|
+
*
|
|
275
|
+
* @name TransformControls#showXZ
|
|
276
|
+
* @type {boolean}
|
|
277
|
+
* @default true
|
|
278
|
+
*/
|
|
279
|
+
defineProperty( 'showXZ', true );
|
|
280
|
+
|
|
254
281
|
/**
|
|
255
282
|
* The minimum allowed X position during translation.
|
|
256
283
|
*
|
|
@@ -373,7 +400,7 @@ class TransformControls extends Controls {
|
|
|
373
400
|
this.domElement.addEventListener( 'pointermove', this._onPointerHover );
|
|
374
401
|
this.domElement.addEventListener( 'pointerup', this._onPointerUp );
|
|
375
402
|
|
|
376
|
-
this.domElement.style.touchAction = 'none'; //
|
|
403
|
+
this.domElement.style.touchAction = 'none'; // Disable touch scroll
|
|
377
404
|
|
|
378
405
|
}
|
|
379
406
|
|
|
@@ -384,7 +411,7 @@ class TransformControls extends Controls {
|
|
|
384
411
|
this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
|
|
385
412
|
this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
|
|
386
413
|
|
|
387
|
-
this.domElement.style.touchAction = '
|
|
414
|
+
this.domElement.style.touchAction = ''; // Restore touch scroll
|
|
388
415
|
|
|
389
416
|
}
|
|
390
417
|
|
|
@@ -1784,6 +1811,11 @@ class TransformControlsGizmo extends Object3D {
|
|
|
1784
1811
|
handle.visible = handle.visible && ( handle.name.indexOf( 'Z' ) === - 1 || this.showZ );
|
|
1785
1812
|
handle.visible = handle.visible && ( handle.name.indexOf( 'E' ) === - 1 || ( this.showX && this.showY && this.showZ ) );
|
|
1786
1813
|
|
|
1814
|
+
// Hide disabled plane helpers
|
|
1815
|
+
handle.visible = handle.visible && ( handle.name.indexOf( 'XY' ) === - 1 || this.showXY );
|
|
1816
|
+
handle.visible = handle.visible && ( handle.name.indexOf( 'YZ' ) === - 1 || this.showYZ );
|
|
1817
|
+
handle.visible = handle.visible && ( handle.name.indexOf( 'XZ' ) === - 1 || this.showXZ );
|
|
1818
|
+
|
|
1787
1819
|
// highlight selected axis
|
|
1788
1820
|
|
|
1789
1821
|
handle.material._color = handle.material._color || handle.material.color.clone();
|
package/examples/jsm/csm/CSM.js
CHANGED
|
@@ -13,6 +13,7 @@ import { CSMShader } from './CSMShader.js';
|
|
|
13
13
|
const _cameraToLightMatrix = new Matrix4();
|
|
14
14
|
const _lightSpaceFrustum = new CSMFrustum( { webGL: true } );
|
|
15
15
|
const _center = new Vector3();
|
|
16
|
+
const _origin = new Vector3();
|
|
16
17
|
const _bbox = new Box3();
|
|
17
18
|
const _uniformArray = [];
|
|
18
19
|
const _logArray = [];
|
|
@@ -367,7 +368,7 @@ export class CSM {
|
|
|
367
368
|
|
|
368
369
|
// for each frustum we need to find its min-max box aligned with the light orientation
|
|
369
370
|
// the position in _lightOrientationMatrix does not matter, as we transform there and back
|
|
370
|
-
_lightOrientationMatrix.lookAt(
|
|
371
|
+
_lightOrientationMatrix.lookAt( _origin, this.lightDirection, _up );
|
|
371
372
|
_lightOrientationMatrixInverse.copy( _lightOrientationMatrix ).invert();
|
|
372
373
|
|
|
373
374
|
for ( let i = 0; i < frustums.length; i ++ ) {
|
|
@@ -574,8 +574,12 @@ class CSMShadowNode extends ShadowBaseNode {
|
|
|
574
574
|
const light = this.lights[ i ];
|
|
575
575
|
const parent = light.parent;
|
|
576
576
|
|
|
577
|
-
|
|
578
|
-
|
|
577
|
+
if ( parent !== null ) {
|
|
578
|
+
|
|
579
|
+
parent.remove( light.target );
|
|
580
|
+
parent.remove( light );
|
|
581
|
+
|
|
582
|
+
}
|
|
579
583
|
|
|
580
584
|
}
|
|
581
585
|
|
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LinearFilter,
|
|
3
|
+
MathUtils,
|
|
3
4
|
Matrix3,
|
|
4
5
|
NearestFilter,
|
|
6
|
+
PerspectiveCamera,
|
|
5
7
|
RGBAFormat,
|
|
6
8
|
ShaderMaterial,
|
|
7
|
-
|
|
9
|
+
Vector3,
|
|
8
10
|
WebGLRenderTarget
|
|
9
11
|
} from 'three';
|
|
10
12
|
import { FullScreenQuad } from '../postprocessing/Pass.js';
|
|
13
|
+
import { frameCorners } from '../utils/CameraUtils.js';
|
|
14
|
+
|
|
15
|
+
const _cameraL = /*@__PURE__*/ new PerspectiveCamera();
|
|
16
|
+
const _cameraR = /*@__PURE__*/ new PerspectiveCamera();
|
|
17
|
+
|
|
18
|
+
// Reusable vectors for screen corner calculations
|
|
19
|
+
const _eyeL = /*@__PURE__*/ new Vector3();
|
|
20
|
+
const _eyeR = /*@__PURE__*/ new Vector3();
|
|
21
|
+
const _screenCenter = /*@__PURE__*/ new Vector3();
|
|
22
|
+
const _screenBottomLeft = /*@__PURE__*/ new Vector3();
|
|
23
|
+
const _screenBottomRight = /*@__PURE__*/ new Vector3();
|
|
24
|
+
const _screenTopLeft = /*@__PURE__*/ new Vector3();
|
|
25
|
+
const _right = /*@__PURE__*/ new Vector3();
|
|
26
|
+
const _up = /*@__PURE__*/ new Vector3();
|
|
27
|
+
const _forward = /*@__PURE__*/ new Vector3();
|
|
11
28
|
|
|
12
29
|
/**
|
|
13
|
-
* A class that creates an anaglyph effect
|
|
30
|
+
* A class that creates an anaglyph effect using physically-correct
|
|
31
|
+
* off-axis stereo projection.
|
|
32
|
+
*
|
|
33
|
+
* This implementation uses CameraUtils.frameCorners() to align stereo
|
|
34
|
+
* camera frustums to a virtual screen plane, providing accurate depth
|
|
35
|
+
* perception with zero parallax at the plane distance.
|
|
14
36
|
*
|
|
15
37
|
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
16
38
|
* When using {@link WebGPURenderer}, use {@link AnaglyphPassNode}.
|
|
@@ -42,13 +64,38 @@ class AnaglyphEffect {
|
|
|
42
64
|
- 0.00155529, - 0.0184503, 1.2264
|
|
43
65
|
] );
|
|
44
66
|
|
|
45
|
-
|
|
67
|
+
/**
|
|
68
|
+
* The interpupillary distance (eye separation) in world units.
|
|
69
|
+
* Typical human IPD is 0.064 meters (64mm).
|
|
70
|
+
*
|
|
71
|
+
* @type {number}
|
|
72
|
+
* @default 0.064
|
|
73
|
+
*/
|
|
74
|
+
this.eyeSep = 0.064;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The distance in world units from the viewer to the virtual
|
|
78
|
+
* screen plane where zero parallax (screen depth) occurs.
|
|
79
|
+
* Objects at this distance appear at the screen surface.
|
|
80
|
+
* Objects closer appear in front of the screen (negative parallax).
|
|
81
|
+
* Objects further appear behind the screen (positive parallax).
|
|
82
|
+
*
|
|
83
|
+
* The screen dimensions are derived from the camera's FOV and aspect ratio
|
|
84
|
+
* at this distance, ensuring the stereo view matches the camera's field of view.
|
|
85
|
+
*
|
|
86
|
+
* @type {number}
|
|
87
|
+
* @default 0.5
|
|
88
|
+
*/
|
|
89
|
+
this.planeDistance = 0.5;
|
|
46
90
|
|
|
47
91
|
const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };
|
|
48
92
|
|
|
49
93
|
const _renderTargetL = new WebGLRenderTarget( width, height, _params );
|
|
50
94
|
const _renderTargetR = new WebGLRenderTarget( width, height, _params );
|
|
51
95
|
|
|
96
|
+
_cameraL.layers.enable( 1 );
|
|
97
|
+
_cameraR.layers.enable( 2 );
|
|
98
|
+
|
|
52
99
|
const _material = new ShaderMaterial( {
|
|
53
100
|
|
|
54
101
|
uniforms: {
|
|
@@ -141,16 +188,64 @@ class AnaglyphEffect {
|
|
|
141
188
|
|
|
142
189
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
143
190
|
|
|
144
|
-
|
|
145
|
-
|
|
191
|
+
// Get the camera's local coordinate axes from its world matrix
|
|
192
|
+
camera.matrixWorld.extractBasis( _right, _up, _forward );
|
|
193
|
+
_right.normalize();
|
|
194
|
+
_up.normalize();
|
|
195
|
+
_forward.normalize();
|
|
196
|
+
|
|
197
|
+
// Calculate eye positions
|
|
198
|
+
const halfSep = this.eyeSep / 2;
|
|
199
|
+
_eyeL.copy( camera.position ).addScaledVector( _right, - halfSep );
|
|
200
|
+
_eyeR.copy( camera.position ).addScaledVector( _right, halfSep );
|
|
201
|
+
|
|
202
|
+
// Calculate screen center (at planeDistance in front of the camera center)
|
|
203
|
+
_screenCenter.copy( camera.position ).addScaledVector( _forward, - this.planeDistance );
|
|
204
|
+
|
|
205
|
+
// Calculate screen dimensions from camera FOV and aspect ratio
|
|
206
|
+
const halfHeight = this.planeDistance * Math.tan( MathUtils.DEG2RAD * camera.fov / 2 );
|
|
207
|
+
const halfWidth = halfHeight * camera.aspect;
|
|
208
|
+
|
|
209
|
+
// Calculate screen corners
|
|
210
|
+
_screenBottomLeft.copy( _screenCenter )
|
|
211
|
+
.addScaledVector( _right, - halfWidth )
|
|
212
|
+
.addScaledVector( _up, - halfHeight );
|
|
213
|
+
|
|
214
|
+
_screenBottomRight.copy( _screenCenter )
|
|
215
|
+
.addScaledVector( _right, halfWidth )
|
|
216
|
+
.addScaledVector( _up, - halfHeight );
|
|
217
|
+
|
|
218
|
+
_screenTopLeft.copy( _screenCenter )
|
|
219
|
+
.addScaledVector( _right, - halfWidth )
|
|
220
|
+
.addScaledVector( _up, halfHeight );
|
|
221
|
+
|
|
222
|
+
// Set up left eye camera
|
|
223
|
+
_cameraL.position.copy( _eyeL );
|
|
224
|
+
_cameraL.near = camera.near;
|
|
225
|
+
_cameraL.far = camera.far;
|
|
226
|
+
frameCorners( _cameraL, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
|
|
227
|
+
_cameraL.matrixWorld.compose( _cameraL.position, _cameraL.quaternion, _cameraL.scale );
|
|
228
|
+
_cameraL.matrixWorldInverse.copy( _cameraL.matrixWorld ).invert();
|
|
229
|
+
|
|
230
|
+
// Set up right eye camera
|
|
231
|
+
_cameraR.position.copy( _eyeR );
|
|
232
|
+
_cameraR.near = camera.near;
|
|
233
|
+
_cameraR.far = camera.far;
|
|
234
|
+
frameCorners( _cameraR, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
|
|
235
|
+
_cameraR.matrixWorld.compose( _cameraR.position, _cameraR.quaternion, _cameraR.scale );
|
|
236
|
+
_cameraR.matrixWorldInverse.copy( _cameraR.matrixWorld ).invert();
|
|
237
|
+
|
|
238
|
+
// Render left eye
|
|
146
239
|
renderer.setRenderTarget( _renderTargetL );
|
|
147
240
|
renderer.clear();
|
|
148
|
-
renderer.render( scene,
|
|
241
|
+
renderer.render( scene, _cameraL );
|
|
149
242
|
|
|
243
|
+
// Render right eye
|
|
150
244
|
renderer.setRenderTarget( _renderTargetR );
|
|
151
245
|
renderer.clear();
|
|
152
|
-
renderer.render( scene,
|
|
246
|
+
renderer.render( scene, _cameraR );
|
|
153
247
|
|
|
248
|
+
// Composite anaglyph
|
|
154
249
|
renderer.setRenderTarget( null );
|
|
155
250
|
_quad.render( renderer );
|
|
156
251
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BackSide,
|
|
3
|
+
Mesh,
|
|
4
|
+
MeshBasicMaterial,
|
|
5
|
+
SphereGeometry,
|
|
6
|
+
Scene
|
|
7
|
+
} from 'three';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This class represents a scene with a uniform color that can be used as
|
|
11
|
+
* input for {@link PMREMGenerator#fromScene}. The resulting PMREM represents
|
|
12
|
+
* uniform ambient lighting and can be used for Image Based Lighting by
|
|
13
|
+
* assigning it to {@link Scene#environment}.
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* const environment = new ColorEnvironment( 0x00ff00 );
|
|
17
|
+
* const pmremGenerator = new THREE.PMREMGenerator( renderer );
|
|
18
|
+
*
|
|
19
|
+
* const envMap = pmremGenerator.fromScene( environment ).texture;
|
|
20
|
+
* scene.environment = envMap;
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @augments Scene
|
|
24
|
+
* @three_import import { ColorEnvironment } from 'three/addons/environments/ColorEnvironment.js';
|
|
25
|
+
*/
|
|
26
|
+
class ColorEnvironment extends Scene {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new color environment.
|
|
30
|
+
*
|
|
31
|
+
* @param {number|Color} color - The color of the environment.
|
|
32
|
+
*/
|
|
33
|
+
constructor( color = 0xffffff ) {
|
|
34
|
+
|
|
35
|
+
super();
|
|
36
|
+
|
|
37
|
+
this.name = 'ColorEnvironment';
|
|
38
|
+
|
|
39
|
+
const geometry = new SphereGeometry( 1, 16, 16 );
|
|
40
|
+
const material = new MeshBasicMaterial( { color: color, side: BackSide } );
|
|
41
|
+
|
|
42
|
+
this.add( new Mesh( geometry, material ) );
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Frees internal resources. This method should be called
|
|
48
|
+
* when the environment is no longer required.
|
|
49
|
+
*/
|
|
50
|
+
dispose() {
|
|
51
|
+
|
|
52
|
+
this.children[ 0 ].geometry.dispose();
|
|
53
|
+
this.children[ 0 ].material.dispose();
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { ColorEnvironment };
|
|
@@ -90,7 +90,7 @@ function supportedRTT( renderTarget ) {
|
|
|
90
90
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
if ( renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
93
|
+
if ( renderTarget.isCubeRenderTarget || renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
94
94
|
|
|
95
95
|
throw Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );
|
|
96
96
|
|
|
@@ -88,6 +88,7 @@ const KHR_mesh_quantization_ExtraAttrTypes = {
|
|
|
88
88
|
* - KHR_texture_transform
|
|
89
89
|
* - EXT_materials_bump
|
|
90
90
|
* - EXT_mesh_gpu_instancing
|
|
91
|
+
* - EXT_texture_webp
|
|
91
92
|
*
|
|
92
93
|
* The following glTF 2.0 extension is supported by an external user plugin:
|
|
93
94
|
*
|
|
@@ -1533,15 +1534,30 @@ class GLTFWriter {
|
|
|
1533
1534
|
|
|
1534
1535
|
}
|
|
1535
1536
|
|
|
1536
|
-
|
|
1537
|
+
const mimeType = map.userData.mimeType;
|
|
1537
1538
|
|
|
1538
|
-
|
|
1539
|
+
const imageIndex = this.processImage( map.image, map.format, map.flipY, mimeType );
|
|
1539
1540
|
|
|
1540
1541
|
const textureDef = {
|
|
1541
|
-
sampler: this.processSampler( map )
|
|
1542
|
-
source: this.processImage( map.image, map.format, map.flipY, mimeType )
|
|
1542
|
+
sampler: this.processSampler( map )
|
|
1543
1543
|
};
|
|
1544
1544
|
|
|
1545
|
+
if ( mimeType === 'image/webp' ) {
|
|
1546
|
+
|
|
1547
|
+
textureDef.extensions = textureDef.extensions || {};
|
|
1548
|
+
textureDef.extensions[ 'EXT_texture_webp' ] = {
|
|
1549
|
+
source: imageIndex
|
|
1550
|
+
};
|
|
1551
|
+
|
|
1552
|
+
this.extensionsUsed[ 'EXT_texture_webp' ] = true;
|
|
1553
|
+
this.extensionsRequired[ 'EXT_texture_webp' ] = true;
|
|
1554
|
+
|
|
1555
|
+
} else {
|
|
1556
|
+
|
|
1557
|
+
textureDef.source = imageIndex;
|
|
1558
|
+
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1545
1561
|
if ( map.name ) textureDef.name = map.name;
|
|
1546
1562
|
|
|
1547
1563
|
await this._invokeAllAsync( async function ( ext ) {
|
|
@@ -1832,7 +1848,7 @@ class GLTFWriter {
|
|
|
1832
1848
|
const validVertexAttributes =
|
|
1833
1849
|
/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/;
|
|
1834
1850
|
|
|
1835
|
-
if ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;
|
|
1851
|
+
if ( ! validVertexAttributes.test( attributeName ) && ! attributeName.startsWith( '_' ) ) attributeName = '_' + attributeName;
|
|
1836
1852
|
|
|
1837
1853
|
if ( cache.attributes.has( this.getUID( attribute ) ) ) {
|
|
1838
1854
|
|
|
@@ -1852,12 +1868,12 @@ class GLTFWriter {
|
|
|
1852
1868
|
! ( array instanceof Uint8Array ) ) {
|
|
1853
1869
|
|
|
1854
1870
|
console.warn( 'GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.' );
|
|
1855
|
-
modifiedAttribute =
|
|
1871
|
+
modifiedAttribute = GLTFExporter.Utils.toTypedBufferAttribute( attribute, Uint16Array );
|
|
1856
1872
|
|
|
1857
1873
|
} else if ( ( array instanceof Uint32Array || array instanceof Int32Array ) && ! attributeName.startsWith( '_' ) ) {
|
|
1858
1874
|
|
|
1859
1875
|
console.warn( `GLTFExporter: Attribute "${ attributeName }" converted to type FLOAT.` );
|
|
1860
|
-
modifiedAttribute = GLTFExporter.Utils.
|
|
1876
|
+
modifiedAttribute = GLTFExporter.Utils.toTypedBufferAttribute( attribute, Float32Array );
|
|
1861
1877
|
|
|
1862
1878
|
}
|
|
1863
1879
|
|
|
@@ -2355,6 +2371,13 @@ class GLTFWriter {
|
|
|
2355
2371
|
|
|
2356
2372
|
if ( ! json.nodes ) json.nodes = [];
|
|
2357
2373
|
|
|
2374
|
+
// Handle pivot by creating a container node
|
|
2375
|
+
if ( object.pivot !== null ) {
|
|
2376
|
+
|
|
2377
|
+
return await this._processNodeWithPivotAsync( object );
|
|
2378
|
+
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2358
2381
|
const nodeDef = {};
|
|
2359
2382
|
|
|
2360
2383
|
if ( options.trs ) {
|
|
@@ -2451,6 +2474,126 @@ class GLTFWriter {
|
|
|
2451
2474
|
|
|
2452
2475
|
}
|
|
2453
2476
|
|
|
2477
|
+
/**
|
|
2478
|
+
* Process Object3D node with pivot using container approach
|
|
2479
|
+
* @param {THREE.Object3D} object Object3D with pivot
|
|
2480
|
+
* @return {Promise<number>} Index of the container node
|
|
2481
|
+
*/
|
|
2482
|
+
async _processNodeWithPivotAsync( object ) {
|
|
2483
|
+
|
|
2484
|
+
const json = this.json;
|
|
2485
|
+
const options = this.options;
|
|
2486
|
+
const nodeMap = this.nodeMap;
|
|
2487
|
+
|
|
2488
|
+
const pivot = object.pivot;
|
|
2489
|
+
|
|
2490
|
+
// Container node: holds position + pivot offset, rotation, scale
|
|
2491
|
+
// Animations will target this node
|
|
2492
|
+
const containerDef = {};
|
|
2493
|
+
|
|
2494
|
+
const rotation = object.quaternion.toArray();
|
|
2495
|
+
const position = [
|
|
2496
|
+
object.position.x + pivot.x,
|
|
2497
|
+
object.position.y + pivot.y,
|
|
2498
|
+
object.position.z + pivot.z
|
|
2499
|
+
];
|
|
2500
|
+
const scale = object.scale.toArray();
|
|
2501
|
+
|
|
2502
|
+
if ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {
|
|
2503
|
+
|
|
2504
|
+
containerDef.rotation = rotation;
|
|
2505
|
+
|
|
2506
|
+
}
|
|
2507
|
+
|
|
2508
|
+
if ( ! equalArray( position, [ 0, 0, 0 ] ) ) {
|
|
2509
|
+
|
|
2510
|
+
containerDef.translation = position;
|
|
2511
|
+
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
if ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {
|
|
2515
|
+
|
|
2516
|
+
containerDef.scale = scale;
|
|
2517
|
+
|
|
2518
|
+
}
|
|
2519
|
+
|
|
2520
|
+
// Store pivot in extras for round-trip reconstruction
|
|
2521
|
+
containerDef.extras = { pivot: pivot.toArray() };
|
|
2522
|
+
|
|
2523
|
+
if ( object.name !== '' ) containerDef.name = String( object.name );
|
|
2524
|
+
|
|
2525
|
+
this.serializeUserData( object, containerDef );
|
|
2526
|
+
|
|
2527
|
+
const containerIndex = json.nodes.push( containerDef ) - 1;
|
|
2528
|
+
|
|
2529
|
+
// Map original object to container so animations target it
|
|
2530
|
+
nodeMap.set( object, containerIndex );
|
|
2531
|
+
|
|
2532
|
+
// Child node: holds mesh with -pivot offset
|
|
2533
|
+
const childDef = {};
|
|
2534
|
+
|
|
2535
|
+
const childPosition = [ - pivot.x, - pivot.y, - pivot.z ];
|
|
2536
|
+
|
|
2537
|
+
if ( ! equalArray( childPosition, [ 0, 0, 0 ] ) ) {
|
|
2538
|
+
|
|
2539
|
+
childDef.translation = childPosition;
|
|
2540
|
+
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
2544
|
+
|
|
2545
|
+
const meshIndex = await this.processMeshAsync( object );
|
|
2546
|
+
|
|
2547
|
+
if ( meshIndex !== null ) childDef.mesh = meshIndex;
|
|
2548
|
+
|
|
2549
|
+
} else if ( object.isCamera ) {
|
|
2550
|
+
|
|
2551
|
+
childDef.camera = this.processCamera( object );
|
|
2552
|
+
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
if ( object.isSkinnedMesh ) this.skins.push( object );
|
|
2556
|
+
|
|
2557
|
+
const childIndex = json.nodes.push( childDef ) - 1;
|
|
2558
|
+
|
|
2559
|
+
// Build children array for container
|
|
2560
|
+
const containerChildren = [ childIndex ];
|
|
2561
|
+
|
|
2562
|
+
// Process object's children as children of the child node
|
|
2563
|
+
if ( object.children.length > 0 ) {
|
|
2564
|
+
|
|
2565
|
+
const grandchildren = [];
|
|
2566
|
+
|
|
2567
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
2568
|
+
|
|
2569
|
+
const child = object.children[ i ];
|
|
2570
|
+
|
|
2571
|
+
if ( child.visible || options.onlyVisible === false ) {
|
|
2572
|
+
|
|
2573
|
+
const childNodeIndex = await this.processNodeAsync( child );
|
|
2574
|
+
|
|
2575
|
+
if ( childNodeIndex !== null ) grandchildren.push( childNodeIndex );
|
|
2576
|
+
|
|
2577
|
+
}
|
|
2578
|
+
|
|
2579
|
+
}
|
|
2580
|
+
|
|
2581
|
+
if ( grandchildren.length > 0 ) childDef.children = grandchildren;
|
|
2582
|
+
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
containerDef.children = containerChildren;
|
|
2586
|
+
|
|
2587
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
2588
|
+
|
|
2589
|
+
ext.writeNode && ext.writeNode( object, containerDef );
|
|
2590
|
+
|
|
2591
|
+
} );
|
|
2592
|
+
|
|
2593
|
+
return containerIndex;
|
|
2594
|
+
|
|
2595
|
+
}
|
|
2596
|
+
|
|
2454
2597
|
/**
|
|
2455
2598
|
* Process Scene
|
|
2456
2599
|
* @param {Scene} scene Scene to process
|
|
@@ -3538,9 +3681,9 @@ GLTFExporter.Utils = {
|
|
|
3538
3681
|
|
|
3539
3682
|
},
|
|
3540
3683
|
|
|
3541
|
-
|
|
3684
|
+
toTypedBufferAttribute: function ( srcAttribute, TypedArray ) {
|
|
3542
3685
|
|
|
3543
|
-
const dstAttribute = new BufferAttribute( new
|
|
3686
|
+
const dstAttribute = new BufferAttribute( new TypedArray( srcAttribute.count * srcAttribute.itemSize ), srcAttribute.itemSize, false );
|
|
3544
3687
|
|
|
3545
3688
|
if ( ! srcAttribute.normalized && ! srcAttribute.isInterleavedBufferAttribute ) {
|
|
3546
3689
|
|
|
@@ -501,7 +501,6 @@ function buildHierarchy( object, parentNode, materials, usedNames, files, option
|
|
|
501
501
|
function buildXform( object, usedNames ) {
|
|
502
502
|
|
|
503
503
|
const name = getName( object, usedNames );
|
|
504
|
-
const transform = buildMatrix( object.matrix );
|
|
505
504
|
|
|
506
505
|
if ( object.matrix.determinant() < 0 ) {
|
|
507
506
|
|
|
@@ -514,8 +513,28 @@ function buildXform( object, usedNames ) {
|
|
|
514
513
|
|
|
515
514
|
const node = new USDNode( name, 'Xform' );
|
|
516
515
|
|
|
517
|
-
|
|
518
|
-
|
|
516
|
+
if ( object.pivot !== null ) {
|
|
517
|
+
|
|
518
|
+
// Export with pivot using separate transform ops
|
|
519
|
+
const p = object.position;
|
|
520
|
+
const q = object.quaternion;
|
|
521
|
+
const s = object.scale;
|
|
522
|
+
const piv = object.pivot;
|
|
523
|
+
|
|
524
|
+
node.addProperty( `float3 xformOp:translate = (${p.x.toPrecision( PRECISION )}, ${p.y.toPrecision( PRECISION )}, ${p.z.toPrecision( PRECISION )})` );
|
|
525
|
+
node.addProperty( `float3 xformOp:translate:pivot = (${piv.x.toPrecision( PRECISION )}, ${piv.y.toPrecision( PRECISION )}, ${piv.z.toPrecision( PRECISION )})` );
|
|
526
|
+
node.addProperty( `quatf xformOp:orient = (${q.w.toPrecision( PRECISION )}, ${q.x.toPrecision( PRECISION )}, ${q.y.toPrecision( PRECISION )}, ${q.z.toPrecision( PRECISION )})` );
|
|
527
|
+
node.addProperty( `float3 xformOp:scale = (${s.x.toPrecision( PRECISION )}, ${s.y.toPrecision( PRECISION )}, ${s.z.toPrecision( PRECISION )})` );
|
|
528
|
+
node.addProperty( 'uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:translate:pivot", "xformOp:orient", "xformOp:scale", "!invert!xformOp:translate:pivot"]' );
|
|
529
|
+
|
|
530
|
+
} else {
|
|
531
|
+
|
|
532
|
+
// Export as single transform matrix
|
|
533
|
+
const transform = buildMatrix( object.matrix );
|
|
534
|
+
node.addProperty( `matrix4d xformOp:transform = ${transform}` );
|
|
535
|
+
node.addProperty( 'uniform token[] xformOpOrder = ["xformOp:transform"]' );
|
|
536
|
+
|
|
537
|
+
}
|
|
519
538
|
|
|
520
539
|
return node;
|
|
521
540
|
|
|
@@ -35,7 +35,7 @@ class DecalGeometry extends BufferGeometry {
|
|
|
35
35
|
* @param {Mesh} [mesh] - The base mesh the decal should be projected on.
|
|
36
36
|
* @param {Vector3} [position] - The position of the decal projector.
|
|
37
37
|
* @param {Euler} [orientation] - The orientation of the decal projector.
|
|
38
|
-
* @param {Vector3} [size] -
|
|
38
|
+
* @param {Vector3} [size] - The scale of the decal projector.
|
|
39
39
|
*/
|
|
40
40
|
constructor( mesh = new Mesh(), position = new Vector3(), orientation = new Euler(), size = new Vector3( 1, 1, 1 ) ) {
|
|
41
41
|
|
|
@@ -2,6 +2,8 @@ import {
|
|
|
2
2
|
ExtrudeGeometry
|
|
3
3
|
} from 'three';
|
|
4
4
|
|
|
5
|
+
import { Font } from '../loaders/FontLoader.js';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of
|
|
7
9
|
* parameters consisting of a loaded font and extrude settings.
|
|
@@ -60,6 +62,22 @@ class TextGeometry extends ExtrudeGeometry {
|
|
|
60
62
|
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
toJSON() {
|
|
66
|
+
|
|
67
|
+
const data = super.toJSON();
|
|
68
|
+
return data;
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static fromJSON( data ) {
|
|
73
|
+
|
|
74
|
+
const options = data.options;
|
|
75
|
+
|
|
76
|
+
options.font = new Font( options.font.data );
|
|
77
|
+
return new TextGeometry( options.text, options );
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
63
81
|
}
|
|
64
82
|
|
|
65
83
|
/**
|