@gnsx/three 0.185.15 → 0.186.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/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
|
@@ -22,18 +22,16 @@ import { Color } from '../math/Color.js';
|
|
|
22
22
|
import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';
|
|
23
23
|
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
|
24
24
|
import { BoxGeometry } from '../geometries/BoxGeometry.js';
|
|
25
|
-
import { error, warn } from '../utils.js';
|
|
26
25
|
|
|
27
26
|
const LOD_MIN = 4;
|
|
28
27
|
|
|
29
|
-
// The
|
|
28
|
+
// The number of extra mips.
|
|
30
29
|
// Used for scene blur in fromScene() method.
|
|
31
|
-
const
|
|
30
|
+
const EXTRA_LODS = 6;
|
|
32
31
|
|
|
33
|
-
// The
|
|
34
|
-
// samples and exit early, but not recompile the shader.
|
|
32
|
+
// The number of spiral samples per blur pass.
|
|
35
33
|
// Used for scene blur in fromScene() method.
|
|
36
|
-
const
|
|
34
|
+
const BLUR_SAMPLES = 20;
|
|
37
35
|
|
|
38
36
|
// GGX VNDF importance sampling configuration
|
|
39
37
|
const GGX_SAMPLES = 256;
|
|
@@ -46,6 +44,7 @@ let _oldActiveMipmapLevel = 0;
|
|
|
46
44
|
let _oldXrEnabled = false;
|
|
47
45
|
|
|
48
46
|
const _origin = /*@__PURE__*/ new Vector3();
|
|
47
|
+
const _direction = /*@__PURE__*/ new Vector3();
|
|
49
48
|
|
|
50
49
|
/**
|
|
51
50
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -78,7 +77,6 @@ class PMREMGenerator {
|
|
|
78
77
|
this._lodMax = 0;
|
|
79
78
|
this._cubeSize = 0;
|
|
80
79
|
this._sizeLods = [];
|
|
81
|
-
this._sigmas = [];
|
|
82
80
|
this._lodMeshes = [];
|
|
83
81
|
|
|
84
82
|
this._backgroundBox = null;
|
|
@@ -313,7 +311,7 @@ class PMREMGenerator {
|
|
|
313
311
|
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
314
312
|
|
|
315
313
|
const { _lodMax } = this;
|
|
316
|
-
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods
|
|
314
|
+
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods } = _createPlanes( _lodMax ) );
|
|
317
315
|
|
|
318
316
|
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
319
317
|
this._ggxMaterial = _getGGXShader( _lodMax, width, height );
|
|
@@ -534,7 +532,7 @@ class PMREMGenerator {
|
|
|
534
532
|
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
535
533
|
|
|
536
534
|
// Apply blur strength mapping for better quality across the roughness range
|
|
537
|
-
const blurStrength =
|
|
535
|
+
const blurStrength = targetRoughness * 1.25;
|
|
538
536
|
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
539
537
|
|
|
540
538
|
// Calculate viewport position based on output LOD level
|
|
@@ -564,11 +562,9 @@ class PMREMGenerator {
|
|
|
564
562
|
}
|
|
565
563
|
|
|
566
564
|
/**
|
|
567
|
-
* This is a two-pass Gaussian blur for a cubemap.
|
|
568
|
-
*
|
|
569
|
-
* the
|
|
570
|
-
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
571
|
-
* accurate at the poles, but still does a decent job.
|
|
565
|
+
* This is a two-pass Gaussian blur for a cubemap. Each pass importance-samples
|
|
566
|
+
* the Gaussian along a spiral kernel (Golden Angle), which distributes samples
|
|
567
|
+
* isotropically on the sphere (no pole artifacts).
|
|
572
568
|
*
|
|
573
569
|
* Used for initial scene blur in fromScene() method when sigma > 0.
|
|
574
570
|
*
|
|
@@ -577,109 +573,37 @@ class PMREMGenerator {
|
|
|
577
573
|
* @param {number} lodIn
|
|
578
574
|
* @param {number} lodOut
|
|
579
575
|
* @param {number} sigma
|
|
580
|
-
* @param {Vector3} [poleAxis]
|
|
581
576
|
*/
|
|
582
|
-
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma
|
|
577
|
+
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma ) {
|
|
583
578
|
|
|
584
579
|
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
585
580
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
poleAxis );
|
|
594
|
-
|
|
595
|
-
this._halfBlur(
|
|
596
|
-
pingPongRenderTarget,
|
|
597
|
-
cubeUVRenderTarget,
|
|
598
|
-
lodOut,
|
|
599
|
-
lodOut,
|
|
600
|
-
sigma,
|
|
601
|
-
'longitudinal',
|
|
602
|
-
poleAxis );
|
|
581
|
+
// Two passes of sigma / sqrt( 2 ) compose to a blur of sigma while squaring
|
|
582
|
+
// the effective sample count. Sigmas beyond PI are visually indistinguishable
|
|
583
|
+
// from a uniform blur, so clamp to keep the shader math finite.
|
|
584
|
+
const blurSigma = Math.min( sigma, Math.PI ) / Math.SQRT2;
|
|
585
|
+
|
|
586
|
+
this._blurPass( cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, blurSigma );
|
|
587
|
+
this._blurPass( pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, blurSigma );
|
|
603
588
|
|
|
604
589
|
}
|
|
605
590
|
|
|
606
|
-
|
|
591
|
+
_blurPass( targetIn, targetOut, lodIn, lodOut, sigmaRadians ) {
|
|
607
592
|
|
|
608
593
|
const renderer = this._renderer;
|
|
609
594
|
const blurMaterial = this._blurMaterial;
|
|
610
595
|
|
|
611
|
-
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
612
|
-
|
|
613
|
-
error(
|
|
614
|
-
'blur direction must be either latitudinal or longitudinal!' );
|
|
615
|
-
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
// Number of standard deviations at which to cut off the discrete approximation.
|
|
619
|
-
const STANDARD_DEVIATIONS = 3;
|
|
620
|
-
|
|
621
596
|
const blurMesh = this._lodMeshes[ lodOut ];
|
|
622
597
|
blurMesh.material = blurMaterial;
|
|
623
598
|
|
|
624
599
|
const blurUniforms = blurMaterial.uniforms;
|
|
625
600
|
|
|
626
|
-
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
627
|
-
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
628
|
-
const sigmaPixels = sigmaRadians / radiansPerPixel;
|
|
629
|
-
const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;
|
|
630
|
-
|
|
631
|
-
if ( samples > MAX_SAMPLES ) {
|
|
632
|
-
|
|
633
|
-
warn( `sigmaRadians, ${
|
|
634
|
-
sigmaRadians}, is too large and will clip, as it requested ${
|
|
635
|
-
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
636
|
-
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
const weights = [];
|
|
640
|
-
let sum = 0;
|
|
641
|
-
|
|
642
|
-
for ( let i = 0; i < MAX_SAMPLES; ++ i ) {
|
|
643
|
-
|
|
644
|
-
const x = i / sigmaPixels;
|
|
645
|
-
const weight = Math.exp( - x * x / 2 );
|
|
646
|
-
weights.push( weight );
|
|
647
|
-
|
|
648
|
-
if ( i === 0 ) {
|
|
649
|
-
|
|
650
|
-
sum += weight;
|
|
651
|
-
|
|
652
|
-
} else if ( i < samples ) {
|
|
653
|
-
|
|
654
|
-
sum += 2 * weight;
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
for ( let i = 0; i < weights.length; i ++ ) {
|
|
661
|
-
|
|
662
|
-
weights[ i ] = weights[ i ] / sum;
|
|
663
|
-
|
|
664
|
-
}
|
|
665
|
-
|
|
666
601
|
blurUniforms[ 'envMap' ].value = targetIn.texture;
|
|
667
|
-
blurUniforms[ '
|
|
668
|
-
blurUniforms[ '
|
|
669
|
-
blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';
|
|
670
|
-
|
|
671
|
-
if ( poleAxis ) {
|
|
672
|
-
|
|
673
|
-
blurUniforms[ 'poleAxis' ].value = poleAxis;
|
|
674
|
-
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
const { _lodMax } = this;
|
|
678
|
-
blurUniforms[ 'dTheta' ].value = radiansPerPixel;
|
|
679
|
-
blurUniforms[ 'mipInt' ].value = _lodMax - lodIn;
|
|
602
|
+
blurUniforms[ 'sigma' ].value = sigmaRadians;
|
|
603
|
+
blurUniforms[ 'mipInt' ].value = this._lodMax - lodIn;
|
|
680
604
|
|
|
681
605
|
const outputSize = this._sizeLods[ lodOut ];
|
|
682
|
-
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
606
|
+
const x = 3 * outputSize * ( lodOut > this._lodMax - LOD_MIN ? lodOut - this._lodMax + LOD_MIN : 0 );
|
|
683
607
|
const y = 4 * ( this._cubeSize - outputSize );
|
|
684
608
|
|
|
685
609
|
_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
|
|
@@ -695,31 +619,18 @@ class PMREMGenerator {
|
|
|
695
619
|
function _createPlanes( lodMax ) {
|
|
696
620
|
|
|
697
621
|
const sizeLods = [];
|
|
698
|
-
const sigmas = [];
|
|
699
622
|
const lodMeshes = [];
|
|
700
623
|
|
|
701
624
|
let lod = lodMax;
|
|
702
625
|
|
|
703
|
-
const totalLods = lodMax - LOD_MIN + 1 +
|
|
626
|
+
const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LODS;
|
|
704
627
|
|
|
705
628
|
for ( let i = 0; i < totalLods; i ++ ) {
|
|
706
629
|
|
|
707
630
|
const sizeLod = Math.pow( 2, lod );
|
|
708
631
|
sizeLods.push( sizeLod );
|
|
709
|
-
let sigma = 1.0 / sizeLod;
|
|
710
|
-
|
|
711
|
-
if ( i > lodMax - LOD_MIN ) {
|
|
712
|
-
|
|
713
|
-
sigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];
|
|
714
|
-
|
|
715
|
-
} else if ( i === 0 ) {
|
|
716
|
-
|
|
717
|
-
sigma = 0;
|
|
718
|
-
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
sigmas.push( sigma );
|
|
722
632
|
|
|
633
|
+
// UVs overshoot the face by one texel to bake the CubeUV border into the directions.
|
|
723
634
|
const texelSize = 1.0 / ( sizeLod - 2 );
|
|
724
635
|
const min = - texelSize;
|
|
725
636
|
const max = 1 + texelSize;
|
|
@@ -728,12 +639,9 @@ function _createPlanes( lodMax ) {
|
|
|
728
639
|
const cubeFaces = 6;
|
|
729
640
|
const vertices = 6;
|
|
730
641
|
const positionSize = 3;
|
|
731
|
-
const uvSize = 2;
|
|
732
|
-
const faceIndexSize = 1;
|
|
733
642
|
|
|
734
643
|
const position = new Float32Array( positionSize * vertices * cubeFaces );
|
|
735
|
-
const
|
|
736
|
-
const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );
|
|
644
|
+
const outputDirection = new Float32Array( positionSize * vertices * cubeFaces );
|
|
737
645
|
|
|
738
646
|
for ( let face = 0; face < cubeFaces; face ++ ) {
|
|
739
647
|
|
|
@@ -748,16 +656,48 @@ function _createPlanes( lodMax ) {
|
|
|
748
656
|
x, y + 1, 0
|
|
749
657
|
];
|
|
750
658
|
position.set( coordinates, positionSize * vertices * face );
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
659
|
+
|
|
660
|
+
for ( let vertex = 0; vertex < vertices; vertex ++ ) {
|
|
661
|
+
|
|
662
|
+
const u = uv1[ vertex * 2 ] * 2 - 1;
|
|
663
|
+
const v = uv1[ vertex * 2 + 1 ] * 2 - 1;
|
|
664
|
+
|
|
665
|
+
// RH coordinate system; PMREM face-indexing convention
|
|
666
|
+
if ( face === 0 ) {
|
|
667
|
+
|
|
668
|
+
_direction.set( 1, v, u ); // pos x
|
|
669
|
+
|
|
670
|
+
} else if ( face === 1 ) {
|
|
671
|
+
|
|
672
|
+
_direction.set( - u, 1, - v ); // pos y
|
|
673
|
+
|
|
674
|
+
} else if ( face === 2 ) {
|
|
675
|
+
|
|
676
|
+
_direction.set( - u, v, 1 ); // pos z
|
|
677
|
+
|
|
678
|
+
} else if ( face === 3 ) {
|
|
679
|
+
|
|
680
|
+
_direction.set( - 1, v, - u ); // neg x
|
|
681
|
+
|
|
682
|
+
} else if ( face === 4 ) {
|
|
683
|
+
|
|
684
|
+
_direction.set( - u, - 1, v ); // neg y
|
|
685
|
+
|
|
686
|
+
} else {
|
|
687
|
+
|
|
688
|
+
_direction.set( u, v, - 1 ); // neg z
|
|
689
|
+
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
_direction.toArray( outputDirection, ( face * vertices + vertex ) * positionSize );
|
|
693
|
+
|
|
694
|
+
}
|
|
754
695
|
|
|
755
696
|
}
|
|
756
697
|
|
|
757
698
|
const planes = new BufferGeometry();
|
|
758
699
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
759
|
-
planes.setAttribute( '
|
|
760
|
-
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
700
|
+
planes.setAttribute( 'outputDirection', new BufferAttribute( outputDirection, positionSize ) );
|
|
761
701
|
lodMeshes.push( new Mesh( planes, null ) );
|
|
762
702
|
|
|
763
703
|
if ( lod > LOD_MIN ) {
|
|
@@ -768,7 +708,7 @@ function _createPlanes( lodMax ) {
|
|
|
768
708
|
|
|
769
709
|
}
|
|
770
710
|
|
|
771
|
-
return { lodMeshes, sizeLods
|
|
711
|
+
return { lodMeshes, sizeLods };
|
|
772
712
|
|
|
773
713
|
}
|
|
774
714
|
|
|
@@ -928,14 +868,12 @@ function _getGGXShader( lodMax, width, height ) {
|
|
|
928
868
|
|
|
929
869
|
function _getBlurShader( lodMax, width, height ) {
|
|
930
870
|
|
|
931
|
-
const weights = new Float32Array( MAX_SAMPLES );
|
|
932
|
-
const poleAxis = new Vector3( 0, 1, 0 );
|
|
933
871
|
const shaderMaterial = new ShaderMaterial( {
|
|
934
872
|
|
|
935
873
|
name: 'SphericalGaussianBlur',
|
|
936
874
|
|
|
937
875
|
defines: {
|
|
938
|
-
'
|
|
876
|
+
'SAMPLES': BLUR_SAMPLES,
|
|
939
877
|
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
940
878
|
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
941
879
|
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
@@ -943,75 +881,71 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
943
881
|
|
|
944
882
|
uniforms: {
|
|
945
883
|
'envMap': { value: null },
|
|
946
|
-
'
|
|
947
|
-
'weights': { value: weights },
|
|
948
|
-
'latitudinal': { value: false },
|
|
949
|
-
'dTheta': { value: 0 },
|
|
884
|
+
'sigma': { value: 0 },
|
|
950
885
|
'mipInt': { value: 0 },
|
|
951
|
-
'poleAxis': { value: poleAxis }
|
|
952
886
|
},
|
|
953
887
|
|
|
954
888
|
vertexShader: _getCommonVertexShader(),
|
|
955
889
|
|
|
956
890
|
fragmentShader: /* glsl */`
|
|
957
891
|
|
|
958
|
-
precision
|
|
959
|
-
precision
|
|
892
|
+
precision highp float;
|
|
893
|
+
precision highp int;
|
|
960
894
|
|
|
961
895
|
varying vec3 vOutputDirection;
|
|
962
896
|
|
|
963
897
|
uniform sampler2D envMap;
|
|
964
|
-
uniform
|
|
965
|
-
uniform float weights[ n ];
|
|
966
|
-
uniform bool latitudinal;
|
|
967
|
-
uniform float dTheta;
|
|
898
|
+
uniform float sigma;
|
|
968
899
|
uniform float mipInt;
|
|
969
|
-
uniform vec3 poleAxis;
|
|
970
900
|
|
|
971
901
|
#define ENVMAP_TYPE_CUBE_UV
|
|
972
902
|
#include <cube_uv_reflection_fragment>
|
|
973
903
|
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
float cosTheta = cos( theta );
|
|
977
|
-
// Rodrigues' axis-angle rotation
|
|
978
|
-
vec3 sampleDirection = vOutputDirection * cosTheta
|
|
979
|
-
+ cross( axis, vOutputDirection ) * sin( theta )
|
|
980
|
-
+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
|
|
981
|
-
|
|
982
|
-
return bilinearCubeUV( envMap, sampleDirection, mipInt );
|
|
983
|
-
|
|
984
|
-
}
|
|
904
|
+
#define PI 3.14159265359
|
|
905
|
+
#define GOLDEN_ANGLE 2.39996322973
|
|
985
906
|
|
|
986
907
|
void main() {
|
|
987
908
|
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
|
|
909
|
+
if ( sigma == 0.0 ) {
|
|
991
910
|
|
|
992
|
-
|
|
911
|
+
gl_FragColor = vec4( bilinearCubeUV( envMap, vOutputDirection, mipInt ), 1.0 );
|
|
912
|
+
return;
|
|
993
913
|
|
|
994
914
|
}
|
|
995
915
|
|
|
996
|
-
|
|
916
|
+
vec3 outputDirection = normalize( vOutputDirection );
|
|
997
917
|
|
|
998
|
-
|
|
999
|
-
|
|
918
|
+
vec3 up = abs( outputDirection.z ) < 0.999 ? vec3( 0.0, 0.0, 1.0 ) : vec3( 1.0, 0.0, 0.0 );
|
|
919
|
+
vec3 tangent = normalize( cross( up, outputDirection ) );
|
|
920
|
+
vec3 bitangent = cross( outputDirection, tangent );
|
|
1000
921
|
|
|
1001
|
-
|
|
922
|
+
// Truncate the kernel at three standard deviations or at the antipode.
|
|
923
|
+
float thetaMax = min( 3.0 * sigma, PI );
|
|
924
|
+
float truncation = 1.0 - exp( - 0.5 * thetaMax * thetaMax / ( sigma * sigma ) );
|
|
1002
925
|
|
|
1003
|
-
|
|
926
|
+
vec3 accumColor = vec3( 0.0 );
|
|
927
|
+
float accumWeight = 0.0;
|
|
1004
928
|
|
|
1005
|
-
|
|
929
|
+
for ( int i = 0; i < SAMPLES; i ++ ) {
|
|
1006
930
|
|
|
1007
|
-
|
|
931
|
+
// Stratified inverse-CDF sampling of the Gaussian, placed on a golden-angle spiral.
|
|
932
|
+
float stratum = ( float( i ) + 0.5 ) / float( SAMPLES );
|
|
933
|
+
float theta = sigma * sqrt( - 2.0 * log( 1.0 - stratum * truncation ) );
|
|
934
|
+
float phi = float( i ) * GOLDEN_ANGLE;
|
|
1008
935
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
936
|
+
vec3 offset = cos( phi ) * tangent + sin( phi ) * bitangent;
|
|
937
|
+
vec3 sampleDirection = cos( theta ) * outputDirection + sin( theta ) * offset;
|
|
938
|
+
|
|
939
|
+
// Correct the planar sample density to solid angle.
|
|
940
|
+
float weight = sin( theta ) / theta;
|
|
941
|
+
|
|
942
|
+
accumColor += weight * bilinearCubeUV( envMap, sampleDirection, mipInt );
|
|
943
|
+
accumWeight += weight;
|
|
1012
944
|
|
|
1013
945
|
}
|
|
1014
946
|
|
|
947
|
+
gl_FragColor = vec4( accumColor / accumWeight, 1.0 );
|
|
948
|
+
|
|
1015
949
|
}
|
|
1016
950
|
`,
|
|
1017
951
|
|
|
@@ -1112,53 +1046,13 @@ function _getCommonVertexShader() {
|
|
|
1112
1046
|
precision mediump float;
|
|
1113
1047
|
precision mediump int;
|
|
1114
1048
|
|
|
1115
|
-
attribute
|
|
1049
|
+
attribute vec3 outputDirection;
|
|
1116
1050
|
|
|
1117
1051
|
varying vec3 vOutputDirection;
|
|
1118
1052
|
|
|
1119
|
-
// RH coordinate system; PMREM face-indexing convention
|
|
1120
|
-
vec3 getDirection( vec2 uv, float face ) {
|
|
1121
|
-
|
|
1122
|
-
uv = 2.0 * uv - 1.0;
|
|
1123
|
-
|
|
1124
|
-
vec3 direction = vec3( uv, 1.0 );
|
|
1125
|
-
|
|
1126
|
-
if ( face == 0.0 ) {
|
|
1127
|
-
|
|
1128
|
-
direction = direction.zyx; // ( 1, v, u ) pos x
|
|
1129
|
-
|
|
1130
|
-
} else if ( face == 1.0 ) {
|
|
1131
|
-
|
|
1132
|
-
direction = direction.xzy;
|
|
1133
|
-
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
|
|
1134
|
-
|
|
1135
|
-
} else if ( face == 2.0 ) {
|
|
1136
|
-
|
|
1137
|
-
direction.x *= -1.0; // ( -u, v, 1 ) pos z
|
|
1138
|
-
|
|
1139
|
-
} else if ( face == 3.0 ) {
|
|
1140
|
-
|
|
1141
|
-
direction = direction.zyx;
|
|
1142
|
-
direction.xz *= -1.0; // ( -1, v, -u ) neg x
|
|
1143
|
-
|
|
1144
|
-
} else if ( face == 4.0 ) {
|
|
1145
|
-
|
|
1146
|
-
direction = direction.xzy;
|
|
1147
|
-
direction.xy *= -1.0; // ( -u, -1, v ) neg y
|
|
1148
|
-
|
|
1149
|
-
} else if ( face == 5.0 ) {
|
|
1150
|
-
|
|
1151
|
-
direction.z *= -1.0; // ( u, v, -1 ) neg z
|
|
1152
|
-
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
return direction;
|
|
1156
|
-
|
|
1157
|
-
}
|
|
1158
|
-
|
|
1159
1053
|
void main() {
|
|
1160
1054
|
|
|
1161
|
-
vOutputDirection =
|
|
1055
|
+
vOutputDirection = outputDirection;
|
|
1162
1056
|
gl_Position = vec4( position, 1.0 );
|
|
1163
1057
|
|
|
1164
1058
|
}
|
|
@@ -152,7 +152,7 @@ class TorusGeometry extends BufferGeometry {
|
|
|
152
152
|
*/
|
|
153
153
|
static fromJSON( data ) {
|
|
154
154
|
|
|
155
|
-
return new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );
|
|
155
|
+
return new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc, data.thetaStart, data.thetaLength );
|
|
156
156
|
|
|
157
157
|
}
|
|
158
158
|
|
package/src/helpers/BoxHelper.js
CHANGED
package/src/lights/Light.js
CHANGED
|
@@ -48,16 +48,6 @@ class Light extends Object3D {
|
|
|
48
48
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
/**
|
|
52
|
-
* Frees the GPU-related resources allocated by this instance. Call this
|
|
53
|
-
* method whenever this instance is no longer used in your app.
|
|
54
|
-
*/
|
|
55
|
-
dispose() {
|
|
56
|
-
|
|
57
|
-
this.dispatchEvent( { type: 'dispose' } );
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
51
|
copy( source, recursive ) {
|
|
62
52
|
|
|
63
53
|
super.copy( source, recursive );
|