@plastic-software/three 0.180.0 → 0.181.2
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/build/three.cjs +944 -487
- package/build/three.core.js +506 -327
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +436 -164
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3753 -1177
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3752 -1176
- 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/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -2
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +3 -3
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +2 -2
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +5 -3
- package/examples/jsm/loaders/KTX2Loader.js +28 -21
- 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 +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/SimplexNoise.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/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- 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/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +7 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
- package/examples/jsm/tsl/display/BloomNode.js +4 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
- package/examples/jsm/tsl/display/GTAONode.js +45 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
- package/examples/jsm/tsl/display/OutlineNode.js +11 -0
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +2 -0
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +123 -6
- package/examples/jsm/tsl/display/boxBlur.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +1 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -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 +3 -2
- package/src/Three.TSL.js +7 -1
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +3 -2
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +8 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -55
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +7 -7
- 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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +4 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +2 -2
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- 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 +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +1 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +3 -2
- package/src/nodes/accessors/InstanceNode.js +22 -4
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceNode.js +2 -1
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +61 -27
- package/src/nodes/code/FunctionCallNode.js +5 -4
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +5 -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} +40 -7
- package/src/nodes/core/Node.js +137 -12
- package/src/nodes/core/NodeBuilder.js +135 -21
- package/src/nodes/core/NodeFrame.js +20 -20
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUtils.js +17 -90
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +16 -14
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +70 -12
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +51 -10
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +2 -3
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/ConditionalNode.js +6 -5
- package/src/nodes/math/MathNode.js +22 -4
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +36 -15
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +3 -2
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +2 -1
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +12 -2
- package/src/nodes/utils/ReflectorNode.js +10 -3
- 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 +2 -1
- package/src/renderers/WebGLRenderer.js +49 -33
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Backend.js +93 -30
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +56 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- 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/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +3 -1
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +436 -228
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -0
- package/src/renderers/common/Sampler.js +37 -11
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +89 -35
- package/src/renderers/common/TimestampQueryPool.js +63 -1
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +7 -3
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeLibrary.js +4 -2
- 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/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +11 -10
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +2 -1
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +18 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
- package/src/renderers/webgpu/WebGPUBackend.js +134 -108
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +3 -2
- package/src/textures/Source.js +2 -1
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -0
- package/src/utils.js +67 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
|
-
import {
|
|
3
|
+
import { nodeArray, Fn } from '../tsl/TSLBase.js';
|
|
4
|
+
import { error } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
@@ -53,7 +54,7 @@ class LoopNode extends Node {
|
|
|
53
54
|
*/
|
|
54
55
|
constructor( params = [] ) {
|
|
55
56
|
|
|
56
|
-
super();
|
|
57
|
+
super( 'void' );
|
|
57
58
|
|
|
58
59
|
this.params = params;
|
|
59
60
|
|
|
@@ -99,16 +100,20 @@ class LoopNode extends Node {
|
|
|
99
100
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
const stack = builder.addStack();
|
|
103
|
+
const stack = builder.addStack();
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
const fnCall = this.params[ this.params.length - 1 ]( inputs );
|
|
106
|
+
|
|
107
|
+
properties.returnsNode = fnCall.context( { nodeLoop: fnCall } );
|
|
105
108
|
properties.stackNode = stack;
|
|
106
109
|
|
|
107
110
|
const baseParam = this.params[ 0 ];
|
|
108
111
|
|
|
109
112
|
if ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {
|
|
110
113
|
|
|
111
|
-
|
|
114
|
+
const fnUpdateCall = Fn( this.params[ 0 ].update )( inputs );
|
|
115
|
+
|
|
116
|
+
properties.updateNode = fnUpdateCall.context( { nodeLoop: fnUpdateCall } );
|
|
112
117
|
|
|
113
118
|
}
|
|
114
119
|
|
|
@@ -118,26 +123,19 @@ class LoopNode extends Node {
|
|
|
118
123
|
|
|
119
124
|
}
|
|
120
125
|
|
|
121
|
-
/**
|
|
122
|
-
* This method is overwritten since the node type is inferred based on the loop configuration.
|
|
123
|
-
*
|
|
124
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
125
|
-
* @return {string} The node type.
|
|
126
|
-
*/
|
|
127
|
-
getNodeType( builder ) {
|
|
128
|
-
|
|
129
|
-
const { returnsNode } = this.getProperties( builder );
|
|
130
|
-
|
|
131
|
-
return returnsNode ? returnsNode.getNodeType( builder ) : 'void';
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
126
|
setup( builder ) {
|
|
136
127
|
|
|
137
128
|
// setup properties
|
|
138
129
|
|
|
139
130
|
this.getProperties( builder );
|
|
140
131
|
|
|
132
|
+
if ( builder.fnCall ) {
|
|
133
|
+
|
|
134
|
+
const shaderNodeData = builder.getDataFromNode( builder.fnCall.shaderNode );
|
|
135
|
+
shaderNodeData.hasLoop = true;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
141
139
|
}
|
|
142
140
|
|
|
143
141
|
generate( builder ) {
|
|
@@ -267,7 +265,7 @@ class LoopNode extends Node {
|
|
|
267
265
|
|
|
268
266
|
} else {
|
|
269
267
|
|
|
270
|
-
|
|
268
|
+
error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
|
|
271
269
|
|
|
272
270
|
updateSnippet = 'break /* invalid update */';
|
|
273
271
|
|
|
@@ -304,7 +302,7 @@ class LoopNode extends Node {
|
|
|
304
302
|
|
|
305
303
|
const stackSnippet = stackNode.build( builder, 'void' );
|
|
306
304
|
|
|
307
|
-
|
|
305
|
+
properties.returnsNode.build( builder, 'void' );
|
|
308
306
|
|
|
309
307
|
builder.removeFlowTab().addFlowCode( '\n' + builder.tab + stackSnippet );
|
|
310
308
|
|
|
@@ -316,8 +314,6 @@ class LoopNode extends Node {
|
|
|
316
314
|
|
|
317
315
|
builder.addFlowTab();
|
|
318
316
|
|
|
319
|
-
return returnsSnippet;
|
|
320
|
-
|
|
321
317
|
}
|
|
322
318
|
|
|
323
319
|
}
|
|
@@ -332,7 +328,7 @@ export default LoopNode;
|
|
|
332
328
|
* @param {...any} params - A list of parameters.
|
|
333
329
|
* @returns {LoopNode}
|
|
334
330
|
*/
|
|
335
|
-
export const Loop = ( ...params ) =>
|
|
331
|
+
export const Loop = ( ...params ) => new LoopNode( nodeArray( params, 'int' ) ).toStack();
|
|
336
332
|
|
|
337
333
|
/**
|
|
338
334
|
* TSL function for creating a `Continue()` expression.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import { warn } from '../../utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Base class for representing member access on an object-like
|
|
@@ -100,7 +101,7 @@ class MemberNode extends Node {
|
|
|
100
101
|
|
|
101
102
|
if ( this.hasMember( builder ) === false ) {
|
|
102
103
|
|
|
103
|
-
|
|
104
|
+
warn( `TSL: Member "${ this.property }" does not exist in struct.` );
|
|
104
105
|
|
|
105
106
|
const type = this.getNodeType( builder );
|
|
106
107
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
1
|
+
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
|
|
2
2
|
import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
3
3
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
4
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
@@ -93,3 +93,30 @@ export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projec
|
|
|
93
93
|
return normalize( cross( dpdx, dpdy ) );
|
|
94
94
|
|
|
95
95
|
} );
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Interleaved Gradient Noise (IGN) from Jimenez 2014.
|
|
99
|
+
*
|
|
100
|
+
* IGN has "low discrepancy" resulting in evenly distributed samples. It's superior compared to
|
|
101
|
+
* default white noise, blue noise or Bayer.
|
|
102
|
+
*
|
|
103
|
+
* References:
|
|
104
|
+
* - {@link https://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare/}
|
|
105
|
+
* - {@link https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/}
|
|
106
|
+
*
|
|
107
|
+
* @tsl
|
|
108
|
+
* @function
|
|
109
|
+
* @param {Node<vec2>} position - The input position, usually screen coordinates.
|
|
110
|
+
* @return {Node<float>} The noise value.
|
|
111
|
+
*/
|
|
112
|
+
export const interleavedGradientNoise = Fn( ( [ position ] ) => {
|
|
113
|
+
|
|
114
|
+
return fract( float( 52.9829189 ).mul( fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ) );
|
|
115
|
+
|
|
116
|
+
} ).setLayout( {
|
|
117
|
+
name: 'interleavedGradientNoise',
|
|
118
|
+
type: 'float',
|
|
119
|
+
inputs: [
|
|
120
|
+
{ name: 'position', type: 'vec2' }
|
|
121
|
+
]
|
|
122
|
+
} );
|
|
@@ -202,8 +202,8 @@ class RTTNode extends TextureNode {
|
|
|
202
202
|
const pixelRatio = renderer.getPixelRatio();
|
|
203
203
|
const size = renderer.getSize( _size );
|
|
204
204
|
|
|
205
|
-
const effectiveWidth = size.width * pixelRatio;
|
|
206
|
-
const effectiveHeight = size.height * pixelRatio;
|
|
205
|
+
const effectiveWidth = Math.floor( size.width * pixelRatio );
|
|
206
|
+
const effectiveHeight = Math.floor( size.height * pixelRatio );
|
|
207
207
|
|
|
208
208
|
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
209
209
|
|
|
@@ -217,7 +217,17 @@ class RTTNode extends TextureNode {
|
|
|
217
217
|
|
|
218
218
|
//
|
|
219
219
|
|
|
220
|
+
let name = 'RTT';
|
|
221
|
+
|
|
222
|
+
if ( this.node.name ) {
|
|
223
|
+
|
|
224
|
+
name = this.node.name + ' [ ' + name + ' ]';
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
220
229
|
this._quadMesh.material.fragmentNode = this._rttNode;
|
|
230
|
+
this._quadMesh.name = name;
|
|
221
231
|
|
|
222
232
|
//
|
|
223
233
|
|
|
@@ -164,6 +164,7 @@ class ReflectorNode extends TextureNode {
|
|
|
164
164
|
newNode.depthNode = this.depthNode;
|
|
165
165
|
newNode.compareNode = this.compareNode;
|
|
166
166
|
newNode.gradNode = this.gradNode;
|
|
167
|
+
newNode.offsetNode = this.offsetNode;
|
|
167
168
|
newNode._reflectorBaseNode = this._reflectorBaseNode;
|
|
168
169
|
|
|
169
170
|
return newNode;
|
|
@@ -250,7 +251,7 @@ class ReflectorBaseNode extends Node {
|
|
|
250
251
|
|
|
251
252
|
if ( parameters.resolution !== undefined ) {
|
|
252
253
|
|
|
253
|
-
warnOnce( '
|
|
254
|
+
warnOnce( 'ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
254
255
|
|
|
255
256
|
this.resolutionScale = parameters.resolution;
|
|
256
257
|
|
|
@@ -551,6 +552,10 @@ class ReflectorBaseNode extends Node {
|
|
|
551
552
|
renderer.setRenderTarget( renderTarget );
|
|
552
553
|
renderer.autoClear = true;
|
|
553
554
|
|
|
555
|
+
const previousName = scene.name;
|
|
556
|
+
|
|
557
|
+
scene.name = ( scene.name || 'Scene' ) + ' [ Reflector ]'; // TODO: Add bounce index
|
|
558
|
+
|
|
554
559
|
if ( needsClear ) {
|
|
555
560
|
|
|
556
561
|
renderer.clear();
|
|
@@ -565,6 +570,8 @@ class ReflectorBaseNode extends Node {
|
|
|
565
570
|
|
|
566
571
|
}
|
|
567
572
|
|
|
573
|
+
scene.name = previousName;
|
|
574
|
+
|
|
568
575
|
renderer.setMRT( currentMRT );
|
|
569
576
|
renderer.setRenderTarget( currentRenderTarget );
|
|
570
577
|
renderer.autoClear = currentAutoClear;
|
|
@@ -586,7 +593,7 @@ class ReflectorBaseNode extends Node {
|
|
|
586
593
|
*/
|
|
587
594
|
get resolution() {
|
|
588
595
|
|
|
589
|
-
warnOnce( '
|
|
596
|
+
warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
590
597
|
|
|
591
598
|
return this.resolutionScale;
|
|
592
599
|
|
|
@@ -594,7 +601,7 @@ class ReflectorBaseNode extends Node {
|
|
|
594
601
|
|
|
595
602
|
set resolution( value ) {
|
|
596
603
|
|
|
597
|
-
warnOnce( '
|
|
604
|
+
warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
598
605
|
|
|
599
606
|
this.resolutionScale = value;
|
|
600
607
|
|
package/src/objects/Line.js
CHANGED
|
@@ -6,6 +6,7 @@ import { Vector3 } from '../math/Vector3.js';
|
|
|
6
6
|
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
|
|
7
7
|
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
8
8
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
9
|
+
import { warn } from '../utils.js';
|
|
9
10
|
|
|
10
11
|
const _vStart = /*@__PURE__*/ new Vector3();
|
|
11
12
|
const _vEnd = /*@__PURE__*/ new Vector3();
|
|
@@ -142,7 +143,7 @@ class Line extends Object3D {
|
|
|
142
143
|
|
|
143
144
|
} else {
|
|
144
145
|
|
|
145
|
-
|
|
146
|
+
warn( 'Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
|
|
146
147
|
|
|
147
148
|
}
|
|
148
149
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Line } from './Line.js';
|
|
2
2
|
import { Vector3 } from '../math/Vector3.js';
|
|
3
3
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
4
|
+
import { warn } from '../utils.js';
|
|
4
5
|
|
|
5
6
|
const _start = /*@__PURE__*/ new Vector3();
|
|
6
7
|
const _end = /*@__PURE__*/ new Vector3();
|
|
@@ -60,7 +61,7 @@ class LineSegments extends Line {
|
|
|
60
61
|
|
|
61
62
|
} else {
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
warn( 'LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
|
|
64
65
|
|
|
65
66
|
}
|
|
66
67
|
|
package/src/objects/Skeleton.js
CHANGED
|
@@ -6,6 +6,7 @@ import { Bone } from './Bone.js';
|
|
|
6
6
|
import { Matrix4 } from '../math/Matrix4.js';
|
|
7
7
|
import { DataTexture } from '../textures/DataTexture.js';
|
|
8
8
|
import { generateUUID } from '../math/MathUtils.js';
|
|
9
|
+
import { warn } from '../utils.js';
|
|
9
10
|
|
|
10
11
|
const _offsetMatrix = /*@__PURE__*/ new Matrix4();
|
|
11
12
|
const _identityMatrix = /*@__PURE__*/ new Matrix4();
|
|
@@ -106,7 +107,7 @@ class Skeleton {
|
|
|
106
107
|
|
|
107
108
|
if ( bones.length !== boneInverses.length ) {
|
|
108
109
|
|
|
109
|
-
|
|
110
|
+
warn( 'Skeleton: Number of inverse bone matrices does not match amount of bones.' );
|
|
110
111
|
|
|
111
112
|
this.boneInverses = [];
|
|
112
113
|
|
|
@@ -324,7 +325,7 @@ class Skeleton {
|
|
|
324
325
|
|
|
325
326
|
if ( bone === undefined ) {
|
|
326
327
|
|
|
327
|
-
|
|
328
|
+
warn( 'Skeleton: No bone found with UUID:', uuid );
|
|
328
329
|
bone = new Bone();
|
|
329
330
|
|
|
330
331
|
}
|
|
@@ -6,6 +6,7 @@ import { Vector3 } from '../math/Vector3.js';
|
|
|
6
6
|
import { Vector4 } from '../math/Vector4.js';
|
|
7
7
|
import { Ray } from '../math/Ray.js';
|
|
8
8
|
import { AttachedBindMode, DetachedBindMode } from '../constants.js';
|
|
9
|
+
import { warn } from '../utils.js';
|
|
9
10
|
|
|
10
11
|
const _basePosition = /*@__PURE__*/ new Vector3();
|
|
11
12
|
|
|
@@ -32,6 +33,7 @@ const _ray = /*@__PURE__*/ new Ray();
|
|
|
32
33
|
* or {@link FBXLoader } import respective models.
|
|
33
34
|
*
|
|
34
35
|
* @augments Mesh
|
|
36
|
+
* @demo scenes/bones-browser.html
|
|
35
37
|
*/
|
|
36
38
|
class SkinnedMesh extends Mesh {
|
|
37
39
|
|
|
@@ -299,7 +301,7 @@ class SkinnedMesh extends Mesh {
|
|
|
299
301
|
|
|
300
302
|
} else {
|
|
301
303
|
|
|
302
|
-
|
|
304
|
+
warn( 'SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );
|
|
303
305
|
|
|
304
306
|
}
|
|
305
307
|
|
package/src/objects/Sprite.js
CHANGED
|
@@ -7,6 +7,7 @@ import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
|
7
7
|
import { InterleavedBuffer } from '../core/InterleavedBuffer.js';
|
|
8
8
|
import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js';
|
|
9
9
|
import { SpriteMaterial } from '../materials/SpriteMaterial.js';
|
|
10
|
+
import { error } from '../utils.js';
|
|
10
11
|
|
|
11
12
|
let _geometry;
|
|
12
13
|
|
|
@@ -129,7 +130,7 @@ class Sprite extends Object3D {
|
|
|
129
130
|
|
|
130
131
|
if ( raycaster.camera === null ) {
|
|
131
132
|
|
|
132
|
-
|
|
133
|
+
error( 'Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' );
|
|
133
134
|
|
|
134
135
|
}
|
|
135
136
|
|
|
@@ -52,8 +52,9 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
52
52
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
53
53
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
54
54
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
55
|
-
import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
|
|
55
|
+
import { createCanvasElement, probeAsync, warnOnce, error, warn, log } from '../utils.js';
|
|
56
56
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
57
|
+
import { getDFGLUT } from './shaders/DFGLUTData.js';
|
|
57
58
|
|
|
58
59
|
/**
|
|
59
60
|
* This renderer uses WebGL 2 to display scenes.
|
|
@@ -110,6 +111,21 @@ class WebGLRenderer {
|
|
|
110
111
|
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
const INTEGER_FORMATS = new Set( [
|
|
115
|
+
RGBAIntegerFormat,
|
|
116
|
+
RGIntegerFormat,
|
|
117
|
+
RedIntegerFormat
|
|
118
|
+
] );
|
|
119
|
+
|
|
120
|
+
const UNSIGNED_TYPES = new Set( [
|
|
121
|
+
UnsignedByteType,
|
|
122
|
+
UnsignedIntType,
|
|
123
|
+
UnsignedShortType,
|
|
124
|
+
UnsignedInt248Type,
|
|
125
|
+
UnsignedShort4444Type,
|
|
126
|
+
UnsignedShort5551Type
|
|
127
|
+
] );
|
|
128
|
+
|
|
113
129
|
const uintClearColor = new Uint32Array( 4 );
|
|
114
130
|
const intClearColor = new Int32Array( 4 );
|
|
115
131
|
|
|
@@ -131,7 +147,7 @@ class WebGLRenderer {
|
|
|
131
147
|
* document.body.appendChild( renderer.domElement );
|
|
132
148
|
* ```
|
|
133
149
|
*
|
|
134
|
-
* @type {
|
|
150
|
+
* @type {HTMLCanvasElement|OffscreenCanvas}
|
|
135
151
|
*/
|
|
136
152
|
this.domElement = canvas;
|
|
137
153
|
|
|
@@ -384,7 +400,7 @@ class WebGLRenderer {
|
|
|
384
400
|
|
|
385
401
|
} catch ( error ) {
|
|
386
402
|
|
|
387
|
-
|
|
403
|
+
error( 'WebGLRenderer: ' + error.message );
|
|
388
404
|
throw error;
|
|
389
405
|
|
|
390
406
|
}
|
|
@@ -621,7 +637,7 @@ class WebGLRenderer {
|
|
|
621
637
|
|
|
622
638
|
if ( xr.isPresenting ) {
|
|
623
639
|
|
|
624
|
-
|
|
640
|
+
warn( 'WebGLRenderer: Can\'t change size while VR device is presenting.' );
|
|
625
641
|
return;
|
|
626
642
|
|
|
627
643
|
}
|
|
@@ -883,9 +899,7 @@ class WebGLRenderer {
|
|
|
883
899
|
if ( _currentRenderTarget !== null ) {
|
|
884
900
|
|
|
885
901
|
const targetFormat = _currentRenderTarget.texture.format;
|
|
886
|
-
isIntegerFormat = targetFormat
|
|
887
|
-
targetFormat === RGIntegerFormat ||
|
|
888
|
-
targetFormat === RedIntegerFormat;
|
|
902
|
+
isIntegerFormat = INTEGER_FORMATS.has( targetFormat );
|
|
889
903
|
|
|
890
904
|
}
|
|
891
905
|
|
|
@@ -894,12 +908,7 @@ class WebGLRenderer {
|
|
|
894
908
|
if ( isIntegerFormat ) {
|
|
895
909
|
|
|
896
910
|
const targetType = _currentRenderTarget.texture.type;
|
|
897
|
-
const isUnsignedType = targetType
|
|
898
|
-
targetType === UnsignedIntType ||
|
|
899
|
-
targetType === UnsignedShortType ||
|
|
900
|
-
targetType === UnsignedInt248Type ||
|
|
901
|
-
targetType === UnsignedShort4444Type ||
|
|
902
|
-
targetType === UnsignedShort5551Type;
|
|
911
|
+
const isUnsignedType = UNSIGNED_TYPES.has( targetType );
|
|
903
912
|
|
|
904
913
|
const clearColor = background.getClearColor();
|
|
905
914
|
const a = background.getClearAlpha();
|
|
@@ -1013,7 +1022,7 @@ class WebGLRenderer {
|
|
|
1013
1022
|
|
|
1014
1023
|
event.preventDefault();
|
|
1015
1024
|
|
|
1016
|
-
|
|
1025
|
+
log( 'WebGLRenderer: Context Lost.' );
|
|
1017
1026
|
|
|
1018
1027
|
_isContextLost = true;
|
|
1019
1028
|
|
|
@@ -1021,7 +1030,7 @@ class WebGLRenderer {
|
|
|
1021
1030
|
|
|
1022
1031
|
function onContextRestore( /* event */ ) {
|
|
1023
1032
|
|
|
1024
|
-
|
|
1033
|
+
log( 'WebGLRenderer: Context Restored.' );
|
|
1025
1034
|
|
|
1026
1035
|
_isContextLost = false;
|
|
1027
1036
|
|
|
@@ -1043,7 +1052,7 @@ class WebGLRenderer {
|
|
|
1043
1052
|
|
|
1044
1053
|
function onContextCreationError( event ) {
|
|
1045
1054
|
|
|
1046
|
-
|
|
1055
|
+
error( 'WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
|
|
1047
1056
|
|
|
1048
1057
|
}
|
|
1049
1058
|
|
|
@@ -1096,7 +1105,7 @@ class WebGLRenderer {
|
|
|
1096
1105
|
|
|
1097
1106
|
if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
|
|
1098
1107
|
|
|
1099
|
-
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
|
|
1108
|
+
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ) || ( object.isBatchedMesh && object._frontFaceCW );
|
|
1100
1109
|
|
|
1101
1110
|
const program = setProgram( camera, scene, geometry, material, object );
|
|
1102
1111
|
|
|
@@ -1216,7 +1225,7 @@ class WebGLRenderer {
|
|
|
1216
1225
|
if ( object._multiDrawInstances !== null ) {
|
|
1217
1226
|
|
|
1218
1227
|
// @deprecated, r174
|
|
1219
|
-
warnOnce( '
|
|
1228
|
+
warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1220
1229
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1221
1230
|
|
|
1222
1231
|
} else {
|
|
@@ -1492,6 +1501,13 @@ class WebGLRenderer {
|
|
|
1492
1501
|
|
|
1493
1502
|
if ( typeof self !== 'undefined' ) animation.setContext( self );
|
|
1494
1503
|
|
|
1504
|
+
/**
|
|
1505
|
+
* Applications are advised to always define the animation loop
|
|
1506
|
+
* with this method and not manually with `requestAnimationFrame()`
|
|
1507
|
+
* for best compatibility.
|
|
1508
|
+
*
|
|
1509
|
+
* @param {?onAnimationCallback} callback - The application's animation loop.
|
|
1510
|
+
*/
|
|
1495
1511
|
this.setAnimationLoop = function ( callback ) {
|
|
1496
1512
|
|
|
1497
1513
|
onAnimationFrameCallback = callback;
|
|
@@ -1524,7 +1540,7 @@ class WebGLRenderer {
|
|
|
1524
1540
|
|
|
1525
1541
|
if ( camera !== undefined && camera.isCamera !== true ) {
|
|
1526
1542
|
|
|
1527
|
-
|
|
1543
|
+
error( 'WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
|
|
1528
1544
|
return;
|
|
1529
1545
|
|
|
1530
1546
|
}
|
|
@@ -1822,9 +1838,7 @@ class WebGLRenderer {
|
|
|
1822
1838
|
|
|
1823
1839
|
function renderScene( currentRenderList, scene, camera, viewport ) {
|
|
1824
1840
|
|
|
1825
|
-
const opaqueObjects = currentRenderList
|
|
1826
|
-
const transmissiveObjects = currentRenderList.transmissive;
|
|
1827
|
-
const transparentObjects = currentRenderList.transparent;
|
|
1841
|
+
const { opaque: opaqueObjects, transmissive: transmissiveObjects, transparent: transparentObjects } = currentRenderList;
|
|
1828
1842
|
|
|
1829
1843
|
currentRenderState.setupLightsView( camera );
|
|
1830
1844
|
|
|
@@ -1929,10 +1943,7 @@ class WebGLRenderer {
|
|
|
1929
1943
|
|
|
1930
1944
|
const renderItem = transmissiveObjects[ i ];
|
|
1931
1945
|
|
|
1932
|
-
const object = renderItem
|
|
1933
|
-
const geometry = renderItem.geometry;
|
|
1934
|
-
const material = renderItem.material;
|
|
1935
|
-
const group = renderItem.group;
|
|
1946
|
+
const { object, geometry, material, group } = renderItem;
|
|
1936
1947
|
|
|
1937
1948
|
if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
|
|
1938
1949
|
|
|
@@ -1979,9 +1990,7 @@ class WebGLRenderer {
|
|
|
1979
1990
|
|
|
1980
1991
|
const renderItem = renderList[ i ];
|
|
1981
1992
|
|
|
1982
|
-
const object = renderItem
|
|
1983
|
-
const geometry = renderItem.geometry;
|
|
1984
|
-
const group = renderItem.group;
|
|
1993
|
+
const { object, geometry, group } = renderItem;
|
|
1985
1994
|
let material = renderItem.material;
|
|
1986
1995
|
|
|
1987
1996
|
if ( material.allowOverride === true && overrideMaterial !== null ) {
|
|
@@ -2520,6 +2529,13 @@ class WebGLRenderer {
|
|
|
2520
2529
|
|
|
2521
2530
|
}
|
|
2522
2531
|
|
|
2532
|
+
// Set DFG LUT for physically-based materials
|
|
2533
|
+
if ( m_uniforms.dfgLUT !== undefined ) {
|
|
2534
|
+
|
|
2535
|
+
m_uniforms.dfgLUT.value = getDFGLUT();
|
|
2536
|
+
|
|
2537
|
+
}
|
|
2538
|
+
|
|
2523
2539
|
if ( refreshMaterial ) {
|
|
2524
2540
|
|
|
2525
2541
|
p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
|
|
@@ -2866,7 +2882,7 @@ class WebGLRenderer {
|
|
|
2866
2882
|
|
|
2867
2883
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2868
2884
|
|
|
2869
|
-
|
|
2885
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
|
|
2870
2886
|
return;
|
|
2871
2887
|
|
|
2872
2888
|
}
|
|
@@ -2891,14 +2907,14 @@ class WebGLRenderer {
|
|
|
2891
2907
|
|
|
2892
2908
|
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2893
2909
|
|
|
2894
|
-
|
|
2910
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
2895
2911
|
return;
|
|
2896
2912
|
|
|
2897
2913
|
}
|
|
2898
2914
|
|
|
2899
2915
|
if ( ! capabilities.textureTypeReadable( textureType ) ) {
|
|
2900
2916
|
|
|
2901
|
-
|
|
2917
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2902
2918
|
return;
|
|
2903
2919
|
|
|
2904
2920
|
}
|
|
@@ -3430,7 +3446,7 @@ class WebGLRenderer {
|
|
|
3430
3446
|
* WebGLRenderer options.
|
|
3431
3447
|
*
|
|
3432
3448
|
* @typedef {Object} WebGLRenderer~Options
|
|
3433
|
-
* @property {
|
|
3449
|
+
* @property {HTMLCanvasElement|OffscreenCanvas} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
|
|
3434
3450
|
* @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
|
|
3435
3451
|
* @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
|
|
3436
3452
|
* @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
|
|
@@ -9,10 +9,18 @@ class Animation {
|
|
|
9
9
|
/**
|
|
10
10
|
* Constructs a new animation loop management component.
|
|
11
11
|
*
|
|
12
|
+
* @param {Renderer} renderer - A reference to the main renderer.
|
|
12
13
|
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
13
14
|
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
14
15
|
*/
|
|
15
|
-
constructor( nodes, info ) {
|
|
16
|
+
constructor( renderer, nodes, info ) {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A reference to the main renderer.
|
|
20
|
+
*
|
|
21
|
+
* @type {Renderer}
|
|
22
|
+
*/
|
|
23
|
+
this.renderer = renderer;
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
26
|
* Renderer component for managing nodes related logic.
|
|
@@ -70,8 +78,12 @@ class Animation {
|
|
|
70
78
|
|
|
71
79
|
this.info.frame = this.nodes.nodeFrame.frameId;
|
|
72
80
|
|
|
81
|
+
this.renderer._inspector.begin();
|
|
82
|
+
|
|
73
83
|
if ( this._animationLoop !== null ) this._animationLoop( time, xrFrame );
|
|
74
84
|
|
|
85
|
+
this.renderer._inspector.finish();
|
|
86
|
+
|
|
75
87
|
};
|
|
76
88
|
|
|
77
89
|
update();
|