@onerjs/core 8.56.1 → 8.56.3
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/Cameras/arcRotateCamera.pure.js +24 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/camera.pure.js +7 -7
- package/Cameras/camera.pure.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +5 -0
- package/Engines/constants.js +5 -0
- package/Engines/constants.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +4 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +12 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +2 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +21 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +45 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +18 -3
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +5 -21
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +10 -0
- package/Materials/Node/nodeMaterial.pure.js +11 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -0
- package/Materials/Node/nodeMaterialBuildState.js +7 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +3 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +3 -0
- package/Materials/Textures/textureProcessor.d.ts +29 -6
- package/Materials/Textures/textureProcessor.js +22 -16
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +19 -0
- package/Materials/materialHelper.geometryrendering.js +29 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +3 -0
- package/Materials/prepass.defines.js +3 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +3 -0
- package/Maths/math.vector.pure.d.ts +1 -5
- package/Maths/math.vector.pure.js.map +1 -1
- package/Misc/filesInput.d.ts +15 -0
- package/Misc/filesInput.js +156 -74
- package/Misc/filesInput.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +30 -0
- package/Rendering/geometryBufferRenderer.pure.js +84 -0
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Shaders/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js +22 -0
- package/Shaders/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js +5 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +5 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/geometry.fragment.js +9 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/openpbr.fragment.js +2 -1
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +2 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js +22 -0
- package/ShadersWGSL/ShadersInclude/objectIdFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +5 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +5 -1
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +9 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ import { type Scene } from "../scene.pure.js";
|
|
|
8
8
|
import { type AbstractMesh } from "../Meshes/abstractMesh.pure.js";
|
|
9
9
|
import { type Nullable } from "../types.js";
|
|
10
10
|
import { ShaderLanguage } from "../Materials/shaderLanguage.js";
|
|
11
|
+
import { type GeometryRenderingObjectIdProvider } from "../Materials/materialHelper.geometryrendering.js";
|
|
11
12
|
/** @internal */
|
|
12
13
|
interface ISavedTransformationMatrix {
|
|
13
14
|
world: Matrix;
|
|
@@ -76,6 +77,11 @@ export declare class GeometryBufferRenderer {
|
|
|
76
77
|
* using getIndex(GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE)
|
|
77
78
|
*/
|
|
78
79
|
static readonly IRRADIANCE_TEXTURE_TYPE = 7;
|
|
80
|
+
/**
|
|
81
|
+
* Constant used to retrieve the object ID texture index in the G-Buffer textures array.
|
|
82
|
+
* Object IDs are stored as 24-bit unsigned integers encoded in the RGB channels.
|
|
83
|
+
*/
|
|
84
|
+
static readonly OBJECT_ID_TEXTURE_TYPE = 8;
|
|
79
85
|
/**
|
|
80
86
|
* Dictionary used to store the previous transformation matrices of each rendered mesh
|
|
81
87
|
* in order to compute objects velocities when enableVelocity is set to "true"
|
|
@@ -99,6 +105,16 @@ export declare class GeometryBufferRenderer {
|
|
|
99
105
|
excludedSkinnedMeshesFromVelocity: AbstractMesh[];
|
|
100
106
|
/** Gets or sets a boolean indicating if transparent meshes should be rendered */
|
|
101
107
|
renderTransparentMeshes: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Provides the object ID written for each rendered mesh.
|
|
110
|
+
*
|
|
111
|
+
* IDs must be integers between 0 and 0xFFFFFF. ID 0 is reserved for background or excluded meshes.
|
|
112
|
+
* Instances use the ID of their source mesh. The default is the mesh unique ID.
|
|
113
|
+
* Default IDs are only stable for the lifetime of the current scene and should not be persisted.
|
|
114
|
+
* The provider runs in the render hot path and may be called multiple times for the same mesh in a frame.
|
|
115
|
+
* @see https://playground.babylonjs.com/#REC26C#0
|
|
116
|
+
*/
|
|
117
|
+
objectIdProvider?: GeometryRenderingObjectIdProvider;
|
|
102
118
|
/**
|
|
103
119
|
* Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)
|
|
104
120
|
*/
|
|
@@ -121,6 +137,7 @@ export declare class GeometryBufferRenderer {
|
|
|
121
137
|
private _enableReflectivity;
|
|
122
138
|
private _enableScreenspaceDepth;
|
|
123
139
|
private _enableIrradiance;
|
|
140
|
+
private _enableObjectId;
|
|
124
141
|
private _depthFormat;
|
|
125
142
|
private _clearColor;
|
|
126
143
|
private _clearDepthColor;
|
|
@@ -132,6 +149,7 @@ export declare class GeometryBufferRenderer {
|
|
|
132
149
|
private _normalIndex;
|
|
133
150
|
private _screenspaceDepthIndex;
|
|
134
151
|
private _irradianceIndex;
|
|
152
|
+
private _objectIdIndex;
|
|
135
153
|
private _linkedWithPrePass;
|
|
136
154
|
private _prePassRenderer;
|
|
137
155
|
private _attachmentsFromPrePass;
|
|
@@ -256,6 +274,18 @@ export declare class GeometryBufferRenderer {
|
|
|
256
274
|
* Sets whether or not objects irradiance are enabled for the G buffer.
|
|
257
275
|
*/
|
|
258
276
|
set enableIrradiance(enable: boolean);
|
|
277
|
+
/**
|
|
278
|
+
* Gets whether object IDs are enabled for the G buffer.
|
|
279
|
+
*/
|
|
280
|
+
get enableObjectId(): boolean;
|
|
281
|
+
/**
|
|
282
|
+
* Sets whether object IDs are enabled for the G buffer.
|
|
283
|
+
*
|
|
284
|
+
* Object ID rendering currently requires a single-sample G buffer.
|
|
285
|
+
* Object ID rendering is not supported when the G buffer is linked to the PrePassRenderer.
|
|
286
|
+
* @see https://playground.babylonjs.com/#REC26C#0
|
|
287
|
+
*/
|
|
288
|
+
set enableObjectId(enable: boolean);
|
|
259
289
|
/**
|
|
260
290
|
* This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
|
|
261
291
|
* scattering and should be taken into account when applying image-based lighting.
|
|
@@ -12,6 +12,7 @@ import { BindClipPlane, PrepareStringDefinesForClipPlanes, AddClipPlaneUniforms
|
|
|
12
12
|
import { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances, PrepareDefinesForIBL, PrepareUniformsAndSamplersForIBL, } from "../Materials/materialHelper.functions.js";
|
|
13
13
|
import { RegisterGeometryBufferRendererSceneComponent } from "./geometryBufferRendererSceneComponent.pure.js";
|
|
14
14
|
import { IsGaussianSplattingClassName } from "../Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js";
|
|
15
|
+
import { _GetGeometryRenderingObjectId } from "../Materials/materialHelper.geometryrendering.js";
|
|
15
16
|
export const Samplers = [
|
|
16
17
|
"diffuseSampler",
|
|
17
18
|
"bumpSampler",
|
|
@@ -54,6 +55,7 @@ export const Uniforms = [
|
|
|
54
55
|
"morphTargetTextureInfo",
|
|
55
56
|
"morphTargetTextureIndices",
|
|
56
57
|
"boneTextureInfo",
|
|
58
|
+
"objectId",
|
|
57
59
|
];
|
|
58
60
|
/**
|
|
59
61
|
* This renderer is helpful to fill one of the render target with a geometry buffer.
|
|
@@ -103,6 +105,7 @@ export class GeometryBufferRenderer {
|
|
|
103
105
|
this._enableVelocityLinear = false;
|
|
104
106
|
this._enableScreenspaceDepth = false;
|
|
105
107
|
this._enableIrradiance = false;
|
|
108
|
+
this._enableObjectId = false;
|
|
106
109
|
this._attachmentsFromPrePass = [];
|
|
107
110
|
}
|
|
108
111
|
/**
|
|
@@ -143,6 +146,10 @@ export class GeometryBufferRenderer {
|
|
|
143
146
|
this._irradianceIndex = index;
|
|
144
147
|
this._enableIrradiance = true;
|
|
145
148
|
}
|
|
149
|
+
else if (geometryBufferType === GeometryBufferRenderer.OBJECT_ID_TEXTURE_TYPE) {
|
|
150
|
+
this._objectIdIndex = index;
|
|
151
|
+
this._enableObjectId = true;
|
|
152
|
+
}
|
|
146
153
|
}
|
|
147
154
|
/**
|
|
148
155
|
* @internal
|
|
@@ -202,6 +209,8 @@ export class GeometryBufferRenderer {
|
|
|
202
209
|
return this._screenspaceDepthIndex;
|
|
203
210
|
case GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE:
|
|
204
211
|
return this._irradianceIndex;
|
|
212
|
+
case GeometryBufferRenderer.OBJECT_ID_TEXTURE_TYPE:
|
|
213
|
+
return this._objectIdIndex;
|
|
205
214
|
default:
|
|
206
215
|
return -1;
|
|
207
216
|
}
|
|
@@ -340,6 +349,43 @@ export class GeometryBufferRenderer {
|
|
|
340
349
|
this._createRenderTargets();
|
|
341
350
|
}
|
|
342
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Gets whether object IDs are enabled for the G buffer.
|
|
354
|
+
*/
|
|
355
|
+
get enableObjectId() {
|
|
356
|
+
return this._enableObjectId;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Sets whether object IDs are enabled for the G buffer.
|
|
360
|
+
*
|
|
361
|
+
* Object ID rendering currently requires a single-sample G buffer.
|
|
362
|
+
* Object ID rendering is not supported when the G buffer is linked to the PrePassRenderer.
|
|
363
|
+
* @see https://playground.babylonjs.com/#REC26C#0
|
|
364
|
+
*/
|
|
365
|
+
set enableObjectId(enable) {
|
|
366
|
+
if (enable && this._linkedWithPrePass) {
|
|
367
|
+
throw new Error("GeometryBufferRenderer: object ID textures are not supported when linked to the PrePassRenderer");
|
|
368
|
+
}
|
|
369
|
+
if (enable && this.samples !== 1) {
|
|
370
|
+
throw new Error("GeometryBufferRenderer: object ID textures currently require samples to be 1");
|
|
371
|
+
}
|
|
372
|
+
if (enable && !this._enableObjectId && !this._linkedWithPrePass) {
|
|
373
|
+
const engine = this._scene.getEngine();
|
|
374
|
+
const maxDrawBuffers = Math.min(engine.getCaps().maxDrawBuffers ?? 1, 8);
|
|
375
|
+
const attachmentCount = this._assignRenderTargetIndices()[0] + 1;
|
|
376
|
+
if (engine.getCaps().drawBuffersExtension && attachmentCount > maxDrawBuffers) {
|
|
377
|
+
throw new Error(`GeometryBufferRenderer: ${attachmentCount} color attachments were requested, but this engine supports at most ${maxDrawBuffers}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
this._enableObjectId = enable;
|
|
381
|
+
if (!enable) {
|
|
382
|
+
this._objectIdIndex = -1;
|
|
383
|
+
}
|
|
384
|
+
if (!this._linkedWithPrePass) {
|
|
385
|
+
this.dispose();
|
|
386
|
+
this._createRenderTargets();
|
|
387
|
+
}
|
|
388
|
+
}
|
|
343
389
|
/**
|
|
344
390
|
* Gets the scene associated with the buffer.
|
|
345
391
|
*/
|
|
@@ -401,6 +447,7 @@ export class GeometryBufferRenderer {
|
|
|
401
447
|
this._enableReflectivity = false;
|
|
402
448
|
this._enableScreenspaceDepth = false;
|
|
403
449
|
this._enableIrradiance = false;
|
|
450
|
+
this._enableObjectId = false;
|
|
404
451
|
this._clearColor = new Color4(0, 0, 0, 0);
|
|
405
452
|
this._clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ
|
|
406
453
|
this._positionIndex = -1;
|
|
@@ -411,6 +458,7 @@ export class GeometryBufferRenderer {
|
|
|
411
458
|
this._normalIndex = -1;
|
|
412
459
|
this._screenspaceDepthIndex = -1;
|
|
413
460
|
this._irradianceIndex = -1;
|
|
461
|
+
this._objectIdIndex = -1;
|
|
414
462
|
this._linkedWithPrePass = false;
|
|
415
463
|
/**
|
|
416
464
|
* This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
|
|
@@ -764,6 +812,10 @@ export class GeometryBufferRenderer {
|
|
|
764
812
|
}
|
|
765
813
|
}
|
|
766
814
|
}
|
|
815
|
+
if (this._enableObjectId) {
|
|
816
|
+
defines.push("#define OBJECT_ID");
|
|
817
|
+
defines.push("#define OBJECT_ID_INDEX " + this._objectIdIndex);
|
|
818
|
+
}
|
|
767
819
|
if (this.generateNormalsInWorldSpace) {
|
|
768
820
|
defines.push("#define NORMAL_WORLDSPACE");
|
|
769
821
|
}
|
|
@@ -851,6 +903,9 @@ export class GeometryBufferRenderer {
|
|
|
851
903
|
* Sets the number of samples used to render the buffer (anti aliasing).
|
|
852
904
|
*/
|
|
853
905
|
set samples(value) {
|
|
906
|
+
if (this._enableObjectId && value !== 1) {
|
|
907
|
+
throw new Error("GeometryBufferRenderer: object ID textures currently require samples to be 1");
|
|
908
|
+
}
|
|
854
909
|
this._multiRenderTarget.samples = value;
|
|
855
910
|
}
|
|
856
911
|
/**
|
|
@@ -919,11 +974,25 @@ export class GeometryBufferRenderer {
|
|
|
919
974
|
textureNames.push("gBuffer_Irradiance");
|
|
920
975
|
textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE]);
|
|
921
976
|
}
|
|
977
|
+
if (this._enableObjectId) {
|
|
978
|
+
this._objectIdIndex = count;
|
|
979
|
+
count++;
|
|
980
|
+
textureNames.push("gBuffer_ObjectId");
|
|
981
|
+
textureTypesAndFormats.push({
|
|
982
|
+
textureType: 0,
|
|
983
|
+
textureFormat: 5,
|
|
984
|
+
samplingMode: 1,
|
|
985
|
+
});
|
|
986
|
+
}
|
|
922
987
|
return [count, textureNames, textureTypesAndFormats];
|
|
923
988
|
}
|
|
924
989
|
_createRenderTargets() {
|
|
925
990
|
const engine = this._scene.getEngine();
|
|
926
991
|
const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();
|
|
992
|
+
const maxDrawBuffers = Math.min(engine.getCaps().maxDrawBuffers ?? 1, 8);
|
|
993
|
+
if (engine.getCaps().drawBuffersExtension && count > maxDrawBuffers) {
|
|
994
|
+
throw new Error(`GeometryBufferRenderer: ${count} color attachments were requested, but this engine supports at most ${maxDrawBuffers}`);
|
|
995
|
+
}
|
|
927
996
|
let type = 0;
|
|
928
997
|
if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {
|
|
929
998
|
type = 1;
|
|
@@ -1274,6 +1343,16 @@ export class GeometryBufferRenderer {
|
|
|
1274
1343
|
effect.setMatrix("previousWorld", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);
|
|
1275
1344
|
effect.setMatrix("previousViewProjection", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);
|
|
1276
1345
|
}
|
|
1346
|
+
if (this._enableObjectId) {
|
|
1347
|
+
let objectId = renderingMesh.uniqueId;
|
|
1348
|
+
if (this.objectIdProvider) {
|
|
1349
|
+
objectId = _GetGeometryRenderingObjectId(renderingMesh, this.objectIdProvider);
|
|
1350
|
+
}
|
|
1351
|
+
else if (objectId > 0xffffff) {
|
|
1352
|
+
throw new Error(`Invalid geometry object ID ${objectId} for mesh "${renderingMesh.name}". Object IDs must be integers between 0 and 0xFFFFFF.`);
|
|
1353
|
+
}
|
|
1354
|
+
effect.setFloat("objectId", objectId);
|
|
1355
|
+
}
|
|
1277
1356
|
if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {
|
|
1278
1357
|
effect.setMatrix("world", world);
|
|
1279
1358
|
}
|
|
@@ -1394,6 +1473,11 @@ GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE = 6;
|
|
|
1394
1473
|
* using getIndex(GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE)
|
|
1395
1474
|
*/
|
|
1396
1475
|
GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE = 7;
|
|
1476
|
+
/**
|
|
1477
|
+
* Constant used to retrieve the object ID texture index in the G-Buffer textures array.
|
|
1478
|
+
* Object IDs are stored as 24-bit unsigned integers encoded in the RGB channels.
|
|
1479
|
+
*/
|
|
1480
|
+
GeometryBufferRenderer.OBJECT_ID_TEXTURE_TYPE = 8;
|
|
1397
1481
|
/**
|
|
1398
1482
|
* @internal
|
|
1399
1483
|
*/
|