@gnsx/three 0.185.16 → 0.186.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/build/three.cjs +10 -82600
- package/build/three.core.js +1303 -728
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function parseMaterialXNodeTree( nodeXML, createNode, addNode, nodePath = '' ) {
|
|
2
|
+
|
|
3
|
+
const materialXNode = createNode( nodeXML, nodePath );
|
|
4
|
+
if ( materialXNode.nodePath ) {
|
|
5
|
+
|
|
6
|
+
addNode( materialXNode );
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
for ( const childNodeXML of nodeXML.children ) {
|
|
11
|
+
|
|
12
|
+
const childMXNode = parseMaterialXNodeTree( childNodeXML, createNode, addNode, materialXNode.nodePath );
|
|
13
|
+
materialXNode.add( childMXNode );
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return materialXNode;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function parseMaterialXText( text, createNode, addNode ) {
|
|
22
|
+
|
|
23
|
+
const rootXML = new DOMParser().parseFromString( text, 'application/xml' ).documentElement;
|
|
24
|
+
return parseMaterialXNodeTree( rootXML, createNode, addNode );
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { parseMaterialXNodeTree, parseMaterialXText };
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
const DEF_MATCH_REGEX = /^def\s+(?:(\w+)\s+)?"?([^"]+)"?$/;
|
|
3
3
|
const VARIANT_STRING_REGEX = /^string\s+(\w+)$/;
|
|
4
4
|
const ATTR_MATCH_REGEX = /^(?:uniform\s+)?(\w+(?:\[\])?)\s+(.+)$/;
|
|
5
|
+
// Preserve metadata blocks without changing the legacy parseText value shape.
|
|
6
|
+
const VALUE_METADATA = Symbol( 'valueMetadata' );
|
|
5
7
|
|
|
6
8
|
// Spec types (must match USDCParser/USDComposer)
|
|
7
9
|
const SpecType = {
|
|
@@ -55,10 +57,12 @@ class USDAParser {
|
|
|
55
57
|
|
|
56
58
|
// see #28631
|
|
57
59
|
|
|
58
|
-
const values = rhs.slice( 0, - 1 );
|
|
60
|
+
const values = rhs.slice( 0, - 1 ).trim();
|
|
59
61
|
target[ lhs ] = values;
|
|
60
62
|
|
|
61
63
|
const meta = {};
|
|
64
|
+
if ( target[ VALUE_METADATA ] === undefined ) target[ VALUE_METADATA ] = {};
|
|
65
|
+
target[ VALUE_METADATA ][ lhs ] = meta;
|
|
62
66
|
stack.push( meta );
|
|
63
67
|
|
|
64
68
|
target = meta;
|
|
@@ -621,9 +625,18 @@ class USDAParser {
|
|
|
621
625
|
const relName = key.slice( 4 );
|
|
622
626
|
const relPath = path + '.' + relName;
|
|
623
627
|
const target = data[ key ].replace( /[<>]/g, '' );
|
|
628
|
+
const metadata = data[ VALUE_METADATA ]?.[ key ];
|
|
629
|
+
const fields = { targetPaths: [ target ] };
|
|
630
|
+
|
|
631
|
+
if ( metadata?.bindMaterialAs !== undefined ) {
|
|
632
|
+
|
|
633
|
+
fields.bindMaterialAs = this._parseString( String( metadata.bindMaterialAs ).trim() );
|
|
634
|
+
|
|
635
|
+
}
|
|
636
|
+
|
|
624
637
|
specsByPath[ relPath ] = {
|
|
625
638
|
specType: SpecType.Relationship,
|
|
626
|
-
fields
|
|
639
|
+
fields
|
|
627
640
|
};
|
|
628
641
|
continue;
|
|
629
642
|
|
|
@@ -656,10 +656,7 @@ class USDCParser {
|
|
|
656
656
|
const reader = this.reader;
|
|
657
657
|
reader.seek( section.start );
|
|
658
658
|
|
|
659
|
-
|
|
660
|
-
// elsewhere in the file are relative to the section start (not the data).
|
|
661
|
-
// So we read the entire section as uint32 values to maintain correct indexing.
|
|
662
|
-
const numStrings = Math.floor( section.size / 4 );
|
|
659
|
+
const numStrings = reader.readUint64();
|
|
663
660
|
this.strings = [];
|
|
664
661
|
|
|
665
662
|
for ( let i = 0; i < numStrings; i ++ ) {
|
|
@@ -1081,6 +1081,47 @@ class USDComposer {
|
|
|
1081
1081
|
|
|
1082
1082
|
}
|
|
1083
1083
|
|
|
1084
|
+
/**
|
|
1085
|
+
* Resolve an attribute's authored value, following connections before using
|
|
1086
|
+
* local fallback values.
|
|
1087
|
+
*/
|
|
1088
|
+
_resolveAttributeValue( path, visited = new Set() ) {
|
|
1089
|
+
|
|
1090
|
+
const cleanPath = String( path ).replace( /<|>/g, '' );
|
|
1091
|
+
if ( visited.has( cleanPath ) ) return undefined;
|
|
1092
|
+
|
|
1093
|
+
const fields = this.specsByPath[ cleanPath ]?.fields;
|
|
1094
|
+
if ( ! fields ) return undefined;
|
|
1095
|
+
|
|
1096
|
+
const nextVisited = new Set( visited );
|
|
1097
|
+
nextVisited.add( cleanPath );
|
|
1098
|
+
|
|
1099
|
+
if ( fields.connectionPaths ) {
|
|
1100
|
+
|
|
1101
|
+
for ( const connectionPath of fields.connectionPaths ) {
|
|
1102
|
+
|
|
1103
|
+
const value = this._resolveAttributeValue( connectionPath, nextVisited );
|
|
1104
|
+
if ( value !== undefined ) return value;
|
|
1105
|
+
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
if ( fields.default !== undefined ) return fields.default;
|
|
1111
|
+
|
|
1112
|
+
const { times, values } = fields.timeSamples || {};
|
|
1113
|
+
if ( times && values && times.length > 0 ) {
|
|
1114
|
+
|
|
1115
|
+
// Find time 0, or use the first available time (rest pose).
|
|
1116
|
+
const index = times.indexOf( 0 );
|
|
1117
|
+
return values[ index >= 0 ? index : 0 ];
|
|
1118
|
+
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
return undefined;
|
|
1122
|
+
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1084
1125
|
/**
|
|
1085
1126
|
* Get attributes for a path from attribute specs.
|
|
1086
1127
|
*/
|
|
@@ -1141,21 +1182,10 @@ class USDComposer {
|
|
|
1141
1182
|
|
|
1142
1183
|
for ( const [ attrName, attrSpec ] of attrMap ) {
|
|
1143
1184
|
|
|
1144
|
-
|
|
1185
|
+
const value = this._resolveAttributeValue( path + '.' + attrName );
|
|
1186
|
+
if ( value !== undefined ) {
|
|
1145
1187
|
|
|
1146
|
-
attrs[ attrName ] =
|
|
1147
|
-
|
|
1148
|
-
} else if ( attrSpec.fields?.timeSamples ) {
|
|
1149
|
-
|
|
1150
|
-
// For animated attributes without default, use the first time sample (rest pose)
|
|
1151
|
-
const { times, values } = attrSpec.fields.timeSamples;
|
|
1152
|
-
if ( times && values && times.length > 0 ) {
|
|
1153
|
-
|
|
1154
|
-
// Find time 0, or use the first available time
|
|
1155
|
-
const idx = times.indexOf( 0 );
|
|
1156
|
-
attrs[ attrName ] = idx >= 0 ? values[ idx ] : values[ 0 ];
|
|
1157
|
-
|
|
1158
|
-
}
|
|
1188
|
+
attrs[ attrName ] = value;
|
|
1159
1189
|
|
|
1160
1190
|
}
|
|
1161
1191
|
|
|
@@ -1634,22 +1664,16 @@ class USDComposer {
|
|
|
1634
1664
|
}
|
|
1635
1665
|
|
|
1636
1666
|
/**
|
|
1637
|
-
* Get material binding
|
|
1667
|
+
* Get the material binding relationship for a prim, including overrides from
|
|
1668
|
+
* active variants.
|
|
1638
1669
|
*/
|
|
1639
|
-
|
|
1670
|
+
_getMaterialBindingSpec( primPath ) {
|
|
1640
1671
|
|
|
1641
1672
|
const attrName = 'material:binding';
|
|
1642
|
-
|
|
1643
|
-
// First check direct path
|
|
1644
1673
|
const directPath = primPath + '.' + attrName;
|
|
1645
|
-
|
|
1646
|
-
if ( directSpec?.fields?.targetPaths?.length > 0 ) {
|
|
1674
|
+
let bindingSpec = this.specsByPath[ directPath ] || null;
|
|
1647
1675
|
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
}
|
|
1651
|
-
|
|
1652
|
-
// Check variant paths at ancestor levels
|
|
1676
|
+
// A variant on any ancestor may override this prim's relationship.
|
|
1653
1677
|
const parts = primPath.split( '/' );
|
|
1654
1678
|
for ( let i = 1; i < parts.length; i ++ ) {
|
|
1655
1679
|
|
|
@@ -1664,7 +1688,7 @@ class USDComposer {
|
|
|
1664
1688
|
|
|
1665
1689
|
if ( overrideSpec?.fields?.targetPaths?.length > 0 ) {
|
|
1666
1690
|
|
|
1667
|
-
|
|
1691
|
+
bindingSpec = overrideSpec;
|
|
1668
1692
|
|
|
1669
1693
|
}
|
|
1670
1694
|
|
|
@@ -1672,7 +1696,35 @@ class USDComposer {
|
|
|
1672
1696
|
|
|
1673
1697
|
}
|
|
1674
1698
|
|
|
1675
|
-
return
|
|
1699
|
+
return bindingSpec;
|
|
1700
|
+
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
/**
|
|
1704
|
+
* Get the resolved material binding target for a prim. Material bindings are
|
|
1705
|
+
* inherited, and an ancestor marked strongerThanDescendants takes precedence
|
|
1706
|
+
* over bindings authored on its descendants.
|
|
1707
|
+
*/
|
|
1708
|
+
_getMaterialBindingTarget( primPath ) {
|
|
1709
|
+
|
|
1710
|
+
const parts = primPath.split( '/' ).filter( Boolean );
|
|
1711
|
+
let resolvedBinding = null;
|
|
1712
|
+
|
|
1713
|
+
for ( let i = 0; i < parts.length; i ++ ) {
|
|
1714
|
+
|
|
1715
|
+
const ancestorPath = '/' + parts.slice( 0, i + 1 ).join( '/' );
|
|
1716
|
+
const bindingSpec = this._getMaterialBindingSpec( ancestorPath );
|
|
1717
|
+
if ( ! bindingSpec?.fields?.targetPaths?.length ) continue;
|
|
1718
|
+
|
|
1719
|
+
if ( ! resolvedBinding || resolvedBinding.fields?.bindMaterialAs !== 'strongerThanDescendants' ) {
|
|
1720
|
+
|
|
1721
|
+
resolvedBinding = bindingSpec;
|
|
1722
|
+
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
return resolvedBinding?.fields.targetPaths[ 0 ] || null;
|
|
1676
1728
|
|
|
1677
1729
|
}
|
|
1678
1730
|
|
|
@@ -2917,21 +2969,7 @@ class USDComposer {
|
|
|
2917
2969
|
*/
|
|
2918
2970
|
_applyMaterialBinding( mesh, primPath ) {
|
|
2919
2971
|
|
|
2920
|
-
|
|
2921
|
-
const bindingPath = primPath + '.material:binding';
|
|
2922
|
-
const bindingSpec = this.specsByPath[ bindingPath ];
|
|
2923
|
-
|
|
2924
|
-
if ( ! bindingSpec ) return;
|
|
2925
|
-
|
|
2926
|
-
let materialPath = null;
|
|
2927
|
-
const targetPaths = bindingSpec.fields?.targetPaths || bindingSpec.fields?.default;
|
|
2928
|
-
|
|
2929
|
-
if ( targetPaths ) {
|
|
2930
|
-
|
|
2931
|
-
materialPath = Array.isArray( targetPaths ) ? targetPaths[ 0 ] : targetPaths;
|
|
2932
|
-
|
|
2933
|
-
}
|
|
2934
|
-
|
|
2972
|
+
let materialPath = this._getMaterialBindingTarget( primPath );
|
|
2935
2973
|
if ( ! materialPath ) return;
|
|
2936
2974
|
|
|
2937
2975
|
// Clean the material path
|
|
@@ -99,112 +99,10 @@ const softLightMix = TSL.Fn( ( [ t, col1, col2 ] ) => {
|
|
|
99
99
|
|
|
100
100
|
} );
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
// single-octave normalized noise — equivalent to fbm with detail = 1
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const maxamp = TSL.float( 0.0 ).toVar();
|
|
107
|
-
const sum = TSL.float( 0.0 ).toVar();
|
|
108
|
-
|
|
109
|
-
const iterations = detail.floor();
|
|
110
|
-
|
|
111
|
-
TSL.Loop( iterations, () => {
|
|
112
|
-
|
|
113
|
-
const t = TSL.mx_noise_float( p.mul( fscale ) );
|
|
114
|
-
sum.addAssign( t.mul( amp ) );
|
|
115
|
-
maxamp.addAssign( amp );
|
|
116
|
-
amp.mulAssign( roughness );
|
|
117
|
-
fscale.mulAssign( lacunarity );
|
|
118
|
-
|
|
119
|
-
} );
|
|
120
|
-
|
|
121
|
-
const rmd = detail.sub( iterations );
|
|
122
|
-
const hasRemainder = rmd.greaterThan( 0.001 );
|
|
123
|
-
|
|
124
|
-
return TSL.select(
|
|
125
|
-
hasRemainder,
|
|
126
|
-
TSL.select(
|
|
127
|
-
useNormalize.equal( 1 ),
|
|
128
|
-
( () => {
|
|
129
|
-
|
|
130
|
-
const t = TSL.mx_noise_float( p.mul( fscale ) );
|
|
131
|
-
const sum2 = sum.add( t.mul( amp ) );
|
|
132
|
-
const maxamp2 = maxamp.add( amp );
|
|
133
|
-
const normalizedSum = sum.div( maxamp ).mul( 0.5 ).add( 0.5 );
|
|
134
|
-
const normalizedSum2 = sum2.div( maxamp2 ).mul( 0.5 ).add( 0.5 );
|
|
135
|
-
return TSL.mix( normalizedSum, normalizedSum2, rmd );
|
|
136
|
-
|
|
137
|
-
} )(),
|
|
138
|
-
( () => {
|
|
139
|
-
|
|
140
|
-
const t = TSL.mx_noise_float( p.mul( fscale ) );
|
|
141
|
-
const sum2 = sum.add( t.mul( amp ) );
|
|
142
|
-
return TSL.mix( sum, sum2, rmd );
|
|
143
|
-
|
|
144
|
-
} )()
|
|
145
|
-
),
|
|
146
|
-
TSL.select(
|
|
147
|
-
useNormalize.equal( 1 ),
|
|
148
|
-
sum.div( maxamp ).mul( 0.5 ).add( 0.5 ),
|
|
149
|
-
sum
|
|
150
|
-
)
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
} );
|
|
154
|
-
|
|
155
|
-
const noiseFbm3d = TSL.Fn( ( [ p, detail, roughness, lacunarity, useNormalize ] ) => {
|
|
156
|
-
|
|
157
|
-
const fscale = TSL.float( 1.0 ).toVar();
|
|
158
|
-
|
|
159
|
-
const amp = TSL.float( 1.0 ).toVar();
|
|
160
|
-
const maxamp = TSL.float( 0.0 ).toVar();
|
|
161
|
-
const sum = TSL.vec3( 0.0 ).toVar();
|
|
162
|
-
|
|
163
|
-
const iterations = detail.floor();
|
|
164
|
-
|
|
165
|
-
TSL.Loop( iterations, () => {
|
|
166
|
-
|
|
167
|
-
const t = TSL.mx_noise_vec3( p.mul( fscale ) );
|
|
168
|
-
sum.addAssign( t.mul( amp ) );
|
|
169
|
-
maxamp.addAssign( amp );
|
|
170
|
-
amp.mulAssign( roughness );
|
|
171
|
-
fscale.mulAssign( lacunarity );
|
|
172
|
-
|
|
173
|
-
} );
|
|
174
|
-
|
|
175
|
-
const rmd = detail.sub( iterations );
|
|
176
|
-
const hasRemainder = rmd.greaterThan( 0.001 );
|
|
177
|
-
|
|
178
|
-
return TSL.select(
|
|
179
|
-
hasRemainder,
|
|
180
|
-
TSL.select(
|
|
181
|
-
useNormalize.equal( 1 ),
|
|
182
|
-
( () => {
|
|
183
|
-
|
|
184
|
-
const t = TSL.mx_noise_vec3( p.mul( fscale ) );
|
|
185
|
-
const sum2 = sum.add( t.mul( amp ) );
|
|
186
|
-
const maxamp2 = maxamp.add( amp );
|
|
187
|
-
const normalizedSum = sum.div( maxamp ).mul( 0.5 ).add( 0.5 );
|
|
188
|
-
const normalizedSum2 = sum2.div( maxamp2 ).mul( 0.5 ).add( 0.5 );
|
|
189
|
-
return TSL.mix( normalizedSum, normalizedSum2, rmd );
|
|
190
|
-
|
|
191
|
-
} )(),
|
|
192
|
-
( () => {
|
|
193
|
-
|
|
194
|
-
const t = TSL.mx_noise_vec3( p.mul( fscale ) );
|
|
195
|
-
const sum2 = sum.add( t.mul( amp ) );
|
|
196
|
-
return TSL.mix( sum, sum2, rmd );
|
|
197
|
-
|
|
198
|
-
} )()
|
|
199
|
-
),
|
|
200
|
-
TSL.select(
|
|
201
|
-
useNormalize.equal( 1 ),
|
|
202
|
-
sum.div( maxamp ).mul( 0.5 ).add( 0.5 ),
|
|
203
|
-
sum
|
|
204
|
-
)
|
|
205
|
-
);
|
|
206
|
-
|
|
207
|
-
} );
|
|
104
|
+
const noise1Norm = TSL.Fn( ( [ p ] ) => TSL.mx_noise_float( p ).mul( 0.5 ).add( 0.5 ) );
|
|
105
|
+
const noise3Norm = TSL.Fn( ( [ p ] ) => TSL.mx_noise_vec3( p ).mul( 0.5 ).add( 0.5 ) );
|
|
208
106
|
|
|
209
107
|
const woodCenter = TSL.Fn( ( [ p, centerSize ] ) => {
|
|
210
108
|
|
|
@@ -218,7 +116,7 @@ const woodCenter = TSL.Fn( ( [ p, centerSize ] ) => {
|
|
|
218
116
|
const spaceWarp = TSL.Fn( ( [ p, warpStrength, xyScale, zScale ] ) => {
|
|
219
117
|
|
|
220
118
|
const combinedXyz = TSL.vec3( xyScale, xyScale, zScale ).mul( p );
|
|
221
|
-
const noise =
|
|
119
|
+
const noise = noise3Norm( combinedXyz.mul( 1.6 * 1.5 ) ).sub( 0.5 ).mul( warpStrength );
|
|
222
120
|
const pXy = p.mul( TSL.vec3( 1, 1, 0 ) );
|
|
223
121
|
const normalizedXy = pXy.normalize();
|
|
224
122
|
const warp = noise.mul( normalizedXy ).add( pXy );
|
|
@@ -229,7 +127,7 @@ const spaceWarp = TSL.Fn( ( [ p, warpStrength, xyScale, zScale ] ) => {
|
|
|
229
127
|
|
|
230
128
|
const woodRings = TSL.Fn( ( [ w, ringThickness, ringBias, ringSizeVariance, ringVarianceScale, barkThickness ] ) => {
|
|
231
129
|
|
|
232
|
-
const rings =
|
|
130
|
+
const rings = noise1Norm( w.mul( ringVarianceScale ) ).mul( ringSizeVariance ).add( w ).mul( ringThickness ).fract().mul( barkThickness );
|
|
233
131
|
|
|
234
132
|
const sharpRings = TSL.min( mapRange( rings, 0, ringBias, 0, 1, TSL.bool( true ) ), mapRange( rings, ringBias, 1, 1, 0, TSL.bool( true ) ) );
|
|
235
133
|
|
|
@@ -246,7 +144,7 @@ const woodDetail = TSL.Fn( ( [ warp, p, y, splotchScale ] ) => {
|
|
|
246
144
|
const combinedXyz = TSL.vec3( radialCoords.sin(), y, radialCoords.cos().mul( p.z ) );
|
|
247
145
|
const scaled = TSL.vec3( 0.1, 1.19, 0.05 ).mul( combinedXyz );
|
|
248
146
|
|
|
249
|
-
return
|
|
147
|
+
return noise1Norm( scaled.mul( splotchScale ) );
|
|
250
148
|
|
|
251
149
|
} );
|
|
252
150
|
|
|
@@ -223,7 +223,7 @@ class RollerCoasterGeometry extends BufferGeometry {
|
|
|
223
223
|
|
|
224
224
|
let headingChange = Math.atan2( sample2.x, sample2.z ) - Math.atan2( sample1.x, sample1.z );
|
|
225
225
|
if ( headingChange > Math.PI ) headingChange -= Math.PI * 2;
|
|
226
|
-
if ( headingChange < -Math.PI ) headingChange += Math.PI * 2;
|
|
226
|
+
if ( headingChange < - Math.PI ) headingChange += Math.PI * 2;
|
|
227
227
|
|
|
228
228
|
quaternion.premultiply( rollQuaternion.setFromAxisAngle( forward, - Math.atan( headingChange * 8 ) * 0.5 ) );
|
|
229
229
|
|
|
@@ -398,7 +398,7 @@ class RollerCoasterLiftersGeometry extends BufferGeometry {
|
|
|
398
398
|
|
|
399
399
|
let headingChange = Math.atan2( sample2.x, sample2.z ) - Math.atan2( sample1.x, sample1.z );
|
|
400
400
|
if ( headingChange > Math.PI ) headingChange -= Math.PI * 2;
|
|
401
|
-
if ( headingChange < -Math.PI ) headingChange += Math.PI * 2;
|
|
401
|
+
if ( headingChange < - Math.PI ) headingChange += Math.PI * 2;
|
|
402
402
|
|
|
403
403
|
bankedQuaternion.copy( quaternion );
|
|
404
404
|
rollQuaternion.setFromAxisAngle( tangent, - Math.atan( headingChange * 8 ) * 0.5 );
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Stéphane GINIER
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|