@babylonjs/core 8.25.0 → 8.25.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/Bones/bone.js +14 -54
- package/Bones/bone.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Native/nativeShaderProcessors.js +3 -0
- package/Engines/Native/nativeShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +3 -0
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/abstractEngine.d.ts +1 -1
- package/Engines/abstractEngine.functions.d.ts +2 -2
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +8 -0
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +16 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +16 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +40 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +3 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +10 -7
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +2 -2
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +4 -0
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/cameraGizmo.js +11 -13
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +21 -13
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Loading/sceneLoader.d.ts +3 -1
- package/Loading/sceneLoader.js +3 -2
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +0 -5
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +3 -14
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +5 -0
- package/Materials/Textures/renderTargetTexture.js +9 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/material.d.ts +17 -1
- package/Materials/material.js +38 -7
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +1 -0
- package/Materials/materialDefines.js +1 -0
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +3 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +3 -10
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/csg2.js +5 -3
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.d.ts +5 -3
- package/Meshes/linesMesh.js +27 -8
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +2 -2
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/assetsManager.d.ts +81 -25
- package/Misc/assetsManager.js +70 -32
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/fileTools.d.ts +2 -2
- package/Misc/fileTools.js +3 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +16 -7
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/snapshotRenderingHelper.d.ts +2 -0
- package/Misc/snapshotRenderingHelper.js +31 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +5 -3
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +22 -9
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +3 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +18 -2
- package/Rendering/objectRenderer.js +69 -29
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +4 -0
- package/Rendering/outlineRenderer.js +10 -0
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -5
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/ssao2.fragment.js +14 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/ssao2.fragment.js +14 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +5 -0
- package/Sprites/spriteManager.js +6 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +5 -2
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +6 -2
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +5 -2
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taaMaterialManager.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,8CAAuC;AACjE,OAAO,EAAE,kBAAkB,EAAE,iDAA0C;AACvE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,oDAA6C;AAGxG,OAAO,EAAE,OAAO,EAAE,sCAA+B;
|
|
1
|
+
{"version":3,"file":"taaMaterialManager.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Material } from \"core/Materials/material\";\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager\";\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\nimport type { UniformBuffer } from \"core/Materials/uniformBuffer\";\nimport { Vector2 } from \"core/Maths/math.vector\";\nimport type { Scene } from \"core/scene\";\nimport type { Nullable } from \"core/types\";\nimport { RegisterClass } from \"../../../Misc/typeStore\";\n\nclass TAAJitterMaterialDefines extends MaterialDefines {\n TAA_JITTER = false;\n}\n\nclass TAAJitterMaterialPlugin extends MaterialPluginBase {\n public static readonly Name = \"TAAJitter\";\n\n private _manager: Nullable<TAAMaterialManager>;\n public get manager(): Nullable<TAAMaterialManager> {\n return this._manager;\n }\n\n public set manager(manager: Nullable<TAAMaterialManager>) {\n if (this._manager === manager) {\n return;\n }\n this.dispose();\n this._manager = manager;\n manager?._materialPlugins.push(this);\n this._updateMaterial();\n }\n\n public get isEnabled(): boolean {\n return this._manager?.isEnabled ?? false;\n }\n\n constructor(material: Material) {\n super(material, TAAJitterMaterialPlugin.Name, 300, new TAAJitterMaterialDefines());\n this.registerForExtraEvents = true;\n this.doNotSerialize = true;\n }\n\n /** @internal */\n public _updateMaterial(): void {\n this._enable(this.isEnabled);\n this.markAllDefinesAsDirty();\n }\n\n public override isCompatible(): boolean {\n return true;\n }\n\n public override getClassName(): string {\n return \"TAAJitterMaterialPlugin\";\n }\n\n public override prepareDefines(defines: TAAJitterMaterialDefines): void {\n defines.TAA_JITTER = this.isEnabled;\n }\n\n public override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\n const ubo = [{ name: \"taa_jitter\", size: 2, type: \"vec2\" }];\n if (shaderLanguage === ShaderLanguage.GLSL) {\n return {\n ubo,\n vertex: `\n #ifdef TAA_JITTER\n uniform vec2 taa_jitter;\n #endif\n `,\n };\n } else {\n return { ubo };\n }\n }\n\n public override hardBindForSubMesh(uniformBuffer: UniformBuffer): void {\n if (this.isEnabled) {\n const jitter = this._manager!.jitter;\n uniformBuffer.updateFloat2(\"taa_jitter\", jitter.x, jitter.y);\n }\n }\n\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL) {\n // We jitter instead of modifying the camera so the velocity buffer stays unaffected\n // More info: https://sugulee.wordpress.com/2021/06/21/temporal-anti-aliasingtaa-tutorial/\n if (shaderType !== \"vertex\") {\n return null;\n } else if (shaderLanguage === ShaderLanguage.WGSL) {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n vertexOutputs.position += vec4f(uniforms.taa_jitter * vertexOutputs.position.w, 0, 1);\n #endif\n `,\n };\n } else {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n gl_Position.xy += taa_jitter * gl_Position.w;\n #endif\n `,\n };\n }\n }\n\n public override dispose(): void {\n if (this._manager) {\n const index = this._manager._materialPlugins.indexOf(this);\n if (index !== -1) {\n this._manager._materialPlugins.splice(index, 1);\n }\n }\n }\n}\n\nRegisterClass(`BABYLON.TAAJitterMaterialPlugin`, TAAJitterMaterialPlugin);\n\n/**\n * Applies and manages the TAA jitter plugin on all materials.\n */\nexport class TAAMaterialManager {\n private _isEnabled = true;\n /**\n * Set to enable or disable the jitter offset on all materials.\n */\n public get isEnabled(): boolean {\n return this._isEnabled;\n }\n\n public set isEnabled(enabled: boolean) {\n if (this._isEnabled === enabled) {\n return;\n }\n this._isEnabled = enabled;\n for (const plugin of this._materialPlugins) {\n plugin._updateMaterial();\n }\n }\n\n /**\n * The current jitter offset to apply to all materials.\n */\n public readonly jitter = new Vector2();\n\n /** @internal */\n public readonly _materialPlugins: TAAJitterMaterialPlugin[] = [];\n\n /**\n * @param scene All materials in this scene will have a jitter offset applied to them.\n */\n constructor(scene: Scene) {\n for (const material of scene.materials) {\n this._getPlugin(material);\n }\n RegisterMaterialPlugin(TAAJitterMaterialPlugin.Name, (material) => this._getPlugin(material));\n }\n\n /**\n * Disposes of the material manager.\n */\n public dispose(): void {\n UnregisterMaterialPlugin(TAAJitterMaterialPlugin.Name);\n const plugins = this._materialPlugins.splice(0, this._materialPlugins.length);\n for (const plugin of plugins) {\n plugin.manager = null;\n }\n }\n\n private _getPlugin(material: Material): TAAJitterMaterialPlugin {\n let plugin = material.pluginManager?.getPlugin<TAAJitterMaterialPlugin>(TAAJitterMaterialPlugin.Name);\n if (!plugin) {\n plugin = new TAAJitterMaterialPlugin(material);\n }\n plugin.manager = this;\n return plugin;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Nullable, Immutable, Camera, Scene, AbstractMesh, SubMesh, Material, IParticleSystem, BoundingBox, UniformBuffer } from "../index.js";
|
|
1
|
+
import type { Nullable, Immutable, Camera, Scene, AbstractMesh, SubMesh, Material, IParticleSystem, BoundingBox, UniformBuffer, AbstractEngine } from "../index.js";
|
|
2
2
|
import { Observable } from "../Misc/observable.js";
|
|
3
3
|
import { RenderingManager } from "../Rendering/renderingManager.js";
|
|
4
4
|
import { SmartArray } from "../Misc/smartArray.js";
|
|
@@ -73,6 +73,10 @@ export declare class ObjectRenderer {
|
|
|
73
73
|
* Enables the rendering of bounding boxes for meshes (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). Default is false.
|
|
74
74
|
*/
|
|
75
75
|
enableBoundingBoxRendering: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Enables the rendering of outline/overlay for meshes (still subject to Mesh.renderOutline/Mesh.renderOverlay). Default is true.
|
|
78
|
+
*/
|
|
79
|
+
enableOutlineRendering: boolean;
|
|
76
80
|
/**
|
|
77
81
|
* Define the camera used to render the objects.
|
|
78
82
|
*/
|
|
@@ -89,6 +93,13 @@ export declare class ObjectRenderer {
|
|
|
89
93
|
*/
|
|
90
94
|
get disableImageProcessing(): boolean;
|
|
91
95
|
set disableImageProcessing(value: boolean);
|
|
96
|
+
/**
|
|
97
|
+
* If true, the object renderer will not set the view/projection/transformation matrices for the active camera (default: false).
|
|
98
|
+
* By default, the view/projection/transformation matrices are set from the active camera (either ObjectRenderer.activeCamera or scene.activeCamera).
|
|
99
|
+
* Sets this property to true if you want to define your own transformation matrices (use the onInitRenderingObservable observable
|
|
100
|
+
* to set your own matrices, to be sure they will be correctly taken into account)
|
|
101
|
+
*/
|
|
102
|
+
dontSetTransformationMatrix: boolean;
|
|
92
103
|
/**
|
|
93
104
|
* Override the mesh isReady function with your own one.
|
|
94
105
|
*/
|
|
@@ -125,6 +136,7 @@ export declare class ObjectRenderer {
|
|
|
125
136
|
* An event triggered when fast path rendering is used
|
|
126
137
|
*/
|
|
127
138
|
readonly onFastPathRenderObservable: Observable<number>;
|
|
139
|
+
protected _engine: AbstractEngine;
|
|
128
140
|
protected _scene: Scene;
|
|
129
141
|
protected _renderingManager: RenderingManager;
|
|
130
142
|
/** @internal */
|
|
@@ -135,8 +147,10 @@ export declare class ObjectRenderer {
|
|
|
135
147
|
protected _activeMeshes: SmartArray<AbstractMesh>;
|
|
136
148
|
protected _activeBoundingBoxes: SmartArray<BoundingBox>;
|
|
137
149
|
protected _useUBO: boolean;
|
|
138
|
-
protected
|
|
150
|
+
protected _sceneUBOs: UniformBuffer[];
|
|
139
151
|
protected _currentSceneUBO: UniformBuffer;
|
|
152
|
+
protected _currentFrameId: number;
|
|
153
|
+
protected _currentSceneUBOIndex: number;
|
|
140
154
|
/**
|
|
141
155
|
* The options used by the object renderer
|
|
142
156
|
*/
|
|
@@ -188,6 +202,8 @@ export declare class ObjectRenderer {
|
|
|
188
202
|
constructor(name: string, scene: Scene, options?: ObjectRendererOptions);
|
|
189
203
|
private _releaseRenderPassId;
|
|
190
204
|
private _createRenderPassId;
|
|
205
|
+
private _createSceneUBO;
|
|
206
|
+
private _getSceneUBO;
|
|
191
207
|
/**
|
|
192
208
|
* Resets the refresh counter of the renderer and start back from scratch.
|
|
193
209
|
* Could be useful to re-render if it is setup to render only once.
|
|
@@ -54,16 +54,17 @@ export class ObjectRenderer {
|
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
this._name = value;
|
|
57
|
-
if (this.
|
|
58
|
-
|
|
57
|
+
if (this._sceneUBOs) {
|
|
58
|
+
for (let i = 0; i < this._sceneUBOs.length; ++i) {
|
|
59
|
+
this._sceneUBOs[i].name = `Scene ubo #${i} for ${this.name}`;
|
|
60
|
+
}
|
|
59
61
|
}
|
|
60
62
|
if (!this._scene) {
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
|
-
const engine = this._scene.getEngine();
|
|
64
65
|
for (let i = 0; i < this._renderPassIds.length; ++i) {
|
|
65
66
|
const renderPassId = this._renderPassIds[i];
|
|
66
|
-
|
|
67
|
+
this._engine._renderPassNames[renderPassId] = `${this._name}#${i}`;
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
/**
|
|
@@ -196,7 +197,18 @@ export class ObjectRenderer {
|
|
|
196
197
|
* Enables the rendering of bounding boxes for meshes (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). Default is false.
|
|
197
198
|
*/
|
|
198
199
|
this.enableBoundingBoxRendering = false;
|
|
200
|
+
/**
|
|
201
|
+
* Enables the rendering of outline/overlay for meshes (still subject to Mesh.renderOutline/Mesh.renderOverlay). Default is true.
|
|
202
|
+
*/
|
|
203
|
+
this.enableOutlineRendering = true;
|
|
199
204
|
this._disableImageProcessing = false;
|
|
205
|
+
/**
|
|
206
|
+
* If true, the object renderer will not set the view/projection/transformation matrices for the active camera (default: false).
|
|
207
|
+
* By default, the view/projection/transformation matrices are set from the active camera (either ObjectRenderer.activeCamera or scene.activeCamera).
|
|
208
|
+
* Sets this property to true if you want to define your own transformation matrices (use the onInitRenderingObservable observable
|
|
209
|
+
* to set your own matrices, to be sure they will be correctly taken into account)
|
|
210
|
+
*/
|
|
211
|
+
this.dontSetTransformationMatrix = false;
|
|
200
212
|
/**
|
|
201
213
|
* An event triggered before rendering the objects
|
|
202
214
|
*/
|
|
@@ -230,6 +242,8 @@ export class ObjectRenderer {
|
|
|
230
242
|
this._currentApplyByPostProcessSetting = false;
|
|
231
243
|
this._activeMeshes = new SmartArray(256);
|
|
232
244
|
this._activeBoundingBoxes = new SmartArray(32);
|
|
245
|
+
this._currentFrameId = -1;
|
|
246
|
+
this._currentSceneUBOIndex = 0;
|
|
233
247
|
/** @internal */
|
|
234
248
|
this._isFrozen = false;
|
|
235
249
|
/** @internal */
|
|
@@ -237,9 +251,11 @@ export class ObjectRenderer {
|
|
|
237
251
|
this._currentSceneCamera = null;
|
|
238
252
|
this.name = name;
|
|
239
253
|
this._scene = scene;
|
|
240
|
-
this.
|
|
254
|
+
this._engine = this._scene.getEngine();
|
|
255
|
+
this._useUBO = this._engine.supportsUniformBuffers;
|
|
241
256
|
if (this._useUBO) {
|
|
242
|
-
this.
|
|
257
|
+
this._sceneUBOs = [];
|
|
258
|
+
this._createSceneUBO();
|
|
243
259
|
}
|
|
244
260
|
this.renderList = [];
|
|
245
261
|
this._renderPassIds = [];
|
|
@@ -256,18 +272,30 @@ export class ObjectRenderer {
|
|
|
256
272
|
this._scene.addObjectRenderer(this);
|
|
257
273
|
}
|
|
258
274
|
_releaseRenderPassId() {
|
|
259
|
-
const engine = this._scene.getEngine();
|
|
260
275
|
for (let i = 0; i < this.options.numPasses; ++i) {
|
|
261
|
-
|
|
276
|
+
this._engine.releaseRenderPassId(this._renderPassIds[i]);
|
|
262
277
|
}
|
|
263
278
|
this._renderPassIds.length = 0;
|
|
264
279
|
}
|
|
265
280
|
_createRenderPassId() {
|
|
266
281
|
this._releaseRenderPassId();
|
|
267
|
-
const engine = this._scene.getEngine();
|
|
268
282
|
for (let i = 0; i < this.options.numPasses; ++i) {
|
|
269
|
-
this._renderPassIds[i] =
|
|
283
|
+
this._renderPassIds[i] = this._engine.createRenderPassId(`${this.name}#${i}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
_createSceneUBO() {
|
|
287
|
+
const index = this._sceneUBOs.length;
|
|
288
|
+
this._sceneUBOs.push(this._scene.createSceneUniformBuffer(`Scene ubo #${index} for ${this.name}`, false));
|
|
289
|
+
}
|
|
290
|
+
_getSceneUBO() {
|
|
291
|
+
if (this._currentFrameId !== this._engine.frameId) {
|
|
292
|
+
this._currentSceneUBOIndex = 0;
|
|
293
|
+
this._currentFrameId = this._engine.frameId;
|
|
270
294
|
}
|
|
295
|
+
if (this._currentSceneUBOIndex >= this._sceneUBOs.length) {
|
|
296
|
+
this._createSceneUBO();
|
|
297
|
+
}
|
|
298
|
+
return this._sceneUBOs[this._currentSceneUBOIndex++];
|
|
271
299
|
}
|
|
272
300
|
/**
|
|
273
301
|
* Resets the refresh counter of the renderer and start back from scratch.
|
|
@@ -365,19 +393,20 @@ export class ObjectRenderer {
|
|
|
365
393
|
* @param viewportHeight Height of the viewport to render to
|
|
366
394
|
*/
|
|
367
395
|
initRender(viewportWidth, viewportHeight) {
|
|
368
|
-
const engine = this._scene.getEngine();
|
|
369
396
|
const camera = this.activeCamera ?? this._scene.activeCamera;
|
|
370
|
-
this.onInitRenderingObservable.notifyObservers(this);
|
|
371
397
|
this._currentSceneCamera = this._scene.activeCamera;
|
|
372
398
|
if (this._useUBO) {
|
|
373
399
|
this._currentSceneUBO = this._scene.getSceneUniformBuffer();
|
|
374
400
|
this._currentSceneUBO.unbindEffect();
|
|
375
|
-
this._scene.setSceneUniformBuffer(this.
|
|
401
|
+
this._scene.setSceneUniformBuffer(this._getSceneUBO());
|
|
376
402
|
}
|
|
403
|
+
this.onInitRenderingObservable.notifyObservers(this);
|
|
377
404
|
if (camera) {
|
|
378
|
-
this.
|
|
405
|
+
if (!this.dontSetTransformationMatrix) {
|
|
406
|
+
this._scene.setTransformMatrix(camera.getViewMatrix(), camera.getProjectionMatrix(true));
|
|
407
|
+
}
|
|
379
408
|
this._scene.activeCamera = camera;
|
|
380
|
-
|
|
409
|
+
this._engine.setViewport(camera.rigParent ? camera.rigParent.viewport : camera.viewport, viewportWidth, viewportHeight);
|
|
381
410
|
}
|
|
382
411
|
if (this._useUBO) {
|
|
383
412
|
this._scene.finalizeSceneUbo();
|
|
@@ -400,7 +429,7 @@ export class ObjectRenderer {
|
|
|
400
429
|
if (this.activeCamera && this.activeCamera !== scene.activeCamera) {
|
|
401
430
|
scene.setTransformMatrix(this._currentSceneCamera.getViewMatrix(), this._currentSceneCamera.getProjectionMatrix(true));
|
|
402
431
|
}
|
|
403
|
-
|
|
432
|
+
this._engine.setViewport(this._currentSceneCamera.viewport);
|
|
404
433
|
}
|
|
405
434
|
scene.resetCachedMaterial();
|
|
406
435
|
this.onFinishRenderingObservable.notifyObservers(this);
|
|
@@ -411,17 +440,22 @@ export class ObjectRenderer {
|
|
|
411
440
|
* @param skipOnAfterRenderObservable defines a flag to skip raising the onAfterRenderObservable
|
|
412
441
|
*/
|
|
413
442
|
render(passIndex = 0, skipOnAfterRenderObservable = false) {
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
const currentRenderPassId = engine.currentRenderPassId;
|
|
417
|
-
engine.currentRenderPassId = this._renderPassIds[passIndex];
|
|
443
|
+
const currentRenderPassId = this._engine.currentRenderPassId;
|
|
444
|
+
this._engine.currentRenderPassId = this._renderPassIds[passIndex];
|
|
418
445
|
this.onBeforeRenderObservable.notifyObservers(passIndex);
|
|
419
|
-
const fastPath =
|
|
446
|
+
const fastPath = this._engine.snapshotRendering && this._engine.snapshotRenderingMode === 1;
|
|
420
447
|
if (!fastPath) {
|
|
421
448
|
const currentRenderList = this._prepareRenderingManager(passIndex);
|
|
449
|
+
// The cast to "any" is to avoid an error in ES6 in case you don't import outlineRenderer
|
|
450
|
+
const outlineRenderer = this._scene.getOutlineRenderer?.();
|
|
451
|
+
const outlineRendererIsEnabled = outlineRenderer?.enabled;
|
|
452
|
+
outlineRenderer.enabled = this.enableOutlineRendering;
|
|
422
453
|
this.onBeforeRenderingManagerRenderObservable.notifyObservers(passIndex);
|
|
423
454
|
this._renderingManager.render(this.customRenderFunction, currentRenderList, this.renderParticles, this.renderSprites);
|
|
424
455
|
this.onAfterRenderingManagerRenderObservable.notifyObservers(passIndex);
|
|
456
|
+
if (outlineRenderer) {
|
|
457
|
+
outlineRenderer.enabled = outlineRendererIsEnabled;
|
|
458
|
+
}
|
|
425
459
|
}
|
|
426
460
|
else {
|
|
427
461
|
this.onFastPathRenderObservable.notifyObservers(passIndex);
|
|
@@ -429,13 +463,12 @@ export class ObjectRenderer {
|
|
|
429
463
|
if (!skipOnAfterRenderObservable) {
|
|
430
464
|
this.onAfterRenderObservable.notifyObservers(passIndex);
|
|
431
465
|
}
|
|
432
|
-
|
|
466
|
+
this._engine.currentRenderPassId = currentRenderPassId;
|
|
433
467
|
}
|
|
434
468
|
/** @internal */
|
|
435
469
|
_checkReadiness() {
|
|
436
470
|
const scene = this._scene;
|
|
437
|
-
const
|
|
438
|
-
const currentRenderPassId = engine.currentRenderPassId;
|
|
471
|
+
const currentRenderPassId = this._engine.currentRenderPassId;
|
|
439
472
|
let returnValue = true;
|
|
440
473
|
if (!scene.getViewMatrix()) {
|
|
441
474
|
// We probably didn't execute scene.render() yet, so make sure we have a view/projection matrix setup for the scene
|
|
@@ -446,7 +479,7 @@ export class ObjectRenderer {
|
|
|
446
479
|
let currentRenderList = null;
|
|
447
480
|
const defaultRenderList = this.renderList ? this.renderList : scene.frameGraph ? scene.meshes : scene.getActiveMeshes().data;
|
|
448
481
|
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.frameGraph ? scene.meshes.length : scene.getActiveMeshes().length;
|
|
449
|
-
|
|
482
|
+
this._engine.currentRenderPassId = this._renderPassIds[passIndex];
|
|
450
483
|
this.onBeforeRenderObservable.notifyObservers(passIndex);
|
|
451
484
|
if (this.getCustomRenderList) {
|
|
452
485
|
currentRenderList = this.getCustomRenderList(passIndex, defaultRenderList, defaultRenderListLength);
|
|
@@ -485,7 +518,7 @@ export class ObjectRenderer {
|
|
|
485
518
|
returnValue = false;
|
|
486
519
|
}
|
|
487
520
|
}
|
|
488
|
-
|
|
521
|
+
this._engine.currentRenderPassId = currentRenderPassId;
|
|
489
522
|
return returnValue;
|
|
490
523
|
}
|
|
491
524
|
_prepareRenderingManager(passIndex = 0, winterIsComing = false) {
|
|
@@ -533,7 +566,10 @@ export class ObjectRenderer {
|
|
|
533
566
|
this._renderingManager.reset();
|
|
534
567
|
this._activeMeshes.reset();
|
|
535
568
|
this._activeBoundingBoxes.reset();
|
|
536
|
-
|
|
569
|
+
// We do not check option.enableBoundingBoxRendering before resetting the current list of bounding boxes, because:
|
|
570
|
+
// * if bounding box rendering is enabled, we want to start with an empty list and add new bounding boxes to it
|
|
571
|
+
// * if bounding box rendering is disabled, we don't want to render any bounding boxes that may have been generated by previous code
|
|
572
|
+
boundingBoxRenderer && boundingBoxRenderer.reset();
|
|
537
573
|
const sceneRenderId = scene.getRenderId();
|
|
538
574
|
const currentFrameId = scene.getFrameId();
|
|
539
575
|
for (let meshIndex = 0; meshIndex < currentRenderListLength; meshIndex++) {
|
|
@@ -692,8 +728,12 @@ export class ObjectRenderer {
|
|
|
692
728
|
this.onFastPathRenderObservable.clear();
|
|
693
729
|
this._releaseRenderPassId();
|
|
694
730
|
this.renderList = null;
|
|
695
|
-
this.
|
|
696
|
-
|
|
731
|
+
if (this._sceneUBOs) {
|
|
732
|
+
for (const ubo of this._sceneUBOs) {
|
|
733
|
+
ubo.dispose();
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
this._sceneUBOs = undefined;
|
|
697
737
|
this._scene.removeObjectRenderer(this);
|
|
698
738
|
}
|
|
699
739
|
/** @internal */
|