@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
package/src/extras/ImageUtils.js
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import { createElementNS } from '../utils.js';
|
|
1
|
+
import { createElementNS, warn } from '../utils.js';
|
|
2
2
|
import { SRGBToLinear } from '../math/ColorManagement.js';
|
|
3
3
|
|
|
4
4
|
let _canvas;
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* A class containing utility functions for images.
|
|
8
|
+
*
|
|
9
|
+
* @hideconstructor
|
|
10
|
+
*/
|
|
6
11
|
class ImageUtils {
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Returns a data URI containing a representation of the given image.
|
|
15
|
+
*
|
|
16
|
+
* @param {(HTMLImageElement|HTMLCanvasElement)} image - The image object.
|
|
17
|
+
* @param {string} [type='image/png'] - Indicates the image format.
|
|
18
|
+
* @return {string} The data URI.
|
|
19
|
+
*/
|
|
20
|
+
static getDataURL( image, type = 'image/png' ) {
|
|
9
21
|
|
|
10
22
|
if ( /^data:/i.test( image.src ) ) {
|
|
11
23
|
|
|
@@ -48,20 +60,16 @@ class ImageUtils {
|
|
|
48
60
|
|
|
49
61
|
}
|
|
50
62
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
console.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );
|
|
54
|
-
|
|
55
|
-
return canvas.toDataURL( 'image/jpeg', 0.6 );
|
|
56
|
-
|
|
57
|
-
} else {
|
|
58
|
-
|
|
59
|
-
return canvas.toDataURL( 'image/png' );
|
|
60
|
-
|
|
61
|
-
}
|
|
63
|
+
return canvas.toDataURL( type );
|
|
62
64
|
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Converts the given sRGB image data to linear color space.
|
|
69
|
+
*
|
|
70
|
+
* @param {(HTMLImageElement|HTMLCanvasElement|ImageBitmap|Object)} image - The image object.
|
|
71
|
+
* @return {HTMLCanvasElement|Object} The converted image.
|
|
72
|
+
*/
|
|
65
73
|
static sRGBToLinear( image ) {
|
|
66
74
|
|
|
67
75
|
if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
|
|
@@ -117,7 +125,7 @@ class ImageUtils {
|
|
|
117
125
|
|
|
118
126
|
} else {
|
|
119
127
|
|
|
120
|
-
|
|
128
|
+
warn( 'ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
|
|
121
129
|
return image;
|
|
122
130
|
|
|
123
131
|
}
|
|
@@ -22,19 +22,22 @@ 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';
|
|
25
26
|
|
|
26
27
|
const LOD_MIN = 4;
|
|
27
28
|
|
|
28
|
-
// The standard deviations (radians) associated with the extra mips.
|
|
29
|
-
//
|
|
30
|
-
// geometric shadowing function. These sigma values squared must match the
|
|
31
|
-
// variance #defines in cube_uv_reflection_fragment.glsl.js.
|
|
29
|
+
// The standard deviations (radians) associated with the extra mips.
|
|
30
|
+
// Used for scene blur in fromScene() method.
|
|
32
31
|
const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
33
32
|
|
|
34
33
|
// The maximum length of the blur for loop. Smaller sigmas will use fewer
|
|
35
34
|
// samples and exit early, but not recompile the shader.
|
|
35
|
+
// Used for scene blur in fromScene() method.
|
|
36
36
|
const MAX_SAMPLES = 20;
|
|
37
37
|
|
|
38
|
+
// GGX VNDF importance sampling configuration
|
|
39
|
+
const GGX_SAMPLES = 256;
|
|
40
|
+
|
|
38
41
|
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
39
42
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
40
43
|
let _oldTarget = null;
|
|
@@ -42,23 +45,7 @@ let _oldActiveCubeFace = 0;
|
|
|
42
45
|
let _oldActiveMipmapLevel = 0;
|
|
43
46
|
let _oldXrEnabled = false;
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
47
|
-
const INV_PHI = 1 / PHI;
|
|
48
|
-
|
|
49
|
-
// Vertices of a dodecahedron (except the opposites, which represent the
|
|
50
|
-
// same axis), used as axis directions evenly spread on a sphere.
|
|
51
|
-
const _axisDirections = [
|
|
52
|
-
/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
|
|
53
|
-
/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
|
|
54
|
-
/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
|
|
55
|
-
/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
|
|
56
|
-
/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
|
|
57
|
-
/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
|
|
58
|
-
/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
|
|
59
|
-
/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
|
|
60
|
-
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
61
|
-
/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
|
|
48
|
+
const _origin = /*@__PURE__*/ new Vector3();
|
|
62
49
|
|
|
63
50
|
/**
|
|
64
51
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -71,12 +58,18 @@ const _axisDirections = [
|
|
|
71
58
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
72
59
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
73
60
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
* The prefiltering uses GGX VNDF (Visible Normal Distribution Function)
|
|
62
|
+
* importance sampling based on "Sampling the GGX Distribution of Visible Normals"
|
|
63
|
+
* (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF
|
|
64
|
+
* used in material rendering for physically-based image-based lighting.
|
|
65
|
+
*/
|
|
78
66
|
class PMREMGenerator {
|
|
79
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Constructs a new PMREM generator.
|
|
70
|
+
*
|
|
71
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
72
|
+
*/
|
|
80
73
|
constructor( renderer ) {
|
|
81
74
|
|
|
82
75
|
this._renderer = renderer;
|
|
@@ -84,15 +77,17 @@ class PMREMGenerator {
|
|
|
84
77
|
|
|
85
78
|
this._lodMax = 0;
|
|
86
79
|
this._cubeSize = 0;
|
|
87
|
-
this._lodPlanes = [];
|
|
88
80
|
this._sizeLods = [];
|
|
89
81
|
this._sigmas = [];
|
|
82
|
+
this._lodMeshes = [];
|
|
83
|
+
|
|
84
|
+
this._backgroundBox = null;
|
|
90
85
|
|
|
91
|
-
this._blurMaterial = null;
|
|
92
86
|
this._cubemapMaterial = null;
|
|
93
87
|
this._equirectMaterial = null;
|
|
94
88
|
|
|
95
|
-
this.
|
|
89
|
+
this._blurMaterial = null;
|
|
90
|
+
this._ggxMaterial = null;
|
|
96
91
|
|
|
97
92
|
}
|
|
98
93
|
|
|
@@ -100,10 +95,23 @@ class PMREMGenerator {
|
|
|
100
95
|
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
101
96
|
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
102
97
|
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
103
|
-
* and far planes ensure the scene is rendered in its entirety
|
|
104
|
-
*
|
|
98
|
+
* and far planes ensure the scene is rendered in its entirety.
|
|
99
|
+
*
|
|
100
|
+
* @param {Scene} scene - The scene to be captured.
|
|
101
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
102
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
103
|
+
* @param {number} [far=100] - The far plane distance.
|
|
104
|
+
* @param {Object} [options={}] - The configuration options.
|
|
105
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
106
|
+
* @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
|
|
107
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
105
108
|
*/
|
|
106
|
-
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
109
|
+
fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
110
|
+
|
|
111
|
+
const {
|
|
112
|
+
size = 256,
|
|
113
|
+
position = _origin,
|
|
114
|
+
} = options;
|
|
107
115
|
|
|
108
116
|
_oldTarget = this._renderer.getRenderTarget();
|
|
109
117
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
@@ -112,12 +120,12 @@ class PMREMGenerator {
|
|
|
112
120
|
|
|
113
121
|
this._renderer.xr.enabled = false;
|
|
114
122
|
|
|
115
|
-
this._setSize(
|
|
123
|
+
this._setSize( size );
|
|
116
124
|
|
|
117
125
|
const cubeUVRenderTarget = this._allocateTargets();
|
|
118
126
|
cubeUVRenderTarget.depthBuffer = true;
|
|
119
127
|
|
|
120
|
-
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
|
|
128
|
+
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
|
|
121
129
|
|
|
122
130
|
if ( sigma > 0 ) {
|
|
123
131
|
|
|
@@ -136,7 +144,10 @@ class PMREMGenerator {
|
|
|
136
144
|
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
137
145
|
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
138
146
|
* as this matches best with the 256 x 256 cubemap output.
|
|
139
|
-
*
|
|
147
|
+
*
|
|
148
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
149
|
+
* @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.
|
|
150
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
140
151
|
*/
|
|
141
152
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
142
153
|
|
|
@@ -148,7 +159,10 @@ class PMREMGenerator {
|
|
|
148
159
|
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
149
160
|
* or HDR. The ideal input cube size is 256 x 256,
|
|
150
161
|
* as this matches best with the 256 x 256 cubemap output.
|
|
151
|
-
*
|
|
162
|
+
*
|
|
163
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
164
|
+
* @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.
|
|
165
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
152
166
|
*/
|
|
153
167
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
154
168
|
|
|
@@ -198,6 +212,13 @@ class PMREMGenerator {
|
|
|
198
212
|
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
199
213
|
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
200
214
|
|
|
215
|
+
if ( this._backgroundBox !== null ) {
|
|
216
|
+
|
|
217
|
+
this._backgroundBox.geometry.dispose();
|
|
218
|
+
this._backgroundBox.material.dispose();
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
201
222
|
}
|
|
202
223
|
|
|
203
224
|
// private interface
|
|
@@ -212,12 +233,13 @@ class PMREMGenerator {
|
|
|
212
233
|
_dispose() {
|
|
213
234
|
|
|
214
235
|
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
236
|
+
if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
|
|
215
237
|
|
|
216
238
|
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
217
239
|
|
|
218
|
-
for ( let i = 0; i < this.
|
|
240
|
+
for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
|
|
219
241
|
|
|
220
|
-
this.
|
|
242
|
+
this._lodMeshes[ i ].geometry.dispose();
|
|
221
243
|
|
|
222
244
|
}
|
|
223
245
|
|
|
@@ -293,9 +315,10 @@ class PMREMGenerator {
|
|
|
293
315
|
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
294
316
|
|
|
295
317
|
const { _lodMax } = this;
|
|
296
|
-
( {
|
|
318
|
+
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
297
319
|
|
|
298
320
|
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
321
|
+
this._ggxMaterial = _getGGXShader( _lodMax, width, height );
|
|
299
322
|
|
|
300
323
|
}
|
|
301
324
|
|
|
@@ -305,12 +328,12 @@ class PMREMGenerator {
|
|
|
305
328
|
|
|
306
329
|
_compileMaterial( material ) {
|
|
307
330
|
|
|
308
|
-
const
|
|
309
|
-
this._renderer.compile(
|
|
331
|
+
const mesh = new Mesh( new BufferGeometry(), material );
|
|
332
|
+
this._renderer.compile( mesh, _flatCamera );
|
|
310
333
|
|
|
311
334
|
}
|
|
312
335
|
|
|
313
|
-
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
336
|
+
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
|
|
314
337
|
|
|
315
338
|
const fov = 90;
|
|
316
339
|
const aspect = 1;
|
|
@@ -326,16 +349,36 @@ class PMREMGenerator {
|
|
|
326
349
|
renderer.toneMapping = NoToneMapping;
|
|
327
350
|
renderer.autoClear = false;
|
|
328
351
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
side: BackSide,
|
|
332
|
-
depthWrite: false,
|
|
333
|
-
depthTest: false,
|
|
334
|
-
} );
|
|
352
|
+
// https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812
|
|
353
|
+
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
335
354
|
|
|
336
|
-
|
|
355
|
+
if ( reversedDepthBuffer ) {
|
|
356
|
+
|
|
357
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
358
|
+
renderer.clearDepth();
|
|
359
|
+
renderer.setRenderTarget( null );
|
|
360
|
+
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if ( this._backgroundBox === null ) {
|
|
364
|
+
|
|
365
|
+
this._backgroundBox = new Mesh(
|
|
366
|
+
new BoxGeometry(),
|
|
367
|
+
new MeshBasicMaterial( {
|
|
368
|
+
name: 'PMREM.Background',
|
|
369
|
+
side: BackSide,
|
|
370
|
+
depthWrite: false,
|
|
371
|
+
depthTest: false,
|
|
372
|
+
} )
|
|
373
|
+
);
|
|
374
|
+
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
const backgroundBox = this._backgroundBox;
|
|
378
|
+
const backgroundMaterial = backgroundBox.material;
|
|
337
379
|
|
|
338
380
|
let useSolidColor = false;
|
|
381
|
+
|
|
339
382
|
const background = scene.background;
|
|
340
383
|
|
|
341
384
|
if ( background ) {
|
|
@@ -362,17 +405,21 @@ class PMREMGenerator {
|
|
|
362
405
|
if ( col === 0 ) {
|
|
363
406
|
|
|
364
407
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
365
|
-
cubeCamera.
|
|
408
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
409
|
+
cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
|
|
366
410
|
|
|
367
411
|
} else if ( col === 1 ) {
|
|
368
412
|
|
|
369
413
|
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
370
|
-
cubeCamera.
|
|
414
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
415
|
+
cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
|
|
416
|
+
|
|
371
417
|
|
|
372
418
|
} else {
|
|
373
419
|
|
|
374
420
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
375
|
-
cubeCamera.
|
|
421
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
422
|
+
cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
|
|
376
423
|
|
|
377
424
|
}
|
|
378
425
|
|
|
@@ -392,9 +439,6 @@ class PMREMGenerator {
|
|
|
392
439
|
|
|
393
440
|
}
|
|
394
441
|
|
|
395
|
-
backgroundBox.geometry.dispose();
|
|
396
|
-
backgroundBox.material.dispose();
|
|
397
|
-
|
|
398
442
|
renderer.toneMapping = toneMapping;
|
|
399
443
|
renderer.autoClear = originalAutoClear;
|
|
400
444
|
scene.background = background;
|
|
@@ -428,7 +472,9 @@ class PMREMGenerator {
|
|
|
428
472
|
}
|
|
429
473
|
|
|
430
474
|
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
431
|
-
|
|
475
|
+
|
|
476
|
+
const mesh = this._lodMeshes[ 0 ];
|
|
477
|
+
mesh.material = material;
|
|
432
478
|
|
|
433
479
|
const uniforms = material.uniforms;
|
|
434
480
|
|
|
@@ -448,15 +494,13 @@ class PMREMGenerator {
|
|
|
448
494
|
const renderer = this._renderer;
|
|
449
495
|
const autoClear = renderer.autoClear;
|
|
450
496
|
renderer.autoClear = false;
|
|
451
|
-
const n = this._lodPlanes.length;
|
|
452
497
|
|
|
453
|
-
|
|
498
|
+
const n = this._lodMeshes.length;
|
|
454
499
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
|
|
500
|
+
// Use GGX VNDF importance sampling
|
|
501
|
+
for ( let i = 1; i < n; i ++ ) {
|
|
458
502
|
|
|
459
|
-
this.
|
|
503
|
+
this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
|
|
460
504
|
|
|
461
505
|
}
|
|
462
506
|
|
|
@@ -464,12 +508,78 @@ class PMREMGenerator {
|
|
|
464
508
|
|
|
465
509
|
}
|
|
466
510
|
|
|
511
|
+
/**
|
|
512
|
+
* Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
|
|
513
|
+
* Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
|
|
514
|
+
* GGX BRDF for physically-based rendering. Reads from the previous LOD level and
|
|
515
|
+
* applies incremental roughness filtering to avoid over-blurring.
|
|
516
|
+
*
|
|
517
|
+
* @private
|
|
518
|
+
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
519
|
+
* @param {number} lodIn - Source LOD level to read from
|
|
520
|
+
* @param {number} lodOut - Target LOD level to write to
|
|
521
|
+
*/
|
|
522
|
+
_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
|
|
523
|
+
|
|
524
|
+
const renderer = this._renderer;
|
|
525
|
+
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
526
|
+
|
|
527
|
+
const ggxMaterial = this._ggxMaterial;
|
|
528
|
+
const ggxMesh = this._lodMeshes[ lodOut ];
|
|
529
|
+
ggxMesh.material = ggxMaterial;
|
|
530
|
+
|
|
531
|
+
const ggxUniforms = ggxMaterial.uniforms;
|
|
532
|
+
|
|
533
|
+
// Calculate incremental roughness between LOD levels
|
|
534
|
+
const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
|
|
535
|
+
const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
|
|
536
|
+
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
537
|
+
|
|
538
|
+
// Apply blur strength mapping for better quality across the roughness range
|
|
539
|
+
const blurStrength = 0.0 + targetRoughness * 1.25;
|
|
540
|
+
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
541
|
+
|
|
542
|
+
// Calculate viewport position based on output LOD level
|
|
543
|
+
const { _lodMax } = this;
|
|
544
|
+
const outputSize = this._sizeLods[ lodOut ];
|
|
545
|
+
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
546
|
+
const y = 4 * ( this._cubeSize - outputSize );
|
|
547
|
+
|
|
548
|
+
// Read from previous LOD with incremental roughness
|
|
549
|
+
ggxUniforms[ 'envMap' ].value = cubeUVRenderTarget.texture;
|
|
550
|
+
ggxUniforms[ 'roughness' ].value = adjustedRoughness;
|
|
551
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodIn; // Sample from input LOD
|
|
552
|
+
|
|
553
|
+
_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
554
|
+
renderer.setRenderTarget( pingPongRenderTarget );
|
|
555
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
556
|
+
|
|
557
|
+
// Copy from pingPong back to cubeUV (simple direct copy)
|
|
558
|
+
ggxUniforms[ 'envMap' ].value = pingPongRenderTarget.texture;
|
|
559
|
+
ggxUniforms[ 'roughness' ].value = 0.0; // Direct copy
|
|
560
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodOut; // Read from the level we just wrote
|
|
561
|
+
|
|
562
|
+
_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
563
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
564
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
565
|
+
|
|
566
|
+
}
|
|
567
|
+
|
|
467
568
|
/**
|
|
468
569
|
* This is a two-pass Gaussian blur for a cubemap. Normally this is done
|
|
469
570
|
* vertically and horizontally, but this breaks down on a cube. Here we apply
|
|
470
571
|
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
471
572
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
472
573
|
* accurate at the poles, but still does a decent job.
|
|
574
|
+
*
|
|
575
|
+
* Used for initial scene blur in fromScene() method when sigma > 0.
|
|
576
|
+
*
|
|
577
|
+
* @private
|
|
578
|
+
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
579
|
+
* @param {number} lodIn
|
|
580
|
+
* @param {number} lodOut
|
|
581
|
+
* @param {number} sigma
|
|
582
|
+
* @param {Vector3} [poleAxis]
|
|
473
583
|
*/
|
|
474
584
|
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
475
585
|
|
|
@@ -502,7 +612,7 @@ class PMREMGenerator {
|
|
|
502
612
|
|
|
503
613
|
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
504
614
|
|
|
505
|
-
|
|
615
|
+
error(
|
|
506
616
|
'blur direction must be either latitudinal or longitudinal!' );
|
|
507
617
|
|
|
508
618
|
}
|
|
@@ -510,7 +620,9 @@ class PMREMGenerator {
|
|
|
510
620
|
// Number of standard deviations at which to cut off the discrete approximation.
|
|
511
621
|
const STANDARD_DEVIATIONS = 3;
|
|
512
622
|
|
|
513
|
-
const blurMesh =
|
|
623
|
+
const blurMesh = this._lodMeshes[ lodOut ];
|
|
624
|
+
blurMesh.material = blurMaterial;
|
|
625
|
+
|
|
514
626
|
const blurUniforms = blurMaterial.uniforms;
|
|
515
627
|
|
|
516
628
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
@@ -520,7 +632,7 @@ class PMREMGenerator {
|
|
|
520
632
|
|
|
521
633
|
if ( samples > MAX_SAMPLES ) {
|
|
522
634
|
|
|
523
|
-
|
|
635
|
+
warn( `sigmaRadians, ${
|
|
524
636
|
sigmaRadians}, is too large and will clip, as it requested ${
|
|
525
637
|
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
526
638
|
|
|
@@ -584,9 +696,9 @@ class PMREMGenerator {
|
|
|
584
696
|
|
|
585
697
|
function _createPlanes( lodMax ) {
|
|
586
698
|
|
|
587
|
-
const lodPlanes = [];
|
|
588
699
|
const sizeLods = [];
|
|
589
700
|
const sigmas = [];
|
|
701
|
+
const lodMeshes = [];
|
|
590
702
|
|
|
591
703
|
let lod = lodMax;
|
|
592
704
|
|
|
@@ -648,7 +760,7 @@ function _createPlanes( lodMax ) {
|
|
|
648
760
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
649
761
|
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
650
762
|
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
651
|
-
|
|
763
|
+
lodMeshes.push( new Mesh( planes, null ) );
|
|
652
764
|
|
|
653
765
|
if ( lod > LOD_MIN ) {
|
|
654
766
|
|
|
@@ -658,7 +770,7 @@ function _createPlanes( lodMax ) {
|
|
|
658
770
|
|
|
659
771
|
}
|
|
660
772
|
|
|
661
|
-
return {
|
|
773
|
+
return { lodMeshes, sizeLods, sigmas };
|
|
662
774
|
|
|
663
775
|
}
|
|
664
776
|
|
|
@@ -679,6 +791,143 @@ function _setViewport( target, x, y, width, height ) {
|
|
|
679
791
|
|
|
680
792
|
}
|
|
681
793
|
|
|
794
|
+
function _getGGXShader( lodMax, width, height ) {
|
|
795
|
+
|
|
796
|
+
const shaderMaterial = new ShaderMaterial( {
|
|
797
|
+
|
|
798
|
+
name: 'PMREMGGXConvolution',
|
|
799
|
+
|
|
800
|
+
defines: {
|
|
801
|
+
'GGX_SAMPLES': GGX_SAMPLES,
|
|
802
|
+
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
803
|
+
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
804
|
+
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
805
|
+
},
|
|
806
|
+
|
|
807
|
+
uniforms: {
|
|
808
|
+
'envMap': { value: null },
|
|
809
|
+
'roughness': { value: 0.0 },
|
|
810
|
+
'mipInt': { value: 0 }
|
|
811
|
+
},
|
|
812
|
+
|
|
813
|
+
vertexShader: _getCommonVertexShader(),
|
|
814
|
+
|
|
815
|
+
fragmentShader: /* glsl */`
|
|
816
|
+
|
|
817
|
+
precision highp float;
|
|
818
|
+
precision highp int;
|
|
819
|
+
|
|
820
|
+
varying vec3 vOutputDirection;
|
|
821
|
+
|
|
822
|
+
uniform sampler2D envMap;
|
|
823
|
+
uniform float roughness;
|
|
824
|
+
uniform float mipInt;
|
|
825
|
+
|
|
826
|
+
#define ENVMAP_TYPE_CUBE_UV
|
|
827
|
+
#include <cube_uv_reflection_fragment>
|
|
828
|
+
|
|
829
|
+
#define PI 3.14159265359
|
|
830
|
+
|
|
831
|
+
// Van der Corput radical inverse
|
|
832
|
+
float radicalInverse_VdC(uint bits) {
|
|
833
|
+
bits = (bits << 16u) | (bits >> 16u);
|
|
834
|
+
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
|
|
835
|
+
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
|
|
836
|
+
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
|
|
837
|
+
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
|
|
838
|
+
return float(bits) * 2.3283064365386963e-10; // / 0x100000000
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
// Hammersley sequence
|
|
842
|
+
vec2 hammersley(uint i, uint N) {
|
|
843
|
+
return vec2(float(i) / float(N), radicalInverse_VdC(i));
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
// GGX VNDF importance sampling (Eric Heitz 2018)
|
|
847
|
+
// "Sampling the GGX Distribution of Visible Normals"
|
|
848
|
+
// https://jcgt.org/published/0007/04/01/
|
|
849
|
+
vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
|
|
850
|
+
float alpha = roughness * roughness;
|
|
851
|
+
|
|
852
|
+
// Section 4.1: Orthonormal basis
|
|
853
|
+
vec3 T1 = vec3(1.0, 0.0, 0.0);
|
|
854
|
+
vec3 T2 = cross(V, T1);
|
|
855
|
+
|
|
856
|
+
// Section 4.2: Parameterization of projected area
|
|
857
|
+
float r = sqrt(Xi.x);
|
|
858
|
+
float phi = 2.0 * PI * Xi.y;
|
|
859
|
+
float t1 = r * cos(phi);
|
|
860
|
+
float t2 = r * sin(phi);
|
|
861
|
+
float s = 0.5 * (1.0 + V.z);
|
|
862
|
+
t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;
|
|
863
|
+
|
|
864
|
+
// Section 4.3: Reprojection onto hemisphere
|
|
865
|
+
vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;
|
|
866
|
+
|
|
867
|
+
// Section 3.4: Transform back to ellipsoid configuration
|
|
868
|
+
return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
void main() {
|
|
872
|
+
vec3 N = normalize(vOutputDirection);
|
|
873
|
+
vec3 V = N; // Assume view direction equals normal for pre-filtering
|
|
874
|
+
|
|
875
|
+
vec3 prefilteredColor = vec3(0.0);
|
|
876
|
+
float totalWeight = 0.0;
|
|
877
|
+
|
|
878
|
+
// For very low roughness, just sample the environment directly
|
|
879
|
+
if (roughness < 0.001) {
|
|
880
|
+
gl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);
|
|
881
|
+
return;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// Tangent space basis for VNDF sampling
|
|
885
|
+
vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
|
|
886
|
+
vec3 tangent = normalize(cross(up, N));
|
|
887
|
+
vec3 bitangent = cross(N, tangent);
|
|
888
|
+
|
|
889
|
+
for(uint i = 0u; i < uint(GGX_SAMPLES); i++) {
|
|
890
|
+
vec2 Xi = hammersley(i, uint(GGX_SAMPLES));
|
|
891
|
+
|
|
892
|
+
// For PMREM, V = N, so in tangent space V is always (0, 0, 1)
|
|
893
|
+
vec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);
|
|
894
|
+
|
|
895
|
+
// Transform H back to world space
|
|
896
|
+
vec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);
|
|
897
|
+
vec3 L = normalize(2.0 * dot(V, H) * H - V);
|
|
898
|
+
|
|
899
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
900
|
+
|
|
901
|
+
if(NdotL > 0.0) {
|
|
902
|
+
// Sample environment at fixed mip level
|
|
903
|
+
// VNDF importance sampling handles the distribution filtering
|
|
904
|
+
vec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);
|
|
905
|
+
|
|
906
|
+
// Weight by NdotL for the split-sum approximation
|
|
907
|
+
// VNDF PDF naturally accounts for the visible microfacet distribution
|
|
908
|
+
prefilteredColor += sampleColor * NdotL;
|
|
909
|
+
totalWeight += NdotL;
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
if (totalWeight > 0.0) {
|
|
914
|
+
prefilteredColor = prefilteredColor / totalWeight;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
gl_FragColor = vec4(prefilteredColor, 1.0);
|
|
918
|
+
}
|
|
919
|
+
`,
|
|
920
|
+
|
|
921
|
+
blending: NoBlending,
|
|
922
|
+
depthTest: false,
|
|
923
|
+
depthWrite: false
|
|
924
|
+
|
|
925
|
+
} );
|
|
926
|
+
|
|
927
|
+
return shaderMaterial;
|
|
928
|
+
|
|
929
|
+
}
|
|
930
|
+
|
|
682
931
|
function _getBlurShader( lodMax, width, height ) {
|
|
683
932
|
|
|
684
933
|
const weights = new Float32Array( MAX_SAMPLES );
|