super-three 0.179.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- 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 +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -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 +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- 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 +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- 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/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -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/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
package/src/extras/Controls.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventDispatcher } from '../core/EventDispatcher.js';
|
|
2
|
+
import { warn } from '../utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Abstract base class for controls.
|
|
@@ -12,7 +13,7 @@ class Controls extends EventDispatcher {
|
|
|
12
13
|
* Constructs a new controls instance.
|
|
13
14
|
*
|
|
14
15
|
* @param {Object3D} object - The object that is managed by the controls.
|
|
15
|
-
* @param {?
|
|
16
|
+
* @param {?HTMLElement} domElement - The HTML element used for event listeners.
|
|
16
17
|
*/
|
|
17
18
|
constructor( object, domElement = null ) {
|
|
18
19
|
|
|
@@ -28,7 +29,7 @@ class Controls extends EventDispatcher {
|
|
|
28
29
|
/**
|
|
29
30
|
* The HTML element used for event listeners.
|
|
30
31
|
*
|
|
31
|
-
* @type {?
|
|
32
|
+
* @type {?HTMLElement}
|
|
32
33
|
* @default null
|
|
33
34
|
*/
|
|
34
35
|
this.domElement = domElement;
|
|
@@ -78,13 +79,13 @@ class Controls extends EventDispatcher {
|
|
|
78
79
|
* Connects the controls to the DOM. This method has so called "side effects" since
|
|
79
80
|
* it adds the module's event listeners to the DOM.
|
|
80
81
|
*
|
|
81
|
-
* @param {
|
|
82
|
+
* @param {HTMLElement} element - The DOM element to connect to.
|
|
82
83
|
*/
|
|
83
84
|
connect( element ) {
|
|
84
85
|
|
|
85
86
|
if ( element === undefined ) {
|
|
86
87
|
|
|
87
|
-
|
|
88
|
+
warn( 'Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185
|
|
88
89
|
return;
|
|
89
90
|
|
|
90
91
|
}
|
package/src/extras/DataUtils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { clamp } from '../math/MathUtils.js';
|
|
2
|
+
import { warn } from '../utils.js';
|
|
2
3
|
|
|
3
4
|
// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
|
|
4
5
|
|
|
@@ -148,7 +149,7 @@ function _generateTables() {
|
|
|
148
149
|
*/
|
|
149
150
|
function toHalfFloat( val ) {
|
|
150
151
|
|
|
151
|
-
if ( Math.abs( val ) > 65504 )
|
|
152
|
+
if ( Math.abs( val ) > 65504 ) warn( 'DataUtils.toHalfFloat(): Value out of range.' );
|
|
152
153
|
|
|
153
154
|
val = clamp( val, - 65504, 65504 );
|
|
154
155
|
|
package/src/extras/Earcut.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import earcut from './lib/earcut.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* An implementation of the earcut polygon triangulation algorithm.
|
|
5
|
+
* The code is a port of [mapbox/earcut](https://github.com/mapbox/earcut).
|
|
6
|
+
*
|
|
7
|
+
* @see https://github.com/mapbox/earcut
|
|
8
|
+
*/
|
|
3
9
|
class Earcut {
|
|
4
10
|
|
|
5
11
|
/**
|
package/src/extras/ImageUtils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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;
|
|
@@ -125,7 +125,7 @@ class ImageUtils {
|
|
|
125
125
|
|
|
126
126
|
} else {
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
warn( 'ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
|
|
129
129
|
return image;
|
|
130
130
|
|
|
131
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,24 +45,6 @@ let _oldActiveCubeFace = 0;
|
|
|
42
45
|
let _oldActiveMipmapLevel = 0;
|
|
43
46
|
let _oldXrEnabled = false;
|
|
44
47
|
|
|
45
|
-
// Golden Ratio
|
|
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 ) ];
|
|
62
|
-
|
|
63
48
|
const _origin = /*@__PURE__*/ new Vector3();
|
|
64
49
|
|
|
65
50
|
/**
|
|
@@ -73,9 +58,11 @@ const _origin = /*@__PURE__*/ new Vector3();
|
|
|
73
58
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
74
59
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
75
60
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
|
|
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
|
+
*/
|
|
79
66
|
class PMREMGenerator {
|
|
80
67
|
|
|
81
68
|
/**
|
|
@@ -90,15 +77,17 @@ class PMREMGenerator {
|
|
|
90
77
|
|
|
91
78
|
this._lodMax = 0;
|
|
92
79
|
this._cubeSize = 0;
|
|
93
|
-
this._lodPlanes = [];
|
|
94
80
|
this._sizeLods = [];
|
|
95
81
|
this._sigmas = [];
|
|
82
|
+
this._lodMeshes = [];
|
|
83
|
+
|
|
84
|
+
this._backgroundBox = null;
|
|
96
85
|
|
|
97
|
-
this._blurMaterial = null;
|
|
98
86
|
this._cubemapMaterial = null;
|
|
99
87
|
this._equirectMaterial = null;
|
|
100
88
|
|
|
101
|
-
this.
|
|
89
|
+
this._blurMaterial = null;
|
|
90
|
+
this._ggxMaterial = null;
|
|
102
91
|
|
|
103
92
|
}
|
|
104
93
|
|
|
@@ -114,7 +103,7 @@ class PMREMGenerator {
|
|
|
114
103
|
* @param {number} [far=100] - The far plane distance.
|
|
115
104
|
* @param {Object} [options={}] - The configuration options.
|
|
116
105
|
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
117
|
-
* @param {Vector3} [options.
|
|
106
|
+
* @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
|
|
118
107
|
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
119
108
|
*/
|
|
120
109
|
fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
@@ -223,6 +212,13 @@ class PMREMGenerator {
|
|
|
223
212
|
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
224
213
|
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
225
214
|
|
|
215
|
+
if ( this._backgroundBox !== null ) {
|
|
216
|
+
|
|
217
|
+
this._backgroundBox.geometry.dispose();
|
|
218
|
+
this._backgroundBox.material.dispose();
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
226
222
|
}
|
|
227
223
|
|
|
228
224
|
// private interface
|
|
@@ -237,12 +233,13 @@ class PMREMGenerator {
|
|
|
237
233
|
_dispose() {
|
|
238
234
|
|
|
239
235
|
if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
|
|
236
|
+
if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
|
|
240
237
|
|
|
241
238
|
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
242
239
|
|
|
243
|
-
for ( let i = 0; i < this.
|
|
240
|
+
for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
|
|
244
241
|
|
|
245
|
-
this.
|
|
242
|
+
this._lodMeshes[ i ].geometry.dispose();
|
|
246
243
|
|
|
247
244
|
}
|
|
248
245
|
|
|
@@ -314,9 +311,10 @@ class PMREMGenerator {
|
|
|
314
311
|
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
315
312
|
|
|
316
313
|
const { _lodMax } = this;
|
|
317
|
-
( {
|
|
314
|
+
( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
318
315
|
|
|
319
316
|
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
317
|
+
this._ggxMaterial = _getGGXShader( _lodMax, width, height );
|
|
320
318
|
|
|
321
319
|
}
|
|
322
320
|
|
|
@@ -326,8 +324,8 @@ class PMREMGenerator {
|
|
|
326
324
|
|
|
327
325
|
_compileMaterial( material ) {
|
|
328
326
|
|
|
329
|
-
const
|
|
330
|
-
this._renderer.compile(
|
|
327
|
+
const mesh = new Mesh( new BufferGeometry(), material );
|
|
328
|
+
this._renderer.compile( mesh, _flatCamera );
|
|
331
329
|
|
|
332
330
|
}
|
|
333
331
|
|
|
@@ -358,16 +356,25 @@ class PMREMGenerator {
|
|
|
358
356
|
|
|
359
357
|
}
|
|
360
358
|
|
|
361
|
-
|
|
362
|
-
name: 'PMREM.Background',
|
|
363
|
-
side: BackSide,
|
|
364
|
-
depthWrite: false,
|
|
365
|
-
depthTest: false,
|
|
366
|
-
} );
|
|
359
|
+
if ( this._backgroundBox === null ) {
|
|
367
360
|
|
|
368
|
-
|
|
361
|
+
this._backgroundBox = new Mesh(
|
|
362
|
+
new BoxGeometry(),
|
|
363
|
+
new MeshBasicMaterial( {
|
|
364
|
+
name: 'PMREM.Background',
|
|
365
|
+
side: BackSide,
|
|
366
|
+
depthWrite: false,
|
|
367
|
+
depthTest: false,
|
|
368
|
+
} )
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const backgroundBox = this._backgroundBox;
|
|
374
|
+
const backgroundMaterial = backgroundBox.material;
|
|
369
375
|
|
|
370
376
|
let useSolidColor = false;
|
|
377
|
+
|
|
371
378
|
const background = scene.background;
|
|
372
379
|
|
|
373
380
|
if ( background ) {
|
|
@@ -428,9 +435,6 @@ class PMREMGenerator {
|
|
|
428
435
|
|
|
429
436
|
}
|
|
430
437
|
|
|
431
|
-
backgroundBox.geometry.dispose();
|
|
432
|
-
backgroundBox.material.dispose();
|
|
433
|
-
|
|
434
438
|
renderer.toneMapping = toneMapping;
|
|
435
439
|
renderer.autoClear = originalAutoClear;
|
|
436
440
|
scene.background = background;
|
|
@@ -464,7 +468,9 @@ class PMREMGenerator {
|
|
|
464
468
|
}
|
|
465
469
|
|
|
466
470
|
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
467
|
-
|
|
471
|
+
|
|
472
|
+
const mesh = this._lodMeshes[ 0 ];
|
|
473
|
+
mesh.material = material;
|
|
468
474
|
|
|
469
475
|
const uniforms = material.uniforms;
|
|
470
476
|
|
|
@@ -484,15 +490,13 @@ class PMREMGenerator {
|
|
|
484
490
|
const renderer = this._renderer;
|
|
485
491
|
const autoClear = renderer.autoClear;
|
|
486
492
|
renderer.autoClear = false;
|
|
487
|
-
const n = this._lodPlanes.length;
|
|
488
|
-
|
|
489
|
-
for ( let i = 1; i < n; i ++ ) {
|
|
490
493
|
|
|
491
|
-
|
|
494
|
+
const n = this._lodMeshes.length;
|
|
492
495
|
|
|
493
|
-
|
|
496
|
+
// Use GGX VNDF importance sampling
|
|
497
|
+
for ( let i = 1; i < n; i ++ ) {
|
|
494
498
|
|
|
495
|
-
this.
|
|
499
|
+
this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
|
|
496
500
|
|
|
497
501
|
}
|
|
498
502
|
|
|
@@ -500,6 +504,63 @@ class PMREMGenerator {
|
|
|
500
504
|
|
|
501
505
|
}
|
|
502
506
|
|
|
507
|
+
/**
|
|
508
|
+
* Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
|
|
509
|
+
* Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
|
|
510
|
+
* GGX BRDF for physically-based rendering. Reads from the previous LOD level and
|
|
511
|
+
* applies incremental roughness filtering to avoid over-blurring.
|
|
512
|
+
*
|
|
513
|
+
* @private
|
|
514
|
+
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
515
|
+
* @param {number} lodIn - Source LOD level to read from
|
|
516
|
+
* @param {number} lodOut - Target LOD level to write to
|
|
517
|
+
*/
|
|
518
|
+
_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
|
|
519
|
+
|
|
520
|
+
const renderer = this._renderer;
|
|
521
|
+
const pingPongRenderTarget = this._pingPongRenderTarget;
|
|
522
|
+
|
|
523
|
+
const ggxMaterial = this._ggxMaterial;
|
|
524
|
+
const ggxMesh = this._lodMeshes[ lodOut ];
|
|
525
|
+
ggxMesh.material = ggxMaterial;
|
|
526
|
+
|
|
527
|
+
const ggxUniforms = ggxMaterial.uniforms;
|
|
528
|
+
|
|
529
|
+
// Calculate incremental roughness between LOD levels
|
|
530
|
+
const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
|
|
531
|
+
const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
|
|
532
|
+
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
533
|
+
|
|
534
|
+
// Apply blur strength mapping for better quality across the roughness range
|
|
535
|
+
const blurStrength = 0.0 + targetRoughness * 1.25;
|
|
536
|
+
const adjustedRoughness = incrementalRoughness * blurStrength;
|
|
537
|
+
|
|
538
|
+
// Calculate viewport position based on output LOD level
|
|
539
|
+
const { _lodMax } = this;
|
|
540
|
+
const outputSize = this._sizeLods[ lodOut ];
|
|
541
|
+
const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
|
|
542
|
+
const y = 4 * ( this._cubeSize - outputSize );
|
|
543
|
+
|
|
544
|
+
// Read from previous LOD with incremental roughness
|
|
545
|
+
ggxUniforms[ 'envMap' ].value = cubeUVRenderTarget.texture;
|
|
546
|
+
ggxUniforms[ 'roughness' ].value = adjustedRoughness;
|
|
547
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodIn; // Sample from input LOD
|
|
548
|
+
|
|
549
|
+
_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
550
|
+
renderer.setRenderTarget( pingPongRenderTarget );
|
|
551
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
552
|
+
|
|
553
|
+
// Copy from pingPong back to cubeUV (simple direct copy)
|
|
554
|
+
ggxUniforms[ 'envMap' ].value = pingPongRenderTarget.texture;
|
|
555
|
+
ggxUniforms[ 'roughness' ].value = 0.0; // Direct copy
|
|
556
|
+
ggxUniforms[ 'mipInt' ].value = _lodMax - lodOut; // Read from the level we just wrote
|
|
557
|
+
|
|
558
|
+
_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
|
|
559
|
+
renderer.setRenderTarget( cubeUVRenderTarget );
|
|
560
|
+
renderer.render( ggxMesh, _flatCamera );
|
|
561
|
+
|
|
562
|
+
}
|
|
563
|
+
|
|
503
564
|
/**
|
|
504
565
|
* This is a two-pass Gaussian blur for a cubemap. Normally this is done
|
|
505
566
|
* vertically and horizontally, but this breaks down on a cube. Here we apply
|
|
@@ -507,6 +568,8 @@ class PMREMGenerator {
|
|
|
507
568
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
508
569
|
* accurate at the poles, but still does a decent job.
|
|
509
570
|
*
|
|
571
|
+
* Used for initial scene blur in fromScene() method when sigma > 0.
|
|
572
|
+
*
|
|
510
573
|
* @private
|
|
511
574
|
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
512
575
|
* @param {number} lodIn
|
|
@@ -545,7 +608,7 @@ class PMREMGenerator {
|
|
|
545
608
|
|
|
546
609
|
if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
|
|
547
610
|
|
|
548
|
-
|
|
611
|
+
error(
|
|
549
612
|
'blur direction must be either latitudinal or longitudinal!' );
|
|
550
613
|
|
|
551
614
|
}
|
|
@@ -553,7 +616,9 @@ class PMREMGenerator {
|
|
|
553
616
|
// Number of standard deviations at which to cut off the discrete approximation.
|
|
554
617
|
const STANDARD_DEVIATIONS = 3;
|
|
555
618
|
|
|
556
|
-
const blurMesh =
|
|
619
|
+
const blurMesh = this._lodMeshes[ lodOut ];
|
|
620
|
+
blurMesh.material = blurMaterial;
|
|
621
|
+
|
|
557
622
|
const blurUniforms = blurMaterial.uniforms;
|
|
558
623
|
|
|
559
624
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
@@ -563,7 +628,7 @@ class PMREMGenerator {
|
|
|
563
628
|
|
|
564
629
|
if ( samples > MAX_SAMPLES ) {
|
|
565
630
|
|
|
566
|
-
|
|
631
|
+
warn( `sigmaRadians, ${
|
|
567
632
|
sigmaRadians}, is too large and will clip, as it requested ${
|
|
568
633
|
samples} samples when the maximum is set to ${MAX_SAMPLES}` );
|
|
569
634
|
|
|
@@ -627,9 +692,9 @@ class PMREMGenerator {
|
|
|
627
692
|
|
|
628
693
|
function _createPlanes( lodMax ) {
|
|
629
694
|
|
|
630
|
-
const lodPlanes = [];
|
|
631
695
|
const sizeLods = [];
|
|
632
696
|
const sigmas = [];
|
|
697
|
+
const lodMeshes = [];
|
|
633
698
|
|
|
634
699
|
let lod = lodMax;
|
|
635
700
|
|
|
@@ -691,7 +756,7 @@ function _createPlanes( lodMax ) {
|
|
|
691
756
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
692
757
|
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
693
758
|
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
694
|
-
|
|
759
|
+
lodMeshes.push( new Mesh( planes, null ) );
|
|
695
760
|
|
|
696
761
|
if ( lod > LOD_MIN ) {
|
|
697
762
|
|
|
@@ -701,7 +766,7 @@ function _createPlanes( lodMax ) {
|
|
|
701
766
|
|
|
702
767
|
}
|
|
703
768
|
|
|
704
|
-
return {
|
|
769
|
+
return { lodMeshes, sizeLods, sigmas };
|
|
705
770
|
|
|
706
771
|
}
|
|
707
772
|
|
|
@@ -722,6 +787,143 @@ function _setViewport( target, x, y, width, height ) {
|
|
|
722
787
|
|
|
723
788
|
}
|
|
724
789
|
|
|
790
|
+
function _getGGXShader( lodMax, width, height ) {
|
|
791
|
+
|
|
792
|
+
const shaderMaterial = new ShaderMaterial( {
|
|
793
|
+
|
|
794
|
+
name: 'PMREMGGXConvolution',
|
|
795
|
+
|
|
796
|
+
defines: {
|
|
797
|
+
'GGX_SAMPLES': GGX_SAMPLES,
|
|
798
|
+
'CUBEUV_TEXEL_WIDTH': 1.0 / width,
|
|
799
|
+
'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
|
|
800
|
+
'CUBEUV_MAX_MIP': `${lodMax}.0`,
|
|
801
|
+
},
|
|
802
|
+
|
|
803
|
+
uniforms: {
|
|
804
|
+
'envMap': { value: null },
|
|
805
|
+
'roughness': { value: 0.0 },
|
|
806
|
+
'mipInt': { value: 0 }
|
|
807
|
+
},
|
|
808
|
+
|
|
809
|
+
vertexShader: _getCommonVertexShader(),
|
|
810
|
+
|
|
811
|
+
fragmentShader: /* glsl */`
|
|
812
|
+
|
|
813
|
+
precision highp float;
|
|
814
|
+
precision highp int;
|
|
815
|
+
|
|
816
|
+
varying vec3 vOutputDirection;
|
|
817
|
+
|
|
818
|
+
uniform sampler2D envMap;
|
|
819
|
+
uniform float roughness;
|
|
820
|
+
uniform float mipInt;
|
|
821
|
+
|
|
822
|
+
#define ENVMAP_TYPE_CUBE_UV
|
|
823
|
+
#include <cube_uv_reflection_fragment>
|
|
824
|
+
|
|
825
|
+
#define PI 3.14159265359
|
|
826
|
+
|
|
827
|
+
// Van der Corput radical inverse
|
|
828
|
+
float radicalInverse_VdC(uint bits) {
|
|
829
|
+
bits = (bits << 16u) | (bits >> 16u);
|
|
830
|
+
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
|
|
831
|
+
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
|
|
832
|
+
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
|
|
833
|
+
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
|
|
834
|
+
return float(bits) * 2.3283064365386963e-10; // / 0x100000000
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
// Hammersley sequence
|
|
838
|
+
vec2 hammersley(uint i, uint N) {
|
|
839
|
+
return vec2(float(i) / float(N), radicalInverse_VdC(i));
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
// GGX VNDF importance sampling (Eric Heitz 2018)
|
|
843
|
+
// "Sampling the GGX Distribution of Visible Normals"
|
|
844
|
+
// https://jcgt.org/published/0007/04/01/
|
|
845
|
+
vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
|
|
846
|
+
float alpha = roughness * roughness;
|
|
847
|
+
|
|
848
|
+
// Section 4.1: Orthonormal basis
|
|
849
|
+
vec3 T1 = vec3(1.0, 0.0, 0.0);
|
|
850
|
+
vec3 T2 = cross(V, T1);
|
|
851
|
+
|
|
852
|
+
// Section 4.2: Parameterization of projected area
|
|
853
|
+
float r = sqrt(Xi.x);
|
|
854
|
+
float phi = 2.0 * PI * Xi.y;
|
|
855
|
+
float t1 = r * cos(phi);
|
|
856
|
+
float t2 = r * sin(phi);
|
|
857
|
+
float s = 0.5 * (1.0 + V.z);
|
|
858
|
+
t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;
|
|
859
|
+
|
|
860
|
+
// Section 4.3: Reprojection onto hemisphere
|
|
861
|
+
vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;
|
|
862
|
+
|
|
863
|
+
// Section 3.4: Transform back to ellipsoid configuration
|
|
864
|
+
return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
void main() {
|
|
868
|
+
vec3 N = normalize(vOutputDirection);
|
|
869
|
+
vec3 V = N; // Assume view direction equals normal for pre-filtering
|
|
870
|
+
|
|
871
|
+
vec3 prefilteredColor = vec3(0.0);
|
|
872
|
+
float totalWeight = 0.0;
|
|
873
|
+
|
|
874
|
+
// For very low roughness, just sample the environment directly
|
|
875
|
+
if (roughness < 0.001) {
|
|
876
|
+
gl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
// Tangent space basis for VNDF sampling
|
|
881
|
+
vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
|
|
882
|
+
vec3 tangent = normalize(cross(up, N));
|
|
883
|
+
vec3 bitangent = cross(N, tangent);
|
|
884
|
+
|
|
885
|
+
for(uint i = 0u; i < uint(GGX_SAMPLES); i++) {
|
|
886
|
+
vec2 Xi = hammersley(i, uint(GGX_SAMPLES));
|
|
887
|
+
|
|
888
|
+
// For PMREM, V = N, so in tangent space V is always (0, 0, 1)
|
|
889
|
+
vec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);
|
|
890
|
+
|
|
891
|
+
// Transform H back to world space
|
|
892
|
+
vec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);
|
|
893
|
+
vec3 L = normalize(2.0 * dot(V, H) * H - V);
|
|
894
|
+
|
|
895
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
896
|
+
|
|
897
|
+
if(NdotL > 0.0) {
|
|
898
|
+
// Sample environment at fixed mip level
|
|
899
|
+
// VNDF importance sampling handles the distribution filtering
|
|
900
|
+
vec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);
|
|
901
|
+
|
|
902
|
+
// Weight by NdotL for the split-sum approximation
|
|
903
|
+
// VNDF PDF naturally accounts for the visible microfacet distribution
|
|
904
|
+
prefilteredColor += sampleColor * NdotL;
|
|
905
|
+
totalWeight += NdotL;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
if (totalWeight > 0.0) {
|
|
910
|
+
prefilteredColor = prefilteredColor / totalWeight;
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
gl_FragColor = vec4(prefilteredColor, 1.0);
|
|
914
|
+
}
|
|
915
|
+
`,
|
|
916
|
+
|
|
917
|
+
blending: NoBlending,
|
|
918
|
+
depthTest: false,
|
|
919
|
+
depthWrite: false
|
|
920
|
+
|
|
921
|
+
} );
|
|
922
|
+
|
|
923
|
+
return shaderMaterial;
|
|
924
|
+
|
|
925
|
+
}
|
|
926
|
+
|
|
725
927
|
function _getBlurShader( lodMax, width, height ) {
|
|
726
928
|
|
|
727
929
|
const weights = new Float32Array( MAX_SAMPLES );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type } from '../constants.js';
|
|
1
|
+
import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type } from '../constants.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Scales the texture as large as possible within its surface without cropping
|
|
@@ -140,8 +140,12 @@ function getByteLength( width, height, format, type ) {
|
|
|
140
140
|
// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/
|
|
141
141
|
case RGB_ETC1_Format:
|
|
142
142
|
case RGB_ETC2_Format:
|
|
143
|
+
case R11_EAC_Format:
|
|
144
|
+
case SIGNED_R11_EAC_Format:
|
|
143
145
|
return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;
|
|
144
146
|
case RGBA_ETC2_EAC_Format:
|
|
147
|
+
case RG11_EAC_Format:
|
|
148
|
+
case SIGNED_RG11_EAC_Format:
|
|
145
149
|
return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;
|
|
146
150
|
|
|
147
151
|
// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/
|
|
@@ -215,6 +219,7 @@ function getTextureTypeByteLength( type ) {
|
|
|
215
219
|
case FloatType:
|
|
216
220
|
return { byteLength: 4, components: 1 };
|
|
217
221
|
case UnsignedInt5999Type:
|
|
222
|
+
case UnsignedInt101111Type:
|
|
218
223
|
return { byteLength: 4, components: 3 };
|
|
219
224
|
|
|
220
225
|
}
|
package/src/extras/core/Curve.js
CHANGED
|
@@ -2,6 +2,7 @@ import { clamp } from '../../math/MathUtils.js';
|
|
|
2
2
|
import { Vector2 } from '../../math/Vector2.js';
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
4
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* An abstract base class for creating an analytic curve object that contains methods
|
|
@@ -66,7 +67,7 @@ class Curve {
|
|
|
66
67
|
*/
|
|
67
68
|
getPoint( /* t, optionalTarget */ ) {
|
|
68
69
|
|
|
69
|
-
|
|
70
|
+
warn( 'Curve: .getPoint() not implemented.' );
|
|
70
71
|
|
|
71
72
|
}
|
|
72
73
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Interpolations contains spline and Bézier functions internally used by concrete curve classes.
|
|
3
|
+
*
|
|
4
|
+
* Bezier Curves formulas obtained from: https://en.wikipedia.org/wiki/B%C3%A9zier_curve
|
|
5
|
+
*
|
|
6
|
+
* @module Interpolations
|
|
7
|
+
*/
|
|
2
8
|
|
|
3
9
|
/**
|
|
4
10
|
* Computes a point on a Catmull-Rom spline.
|
|
@@ -236,7 +236,7 @@ class ShapePath {
|
|
|
236
236
|
let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );
|
|
237
237
|
holesFirst = isCCW ? ! holesFirst : holesFirst;
|
|
238
238
|
|
|
239
|
-
//
|
|
239
|
+
// log("Holes first", holesFirst);
|
|
240
240
|
|
|
241
241
|
const betterShapeHoles = [];
|
|
242
242
|
const newShapes = [];
|
|
@@ -264,13 +264,13 @@ class ShapePath {
|
|
|
264
264
|
if ( holesFirst ) mainIdx ++;
|
|
265
265
|
newShapeHoles[ mainIdx ] = [];
|
|
266
266
|
|
|
267
|
-
//
|
|
267
|
+
//log('cw', i);
|
|
268
268
|
|
|
269
269
|
} else {
|
|
270
270
|
|
|
271
271
|
newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
|
|
272
272
|
|
|
273
|
-
//
|
|
273
|
+
//log('ccw', i);
|
|
274
274
|
|
|
275
275
|
}
|
|
276
276
|
|
|
@@ -355,7 +355,7 @@ class ShapePath {
|
|
|
355
355
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
//
|
|
358
|
+
//log("shape", shapes);
|
|
359
359
|
|
|
360
360
|
return shapes;
|
|
361
361
|
|
|
@@ -78,6 +78,7 @@ function CubicPoly() {
|
|
|
78
78
|
//
|
|
79
79
|
|
|
80
80
|
const tmp = /*@__PURE__*/ new Vector3();
|
|
81
|
+
const tmp2 = /*@__PURE__*/ new Vector3();
|
|
81
82
|
const px = /*@__PURE__*/ new CubicPoly();
|
|
82
83
|
const py = /*@__PURE__*/ new CubicPoly();
|
|
83
84
|
const pz = /*@__PURE__*/ new CubicPoly();
|
|
@@ -202,8 +203,8 @@ class CatmullRomCurve3 extends Curve {
|
|
|
202
203
|
} else {
|
|
203
204
|
|
|
204
205
|
// extrapolate first point
|
|
205
|
-
|
|
206
|
-
p0 =
|
|
206
|
+
tmp2.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
|
|
207
|
+
p0 = tmp2;
|
|
207
208
|
|
|
208
209
|
}
|
|
209
210
|
|