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
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
Color,
|
|
3
3
|
Matrix4,
|
|
4
4
|
Mesh,
|
|
5
|
-
PerspectiveCamera,
|
|
6
5
|
Plane,
|
|
7
6
|
ShaderMaterial,
|
|
8
7
|
UniformsUtils,
|
|
@@ -67,12 +66,12 @@ class Reflector extends Mesh {
|
|
|
67
66
|
this.forceUpdate = false;
|
|
68
67
|
|
|
69
68
|
/**
|
|
70
|
-
*
|
|
71
|
-
* the scene from the mirror's point of view.
|
|
69
|
+
* Weak map for managing reflection cameras.
|
|
72
70
|
*
|
|
73
|
-
* @
|
|
71
|
+
* @private
|
|
72
|
+
* @type {WeakMap<Camera, Camera>}
|
|
74
73
|
*/
|
|
75
|
-
this.
|
|
74
|
+
this._reflectionCameras = new WeakMap();
|
|
76
75
|
|
|
77
76
|
const scope = this;
|
|
78
77
|
|
|
@@ -98,7 +97,6 @@ class Reflector extends Mesh {
|
|
|
98
97
|
const q = new Vector4();
|
|
99
98
|
|
|
100
99
|
const textureMatrix = new Matrix4();
|
|
101
|
-
const virtualCamera = this.camera;
|
|
102
100
|
|
|
103
101
|
const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );
|
|
104
102
|
|
|
@@ -117,6 +115,8 @@ class Reflector extends Mesh {
|
|
|
117
115
|
|
|
118
116
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
119
117
|
|
|
118
|
+
const reflectionCamera = this._getReflectionCamera( camera );
|
|
119
|
+
|
|
120
120
|
reflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
|
|
121
121
|
cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );
|
|
122
122
|
|
|
@@ -145,16 +145,16 @@ class Reflector extends Mesh {
|
|
|
145
145
|
target.reflect( normal ).negate();
|
|
146
146
|
target.add( reflectorWorldPosition );
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
reflectionCamera.position.copy( view );
|
|
149
|
+
reflectionCamera.up.set( 0, 1, 0 );
|
|
150
|
+
reflectionCamera.up.applyMatrix4( rotationMatrix );
|
|
151
|
+
reflectionCamera.up.reflect( normal );
|
|
152
|
+
reflectionCamera.lookAt( target );
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
reflectionCamera.far = camera.far; // Used in WebGLBackground
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
reflectionCamera.updateMatrixWorld();
|
|
157
|
+
reflectionCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
158
158
|
|
|
159
159
|
// Update the texture matrix
|
|
160
160
|
textureMatrix.set(
|
|
@@ -163,23 +163,34 @@ class Reflector extends Mesh {
|
|
|
163
163
|
0.0, 0.0, 0.5, 0.5,
|
|
164
164
|
0.0, 0.0, 0.0, 1.0
|
|
165
165
|
);
|
|
166
|
-
textureMatrix.multiply(
|
|
167
|
-
textureMatrix.multiply(
|
|
166
|
+
textureMatrix.multiply( reflectionCamera.projectionMatrix );
|
|
167
|
+
textureMatrix.multiply( reflectionCamera.matrixWorldInverse );
|
|
168
168
|
textureMatrix.multiply( scope.matrixWorld );
|
|
169
169
|
|
|
170
170
|
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
171
171
|
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
172
172
|
reflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );
|
|
173
|
-
reflectorPlane.applyMatrix4(
|
|
173
|
+
reflectorPlane.applyMatrix4( reflectionCamera.matrixWorldInverse );
|
|
174
174
|
|
|
175
175
|
clipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );
|
|
176
176
|
|
|
177
|
-
const projectionMatrix =
|
|
177
|
+
const projectionMatrix = reflectionCamera.projectionMatrix;
|
|
178
|
+
|
|
179
|
+
if ( reflectionCamera.isOrthographicCamera ) {
|
|
180
|
+
|
|
181
|
+
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
182
|
+
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
183
|
+
q.z = - camera.far; // actual view-space z at the far plane, no normalization needed
|
|
184
|
+
q.w = 1.0; // w_clip = 1 in orthographic (no perspective division)
|
|
185
|
+
|
|
186
|
+
} else {
|
|
178
187
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
188
|
+
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
189
|
+
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
190
|
+
q.z = - 1.0;
|
|
191
|
+
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
192
|
+
|
|
193
|
+
}
|
|
183
194
|
|
|
184
195
|
// Calculate the scaled plane vector
|
|
185
196
|
clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
|
|
@@ -187,8 +198,21 @@ class Reflector extends Mesh {
|
|
|
187
198
|
// Replacing the third row of the projection matrix
|
|
188
199
|
projectionMatrix.elements[ 2 ] = clipPlane.x;
|
|
189
200
|
projectionMatrix.elements[ 6 ] = clipPlane.y;
|
|
190
|
-
|
|
191
|
-
|
|
201
|
+
|
|
202
|
+
if ( reflectionCamera.isOrthographicCamera ) {
|
|
203
|
+
|
|
204
|
+
// For orthographic cameras, w_clip = 1 always (no perspective division),
|
|
205
|
+
// so the -1 near-plane offset must go into the constant term (elements[14])
|
|
206
|
+
// rather than the z coefficient (elements[10]).
|
|
207
|
+
projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
|
|
208
|
+
projectionMatrix.elements[ 14 ] = clipPlane.w - 1.0;
|
|
209
|
+
|
|
210
|
+
} else {
|
|
211
|
+
|
|
212
|
+
projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
|
|
213
|
+
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
214
|
+
|
|
215
|
+
}
|
|
192
216
|
|
|
193
217
|
// Render
|
|
194
218
|
scope.visible = false;
|
|
@@ -206,7 +230,7 @@ class Reflector extends Mesh {
|
|
|
206
230
|
renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
|
|
207
231
|
|
|
208
232
|
if ( renderer.autoClear === false ) renderer.clear();
|
|
209
|
-
renderer.render( scene,
|
|
233
|
+
renderer.render( scene, reflectionCamera );
|
|
210
234
|
|
|
211
235
|
renderer.xr.enabled = currentXrEnabled;
|
|
212
236
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
@@ -250,6 +274,30 @@ class Reflector extends Mesh {
|
|
|
250
274
|
|
|
251
275
|
};
|
|
252
276
|
|
|
277
|
+
/**
|
|
278
|
+
* Returns a reflection camera for the given camera. The reflection camera is used to
|
|
279
|
+
* render the scene from the reflector's view so correct reflections can be produced.
|
|
280
|
+
*
|
|
281
|
+
* @private
|
|
282
|
+
* @param {Camera} camera - The scene's camera.
|
|
283
|
+
* @return {Camera} The corresponding reflection camera.
|
|
284
|
+
*/
|
|
285
|
+
this._getReflectionCamera = function ( camera ) {
|
|
286
|
+
|
|
287
|
+
let reflectionCamera = this._reflectionCameras.get( camera );
|
|
288
|
+
|
|
289
|
+
if ( reflectionCamera === undefined ) {
|
|
290
|
+
|
|
291
|
+
reflectionCamera = camera.clone();
|
|
292
|
+
|
|
293
|
+
this._reflectionCameras.set( camera, reflectionCamera );
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return reflectionCamera;
|
|
298
|
+
|
|
299
|
+
};
|
|
300
|
+
|
|
253
301
|
}
|
|
254
302
|
|
|
255
303
|
}
|
|
@@ -387,6 +387,7 @@ ReflectorForSSRPass.ReflectorShader = {
|
|
|
387
387
|
* @property {number} [clipBias=0] - The clip bias.
|
|
388
388
|
* @property {Object} [shader] - Can be used to pass in a custom shader that defines how the reflective view is projected onto the reflector's geometry.
|
|
389
389
|
* @property {boolean} [useDepthTexture=true] - Whether to store depth values in a texture or not.
|
|
390
|
+
* @property {Vector2} [resolution] - Resolution for the Reflector Pass.
|
|
390
391
|
**/
|
|
391
392
|
|
|
392
393
|
export { ReflectorForSSRPass };
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from 'three';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight]
|
|
11
|
+
* Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
|
|
12
12
|
* aka The Preetham Model, the de facto standard for analytical skydomes.
|
|
13
13
|
*
|
|
14
14
|
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
@@ -25,6 +25,16 @@ import {
|
|
|
25
25
|
* sky.scale.setScalar( 10000 );
|
|
26
26
|
* scene.add( sky );
|
|
27
27
|
* ```
|
|
28
|
+
*
|
|
29
|
+
* It can be useful to hide the sun disc when generating an environment map to avoid artifacts
|
|
30
|
+
*
|
|
31
|
+
* ```js
|
|
32
|
+
* // disable before rendering environment map
|
|
33
|
+
* sky.material.uniforms.showSunDisc.value = false;
|
|
34
|
+
* // ...
|
|
35
|
+
* // re-enable before scene sky box rendering
|
|
36
|
+
* sky.material.uniforms.showSunDisc.value = true;
|
|
37
|
+
* ```
|
|
28
38
|
*
|
|
29
39
|
* @augments Mesh
|
|
30
40
|
* @three_import import { Sky } from 'three/addons/objects/Sky.js';
|
|
@@ -72,7 +82,14 @@ Sky.SkyShader = {
|
|
|
72
82
|
'mieCoefficient': { value: 0.005 },
|
|
73
83
|
'mieDirectionalG': { value: 0.8 },
|
|
74
84
|
'sunPosition': { value: new Vector3() },
|
|
75
|
-
'up': { value: new Vector3( 0, 1, 0 ) }
|
|
85
|
+
'up': { value: new Vector3( 0, 1, 0 ) },
|
|
86
|
+
'cloudScale': { value: 0.0002 },
|
|
87
|
+
'cloudSpeed': { value: 0.0001 },
|
|
88
|
+
'cloudCoverage': { value: 0.4 },
|
|
89
|
+
'cloudDensity': { value: 0.4 },
|
|
90
|
+
'cloudElevation': { value: 0.5 },
|
|
91
|
+
'showSunDisc': { value: 1 },
|
|
92
|
+
'time': { value: 0.0 }
|
|
76
93
|
},
|
|
77
94
|
|
|
78
95
|
vertexShader: /* glsl */`
|
|
@@ -150,13 +167,46 @@ Sky.SkyShader = {
|
|
|
150
167
|
fragmentShader: /* glsl */`
|
|
151
168
|
varying vec3 vWorldPosition;
|
|
152
169
|
varying vec3 vSunDirection;
|
|
153
|
-
varying float vSunfade;
|
|
154
170
|
varying vec3 vBetaR;
|
|
155
171
|
varying vec3 vBetaM;
|
|
156
172
|
varying float vSunE;
|
|
157
173
|
|
|
158
174
|
uniform float mieDirectionalG;
|
|
159
175
|
uniform vec3 up;
|
|
176
|
+
uniform float cloudScale;
|
|
177
|
+
uniform float cloudSpeed;
|
|
178
|
+
uniform float cloudCoverage;
|
|
179
|
+
uniform float cloudDensity;
|
|
180
|
+
uniform float cloudElevation;
|
|
181
|
+
uniform float showSunDisc;
|
|
182
|
+
uniform float time;
|
|
183
|
+
|
|
184
|
+
// Cloud noise functions
|
|
185
|
+
float hash( vec2 p ) {
|
|
186
|
+
return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ) * 43758.5453123 );
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
float noise( vec2 p ) {
|
|
190
|
+
vec2 i = floor( p );
|
|
191
|
+
vec2 f = fract( p );
|
|
192
|
+
f = f * f * ( 3.0 - 2.0 * f );
|
|
193
|
+
float a = hash( i );
|
|
194
|
+
float b = hash( i + vec2( 1.0, 0.0 ) );
|
|
195
|
+
float c = hash( i + vec2( 0.0, 1.0 ) );
|
|
196
|
+
float d = hash( i + vec2( 1.0, 1.0 ) );
|
|
197
|
+
return mix( mix( a, b, f.x ), mix( c, d, f.x ), f.y );
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
float fbm( vec2 p ) {
|
|
201
|
+
float value = 0.0;
|
|
202
|
+
float amplitude = 0.5;
|
|
203
|
+
for ( int i = 0; i < 5; i ++ ) {
|
|
204
|
+
value += amplitude * noise( p );
|
|
205
|
+
p *= 2.0;
|
|
206
|
+
amplitude *= 0.5;
|
|
207
|
+
}
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
160
210
|
|
|
161
211
|
// constants for atmospheric scattering
|
|
162
212
|
const float pi = 3.141592653589793238462643383279502884197169;
|
|
@@ -218,14 +268,48 @@ Sky.SkyShader = {
|
|
|
218
268
|
vec3 L0 = vec3( 0.1 ) * Fex;
|
|
219
269
|
|
|
220
270
|
// composition + solar disc
|
|
221
|
-
float
|
|
222
|
-
L0 += ( vSunE * 19000.0 * Fex ) *
|
|
271
|
+
float sundisc = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta ) * showSunDisc;
|
|
272
|
+
L0 += ( vSunE * 19000.0 * Fex ) * sundisc;
|
|
223
273
|
|
|
224
274
|
vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );
|
|
225
275
|
|
|
226
|
-
|
|
276
|
+
// Clouds
|
|
277
|
+
if ( direction.y > 0.0 && cloudCoverage > 0.0 ) {
|
|
278
|
+
|
|
279
|
+
// Project to cloud plane (higher elevation = clouds appear lower/closer)
|
|
280
|
+
float elevation = mix( 1.0, 0.1, cloudElevation );
|
|
281
|
+
vec2 cloudUV = direction.xz / ( direction.y * elevation );
|
|
282
|
+
cloudUV *= cloudScale;
|
|
283
|
+
cloudUV += time * cloudSpeed;
|
|
284
|
+
|
|
285
|
+
// Multi-octave noise for fluffy clouds
|
|
286
|
+
float cloudNoise = fbm( cloudUV * 1000.0 );
|
|
287
|
+
cloudNoise += 0.5 * fbm( cloudUV * 2000.0 + 3.7 );
|
|
288
|
+
cloudNoise = cloudNoise * 0.5 + 0.5;
|
|
289
|
+
|
|
290
|
+
// Apply coverage threshold
|
|
291
|
+
float cloudMask = smoothstep( 1.0 - cloudCoverage, 1.0 - cloudCoverage + 0.3, cloudNoise );
|
|
292
|
+
|
|
293
|
+
// Fade clouds near horizon (adjusted by elevation)
|
|
294
|
+
float horizonFade = smoothstep( 0.0, 0.1 + 0.2 * cloudElevation, direction.y );
|
|
295
|
+
cloudMask *= horizonFade;
|
|
296
|
+
|
|
297
|
+
// Cloud lighting based on sun position
|
|
298
|
+
float sunInfluence = dot( direction, vSunDirection ) * 0.5 + 0.5;
|
|
299
|
+
float daylight = max( 0.0, vSunDirection.y * 2.0 );
|
|
300
|
+
|
|
301
|
+
// Base cloud color affected by atmosphere
|
|
302
|
+
vec3 atmosphereColor = Lin * 0.04;
|
|
303
|
+
vec3 cloudColor = mix( vec3( 0.3 ), vec3( 1.0 ), daylight );
|
|
304
|
+
cloudColor = mix( cloudColor, atmosphereColor + vec3( 1.0 ), sunInfluence * 0.5 );
|
|
305
|
+
cloudColor *= vSunE * 0.00002;
|
|
306
|
+
|
|
307
|
+
// Blend clouds with sky
|
|
308
|
+
texColor = mix( texColor, cloudColor, cloudMask * cloudDensity );
|
|
309
|
+
|
|
310
|
+
}
|
|
227
311
|
|
|
228
|
-
gl_FragColor = vec4(
|
|
312
|
+
gl_FragColor = vec4( texColor, 1.0 );
|
|
229
313
|
|
|
230
314
|
#include <tonemapping_fragment>
|
|
231
315
|
#include <colorspace_fragment>
|
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
NodeMaterial
|
|
7
7
|
} from 'three/webgpu';
|
|
8
8
|
|
|
9
|
-
import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition } from 'three/tsl';
|
|
9
|
+
import { Fn, float, vec2, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition, fract, floor, sin, time, Loop, If } from 'three/tsl';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight]
|
|
12
|
+
* Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
|
|
13
13
|
* aka The Preetham Model, the de facto standard for analytical skydomes.
|
|
14
14
|
*
|
|
15
|
-
* Note that this class can only be used with {@link
|
|
16
|
-
* When using {@link
|
|
15
|
+
* Note that this class can only be used with {@link WebGPURenderer}.
|
|
16
|
+
* When using {@link WebGLRenderer}, use {@link Sky}.
|
|
17
17
|
*
|
|
18
18
|
* More references:
|
|
19
19
|
*
|
|
@@ -26,6 +26,16 @@ import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelV
|
|
|
26
26
|
* scene.add( sky );
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
+
* It can be useful to hide the sun disc when generating an environment map to avoid artifacts
|
|
30
|
+
*
|
|
31
|
+
* ```js
|
|
32
|
+
* // disable before rendering environment map
|
|
33
|
+
* sky.showSunDisc.value = false;
|
|
34
|
+
* // ...
|
|
35
|
+
* // re-enable before scene sky box rendering
|
|
36
|
+
* sky.showSunDisc.value = true;
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
29
39
|
* @augments Mesh
|
|
30
40
|
* @three_import import { SkyMesh } from 'three/addons/objects/SkyMesh.js';
|
|
31
41
|
*/
|
|
@@ -82,6 +92,58 @@ class SkyMesh extends Mesh {
|
|
|
82
92
|
*/
|
|
83
93
|
this.upUniform = uniform( new Vector3( 0, 1, 0 ) );
|
|
84
94
|
|
|
95
|
+
/**
|
|
96
|
+
* The cloud scale uniform.
|
|
97
|
+
*
|
|
98
|
+
* @type {UniformNode<float>}
|
|
99
|
+
*/
|
|
100
|
+
this.cloudScale = uniform( 0.0002 );
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The cloud speed uniform.
|
|
104
|
+
*
|
|
105
|
+
* @type {UniformNode<float>}
|
|
106
|
+
*/
|
|
107
|
+
this.cloudSpeed = uniform( 0.0001 );
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* The cloud coverage uniform.
|
|
111
|
+
*
|
|
112
|
+
* @type {UniformNode<float>}
|
|
113
|
+
*/
|
|
114
|
+
this.cloudCoverage = uniform( 0.4 );
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* The cloud density uniform.
|
|
118
|
+
*
|
|
119
|
+
* @type {UniformNode<float>}
|
|
120
|
+
*/
|
|
121
|
+
this.cloudDensity = uniform( 0.4 );
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The cloud elevation uniform.
|
|
125
|
+
*
|
|
126
|
+
* @type {UniformNode<float>}
|
|
127
|
+
*/
|
|
128
|
+
this.cloudElevation = uniform( 0.5 );
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Whether to render the solar disc.
|
|
132
|
+
*
|
|
133
|
+
* @type {UniformNode<float>}
|
|
134
|
+
*/
|
|
135
|
+
this.showSunDisc = uniform( 1 );
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* This flag can be used for type testing.
|
|
139
|
+
*
|
|
140
|
+
* @type {boolean}
|
|
141
|
+
* @readonly
|
|
142
|
+
* @default true
|
|
143
|
+
* @deprecated Use isSkyMesh instead.
|
|
144
|
+
*/
|
|
145
|
+
this.isSky = true; // @deprecated, r182
|
|
146
|
+
|
|
85
147
|
/**
|
|
86
148
|
* This flag can be used for type testing.
|
|
87
149
|
*
|
|
@@ -89,21 +151,20 @@ class SkyMesh extends Mesh {
|
|
|
89
151
|
* @readonly
|
|
90
152
|
* @default true
|
|
91
153
|
*/
|
|
92
|
-
this.
|
|
154
|
+
this.isSkyMesh = true;
|
|
93
155
|
|
|
94
156
|
// Varyings
|
|
95
157
|
|
|
96
158
|
const vSunDirection = varyingProperty( 'vec3' );
|
|
97
159
|
const vSunE = varyingProperty( 'float' );
|
|
98
|
-
const vSunfade = varyingProperty( 'float' );
|
|
99
160
|
const vBetaR = varyingProperty( 'vec3' );
|
|
100
161
|
const vBetaM = varyingProperty( 'vec3' );
|
|
101
162
|
|
|
102
163
|
const vertexNode = /*@__PURE__*/ Fn( () => {
|
|
103
164
|
|
|
104
165
|
// constants for atmospheric scattering
|
|
105
|
-
const e = float( 2.
|
|
106
|
-
// const pi = float( 3.
|
|
166
|
+
const e = float( 2.718281828459045 );
|
|
167
|
+
// const pi = float( 3.141592653589793 );
|
|
107
168
|
|
|
108
169
|
// wavelength of used primaries, according to preetham
|
|
109
170
|
// const lambda = vec3( 680E-9, 550E-9, 450E-9 );
|
|
@@ -136,10 +197,9 @@ class SkyMesh extends Mesh {
|
|
|
136
197
|
const sunIntensity = EE.mul( max( 0.0, float( 1.0 ).sub( pow( e, cutoffAngle.sub( acos( zenithAngleCos ) ).div( steepness ).negate() ) ) ) );
|
|
137
198
|
vSunE.assign( sunIntensity );
|
|
138
199
|
|
|
139
|
-
//
|
|
200
|
+
// sun fade
|
|
140
201
|
|
|
141
202
|
const sunfade = float( 1.0 ).sub( clamp( float( 1.0 ).sub( exp( this.sunPosition.y.div( 450000.0 ) ) ), 0, 1 ) );
|
|
142
|
-
vSunfade.assign( sunfade );
|
|
143
203
|
|
|
144
204
|
// varying vBetaR
|
|
145
205
|
|
|
@@ -168,13 +228,13 @@ class SkyMesh extends Mesh {
|
|
|
168
228
|
const colorNode = /*@__PURE__*/ Fn( () => {
|
|
169
229
|
|
|
170
230
|
// constants for atmospheric scattering
|
|
171
|
-
const pi = float( 3.
|
|
231
|
+
const pi = float( 3.141592653589793 );
|
|
172
232
|
|
|
173
233
|
// optical length at zenith for molecules
|
|
174
234
|
const rayleighZenithLength = float( 8.4E3 );
|
|
175
235
|
const mieZenithLength = float( 1.25E3 );
|
|
176
236
|
// 66 arc seconds -> degrees, and the cosine of that
|
|
177
|
-
const sunAngularDiameterCos = float( 0.
|
|
237
|
+
const sunAngularDiameterCos = float( 0.9999566769464484 );
|
|
178
238
|
|
|
179
239
|
// 3.0 / ( 16.0 * pi )
|
|
180
240
|
const THREE_OVER_SIXTEENPI = float( 0.05968310365946075 );
|
|
@@ -219,14 +279,88 @@ class SkyMesh extends Mesh {
|
|
|
219
279
|
const L0 = vec3( 0.1 ).mul( Fex );
|
|
220
280
|
|
|
221
281
|
// composition + solar disc
|
|
222
|
-
const
|
|
223
|
-
L0.addAssign( vSunE.mul( 19000.0 ).mul( Fex ).mul(
|
|
282
|
+
const sundisc = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos.add( 0.00002 ), cosTheta ).mul( this.showSunDisc );
|
|
283
|
+
L0.addAssign( vSunE.mul( 19000.0 ).mul( Fex ).mul( sundisc ) );
|
|
284
|
+
|
|
285
|
+
const texColor = add( Lin, L0 ).mul( 0.04 ).add( vec3( 0.0, 0.0003, 0.00075 ) ).toVar();
|
|
286
|
+
|
|
287
|
+
// Cloud noise functions
|
|
288
|
+
const hash = Fn( ( [ p ] ) => {
|
|
289
|
+
|
|
290
|
+
return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ).mul( 43758.5453123 ) );
|
|
291
|
+
|
|
292
|
+
} );
|
|
293
|
+
|
|
294
|
+
const noise = Fn( ( [ p_immutable ] ) => {
|
|
295
|
+
|
|
296
|
+
const p = vec2( p_immutable ).toVar();
|
|
297
|
+
const i = floor( p );
|
|
298
|
+
const f = fract( p );
|
|
299
|
+
const ff = f.mul( f ).mul( sub( 3.0, f.mul( 2.0 ) ) );
|
|
300
|
+
|
|
301
|
+
const a = hash( i );
|
|
302
|
+
const b = hash( add( i, vec2( 1.0, 0.0 ) ) );
|
|
303
|
+
const c = hash( add( i, vec2( 0.0, 1.0 ) ) );
|
|
304
|
+
const d = hash( add( i, vec2( 1.0, 1.0 ) ) );
|
|
305
|
+
|
|
306
|
+
return mix( mix( a, b, ff.x ), mix( c, d, ff.x ), ff.y );
|
|
307
|
+
|
|
308
|
+
} );
|
|
309
|
+
|
|
310
|
+
const fbm = Fn( ( [ p_immutable ] ) => {
|
|
311
|
+
|
|
312
|
+
const p = vec2( p_immutable ).toVar();
|
|
313
|
+
const value = float( 0.0 ).toVar();
|
|
314
|
+
const amplitude = float( 0.5 ).toVar();
|
|
315
|
+
|
|
316
|
+
Loop( 5, () => {
|
|
317
|
+
|
|
318
|
+
value.addAssign( amplitude.mul( noise( p ) ) );
|
|
319
|
+
p.mulAssign( 2.0 );
|
|
320
|
+
amplitude.mulAssign( 0.5 );
|
|
321
|
+
|
|
322
|
+
} );
|
|
323
|
+
|
|
324
|
+
return value;
|
|
325
|
+
|
|
326
|
+
} );
|
|
327
|
+
|
|
328
|
+
// Clouds
|
|
329
|
+
If( direction.y.greaterThan( 0.0 ).and( this.cloudCoverage.greaterThan( 0.0 ) ), () => {
|
|
330
|
+
|
|
331
|
+
// Project to cloud plane (higher elevation = clouds appear lower/closer)
|
|
332
|
+
const elevation = mix( 1.0, 0.1, this.cloudElevation );
|
|
333
|
+
const cloudUV = direction.xz.div( direction.y.mul( elevation ) ).toVar();
|
|
334
|
+
cloudUV.mulAssign( this.cloudScale );
|
|
335
|
+
cloudUV.addAssign( time.mul( this.cloudSpeed ) );
|
|
336
|
+
|
|
337
|
+
// Multi-octave noise for fluffy clouds
|
|
338
|
+
const cloudNoise = fbm( cloudUV.mul( 1000.0 ) ).add( fbm( cloudUV.mul( 2000.0 ).add( 3.7 ) ).mul( 0.5 ) ).toVar();
|
|
339
|
+
cloudNoise.assign( cloudNoise.mul( 0.5 ).add( 0.5 ) );
|
|
340
|
+
|
|
341
|
+
// Apply coverage threshold
|
|
342
|
+
const cloudMask = smoothstep( sub( 1.0, this.cloudCoverage ), sub( 1.0, this.cloudCoverage ).add( 0.3 ), cloudNoise ).toVar();
|
|
343
|
+
|
|
344
|
+
// Fade clouds near horizon (adjusted by elevation)
|
|
345
|
+
const horizonFade = smoothstep( 0.0, add( 0.1, mul( 0.2, this.cloudElevation ) ), direction.y );
|
|
346
|
+
cloudMask.mulAssign( horizonFade );
|
|
347
|
+
|
|
348
|
+
// Cloud lighting based on sun position
|
|
349
|
+
const sunInfluence = dot( direction, vSunDirection ).mul( 0.5 ).add( 0.5 );
|
|
350
|
+
const daylight = max( 0.0, vSunDirection.y.mul( 2.0 ) );
|
|
351
|
+
|
|
352
|
+
// Base cloud color affected by atmosphere
|
|
353
|
+
const atmosphereColor = Lin.mul( 0.04 );
|
|
354
|
+
const cloudColor = mix( vec3( 0.3 ), vec3( 1.0 ), daylight ).toVar();
|
|
355
|
+
cloudColor.assign( mix( cloudColor, atmosphereColor.add( vec3( 1.0 ) ), sunInfluence.mul( 0.5 ) ) );
|
|
356
|
+
cloudColor.mulAssign( vSunE.mul( 0.00002 ) );
|
|
224
357
|
|
|
225
|
-
|
|
358
|
+
// Blend clouds with sky
|
|
359
|
+
texColor.assign( mix( texColor, cloudColor, cloudMask.mul( this.cloudDensity ) ) );
|
|
226
360
|
|
|
227
|
-
|
|
361
|
+
} );
|
|
228
362
|
|
|
229
|
-
return vec4(
|
|
363
|
+
return vec4( texColor, 1.0 );
|
|
230
364
|
|
|
231
365
|
} )();
|
|
232
366
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Color,
|
|
3
3
|
FrontSide,
|
|
4
|
+
HalfFloatType,
|
|
4
5
|
Matrix4,
|
|
5
6
|
Mesh,
|
|
6
7
|
PerspectiveCamera,
|
|
@@ -21,9 +22,9 @@ import {
|
|
|
21
22
|
*
|
|
22
23
|
* References:
|
|
23
24
|
*
|
|
24
|
-
* - [Flat mirror for three.js]
|
|
25
|
-
* - [An implementation of water shader based on the flat mirror]
|
|
26
|
-
* - [Water shader explanations in WebGL]
|
|
25
|
+
* - [Flat mirror for three.js](https://github.com/Slayvin)
|
|
26
|
+
* - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
|
|
27
|
+
* - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
|
|
27
28
|
*
|
|
28
29
|
* @augments Mesh
|
|
29
30
|
* @three_import import { Water } from 'three/addons/objects/Water.js';
|
|
@@ -84,7 +85,7 @@ class Water extends Mesh {
|
|
|
84
85
|
|
|
85
86
|
const mirrorCamera = new PerspectiveCamera();
|
|
86
87
|
|
|
87
|
-
const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
|
|
88
|
+
const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { type: HalfFloatType } );
|
|
88
89
|
|
|
89
90
|
const mirrorShader = {
|
|
90
91
|
|
|
@@ -196,10 +197,10 @@ class Water extends Mesh {
|
|
|
196
197
|
vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );
|
|
197
198
|
|
|
198
199
|
float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );
|
|
199
|
-
float rf0 = 0.
|
|
200
|
+
float rf0 = 0.02;
|
|
200
201
|
float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );
|
|
201
202
|
vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;
|
|
202
|
-
vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(),
|
|
203
|
+
vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), reflectionSample + specularLight, reflectance );
|
|
203
204
|
vec3 outgoingLight = albedo;
|
|
204
205
|
gl_FragColor = vec4( outgoingLight, alpha );
|
|
205
206
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
Timer,
|
|
3
3
|
Color,
|
|
4
4
|
Matrix4,
|
|
5
5
|
Mesh,
|
|
@@ -74,7 +74,7 @@ class Water extends Mesh {
|
|
|
74
74
|
const cycle = 0.15; // a cycle of a flow map phase
|
|
75
75
|
const halfCycle = cycle * 0.5;
|
|
76
76
|
const textureMatrix = new Matrix4();
|
|
77
|
-
const
|
|
77
|
+
const timer = new Timer();
|
|
78
78
|
|
|
79
79
|
// internal components
|
|
80
80
|
|
|
@@ -180,7 +180,7 @@ class Water extends Mesh {
|
|
|
180
180
|
|
|
181
181
|
function updateFlow() {
|
|
182
182
|
|
|
183
|
-
const delta =
|
|
183
|
+
const delta = timer.getDelta();
|
|
184
184
|
const config = scope.material.uniforms[ 'config' ];
|
|
185
185
|
|
|
186
186
|
config.value.x += flowSpeed * delta; // flowMapOffset0
|
|
@@ -207,6 +207,8 @@ class Water extends Mesh {
|
|
|
207
207
|
|
|
208
208
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
209
209
|
|
|
210
|
+
timer.update();
|
|
211
|
+
|
|
210
212
|
updateTextureMatrix( camera );
|
|
211
213
|
updateFlow();
|
|
212
214
|
|