super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- 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 +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- 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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- 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 +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- 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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- 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/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -4,7 +4,7 @@ import { add, float, mix, output, sub, texture, uniform, uv, vec2, vec4 } from '
|
|
|
4
4
|
import { potpack } from '../libs/potpack.module.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Progressive Light Map Accumulator, by [zalo]
|
|
7
|
+
* Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/).
|
|
8
8
|
*
|
|
9
9
|
* To use, simply construct a `ProgressiveLightMap` object,
|
|
10
10
|
* `plmap.addObjectsToLightMap(object)` an array of semi-static
|
|
@@ -101,6 +101,12 @@ class ProgressiveLightMap {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
if ( object.geometry.hasAttribute( 'normal' ) === false ) {
|
|
105
|
+
|
|
106
|
+
console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need normals.' ); continue;
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
104
110
|
if ( this._blurringPlane === null ) {
|
|
105
111
|
|
|
106
112
|
this._initializeBlurPlane();
|
|
@@ -42,9 +42,7 @@ function TubePainter() {
|
|
|
42
42
|
geometry.setAttribute( 'color', colors );
|
|
43
43
|
geometry.drawRange.count = 0;
|
|
44
44
|
|
|
45
|
-
const material = new MeshStandardMaterial( {
|
|
46
|
-
vertexColors: true
|
|
47
|
-
} );
|
|
45
|
+
const material = new MeshStandardMaterial( { vertexColors: true } );
|
|
48
46
|
|
|
49
47
|
const mesh = new Mesh( geometry, material );
|
|
50
48
|
mesh.frustumCulled = false;
|
|
@@ -55,7 +53,7 @@ function TubePainter() {
|
|
|
55
53
|
|
|
56
54
|
const PI2 = Math.PI * 2;
|
|
57
55
|
|
|
58
|
-
const sides =
|
|
56
|
+
const sides = 15;
|
|
59
57
|
const array = [];
|
|
60
58
|
const radius = 0.01 * size;
|
|
61
59
|
|
|
@@ -72,33 +70,263 @@ function TubePainter() {
|
|
|
72
70
|
|
|
73
71
|
//
|
|
74
72
|
|
|
73
|
+
const vector = new Vector3();
|
|
74
|
+
|
|
75
75
|
const vector1 = new Vector3();
|
|
76
76
|
const vector2 = new Vector3();
|
|
77
77
|
const vector3 = new Vector3();
|
|
78
78
|
const vector4 = new Vector3();
|
|
79
79
|
|
|
80
|
-
const
|
|
81
|
-
|
|
80
|
+
const color1 = new Color( 0xffffff );
|
|
81
|
+
const color2 = new Color( 0xffffff );
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
let size1 = 1;
|
|
84
|
+
let size2 = 1;
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
function addCap( position, matrix, isEndCap, capSize ) {
|
|
86
87
|
|
|
87
88
|
let count = geometry.drawRange.count;
|
|
88
89
|
|
|
89
|
-
const points = getPoints(
|
|
90
|
+
const points = getPoints( capSize );
|
|
91
|
+
const sides = points.length;
|
|
92
|
+
const radius = 0.01 * capSize;
|
|
93
|
+
const latSegments = 4;
|
|
94
|
+
const directionSign = isEndCap ? - 1 : 1;
|
|
95
|
+
|
|
96
|
+
for ( let lat = 0; lat < latSegments; lat ++ ) {
|
|
97
|
+
|
|
98
|
+
const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
|
|
99
|
+
const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
|
|
100
|
+
|
|
101
|
+
const z1 = Math.sin( phi1 ) * radius * directionSign;
|
|
102
|
+
const r1 = Math.cos( phi1 ) * radius;
|
|
103
|
+
|
|
104
|
+
const z2 = Math.sin( phi2 ) * radius * directionSign;
|
|
105
|
+
const r2 = Math.cos( phi2 ) * radius;
|
|
106
|
+
|
|
107
|
+
for ( let i = 0; i < sides; i ++ ) {
|
|
108
|
+
|
|
109
|
+
const theta1 = ( i / sides ) * Math.PI * 2;
|
|
110
|
+
const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
|
|
111
|
+
|
|
112
|
+
// First ring
|
|
113
|
+
const x1 = Math.sin( theta1 ) * r1;
|
|
114
|
+
const y1 = Math.cos( theta1 ) * r1;
|
|
115
|
+
|
|
116
|
+
const x2 = Math.sin( theta2 ) * r1;
|
|
117
|
+
const y2 = Math.cos( theta2 ) * r1;
|
|
118
|
+
|
|
119
|
+
// Second ring
|
|
120
|
+
const x3 = Math.sin( theta1 ) * r2;
|
|
121
|
+
const y3 = Math.cos( theta1 ) * r2;
|
|
122
|
+
|
|
123
|
+
const x4 = Math.sin( theta2 ) * r2;
|
|
124
|
+
const y4 = Math.cos( theta2 ) * r2;
|
|
125
|
+
|
|
126
|
+
// Transform to world space
|
|
127
|
+
vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
|
|
128
|
+
vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
|
|
129
|
+
vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
|
|
130
|
+
vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
|
|
131
|
+
|
|
132
|
+
// First triangle
|
|
133
|
+
normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
|
|
134
|
+
vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
|
|
135
|
+
side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
|
|
136
|
+
|
|
137
|
+
if ( isEndCap ) {
|
|
138
|
+
|
|
139
|
+
vector1.toArray( positions.array, count * 3 );
|
|
140
|
+
vector2.toArray( positions.array, ( count + 1 ) * 3 );
|
|
141
|
+
vector3.toArray( positions.array, ( count + 2 ) * 3 );
|
|
142
|
+
|
|
143
|
+
normal.toArray( normals.array, count * 3 );
|
|
144
|
+
vector.toArray( normals.array, ( count + 1 ) * 3 );
|
|
145
|
+
side.toArray( normals.array, ( count + 2 ) * 3 );
|
|
146
|
+
|
|
147
|
+
} else {
|
|
148
|
+
|
|
149
|
+
vector1.toArray( positions.array, count * 3 );
|
|
150
|
+
vector3.toArray( positions.array, ( count + 1 ) * 3 );
|
|
151
|
+
vector2.toArray( positions.array, ( count + 2 ) * 3 );
|
|
152
|
+
|
|
153
|
+
normal.toArray( normals.array, count * 3 );
|
|
154
|
+
side.toArray( normals.array, ( count + 1 ) * 3 );
|
|
155
|
+
vector.toArray( normals.array, ( count + 2 ) * 3 );
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
color1.toArray( colors.array, count * 3 );
|
|
160
|
+
color1.toArray( colors.array, ( count + 1 ) * 3 );
|
|
161
|
+
color1.toArray( colors.array, ( count + 2 ) * 3 );
|
|
162
|
+
|
|
163
|
+
count += 3;
|
|
164
|
+
|
|
165
|
+
// Second triangle
|
|
166
|
+
if ( r2 > 0.001 ) {
|
|
167
|
+
|
|
168
|
+
normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
|
|
169
|
+
vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
|
|
170
|
+
side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
|
|
171
|
+
|
|
172
|
+
if ( isEndCap ) {
|
|
173
|
+
|
|
174
|
+
vector2.toArray( positions.array, count * 3 );
|
|
175
|
+
vector4.toArray( positions.array, ( count + 1 ) * 3 );
|
|
176
|
+
vector3.toArray( positions.array, ( count + 2 ) * 3 );
|
|
177
|
+
|
|
178
|
+
normal.toArray( normals.array, count * 3 );
|
|
179
|
+
vector.toArray( normals.array, ( count + 1 ) * 3 );
|
|
180
|
+
side.toArray( normals.array, ( count + 2 ) * 3 );
|
|
181
|
+
|
|
182
|
+
} else {
|
|
183
|
+
|
|
184
|
+
vector3.toArray( positions.array, count * 3 );
|
|
185
|
+
vector4.toArray( positions.array, ( count + 1 ) * 3 );
|
|
186
|
+
vector2.toArray( positions.array, ( count + 2 ) * 3 );
|
|
187
|
+
|
|
188
|
+
side.toArray( normals.array, count * 3 );
|
|
189
|
+
vector.toArray( normals.array, ( count + 1 ) * 3 );
|
|
190
|
+
normal.toArray( normals.array, ( count + 2 ) * 3 );
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
color1.toArray( colors.array, count * 3 );
|
|
195
|
+
color1.toArray( colors.array, ( count + 1 ) * 3 );
|
|
196
|
+
color1.toArray( colors.array, ( count + 2 ) * 3 );
|
|
197
|
+
|
|
198
|
+
count += 3;
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
geometry.drawRange.count = count;
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function updateEndCap( position, matrix, capSize ) {
|
|
211
|
+
|
|
212
|
+
if ( endCapStartIndex === null ) return;
|
|
213
|
+
|
|
214
|
+
const points = getPoints( capSize );
|
|
215
|
+
const sides = points.length;
|
|
216
|
+
const radius = 0.01 * capSize;
|
|
217
|
+
const latSegments = 4;
|
|
218
|
+
|
|
219
|
+
let count = endCapStartIndex;
|
|
220
|
+
|
|
221
|
+
for ( let lat = 0; lat < latSegments; lat ++ ) {
|
|
222
|
+
|
|
223
|
+
const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
|
|
224
|
+
const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
|
|
225
|
+
|
|
226
|
+
const z1 = - Math.sin( phi1 ) * radius;
|
|
227
|
+
const r1 = Math.cos( phi1 ) * radius;
|
|
228
|
+
|
|
229
|
+
const z2 = - Math.sin( phi2 ) * radius;
|
|
230
|
+
const r2 = Math.cos( phi2 ) * radius;
|
|
231
|
+
|
|
232
|
+
for ( let i = 0; i < sides; i ++ ) {
|
|
233
|
+
|
|
234
|
+
const theta1 = ( i / sides ) * Math.PI * 2;
|
|
235
|
+
const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
|
|
236
|
+
|
|
237
|
+
// First ring
|
|
238
|
+
const x1 = Math.sin( theta1 ) * r1;
|
|
239
|
+
const y1 = Math.cos( theta1 ) * r1;
|
|
240
|
+
|
|
241
|
+
const x2 = Math.sin( theta2 ) * r1;
|
|
242
|
+
const y2 = Math.cos( theta2 ) * r1;
|
|
243
|
+
|
|
244
|
+
// Second ring
|
|
245
|
+
const x3 = Math.sin( theta1 ) * r2;
|
|
246
|
+
const y3 = Math.cos( theta1 ) * r2;
|
|
247
|
+
|
|
248
|
+
const x4 = Math.sin( theta2 ) * r2;
|
|
249
|
+
const y4 = Math.cos( theta2 ) * r2;
|
|
250
|
+
|
|
251
|
+
// Transform positions to world space
|
|
252
|
+
vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
|
|
253
|
+
vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
|
|
254
|
+
vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
|
|
255
|
+
vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
|
|
256
|
+
|
|
257
|
+
// Transform normals to world space
|
|
258
|
+
normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
|
|
259
|
+
vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
|
|
260
|
+
side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
|
|
261
|
+
|
|
262
|
+
// First triangle
|
|
263
|
+
vector1.toArray( positions.array, count * 3 );
|
|
264
|
+
vector2.toArray( positions.array, ( count + 1 ) * 3 );
|
|
265
|
+
vector3.toArray( positions.array, ( count + 2 ) * 3 );
|
|
266
|
+
|
|
267
|
+
normal.toArray( normals.array, count * 3 );
|
|
268
|
+
vector.toArray( normals.array, ( count + 1 ) * 3 );
|
|
269
|
+
side.toArray( normals.array, ( count + 2 ) * 3 );
|
|
270
|
+
|
|
271
|
+
color1.toArray( colors.array, count * 3 );
|
|
272
|
+
color1.toArray( colors.array, ( count + 1 ) * 3 );
|
|
273
|
+
color1.toArray( colors.array, ( count + 2 ) * 3 );
|
|
274
|
+
|
|
275
|
+
count += 3;
|
|
276
|
+
|
|
277
|
+
// Second triangle
|
|
278
|
+
if ( r2 > 0.001 ) {
|
|
279
|
+
|
|
280
|
+
normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
|
|
281
|
+
vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
|
|
282
|
+
side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
|
|
283
|
+
|
|
284
|
+
vector2.toArray( positions.array, count * 3 );
|
|
285
|
+
vector4.toArray( positions.array, ( count + 1 ) * 3 );
|
|
286
|
+
vector3.toArray( positions.array, ( count + 2 ) * 3 );
|
|
287
|
+
|
|
288
|
+
normal.toArray( normals.array, count * 3 );
|
|
289
|
+
vector.toArray( normals.array, ( count + 1 ) * 3 );
|
|
290
|
+
side.toArray( normals.array, ( count + 2 ) * 3 );
|
|
291
|
+
|
|
292
|
+
color1.toArray( colors.array, count * 3 );
|
|
293
|
+
color1.toArray( colors.array, ( count + 1 ) * 3 );
|
|
294
|
+
color1.toArray( colors.array, ( count + 2 ) * 3 );
|
|
295
|
+
|
|
296
|
+
count += 3;
|
|
297
|
+
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
positions.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
|
|
305
|
+
normals.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
|
|
306
|
+
colors.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
|
|
307
|
+
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function stroke( position1, position2, matrix1, matrix2, size1, size2 ) {
|
|
311
|
+
|
|
312
|
+
if ( position1.distanceToSquared( position2 ) === 0 ) return;
|
|
313
|
+
|
|
314
|
+
let count = geometry.drawRange.count;
|
|
90
315
|
|
|
91
|
-
|
|
316
|
+
const points1 = getPoints( size1 );
|
|
317
|
+
const points2 = getPoints( size2 );
|
|
92
318
|
|
|
93
|
-
|
|
94
|
-
const vertex2 = points[ ( i + 1 ) % il ];
|
|
319
|
+
for ( let i = 0, il = points2.length; i < il; i ++ ) {
|
|
95
320
|
|
|
96
|
-
|
|
321
|
+
const vertex1_2 = points2[ i ];
|
|
322
|
+
const vertex2_2 = points2[ ( i + 1 ) % il ];
|
|
323
|
+
const vertex1_1 = points1[ i ];
|
|
324
|
+
const vertex2_1 = points1[ ( i + 1 ) % il ];
|
|
97
325
|
|
|
98
|
-
vector1.copy(
|
|
99
|
-
vector2.copy(
|
|
100
|
-
vector3.copy(
|
|
101
|
-
vector4.copy(
|
|
326
|
+
vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).add( position2 );
|
|
327
|
+
vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).add( position2 );
|
|
328
|
+
vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).add( position1 );
|
|
329
|
+
vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).add( position1 );
|
|
102
330
|
|
|
103
331
|
vector1.toArray( positions.array, ( count + 0 ) * 3 );
|
|
104
332
|
vector2.toArray( positions.array, ( count + 1 ) * 3 );
|
|
@@ -108,12 +336,10 @@ function TubePainter() {
|
|
|
108
336
|
vector3.toArray( positions.array, ( count + 4 ) * 3 );
|
|
109
337
|
vector4.toArray( positions.array, ( count + 5 ) * 3 );
|
|
110
338
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
vector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();
|
|
116
|
-
vector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();
|
|
339
|
+
vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).normalize();
|
|
340
|
+
vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).normalize();
|
|
341
|
+
vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).normalize();
|
|
342
|
+
vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).normalize();
|
|
117
343
|
|
|
118
344
|
vector1.toArray( normals.array, ( count + 0 ) * 3 );
|
|
119
345
|
vector2.toArray( normals.array, ( count + 1 ) * 3 );
|
|
@@ -123,15 +349,13 @@ function TubePainter() {
|
|
|
123
349
|
vector3.toArray( normals.array, ( count + 4 ) * 3 );
|
|
124
350
|
vector4.toArray( normals.array, ( count + 5 ) * 3 );
|
|
125
351
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
color.toArray( colors.array, ( count + 1 ) * 3 );
|
|
130
|
-
color.toArray( colors.array, ( count + 2 ) * 3 );
|
|
352
|
+
color2.toArray( colors.array, ( count + 0 ) * 3 );
|
|
353
|
+
color2.toArray( colors.array, ( count + 1 ) * 3 );
|
|
354
|
+
color1.toArray( colors.array, ( count + 2 ) * 3 );
|
|
131
355
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
356
|
+
color2.toArray( colors.array, ( count + 3 ) * 3 );
|
|
357
|
+
color1.toArray( colors.array, ( count + 4 ) * 3 );
|
|
358
|
+
color1.toArray( colors.array, ( count + 5 ) * 3 );
|
|
135
359
|
|
|
136
360
|
count += 6;
|
|
137
361
|
|
|
@@ -143,7 +367,9 @@ function TubePainter() {
|
|
|
143
367
|
|
|
144
368
|
//
|
|
145
369
|
|
|
146
|
-
const
|
|
370
|
+
const direction = new Vector3();
|
|
371
|
+
const normal = new Vector3();
|
|
372
|
+
const side = new Vector3();
|
|
147
373
|
|
|
148
374
|
const point1 = new Vector3();
|
|
149
375
|
const point2 = new Vector3();
|
|
@@ -151,31 +377,139 @@ function TubePainter() {
|
|
|
151
377
|
const matrix1 = new Matrix4();
|
|
152
378
|
const matrix2 = new Matrix4();
|
|
153
379
|
|
|
154
|
-
|
|
380
|
+
const lastNormal = new Vector3();
|
|
381
|
+
const prevDirection = new Vector3();
|
|
382
|
+
const rotationAxis = new Vector3();
|
|
155
383
|
|
|
156
|
-
|
|
157
|
-
|
|
384
|
+
let isFirstSegment = true;
|
|
385
|
+
|
|
386
|
+
let endCapStartIndex = null;
|
|
387
|
+
let endCapVertexCount = 0;
|
|
388
|
+
|
|
389
|
+
function calculateRMF() {
|
|
390
|
+
|
|
391
|
+
if ( isFirstSegment === true ) {
|
|
392
|
+
|
|
393
|
+
if ( Math.abs( direction.y ) < 0.99 ) {
|
|
394
|
+
|
|
395
|
+
vector.copy( direction ).multiplyScalar( direction.y );
|
|
396
|
+
normal.set( 0, 1, 0 ).sub( vector ).normalize();
|
|
397
|
+
|
|
398
|
+
} else {
|
|
399
|
+
|
|
400
|
+
vector.copy( direction ).multiplyScalar( direction.x );
|
|
401
|
+
normal.set( 1, 0, 0 ).sub( vector ).normalize();
|
|
402
|
+
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
} else {
|
|
406
|
+
|
|
407
|
+
rotationAxis.crossVectors( prevDirection, direction );
|
|
408
|
+
|
|
409
|
+
const rotAxisLength = rotationAxis.length();
|
|
410
|
+
|
|
411
|
+
if ( rotAxisLength > 0.0001 ) {
|
|
412
|
+
|
|
413
|
+
rotationAxis.divideScalar( rotAxisLength );
|
|
414
|
+
vector.addVectors( prevDirection, direction );
|
|
415
|
+
const c1 = - 2.0 / ( 1.0 + prevDirection.dot( direction ) );
|
|
416
|
+
const dot = lastNormal.dot( vector );
|
|
417
|
+
normal.copy( lastNormal ).addScaledVector( vector, c1 * dot );
|
|
418
|
+
|
|
419
|
+
} else {
|
|
420
|
+
|
|
421
|
+
normal.copy( lastNormal );
|
|
422
|
+
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
side.crossVectors( direction, normal ).normalize();
|
|
428
|
+
normal.crossVectors( side, direction ).normalize();
|
|
429
|
+
|
|
430
|
+
if ( isFirstSegment === false ) {
|
|
431
|
+
|
|
432
|
+
const smoothFactor = 0.3;
|
|
433
|
+
|
|
434
|
+
normal.lerp( lastNormal, smoothFactor ).normalize();
|
|
435
|
+
side.crossVectors( direction, normal ).normalize();
|
|
436
|
+
normal.crossVectors( side, direction ).normalize();
|
|
437
|
+
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
lastNormal.copy( normal );
|
|
441
|
+
prevDirection.copy( direction );
|
|
442
|
+
|
|
443
|
+
matrix1.makeBasis( side, normal, vector.copy( direction ).negate() );
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
function moveTo( position ) {
|
|
158
448
|
|
|
159
449
|
point2.copy( position );
|
|
160
|
-
|
|
450
|
+
|
|
451
|
+
lastNormal.set( 0, 1, 0 );
|
|
452
|
+
|
|
453
|
+
isFirstSegment = true;
|
|
454
|
+
|
|
455
|
+
endCapStartIndex = null;
|
|
456
|
+
endCapVertexCount = 0;
|
|
161
457
|
|
|
162
458
|
}
|
|
163
459
|
|
|
164
460
|
function lineTo( position ) {
|
|
165
461
|
|
|
166
462
|
point1.copy( position );
|
|
167
|
-
matrix1.lookAt( point2, point1, up );
|
|
168
463
|
|
|
169
|
-
|
|
464
|
+
direction.subVectors( point1, point2 );
|
|
465
|
+
|
|
466
|
+
const length = direction.length();
|
|
467
|
+
|
|
468
|
+
if ( length === 0 ) return;
|
|
469
|
+
|
|
470
|
+
direction.normalize();
|
|
471
|
+
|
|
472
|
+
calculateRMF();
|
|
473
|
+
|
|
474
|
+
if ( isFirstSegment === true ) {
|
|
475
|
+
|
|
476
|
+
color2.copy( color1 );
|
|
477
|
+
size2 = size1;
|
|
478
|
+
|
|
479
|
+
matrix2.copy( matrix1 );
|
|
480
|
+
|
|
481
|
+
addCap( point2, matrix2, false, size2 );
|
|
482
|
+
|
|
483
|
+
// End cap is added immediately after start cap and updated in-place
|
|
484
|
+
endCapStartIndex = geometry.drawRange.count;
|
|
485
|
+
addCap( point1, matrix1, true, size1 );
|
|
486
|
+
endCapVertexCount = geometry.drawRange.count - endCapStartIndex;
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
stroke( point1, point2, matrix1, matrix2, size1, size2 );
|
|
491
|
+
|
|
492
|
+
updateEndCap( point1, matrix1, size1 );
|
|
170
493
|
|
|
171
494
|
point2.copy( point1 );
|
|
172
495
|
matrix2.copy( matrix1 );
|
|
173
496
|
|
|
497
|
+
color2.copy( color1 );
|
|
498
|
+
size2 = size1;
|
|
499
|
+
|
|
500
|
+
isFirstSegment = false;
|
|
501
|
+
|
|
174
502
|
}
|
|
175
503
|
|
|
176
504
|
function setSize( value ) {
|
|
177
505
|
|
|
178
|
-
|
|
506
|
+
size1 = value;
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
function setColor( value ) {
|
|
511
|
+
|
|
512
|
+
color1.copy( value );
|
|
179
513
|
|
|
180
514
|
}
|
|
181
515
|
|
|
@@ -199,7 +533,7 @@ function TubePainter() {
|
|
|
199
533
|
colors.addUpdateRange( start * 3, ( end - start ) * 3 );
|
|
200
534
|
colors.needsUpdate = true;
|
|
201
535
|
|
|
202
|
-
count =
|
|
536
|
+
count = end;
|
|
203
537
|
|
|
204
538
|
}
|
|
205
539
|
|
|
@@ -241,6 +575,15 @@ function TubePainter() {
|
|
|
241
575
|
*/
|
|
242
576
|
setSize: setSize,
|
|
243
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Sets the color of newly rendered tube segments.
|
|
580
|
+
*
|
|
581
|
+
* @method
|
|
582
|
+
* @name TubePainter#setColor
|
|
583
|
+
* @param {Color} color The color.
|
|
584
|
+
*/
|
|
585
|
+
setColor: setColor,
|
|
586
|
+
|
|
244
587
|
/**
|
|
245
588
|
* Updates the internal geometry buffers so the new painted
|
|
246
589
|
* segments are rendered.
|
|
@@ -14,7 +14,7 @@ const _cb = new Vector3(), _ab = new Vector3();
|
|
|
14
14
|
* This class can be used to modify a geometry by simplifying it. A typical use
|
|
15
15
|
* case for such a modifier is automatic LOD generation.
|
|
16
16
|
*
|
|
17
|
-
* The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm]
|
|
17
|
+
* The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm](https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/)
|
|
18
18
|
* by Stan Melax in 1998.
|
|
19
19
|
*
|
|
20
20
|
* ```js
|
|
@@ -110,7 +110,7 @@ class LensflareMesh extends Mesh {
|
|
|
110
110
|
material1a.type = 'Lensflare-1a';
|
|
111
111
|
|
|
112
112
|
material1a.vertexNode = vertexNode;
|
|
113
|
-
material1a.
|
|
113
|
+
material1a.colorNode = vec4( 1.0, 0.0, 1.0, 1.0 );
|
|
114
114
|
|
|
115
115
|
const material1b = new NodeMaterial();
|
|
116
116
|
|
|
@@ -121,7 +121,7 @@ class LensflareMesh extends Mesh {
|
|
|
121
121
|
material1b.type = 'Lensflare-1b';
|
|
122
122
|
|
|
123
123
|
material1b.vertexNode = vertexNode;
|
|
124
|
-
material1b.
|
|
124
|
+
material1b.colorNode = texture( tempMap, vec2( uv().flipY() ) );
|
|
125
125
|
|
|
126
126
|
// the following object is used for occlusionMap generation
|
|
127
127
|
|
|
@@ -174,7 +174,7 @@ class LensflareMesh extends Mesh {
|
|
|
174
174
|
|
|
175
175
|
} )();
|
|
176
176
|
|
|
177
|
-
material2.
|
|
177
|
+
material2.colorNode = Fn( () => {
|
|
178
178
|
|
|
179
179
|
const color = reference( 'color', 'color' );
|
|
180
180
|
const map = reference( 'map', 'texture' );
|
|
@@ -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}.
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
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';
|
|
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
15
|
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
@@ -165,7 +165,7 @@ class SkyMesh extends Mesh {
|
|
|
165
165
|
|
|
166
166
|
} )();
|
|
167
167
|
|
|
168
|
-
const
|
|
168
|
+
const colorNode = /*@__PURE__*/ Fn( () => {
|
|
169
169
|
|
|
170
170
|
// constants for atmospheric scattering
|
|
171
171
|
const pi = float( 3.141592653589793238462643383279502884197169 );
|
|
@@ -234,7 +234,7 @@ class SkyMesh extends Mesh {
|
|
|
234
234
|
material.depthWrite = false;
|
|
235
235
|
|
|
236
236
|
material.vertexNode = vertexNode;
|
|
237
|
-
material.
|
|
237
|
+
material.colorNode = colorNode;
|
|
238
238
|
|
|
239
239
|
}
|
|
240
240
|
|
|
@@ -21,9 +21,9 @@ import {
|
|
|
21
21
|
*
|
|
22
22
|
* References:
|
|
23
23
|
*
|
|
24
|
-
* - [Flat mirror for three.js]
|
|
25
|
-
* - [An implementation of water shader based on the flat mirror]
|
|
26
|
-
* - [Water shader explanations in WebGL]
|
|
24
|
+
* - [Flat mirror for three.js](https://github.com/Slayvin)
|
|
25
|
+
* - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
|
|
26
|
+
* - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
|
|
27
27
|
*
|
|
28
28
|
* @augments Mesh
|
|
29
29
|
* @three_import import { Water } from 'three/addons/objects/Water.js';
|
|
@@ -15,9 +15,9 @@ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, text
|
|
|
15
15
|
*
|
|
16
16
|
* References:
|
|
17
17
|
*
|
|
18
|
-
* - [Flat mirror for three.js]
|
|
19
|
-
* - [An implementation of water shader based on the flat mirror]
|
|
20
|
-
* - [Water shader explanations in WebGL]
|
|
18
|
+
* - [Flat mirror for three.js](https://github.com/Slayvin)
|
|
19
|
+
* - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
|
|
20
|
+
* - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
|
|
21
21
|
*
|
|
22
22
|
* @augments Mesh
|
|
23
23
|
* @three_import import { WaterMesh } from 'three/addons/objects/WaterMesh.js';
|
|
@@ -51,7 +51,7 @@ class WaterMesh extends Mesh {
|
|
|
51
51
|
* @type {number}
|
|
52
52
|
* @default 0.5
|
|
53
53
|
*/
|
|
54
|
-
this.
|
|
54
|
+
this.resolutionScale = options.resolutionScale !== undefined ? options.resolutionScale : 0.5;
|
|
55
55
|
|
|
56
56
|
// Uniforms
|
|
57
57
|
|
|
@@ -161,7 +161,7 @@ class WaterMesh extends Mesh {
|
|
|
161
161
|
|
|
162
162
|
const mirrorSampler = reflector();
|
|
163
163
|
mirrorSampler.uvNode = mirrorSampler.uvNode.add( distortion );
|
|
164
|
-
mirrorSampler.
|
|
164
|
+
mirrorSampler.reflector.resolutionScale = this.resolutionScale;
|
|
165
165
|
|
|
166
166
|
this.add( mirrorSampler.target );
|
|
167
167
|
|
|
@@ -183,7 +183,7 @@ class WaterMesh extends Mesh {
|
|
|
183
183
|
* Constructor options of `WaterMesh`.
|
|
184
184
|
*
|
|
185
185
|
* @typedef {Object} WaterMesh~Options
|
|
186
|
-
* @property {number} [
|
|
186
|
+
* @property {number} [resolutionScale=0.5] - The resolution scale.
|
|
187
187
|
* @property {?Texture} [waterNormals=null] - The water's normal map.
|
|
188
188
|
* @property {number} [alpha=1] - The alpha value.
|
|
189
189
|
* @property {number} [size=1] - The size value.
|