@needle-tools/three 0.169.20 → 0.183.2-canary.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 +5 -6
- package/build/three.cjs +54178 -56709
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73012
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53905 -51657
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53884 -51814
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -34
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +144 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- 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/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -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_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- 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/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- 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 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
2
|
-
import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
|
-
import { equirectUV } from '../../../nodes/utils/
|
|
2
|
+
import { getDirection, blur, ggxConvolution } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
|
+
import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
|
|
4
4
|
import { uniform } from '../../../nodes/core/UniformNode.js';
|
|
5
5
|
import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
|
|
6
6
|
import { texture } from '../../../nodes/accessors/TextureNode.js';
|
|
7
7
|
import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
|
|
8
|
-
import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
|
|
8
|
+
import { float, uint, vec3 } from '../../../nodes/tsl/TSLBase.js';
|
|
9
9
|
import { uv } from '../../../nodes/accessors/UV.js';
|
|
10
10
|
import { attribute } from '../../../nodes/core/AttributeNode.js';
|
|
11
11
|
|
|
@@ -30,19 +30,22 @@ import {
|
|
|
30
30
|
BackSide,
|
|
31
31
|
LinearSRGBColorSpace
|
|
32
32
|
} from '../../../constants.js';
|
|
33
|
+
import { warn, error, warnOnce } from '../../../utils.js';
|
|
33
34
|
|
|
34
35
|
const LOD_MIN = 4;
|
|
35
36
|
|
|
36
|
-
// The standard deviations (radians) associated with the extra mips.
|
|
37
|
-
//
|
|
38
|
-
// geometric shadowing function. These sigma values squared must match the
|
|
39
|
-
// variance #defines in cube_uv_reflection_fragment.glsl.js.
|
|
37
|
+
// The standard deviations (radians) associated with the extra mips.
|
|
38
|
+
// Used for scene blur in fromScene() method.
|
|
40
39
|
const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
41
40
|
|
|
42
41
|
// The maximum length of the blur for loop. Smaller sigmas will use fewer
|
|
43
42
|
// samples and exit early, but not recompile the shader.
|
|
43
|
+
// Used for scene blur in fromScene() method.
|
|
44
44
|
const MAX_SAMPLES = 20;
|
|
45
45
|
|
|
46
|
+
// GGX VNDF importance sampling configuration
|
|
47
|
+
const GGX_SAMPLES = 512;
|
|
48
|
+
|
|
46
49
|
const _flatCamera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
47
50
|
const _cubeCamera = /*@__PURE__*/ new PerspectiveCamera( 90, 1 );
|
|
48
51
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
@@ -50,26 +53,11 @@ let _oldTarget = null;
|
|
|
50
53
|
let _oldActiveCubeFace = 0;
|
|
51
54
|
let _oldActiveMipmapLevel = 0;
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
58
|
-
// same axis), used as axis directions evenly spread on a sphere.
|
|
59
|
-
const _axisDirections = [
|
|
60
|
-
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
|
|
61
|
-
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
62
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
63
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
64
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
65
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
66
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
67
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
68
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
69
|
-
/*@__PURE__*/ new Vector3( 1, 1, 1 )
|
|
70
|
-
];
|
|
56
|
+
const _origin = /*@__PURE__*/ new Vector3();
|
|
57
|
+
|
|
58
|
+
// maps blur materials to their uniforms dictionary
|
|
71
59
|
|
|
72
|
-
|
|
60
|
+
const _uniformsMap = new WeakMap();
|
|
73
61
|
|
|
74
62
|
// WebGPU Face indices
|
|
75
63
|
const _faceLib = [
|
|
@@ -77,8 +65,8 @@ const _faceLib = [
|
|
|
77
65
|
0, 4, 2
|
|
78
66
|
];
|
|
79
67
|
|
|
80
|
-
const
|
|
81
|
-
const
|
|
68
|
+
const _direction = /*@__PURE__*/ getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
|
|
69
|
+
const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );
|
|
82
70
|
|
|
83
71
|
/**
|
|
84
72
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -91,12 +79,18 @@ const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
|
|
|
91
79
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
92
80
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
93
81
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
|
|
97
|
-
|
|
82
|
+
* The prefiltering uses GGX VNDF (Visible Normal Distribution Function)
|
|
83
|
+
* importance sampling based on "Sampling the GGX Distribution of Visible Normals"
|
|
84
|
+
* (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF
|
|
85
|
+
* used in material rendering for physically-based image-based lighting.
|
|
86
|
+
*/
|
|
98
87
|
class PMREMGenerator {
|
|
99
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Constructs a new PMREM generator.
|
|
91
|
+
*
|
|
92
|
+
* @param {Renderer} renderer - The renderer.
|
|
93
|
+
*/
|
|
100
94
|
constructor( renderer ) {
|
|
101
95
|
|
|
102
96
|
this._renderer = renderer;
|
|
@@ -104,37 +98,76 @@ class PMREMGenerator {
|
|
|
104
98
|
|
|
105
99
|
this._lodMax = 0;
|
|
106
100
|
this._cubeSize = 0;
|
|
107
|
-
this._lodPlanes = [];
|
|
108
101
|
this._sizeLods = [];
|
|
109
102
|
this._sigmas = [];
|
|
110
103
|
this._lodMeshes = [];
|
|
111
104
|
|
|
112
105
|
this._blurMaterial = null;
|
|
106
|
+
this._ggxMaterial = null;
|
|
107
|
+
|
|
113
108
|
this._cubemapMaterial = null;
|
|
114
109
|
this._equirectMaterial = null;
|
|
115
110
|
this._backgroundBox = null;
|
|
116
111
|
|
|
117
112
|
}
|
|
118
113
|
|
|
114
|
+
get _hasInitialized() {
|
|
115
|
+
|
|
116
|
+
return this._renderer.hasInitialized();
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
119
120
|
/**
|
|
120
121
|
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
121
122
|
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
122
123
|
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
123
|
-
* and far planes ensure the scene is rendered in its entirety
|
|
124
|
-
*
|
|
124
|
+
* and far planes ensure the scene is rendered in its entirety.
|
|
125
|
+
*
|
|
126
|
+
* @param {Scene} scene - The scene to be captured.
|
|
127
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
128
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
129
|
+
* @param {number} [far=100] - The far plane distance.
|
|
130
|
+
* @param {Object} [options={}] - The configuration options.
|
|
131
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
132
|
+
* @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
|
|
133
|
+
* @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
|
|
134
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
135
|
+
* @see {@link PMREMGenerator#fromScene}
|
|
125
136
|
*/
|
|
126
|
-
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
137
|
+
fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
138
|
+
|
|
139
|
+
const {
|
|
140
|
+
size = 256,
|
|
141
|
+
position = _origin,
|
|
142
|
+
renderTarget = null,
|
|
143
|
+
} = options;
|
|
144
|
+
|
|
145
|
+
this._setSize( size );
|
|
146
|
+
|
|
147
|
+
if ( this._hasInitialized === false ) {
|
|
148
|
+
|
|
149
|
+
warn( 'PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.' );
|
|
150
|
+
|
|
151
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
152
|
+
|
|
153
|
+
options.renderTarget = cubeUVRenderTarget;
|
|
154
|
+
|
|
155
|
+
this.fromSceneAsync( scene, sigma, near, far, options );
|
|
156
|
+
|
|
157
|
+
return cubeUVRenderTarget;
|
|
158
|
+
|
|
159
|
+
}
|
|
127
160
|
|
|
128
161
|
_oldTarget = this._renderer.getRenderTarget();
|
|
129
162
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
130
163
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
131
164
|
|
|
132
|
-
this.
|
|
133
|
-
|
|
134
|
-
const cubeUVRenderTarget = this._allocateTargets();
|
|
165
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
135
166
|
cubeUVRenderTarget.depthBuffer = true;
|
|
136
167
|
|
|
137
|
-
this.
|
|
168
|
+
this._init( cubeUVRenderTarget );
|
|
169
|
+
|
|
170
|
+
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
|
|
138
171
|
|
|
139
172
|
if ( sigma > 0 ) {
|
|
140
173
|
|
|
@@ -150,13 +183,82 @@ class PMREMGenerator {
|
|
|
150
183
|
|
|
151
184
|
}
|
|
152
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
188
|
+
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
189
|
+
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
190
|
+
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
191
|
+
* is placed at the origin).
|
|
192
|
+
*
|
|
193
|
+
* @deprecated
|
|
194
|
+
* @param {Scene} scene - The scene to be captured.
|
|
195
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
196
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
197
|
+
* @param {number} [far=100] - The far plane distance.
|
|
198
|
+
* @param {Object} [options={}] - The configuration options.
|
|
199
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
200
|
+
* @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
|
|
201
|
+
* @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
|
|
202
|
+
* @return {Promise<RenderTarget>} A Promise that resolve with the PMREM when the generation has been finished.
|
|
203
|
+
* @see {@link PMREMGenerator#fromScene}
|
|
204
|
+
*/
|
|
205
|
+
async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
206
|
+
|
|
207
|
+
warnOnce( 'PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
|
|
208
|
+
|
|
209
|
+
await this._renderer.init();
|
|
210
|
+
|
|
211
|
+
return this.fromScene( scene, sigma, near, far, options );
|
|
212
|
+
|
|
213
|
+
}
|
|
214
|
+
|
|
153
215
|
/**
|
|
154
216
|
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
155
217
|
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
156
218
|
* as this matches best with the 256 x 256 cubemap output.
|
|
219
|
+
*
|
|
220
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
221
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
222
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
223
|
+
* @see {@link PMREMGenerator#fromEquirectangularAsync}
|
|
157
224
|
*/
|
|
158
225
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
159
226
|
|
|
227
|
+
if ( this._hasInitialized === false ) {
|
|
228
|
+
|
|
229
|
+
warn( 'PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.' );
|
|
230
|
+
|
|
231
|
+
this._setSizeFromTexture( equirectangular );
|
|
232
|
+
|
|
233
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
234
|
+
|
|
235
|
+
this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
|
|
236
|
+
|
|
237
|
+
return cubeUVRenderTarget;
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return this._fromTexture( equirectangular, renderTarget );
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
247
|
+
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
248
|
+
* as this matches best with the 256 x 256 cubemap output.
|
|
249
|
+
*
|
|
250
|
+
* @deprecated
|
|
251
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
252
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
253
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
254
|
+
* @see {@link PMREMGenerator#fromEquirectangular}
|
|
255
|
+
*/
|
|
256
|
+
async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
|
|
257
|
+
|
|
258
|
+
warnOnce( 'PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
|
|
259
|
+
|
|
260
|
+
await this._renderer.init();
|
|
261
|
+
|
|
160
262
|
return this._fromTexture( equirectangular, renderTarget );
|
|
161
263
|
|
|
162
264
|
}
|
|
@@ -165,9 +267,49 @@ class PMREMGenerator {
|
|
|
165
267
|
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
166
268
|
* or HDR. The ideal input cube size is 256 x 256,
|
|
167
269
|
* as this matches best with the 256 x 256 cubemap output.
|
|
270
|
+
*
|
|
271
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
272
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
273
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
274
|
+
* @see {@link PMREMGenerator#fromCubemapAsync}
|
|
168
275
|
*/
|
|
169
276
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
170
277
|
|
|
278
|
+
if ( this._hasInitialized === false ) {
|
|
279
|
+
|
|
280
|
+
warn( 'PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );
|
|
281
|
+
|
|
282
|
+
this._setSizeFromTexture( cubemap );
|
|
283
|
+
|
|
284
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
285
|
+
|
|
286
|
+
this.fromCubemapAsync( cubemap, renderTarget );
|
|
287
|
+
|
|
288
|
+
return cubeUVRenderTarget;
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return this._fromTexture( cubemap, renderTarget );
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
298
|
+
* or HDR. The ideal input cube size is 256 x 256,
|
|
299
|
+
* with the 256 x 256 cubemap output.
|
|
300
|
+
*
|
|
301
|
+
* @deprecated
|
|
302
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
303
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
304
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
305
|
+
* @see {@link PMREMGenerator#fromCubemap}
|
|
306
|
+
*/
|
|
307
|
+
async fromCubemapAsync( cubemap, renderTarget = null ) {
|
|
308
|
+
|
|
309
|
+
warnOnce( 'PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
|
|
310
|
+
|
|
311
|
+
await this._renderer.init();
|
|
312
|
+
|
|
171
313
|
return this._fromTexture( cubemap, renderTarget );
|
|
172
314
|
|
|
173
315
|
}
|
|
@@ -175,6 +317,8 @@ class PMREMGenerator {
|
|
|
175
317
|
/**
|
|
176
318
|
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
177
319
|
* your texture's network fetch for increased concurrency.
|
|
320
|
+
*
|
|
321
|
+
* @returns {Promise}
|
|
178
322
|
*/
|
|
179
323
|
async compileCubemapShader() {
|
|
180
324
|
|
|
@@ -190,6 +334,8 @@ class PMREMGenerator {
|
|
|
190
334
|
/**
|
|
191
335
|
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
192
336
|
* your texture's network fetch for increased concurrency.
|
|
337
|
+
*
|
|
338
|
+
* @returns {Promise}
|
|
193
339
|
*/
|
|
194
340
|
async compileEquirectangularShader() {
|
|
195
341
|
|
|
@@ -224,6 +370,20 @@ class PMREMGenerator {
|
|
|
224
370
|
|
|
225
371
|
// private interface
|
|
226
372
|
|
|
373
|
+
_setSizeFromTexture( texture ) {
|
|
374
|
+
|
|
375
|
+
if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
|
|
376
|
+
|
|
377
|
+
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
378
|
+
|
|
379
|
+
} else { // Equirectangular
|
|
380
|
+
|
|
381
|
+
this._setSize( texture.image.width / 4 );
|
|
382
|
+
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
227
387
|
_setSize( cubeSize ) {
|
|
228
388
|
|
|
229
389
|
this._lodMax = Math.floor( Math.log2( cubeSize ) );
|
|
@@ -234,12 +394,13 @@ class PMREMGenerator {
|
|
|
234
394
|
_dispose() {
|
|
235
395
|
|
|
236
396
|
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
397
|
+
if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
|
|
237
398
|
|
|
238
399
|
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
239
400
|
|
|
240
|
-
for ( let i = 0; i < this.
|
|
401
|
+
for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
|
|
241
402
|
|
|
242
|
-
this.
|
|
403
|
+
this._lodMeshes[ i ].geometry.dispose();
|
|
243
404
|
|
|
244
405
|
}
|
|
245
406
|
|
|
@@ -255,21 +416,14 @@ class PMREMGenerator {
|
|
|
255
416
|
|
|
256
417
|
_fromTexture( texture, renderTarget ) {
|
|
257
418
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
261
|
-
|
|
262
|
-
} else { // Equirectangular
|
|
263
|
-
|
|
264
|
-
this._setSize( texture.image.width / 4 );
|
|
265
|
-
|
|
266
|
-
}
|
|
419
|
+
this._setSizeFromTexture( texture );
|
|
267
420
|
|
|
268
421
|
_oldTarget = this._renderer.getRenderTarget();
|
|
269
422
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
270
423
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
271
424
|
|
|
272
|
-
const cubeUVRenderTarget = renderTarget || this.
|
|
425
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTarget();
|
|
426
|
+
this._init( cubeUVRenderTarget );
|
|
273
427
|
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
274
428
|
this._applyPMREM( cubeUVRenderTarget );
|
|
275
429
|
this._cleanup( cubeUVRenderTarget );
|
|
@@ -278,24 +432,20 @@ class PMREMGenerator {
|
|
|
278
432
|
|
|
279
433
|
}
|
|
280
434
|
|
|
281
|
-
|
|
435
|
+
_allocateTarget() {
|
|
282
436
|
|
|
283
437
|
const width = 3 * Math.max( this._cubeSize, 16 * 7 );
|
|
284
438
|
const height = 4 * this._cubeSize;
|
|
285
439
|
|
|
286
|
-
const
|
|
287
|
-
magFilter: LinearFilter,
|
|
288
|
-
minFilter: LinearFilter,
|
|
289
|
-
generateMipmaps: false,
|
|
290
|
-
type: HalfFloatType,
|
|
291
|
-
format: RGBAFormat,
|
|
292
|
-
colorSpace: LinearSRGBColorSpace,
|
|
293
|
-
//depthBuffer: false
|
|
294
|
-
};
|
|
440
|
+
const cubeUVRenderTarget = _createRenderTarget( width, height );
|
|
295
441
|
|
|
296
|
-
|
|
442
|
+
return cubeUVRenderTarget;
|
|
443
|
+
|
|
444
|
+
}
|
|
297
445
|
|
|
298
|
-
|
|
446
|
+
_init( renderTarget ) {
|
|
447
|
+
|
|
448
|
+
if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== renderTarget.width || this._pingPongRenderTarget.height !== renderTarget.height ) {
|
|
299
449
|
|
|
300
450
|
if ( this._pingPongRenderTarget !== null ) {
|
|
301
451
|
|
|
@@ -303,35 +453,34 @@ class PMREMGenerator {
|
|
|
303
453
|
|
|
304
454
|
}
|
|
305
455
|
|
|
306
|
-
this._pingPongRenderTarget = _createRenderTarget( width, height
|
|
456
|
+
this._pingPongRenderTarget = _createRenderTarget( renderTarget.width, renderTarget.height );
|
|
307
457
|
|
|
308
458
|
const { _lodMax } = this;
|
|
309
|
-
( {
|
|
459
|
+
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
310
460
|
|
|
311
|
-
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
461
|
+
this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
|
|
462
|
+
this._ggxMaterial = _getGGXShader( _lodMax, renderTarget.width, renderTarget.height );
|
|
312
463
|
|
|
313
464
|
}
|
|
314
465
|
|
|
315
|
-
return cubeUVRenderTarget;
|
|
316
|
-
|
|
317
466
|
}
|
|
318
467
|
|
|
319
468
|
async _compileMaterial( material ) {
|
|
320
469
|
|
|
321
|
-
const
|
|
322
|
-
await this._renderer.compile(
|
|
470
|
+
const mesh = new Mesh( new BufferGeometry(), material );
|
|
471
|
+
await this._renderer.compile( mesh, _flatCamera );
|
|
323
472
|
|
|
324
473
|
}
|
|
325
474
|
|
|
326
|
-
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
475
|
+
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
|
|
327
476
|
|
|
328
477
|
const cubeCamera = _cubeCamera;
|
|
329
478
|
cubeCamera.near = near;
|
|
330
479
|
cubeCamera.far = far;
|
|
331
480
|
|
|
332
481
|
// px, py, pz, nx, ny, nz
|
|
333
|
-
const upSign = [
|
|
334
|
-
const forwardSign = [ 1, 1, 1, - 1,
|
|
482
|
+
const upSign = [ 1, 1, 1, 1, - 1, 1 ];
|
|
483
|
+
const forwardSign = [ 1, - 1, 1, - 1, 1, - 1 ];
|
|
335
484
|
|
|
336
485
|
const renderer = this._renderer;
|
|
337
486
|
|
|
@@ -341,29 +490,32 @@ class PMREMGenerator {
|
|
|
341
490
|
|
|
342
491
|
renderer.autoClear = false;
|
|
343
492
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
if ( backgroundBox === null ) {
|
|
347
|
-
|
|
348
|
-
const backgroundMaterial = new MeshBasicMaterial( {
|
|
349
|
-
name: 'PMREM.Background',
|
|
350
|
-
side: BackSide,
|
|
351
|
-
depthWrite: false,
|
|
352
|
-
depthTest: false
|
|
353
|
-
} );
|
|
493
|
+
if ( this._backgroundBox === null ) {
|
|
354
494
|
|
|
355
|
-
|
|
495
|
+
this._backgroundBox = new Mesh(
|
|
496
|
+
new BoxGeometry(),
|
|
497
|
+
new MeshBasicMaterial( {
|
|
498
|
+
name: 'PMREM.Background',
|
|
499
|
+
side: BackSide,
|
|
500
|
+
depthWrite: false,
|
|
501
|
+
depthTest: false,
|
|
502
|
+
} )
|
|
503
|
+
);
|
|
356
504
|
|
|
357
505
|
}
|
|
358
506
|
|
|
507
|
+
const backgroundBox = this._backgroundBox;
|
|
508
|
+
const backgroundMaterial = backgroundBox.material;
|
|
509
|
+
|
|
359
510
|
let useSolidColor = false;
|
|
511
|
+
|
|
360
512
|
const background = scene.background;
|
|
361
513
|
|
|
362
514
|
if ( background ) {
|
|
363
515
|
|
|
364
516
|
if ( background.isColor ) {
|
|
365
517
|
|
|
366
|
-
|
|
518
|
+
backgroundMaterial.color.copy( background );
|
|
367
519
|
scene.background = null;
|
|
368
520
|
useSolidColor = true;
|
|
369
521
|
|
|
@@ -371,7 +523,7 @@ class PMREMGenerator {
|
|
|
371
523
|
|
|
372
524
|
} else {
|
|
373
525
|
|
|
374
|
-
|
|
526
|
+
backgroundMaterial.color.copy( _clearColor );
|
|
375
527
|
useSolidColor = true;
|
|
376
528
|
|
|
377
529
|
}
|
|
@@ -393,17 +545,22 @@ class PMREMGenerator {
|
|
|
393
545
|
if ( col === 0 ) {
|
|
394
546
|
|
|
395
547
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
396
|
-
cubeCamera.
|
|
548
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
549
|
+
cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
|
|
397
550
|
|
|
398
551
|
} else if ( col === 1 ) {
|
|
399
552
|
|
|
400
553
|
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
401
|
-
cubeCamera.
|
|
554
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
555
|
+
cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
|
|
556
|
+
|
|
402
557
|
|
|
403
558
|
} else {
|
|
404
559
|
|
|
405
560
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
406
|
-
cubeCamera.
|
|
561
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
562
|
+
cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
|
|
563
|
+
|
|
407
564
|
|
|
408
565
|
}
|
|
409
566
|
|
|
@@ -464,15 +621,13 @@ class PMREMGenerator {
|
|
|
464
621
|
const renderer = this._renderer;
|
|
465
622
|
const autoClear = renderer.autoClear;
|
|
466
623
|
renderer.autoClear = false;
|
|
467
|
-
const n = this._lodPlanes.length;
|
|
468
624
|
|
|
469
|
-
|
|
625
|
+
const n = this._lodMeshes.length;
|
|
470
626
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
|
|
627
|
+
// Use GGX VNDF importance sampling
|
|
628
|
+
for ( let i = 1; i < n; i ++ ) {
|
|
474
629
|
|
|
475
|
-
this.
|
|
630
|
+
this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
|
|
476
631
|
|
|
477
632
|
}
|
|
478
633
|
|
|
@@ -480,12 +635,80 @@ class PMREMGenerator {
|
|
|
480
635
|
|
|
481
636
|
}
|
|
482
637
|
|
|
638
|
+
/**
|
|
639
|
+
* Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
|
|
640
|
+
* Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
|
|
641
|
+
* GGX BRDF for physically-based rendering. Reads from the previous LOD level and
|
|
642
|
+
* applies incremental roughness filtering to avoid over-blurring.
|
|
643
|
+
*
|
|
644
|
+
* @private
|
|
645
|
+
* @param {RenderTarget} cubeUVRenderTarget
|
|
646
|
+
* @param {number} lodIn - Source LOD level to read from
|
|
647
|
+
* @param {number} lodOut - Target LOD level to write to
|
|
648
|
+
*/
|
|
649
|
+
_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
|
|
650
|
+
|
|
651
|
+
const renderer = this._renderer;
|
|
652
|
+
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
653
|
+
|
|
654
|
+
const ggxMaterial = this._ggxMaterial;
|
|
655
|
+
const ggxMesh = this._lodMeshes[ lodOut ];
|
|
656
|
+
ggxMesh.material = ggxMaterial;
|
|
657
|
+
|
|
658
|
+
const ggxUniforms = _uniformsMap.get( ggxMaterial );
|
|
659
|
+
|
|
660
|
+
// Calculate incremental roughness between LOD levels
|
|
661
|
+
const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
|
|
662
|
+
const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
|
|
663
|
+
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
664
|
+
|
|
665
|
+
// Apply blur strength mapping for better quality across the roughness range
|
|
666
|
+
const blurStrength = 0.0 + targetRoughness * 1.25;
|
|
667
|
+
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
668
|
+
|
|
669
|
+
// Calculate viewport position based on output LOD level
|
|
670
|
+
const { _lodMax } = this;
|
|
671
|
+
const outputSize = this._sizeLods[ lodOut ];
|
|
672
|
+
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
673
|
+
const y = 4 * ( this._cubeSize - outputSize );
|
|
674
|
+
|
|
675
|
+
// Read from previous LOD with incremental roughness
|
|
676
|
+
cubeUVRenderTarget.texture.frame = ( cubeUVRenderTarget.texture.frame || 0 ) + 1;
|
|
677
|
+
ggxUniforms.envMap.value = cubeUVRenderTarget.texture;
|
|
678
|
+
ggxUniforms.roughness.value = adjustedRoughness;
|
|
679
|
+
ggxUniforms.mipInt.value = _lodMax - lodIn; // Sample from input LOD
|
|
680
|
+
|
|
681
|
+
_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
682
|
+
renderer.setRenderTarget( pingPongRenderTarget );
|
|
683
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
684
|
+
|
|
685
|
+
// Copy from pingPong back to cubeUV (simple direct copy)
|
|
686
|
+
pingPongRenderTarget.texture.frame = ( pingPongRenderTarget.texture.frame || 0 ) + 1;
|
|
687
|
+
ggxUniforms.envMap.value = pingPongRenderTarget.texture;
|
|
688
|
+
ggxUniforms.roughness.value = 0.0; // Direct copy
|
|
689
|
+
ggxUniforms.mipInt.value = _lodMax - lodOut; // Read from the level we just wrote
|
|
690
|
+
|
|
691
|
+
_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
692
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
693
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
694
|
+
|
|
695
|
+
}
|
|
696
|
+
|
|
483
697
|
/**
|
|
484
698
|
* This is a two-pass Gaussian blur for a cubemap. Normally this is done
|
|
485
699
|
* vertically and horizontally, but this breaks down on a cube. Here we apply
|
|
486
700
|
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
487
701
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
488
702
|
* accurate at the poles, but still does a decent job.
|
|
703
|
+
*
|
|
704
|
+
* Used for initial scene blur in fromScene() method when sigma > 0.
|
|
705
|
+
*
|
|
706
|
+
* @private
|
|
707
|
+
* @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
|
|
708
|
+
* @param {number} lodIn - The input level-of-detail.
|
|
709
|
+
* @param {number} lodOut - The output level-of-detail.
|
|
710
|
+
* @param {number} sigma - The blur radius in radians.
|
|
711
|
+
* @param {Vector3} [poleAxis] - The pole axis.
|
|
489
712
|
*/
|
|
490
713
|
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
491
714
|
|
|
@@ -518,7 +741,7 @@ class PMREMGenerator {
|
|
|
518
741
|
|
|
519
742
|
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
520
743
|
|
|
521
|
-
|
|
744
|
+
error( 'blur direction must be either latitudinal or longitudinal!' );
|
|
522
745
|
|
|
523
746
|
}
|
|
524
747
|
|
|
@@ -528,7 +751,7 @@ class PMREMGenerator {
|
|
|
528
751
|
const blurMesh = this._lodMeshes[ lodOut ];
|
|
529
752
|
blurMesh.material = blurMaterial;
|
|
530
753
|
|
|
531
|
-
const blurUniforms = blurMaterial
|
|
754
|
+
const blurUniforms = _uniformsMap.get( blurMaterial );
|
|
532
755
|
|
|
533
756
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
534
757
|
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
@@ -537,7 +760,7 @@ class PMREMGenerator {
|
|
|
537
760
|
|
|
538
761
|
if ( samples > MAX_SAMPLES ) {
|
|
539
762
|
|
|
540
|
-
|
|
763
|
+
warn( `sigmaRadians, ${
|
|
541
764
|
sigmaRadians}, is too large and will clip, as it requested ${
|
|
542
765
|
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
543
766
|
|
|
@@ -601,7 +824,6 @@ class PMREMGenerator {
|
|
|
601
824
|
|
|
602
825
|
function _createPlanes( lodMax ) {
|
|
603
826
|
|
|
604
|
-
const lodPlanes = [];
|
|
605
827
|
const sizeLods = [];
|
|
606
828
|
const sigmas = [];
|
|
607
829
|
const lodMeshes = [];
|
|
@@ -668,7 +890,6 @@ function _createPlanes( lodMax ) {
|
|
|
668
890
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
669
891
|
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
670
892
|
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
671
|
-
lodPlanes.push( planes );
|
|
672
893
|
lodMeshes.push( new Mesh( planes, null ) );
|
|
673
894
|
|
|
674
895
|
if ( lod > LOD_MIN ) {
|
|
@@ -679,11 +900,21 @@ function _createPlanes( lodMax ) {
|
|
|
679
900
|
|
|
680
901
|
}
|
|
681
902
|
|
|
682
|
-
return {
|
|
903
|
+
return { lodMeshes, sizeLods, sigmas };
|
|
683
904
|
|
|
684
905
|
}
|
|
685
906
|
|
|
686
|
-
function _createRenderTarget( width, height
|
|
907
|
+
function _createRenderTarget( width, height ) {
|
|
908
|
+
|
|
909
|
+
const params = {
|
|
910
|
+
magFilter: LinearFilter,
|
|
911
|
+
minFilter: LinearFilter,
|
|
912
|
+
generateMipmaps: false,
|
|
913
|
+
type: HalfFloatType,
|
|
914
|
+
format: RGBAFormat,
|
|
915
|
+
colorSpace: LinearSRGBColorSpace,
|
|
916
|
+
//depthBuffer: false
|
|
917
|
+
};
|
|
687
918
|
|
|
688
919
|
const cubeUVRenderTarget = new RenderTarget( width, height, params );
|
|
689
920
|
cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
|
|
@@ -721,7 +952,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
721
952
|
const n = float( MAX_SAMPLES );
|
|
722
953
|
const latitudinal = uniform( 0 ); // false, bool
|
|
723
954
|
const samples = uniform( 1 ); // int
|
|
724
|
-
const envMap = texture(
|
|
955
|
+
const envMap = texture();
|
|
725
956
|
const mipInt = uniform( 0 ); // int
|
|
726
957
|
const CUBEUV_TEXEL_WIDTH = float( 1 / width );
|
|
727
958
|
const CUBEUV_TEXEL_HEIGHT = float( 1 / height );
|
|
@@ -732,7 +963,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
732
963
|
latitudinal,
|
|
733
964
|
weights,
|
|
734
965
|
poleAxis,
|
|
735
|
-
outputDirection,
|
|
966
|
+
outputDirection: _outputDirection,
|
|
736
967
|
dTheta,
|
|
737
968
|
samples,
|
|
738
969
|
envMap,
|
|
@@ -743,9 +974,41 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
743
974
|
};
|
|
744
975
|
|
|
745
976
|
const material = _getMaterial( 'blur' );
|
|
746
|
-
material.uniforms = materialUniforms; // TODO: Move to outside of the material
|
|
747
977
|
material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
|
|
748
978
|
|
|
979
|
+
_uniformsMap.set( material, materialUniforms );
|
|
980
|
+
|
|
981
|
+
return material;
|
|
982
|
+
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
function _getGGXShader( lodMax, width, height ) {
|
|
986
|
+
|
|
987
|
+
const envMap = texture();
|
|
988
|
+
const roughness = uniform( 0 );
|
|
989
|
+
const mipInt = uniform( 0 );
|
|
990
|
+
const CUBEUV_TEXEL_WIDTH = float( 1 / width );
|
|
991
|
+
const CUBEUV_TEXEL_HEIGHT = float( 1 / height );
|
|
992
|
+
const CUBEUV_MAX_MIP = float( lodMax );
|
|
993
|
+
|
|
994
|
+
const materialUniforms = {
|
|
995
|
+
envMap,
|
|
996
|
+
roughness,
|
|
997
|
+
mipInt,
|
|
998
|
+
CUBEUV_TEXEL_WIDTH,
|
|
999
|
+
CUBEUV_TEXEL_HEIGHT,
|
|
1000
|
+
CUBEUV_MAX_MIP
|
|
1001
|
+
};
|
|
1002
|
+
|
|
1003
|
+
const material = _getMaterial( 'ggx' );
|
|
1004
|
+
material.fragmentNode = ggxConvolution( {
|
|
1005
|
+
...materialUniforms,
|
|
1006
|
+
N_immutable: _outputDirection,
|
|
1007
|
+
GGX_SAMPLES: uint( GGX_SAMPLES )
|
|
1008
|
+
} );
|
|
1009
|
+
|
|
1010
|
+
_uniformsMap.set( material, materialUniforms );
|
|
1011
|
+
|
|
749
1012
|
return material;
|
|
750
1013
|
|
|
751
1014
|
}
|
|
@@ -753,7 +1016,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
753
1016
|
function _getCubemapMaterial( envTexture ) {
|
|
754
1017
|
|
|
755
1018
|
const material = _getMaterial( 'cubemap' );
|
|
756
|
-
material.fragmentNode = cubeTexture( envTexture,
|
|
1019
|
+
material.fragmentNode = cubeTexture( envTexture, _outputDirection );
|
|
757
1020
|
|
|
758
1021
|
return material;
|
|
759
1022
|
|
|
@@ -762,7 +1025,7 @@ function _getCubemapMaterial( envTexture ) {
|
|
|
762
1025
|
function _getEquirectMaterial( envTexture ) {
|
|
763
1026
|
|
|
764
1027
|
const material = _getMaterial( 'equirect' );
|
|
765
|
-
material.fragmentNode = texture( envTexture, equirectUV(
|
|
1028
|
+
material.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );
|
|
766
1029
|
|
|
767
1030
|
return material;
|
|
768
1031
|
|