@plastic-software/three 0.167.3 → 0.174.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 +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A special type of render target that is used when rendering
|
|
5
|
+
* with the WebXR Device API.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
* @augments RenderTarget
|
|
9
|
+
*/
|
|
10
|
+
class XRRenderTarget extends RenderTarget {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new XR render target.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} [width=1] - The width of the render target.
|
|
16
|
+
* @param {number} [height=1] - The height of the render target.
|
|
17
|
+
* @param {Object} [options={}] - The configuration options.
|
|
18
|
+
*/
|
|
19
|
+
constructor( width = 1, height = 1, options = {} ) {
|
|
20
|
+
|
|
21
|
+
super( width, height, options );
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* This flag can be used for type testing.
|
|
25
|
+
*
|
|
26
|
+
* @type {boolean}
|
|
27
|
+
* @readonly
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
this.isXRRenderTarget = true;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Whether the attachments of the render target
|
|
34
|
+
* are defined by external textures. This flag is
|
|
35
|
+
* set to `true` when using the WebXR Layers API.
|
|
36
|
+
*
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
this.hasExternalTextures = false;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether a depth buffer should automatically be allocated
|
|
44
|
+
* for this XR render target or not.
|
|
45
|
+
*
|
|
46
|
+
* Allocating a depth buffer is the default behavior of XR render
|
|
47
|
+
* targets. However, when using the WebXR Layers API, this flag
|
|
48
|
+
* must be set to `false` when the `ignoreDepthValues` property of
|
|
49
|
+
* the projection layers evaluates to `false`.
|
|
50
|
+
*
|
|
51
|
+
* Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
|
|
52
|
+
*
|
|
53
|
+
* @type {boolean}
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
this.autoAllocateDepthBuffer = true;
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
copy( source ) {
|
|
61
|
+
|
|
62
|
+
super.copy( source );
|
|
63
|
+
|
|
64
|
+
this.hasExternalTextures = source.hasExternalTextures;
|
|
65
|
+
this.autoAllocateDepthBuffer = source.autoAllocateDepthBuffer;
|
|
66
|
+
|
|
67
|
+
return this;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { XRRenderTarget };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import NodeMaterial from '../../../nodes/
|
|
1
|
+
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
2
2
|
import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
3
|
import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
|
|
4
4
|
import { uniform } from '../../../nodes/core/UniformNode.js';
|
|
5
5
|
import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
|
|
6
6
|
import { texture } from '../../../nodes/accessors/TextureNode.js';
|
|
7
7
|
import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
|
|
8
|
-
import { float, vec3 } from '../../../nodes/
|
|
9
|
-
import { uv } from '../../../nodes/accessors/
|
|
8
|
+
import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
|
|
9
|
+
import { uv } from '../../../nodes/accessors/UV.js';
|
|
10
10
|
import { attribute } from '../../../nodes/core/AttributeNode.js';
|
|
11
11
|
|
|
12
12
|
import { OrthographicCamera } from '../../../cameras/OrthographicCamera.js';
|
|
@@ -69,7 +69,11 @@ const _axisDirections = [
|
|
|
69
69
|
/*@__PURE__*/ new Vector3( 1, 1, 1 )
|
|
70
70
|
];
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
const _origin = /*@__PURE__*/ new Vector3();
|
|
73
|
+
|
|
74
|
+
// maps blur materials to their uniforms dictionary
|
|
75
|
+
|
|
76
|
+
const _uniformsMap = new WeakMap();
|
|
73
77
|
|
|
74
78
|
// WebGPU Face indices
|
|
75
79
|
const _faceLib = [
|
|
@@ -77,8 +81,8 @@ const _faceLib = [
|
|
|
77
81
|
0, 4, 2
|
|
78
82
|
];
|
|
79
83
|
|
|
80
|
-
const
|
|
81
|
-
const
|
|
84
|
+
const _direction = /*@__PURE__*/ getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
|
|
85
|
+
const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );
|
|
82
86
|
|
|
83
87
|
/**
|
|
84
88
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -91,10 +95,9 @@ const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
|
|
|
91
95
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
92
96
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
93
97
|
*
|
|
94
|
-
* Paper: Fast, Accurate Image-Based Lighting
|
|
95
|
-
* https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
|
|
98
|
+
* Paper: Fast, Accurate Image-Based Lighting:
|
|
99
|
+
* {@link https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view}
|
|
96
100
|
*/
|
|
97
|
-
|
|
98
101
|
class PMREMGenerator {
|
|
99
102
|
|
|
100
103
|
constructor( renderer ) {
|
|
@@ -116,25 +119,61 @@ class PMREMGenerator {
|
|
|
116
119
|
|
|
117
120
|
}
|
|
118
121
|
|
|
122
|
+
get _hasInitialized() {
|
|
123
|
+
|
|
124
|
+
return this._renderer.hasInitialized();
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
119
128
|
/**
|
|
120
129
|
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
121
130
|
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
122
131
|
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
123
|
-
* and far planes ensure the scene is rendered in its entirety
|
|
124
|
-
*
|
|
132
|
+
* and far planes ensure the scene is rendered in its entirety.
|
|
133
|
+
*
|
|
134
|
+
* @param {Scene} scene - The scene to be captured.
|
|
135
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
136
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
137
|
+
* @param {number} [far=100] - The far plane distance.
|
|
138
|
+
* @param {Object} [options={}] - The configuration options.
|
|
139
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
140
|
+
* @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
|
|
141
|
+
* @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
|
|
142
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
143
|
+
* @see {@link PMREMGenerator#fromSceneAsync}
|
|
125
144
|
*/
|
|
126
|
-
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
145
|
+
fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
146
|
+
|
|
147
|
+
const {
|
|
148
|
+
size = 256,
|
|
149
|
+
position = _origin,
|
|
150
|
+
renderTarget = null,
|
|
151
|
+
} = options;
|
|
152
|
+
|
|
153
|
+
this._setSize( size );
|
|
154
|
+
|
|
155
|
+
if ( this._hasInitialized === false ) {
|
|
156
|
+
|
|
157
|
+
console.warn( 'THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.' );
|
|
158
|
+
|
|
159
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
160
|
+
|
|
161
|
+
options.renderTarget = cubeUVRenderTarget;
|
|
162
|
+
|
|
163
|
+
this.fromSceneAsync( scene, sigma, near, far, options );
|
|
164
|
+
|
|
165
|
+
return cubeUVRenderTarget;
|
|
166
|
+
|
|
167
|
+
}
|
|
127
168
|
|
|
128
169
|
_oldTarget = this._renderer.getRenderTarget();
|
|
129
170
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
130
171
|
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
131
172
|
|
|
132
|
-
this.
|
|
133
|
-
|
|
134
|
-
const cubeUVRenderTarget = this._allocateTargets();
|
|
173
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
135
174
|
cubeUVRenderTarget.depthBuffer = true;
|
|
136
175
|
|
|
137
|
-
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
|
|
176
|
+
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
|
|
138
177
|
|
|
139
178
|
if ( sigma > 0 ) {
|
|
140
179
|
|
|
@@ -150,13 +189,76 @@ class PMREMGenerator {
|
|
|
150
189
|
|
|
151
190
|
}
|
|
152
191
|
|
|
192
|
+
/**
|
|
193
|
+
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
194
|
+
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
195
|
+
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
196
|
+
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
197
|
+
* is placed at the origin).
|
|
198
|
+
*
|
|
199
|
+
* @param {Scene} scene - The scene to be captured.
|
|
200
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
201
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
202
|
+
* @param {number} [far=100] - The far plane distance.
|
|
203
|
+
* @param {Object} [options={}] - The configuration options.
|
|
204
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
205
|
+
* @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
|
|
206
|
+
* @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
|
|
207
|
+
* @return {Promise<RenderTarget>} A Promise that resolve with the PMREM when the generation has been finished.
|
|
208
|
+
* @see {@link PMREMGenerator#fromScene}
|
|
209
|
+
*/
|
|
210
|
+
async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
211
|
+
|
|
212
|
+
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
213
|
+
|
|
214
|
+
return this.fromScene( scene, sigma, near, far, options );
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
|
|
153
218
|
/**
|
|
154
219
|
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
155
220
|
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
156
221
|
* as this matches best with the 256 x 256 cubemap output.
|
|
222
|
+
*
|
|
223
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
224
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
225
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
226
|
+
* @see {@link PMREMGenerator#fromEquirectangularAsync}
|
|
157
227
|
*/
|
|
158
228
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
159
229
|
|
|
230
|
+
if ( this._hasInitialized === false ) {
|
|
231
|
+
|
|
232
|
+
console.warn( 'THREE.PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using .fromEquirectangularAsync() instead.' );
|
|
233
|
+
|
|
234
|
+
this._setSizeFromTexture( equirectangular );
|
|
235
|
+
|
|
236
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
237
|
+
|
|
238
|
+
this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
|
|
239
|
+
|
|
240
|
+
return cubeUVRenderTarget;
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return this._fromTexture( equirectangular, renderTarget );
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
250
|
+
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
251
|
+
* as this matches best with the 256 x 256 cubemap output.
|
|
252
|
+
*
|
|
253
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
254
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
255
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
256
|
+
* @see {@link PMREMGenerator#fromEquirectangular}
|
|
257
|
+
*/
|
|
258
|
+
async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
|
|
259
|
+
|
|
260
|
+
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
261
|
+
|
|
160
262
|
return this._fromTexture( equirectangular, renderTarget );
|
|
161
263
|
|
|
162
264
|
}
|
|
@@ -165,9 +267,46 @@ class PMREMGenerator {
|
|
|
165
267
|
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
166
268
|
* or HDR. The ideal input cube size is 256 x 256,
|
|
167
269
|
* as this matches best with the 256 x 256 cubemap output.
|
|
270
|
+
*
|
|
271
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
272
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
273
|
+
* @return {RenderTarget} The resulting PMREM.
|
|
274
|
+
* @see {@link PMREMGenerator#fromCubemapAsync}
|
|
168
275
|
*/
|
|
169
276
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
170
277
|
|
|
278
|
+
if ( this._hasInitialized === false ) {
|
|
279
|
+
|
|
280
|
+
console.warn( 'THREE.PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );
|
|
281
|
+
|
|
282
|
+
this._setSizeFromTexture( cubemap );
|
|
283
|
+
|
|
284
|
+
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
285
|
+
|
|
286
|
+
this.fromCubemapAsync( cubemap, renderTarget );
|
|
287
|
+
|
|
288
|
+
return cubeUVRenderTarget;
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return this._fromTexture( cubemap, renderTarget );
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
298
|
+
* or HDR. The ideal input cube size is 256 x 256,
|
|
299
|
+
* with the 256 x 256 cubemap output.
|
|
300
|
+
*
|
|
301
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
302
|
+
* @param {?RenderTarget} [renderTarget=null] - The render target to use.
|
|
303
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
304
|
+
* @see {@link PMREMGenerator#fromCubemap}
|
|
305
|
+
*/
|
|
306
|
+
async fromCubemapAsync( cubemap, renderTarget = null ) {
|
|
307
|
+
|
|
308
|
+
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
309
|
+
|
|
171
310
|
return this._fromTexture( cubemap, renderTarget );
|
|
172
311
|
|
|
173
312
|
}
|
|
@@ -175,13 +314,15 @@ class PMREMGenerator {
|
|
|
175
314
|
/**
|
|
176
315
|
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
177
316
|
* your texture's network fetch for increased concurrency.
|
|
317
|
+
*
|
|
318
|
+
* @returns {Promise}
|
|
178
319
|
*/
|
|
179
|
-
compileCubemapShader() {
|
|
320
|
+
async compileCubemapShader() {
|
|
180
321
|
|
|
181
322
|
if ( this._cubemapMaterial === null ) {
|
|
182
323
|
|
|
183
324
|
this._cubemapMaterial = _getCubemapMaterial();
|
|
184
|
-
this._compileMaterial( this._cubemapMaterial );
|
|
325
|
+
await this._compileMaterial( this._cubemapMaterial );
|
|
185
326
|
|
|
186
327
|
}
|
|
187
328
|
|
|
@@ -190,13 +331,15 @@ class PMREMGenerator {
|
|
|
190
331
|
/**
|
|
191
332
|
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
192
333
|
* your texture's network fetch for increased concurrency.
|
|
334
|
+
*
|
|
335
|
+
* @returns {Promise}
|
|
193
336
|
*/
|
|
194
|
-
compileEquirectangularShader() {
|
|
337
|
+
async compileEquirectangularShader() {
|
|
195
338
|
|
|
196
339
|
if ( this._equirectMaterial === null ) {
|
|
197
340
|
|
|
198
341
|
this._equirectMaterial = _getEquirectMaterial();
|
|
199
|
-
this._compileMaterial( this._equirectMaterial );
|
|
342
|
+
await this._compileMaterial( this._equirectMaterial );
|
|
200
343
|
|
|
201
344
|
}
|
|
202
345
|
|
|
@@ -224,6 +367,20 @@ class PMREMGenerator {
|
|
|
224
367
|
|
|
225
368
|
// private interface
|
|
226
369
|
|
|
370
|
+
_setSizeFromTexture( texture ) {
|
|
371
|
+
|
|
372
|
+
if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
|
|
373
|
+
|
|
374
|
+
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
375
|
+
|
|
376
|
+
} else { // Equirectangular
|
|
377
|
+
|
|
378
|
+
this._setSize( texture.image.width / 4 );
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
}
|
|
383
|
+
|
|
227
384
|
_setSize( cubeSize ) {
|
|
228
385
|
|
|
229
386
|
this._lodMax = Math.floor( Math.log2( cubeSize ) );
|
|
@@ -255,15 +412,7 @@ class PMREMGenerator {
|
|
|
255
412
|
|
|
256
413
|
_fromTexture( texture, renderTarget ) {
|
|
257
414
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
|
|
261
|
-
|
|
262
|
-
} else { // Equirectangular
|
|
263
|
-
|
|
264
|
-
this._setSize( texture.image.width / 4 );
|
|
265
|
-
|
|
266
|
-
}
|
|
415
|
+
this._setSizeFromTexture( texture );
|
|
267
416
|
|
|
268
417
|
_oldTarget = this._renderer.getRenderTarget();
|
|
269
418
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
@@ -316,24 +465,22 @@ class PMREMGenerator {
|
|
|
316
465
|
|
|
317
466
|
}
|
|
318
467
|
|
|
319
|
-
_compileMaterial( material ) {
|
|
320
|
-
|
|
321
|
-
const tmpMesh = this._lodMeshes[ 0 ];
|
|
322
|
-
tmpMesh.material = material;
|
|
468
|
+
async _compileMaterial( material ) {
|
|
323
469
|
|
|
324
|
-
this.
|
|
470
|
+
const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
471
|
+
await this._renderer.compile( tmpMesh, _flatCamera );
|
|
325
472
|
|
|
326
473
|
}
|
|
327
474
|
|
|
328
|
-
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
475
|
+
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
|
|
329
476
|
|
|
330
477
|
const cubeCamera = _cubeCamera;
|
|
331
478
|
cubeCamera.near = near;
|
|
332
479
|
cubeCamera.far = far;
|
|
333
480
|
|
|
334
481
|
// px, py, pz, nx, ny, nz
|
|
335
|
-
const upSign = [
|
|
336
|
-
const forwardSign = [ 1, 1, 1, - 1,
|
|
482
|
+
const upSign = [ 1, 1, 1, 1, - 1, 1 ];
|
|
483
|
+
const forwardSign = [ 1, - 1, 1, - 1, 1, - 1 ];
|
|
337
484
|
|
|
338
485
|
const renderer = this._renderer;
|
|
339
486
|
|
|
@@ -395,17 +542,22 @@ class PMREMGenerator {
|
|
|
395
542
|
if ( col === 0 ) {
|
|
396
543
|
|
|
397
544
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
398
|
-
cubeCamera.
|
|
545
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
546
|
+
cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
|
|
399
547
|
|
|
400
548
|
} else if ( col === 1 ) {
|
|
401
549
|
|
|
402
550
|
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
403
|
-
cubeCamera.
|
|
551
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
552
|
+
cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
|
|
553
|
+
|
|
404
554
|
|
|
405
555
|
} else {
|
|
406
556
|
|
|
407
557
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
408
|
-
cubeCamera.
|
|
558
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
559
|
+
cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
|
|
560
|
+
|
|
409
561
|
|
|
410
562
|
}
|
|
411
563
|
|
|
@@ -488,6 +640,12 @@ class PMREMGenerator {
|
|
|
488
640
|
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
489
641
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
490
642
|
* accurate at the poles, but still does a decent job.
|
|
643
|
+
*
|
|
644
|
+
* @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
|
|
645
|
+
* @param {number} lodIn - The input level-of-detail.
|
|
646
|
+
* @param {number} lodOut - The output level-of-detail.
|
|
647
|
+
* @param {number} sigma - The blur radius in radians.
|
|
648
|
+
* @param {Vector3} [poleAxis] - The pole axis.
|
|
491
649
|
*/
|
|
492
650
|
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
493
651
|
|
|
@@ -530,7 +688,7 @@ class PMREMGenerator {
|
|
|
530
688
|
const blurMesh = this._lodMeshes[ lodOut ];
|
|
531
689
|
blurMesh.material = blurMaterial;
|
|
532
690
|
|
|
533
|
-
const blurUniforms = blurMaterial
|
|
691
|
+
const blurUniforms = _uniformsMap.get( blurMaterial );
|
|
534
692
|
|
|
535
693
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
536
694
|
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
@@ -698,19 +856,18 @@ function _createRenderTarget( width, height, params ) {
|
|
|
698
856
|
|
|
699
857
|
function _setViewport( target, x, y, width, height ) {
|
|
700
858
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
target.viewport.set( x, viewY, width, height );
|
|
704
|
-
target.scissor.set( x, viewY, width, height );
|
|
859
|
+
target.viewport.set( x, y, width, height );
|
|
860
|
+
target.scissor.set( x, y, width, height );
|
|
705
861
|
|
|
706
862
|
}
|
|
707
863
|
|
|
708
|
-
function _getMaterial() {
|
|
864
|
+
function _getMaterial( type ) {
|
|
709
865
|
|
|
710
866
|
const material = new NodeMaterial();
|
|
711
867
|
material.depthTest = false;
|
|
712
868
|
material.depthWrite = false;
|
|
713
869
|
material.blending = NoBlending;
|
|
870
|
+
material.name = `PMREM_${ type }`;
|
|
714
871
|
|
|
715
872
|
return material;
|
|
716
873
|
|
|
@@ -735,7 +892,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
735
892
|
latitudinal,
|
|
736
893
|
weights,
|
|
737
894
|
poleAxis,
|
|
738
|
-
outputDirection,
|
|
895
|
+
outputDirection: _outputDirection,
|
|
739
896
|
dTheta,
|
|
740
897
|
samples,
|
|
741
898
|
envMap,
|
|
@@ -745,18 +902,19 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
745
902
|
CUBEUV_MAX_MIP
|
|
746
903
|
};
|
|
747
904
|
|
|
748
|
-
const material = _getMaterial();
|
|
749
|
-
material.uniforms = materialUniforms; // TODO: Move to outside of the material
|
|
905
|
+
const material = _getMaterial( 'blur' );
|
|
750
906
|
material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
|
|
751
907
|
|
|
908
|
+
_uniformsMap.set( material, materialUniforms );
|
|
909
|
+
|
|
752
910
|
return material;
|
|
753
911
|
|
|
754
912
|
}
|
|
755
913
|
|
|
756
914
|
function _getCubemapMaterial( envTexture ) {
|
|
757
915
|
|
|
758
|
-
const material = _getMaterial();
|
|
759
|
-
material.fragmentNode = cubeTexture( envTexture,
|
|
916
|
+
const material = _getMaterial( 'cubemap' );
|
|
917
|
+
material.fragmentNode = cubeTexture( envTexture, _outputDirection );
|
|
760
918
|
|
|
761
919
|
return material;
|
|
762
920
|
|
|
@@ -764,8 +922,8 @@ function _getCubemapMaterial( envTexture ) {
|
|
|
764
922
|
|
|
765
923
|
function _getEquirectMaterial( envTexture ) {
|
|
766
924
|
|
|
767
|
-
const material = _getMaterial();
|
|
768
|
-
material.fragmentNode = texture( envTexture, equirectUV(
|
|
925
|
+
const material = _getMaterial( 'equirect' );
|
|
926
|
+
material.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );
|
|
769
927
|
|
|
770
928
|
return material;
|
|
771
929
|
|
|
@@ -1,38 +1,132 @@
|
|
|
1
1
|
import BindGroup from '../BindGroup.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module represents the state of a node builder after it was
|
|
5
|
+
* used to build the nodes for a render object. The state holds the
|
|
6
|
+
* results of the build for further processing in the renderer.
|
|
7
|
+
*
|
|
8
|
+
* Render objects with identical cache keys share the same node builder state.
|
|
9
|
+
*
|
|
10
|
+
* @private
|
|
11
|
+
*/
|
|
3
12
|
class NodeBuilderState {
|
|
4
13
|
|
|
5
|
-
|
|
6
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new node builder state.
|
|
16
|
+
*
|
|
17
|
+
* @param {?string} vertexShader - The native vertex shader code.
|
|
18
|
+
* @param {?string} fragmentShader - The native fragment shader code.
|
|
19
|
+
* @param {?string} computeShader - The native compute shader code.
|
|
20
|
+
* @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.
|
|
21
|
+
* @param {Array<BindGroup>} bindings - An array of bind groups.
|
|
22
|
+
* @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
|
|
23
|
+
* @param {Array<Node>} updateBeforeNodes - An array of nodes that implement their `updateBefore()` method.
|
|
24
|
+
* @param {Array<Node>} updateAfterNodes - An array of nodes that implement their `updateAfter()` method.
|
|
25
|
+
* @param {NodeMaterialObserver} observer - A node material observer.
|
|
26
|
+
* @param {Array<Object>} transforms - An array with transform attribute objects. Only relevant when using compute shaders with WebGL 2.
|
|
27
|
+
*/
|
|
28
|
+
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, transforms = [] ) {
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The native vertex shader code.
|
|
32
|
+
*
|
|
33
|
+
* @type {string}
|
|
34
|
+
*/
|
|
7
35
|
this.vertexShader = vertexShader;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The native fragment shader code.
|
|
39
|
+
*
|
|
40
|
+
* @type {string}
|
|
41
|
+
*/
|
|
8
42
|
this.fragmentShader = fragmentShader;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The native compute shader code.
|
|
46
|
+
*
|
|
47
|
+
* @type {string}
|
|
48
|
+
*/
|
|
9
49
|
this.computeShader = computeShader;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* An array with transform attribute objects.
|
|
53
|
+
* Only relevant when using compute shaders with WebGL 2.
|
|
54
|
+
*
|
|
55
|
+
* @type {Array<Object>}
|
|
56
|
+
*/
|
|
10
57
|
this.transforms = transforms;
|
|
11
58
|
|
|
59
|
+
/**
|
|
60
|
+
* An array of node attributes representing
|
|
61
|
+
* the attributes of the shaders.
|
|
62
|
+
*
|
|
63
|
+
* @type {Array<NodeAttribute>}
|
|
64
|
+
*/
|
|
12
65
|
this.nodeAttributes = nodeAttributes;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* An array of bind groups representing the uniform or storage
|
|
69
|
+
* buffers, texture or samplers of the shader.
|
|
70
|
+
*
|
|
71
|
+
* @type {Array<BindGroup>}
|
|
72
|
+
*/
|
|
13
73
|
this.bindings = bindings;
|
|
14
74
|
|
|
75
|
+
/**
|
|
76
|
+
* An array of nodes that implement their `update()` method.
|
|
77
|
+
*
|
|
78
|
+
* @type {Array<Node>}
|
|
79
|
+
*/
|
|
15
80
|
this.updateNodes = updateNodes;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* An array of nodes that implement their `updateBefore()` method.
|
|
84
|
+
*
|
|
85
|
+
* @type {Array<Node>}
|
|
86
|
+
*/
|
|
16
87
|
this.updateBeforeNodes = updateBeforeNodes;
|
|
17
|
-
this.updateAfterNodes = updateAfterNodes;
|
|
18
88
|
|
|
19
|
-
|
|
89
|
+
/**
|
|
90
|
+
* An array of nodes that implement their `updateAfter()` method.
|
|
91
|
+
*
|
|
92
|
+
* @type {Array<Node>}
|
|
93
|
+
*/
|
|
94
|
+
this.updateAfterNodes = updateAfterNodes;
|
|
20
95
|
|
|
96
|
+
/**
|
|
97
|
+
* A node material observer.
|
|
98
|
+
*
|
|
99
|
+
* @type {NodeMaterialObserver}
|
|
100
|
+
*/
|
|
101
|
+
this.observer = observer;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* How often this state is used by render objects.
|
|
105
|
+
*
|
|
106
|
+
* @type {number}
|
|
107
|
+
*/
|
|
21
108
|
this.usedTimes = 0;
|
|
22
109
|
|
|
23
110
|
}
|
|
24
111
|
|
|
112
|
+
/**
|
|
113
|
+
* This method is used to create a array of bind groups based
|
|
114
|
+
* on the existing bind groups of this state. Shared groups are
|
|
115
|
+
* not cloned.
|
|
116
|
+
*
|
|
117
|
+
* @return {Array<BindGroup>} A array of bind groups.
|
|
118
|
+
*/
|
|
25
119
|
createBindings() {
|
|
26
120
|
|
|
27
121
|
const bindings = [];
|
|
28
122
|
|
|
29
123
|
for ( const instanceGroup of this.bindings ) {
|
|
30
124
|
|
|
31
|
-
const shared =
|
|
125
|
+
const shared = instanceGroup.bindings[ 0 ].groupNode.shared; // All bindings in the group must have the same groupNode.
|
|
32
126
|
|
|
33
127
|
if ( shared !== true ) {
|
|
34
128
|
|
|
35
|
-
const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index );
|
|
129
|
+
const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index, instanceGroup );
|
|
36
130
|
bindings.push( bindingsGroup );
|
|
37
131
|
|
|
38
132
|
for ( const instanceBinding of instanceGroup.bindings ) {
|