@onerjs/core 8.28.0 → 8.28.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/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +40 -16
- package/Collisions/gpuPicker.js +216 -95
- package/Collisions/gpuPicker.js.map +1 -1
- package/Decorators/nodeDecorator.d.ts +5 -1
- package/Decorators/nodeDecorator.js +4 -0
- package/Decorators/nodeDecorator.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +30 -0
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +56 -0
- package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +32 -0
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +62 -0
- package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +36 -0
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +88 -0
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/index.d.ts +3 -0
- package/FrameGraph/Node/Blocks/index.js +3 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +17 -0
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +18 -0
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +16 -0
- package/FrameGraph/Tasks/PostProcesses/filterTask.js +17 -0
- package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +16 -0
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +17 -0
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -0
- package/FrameGraph/index.d.ts +3 -0
- package/FrameGraph/index.js +3 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/Textures/texture.js +9 -2
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/effect.d.ts +1 -0
- package/Materials/effect.js +7 -1
- package/Materials/effect.js.map +1 -1
- package/Particles/gpuParticleSystem.js +2 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +4 -3
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +4 -3
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.d.ts +3 -3
- package/PostProcesses/colorCorrectionPostProcess.js +21 -21
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.d.ts +4 -2
- package/PostProcesses/filterPostProcess.js +22 -15
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/index.d.ts +3 -0
- package/PostProcesses/index.js +3 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.d.ts +30 -0
- package/PostProcesses/thinColorCorrectionPostProcess.js +52 -0
- package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -0
- package/PostProcesses/thinFilterPostProcess.d.ts +29 -0
- package/PostProcesses/thinFilterPostProcess.js +51 -0
- package/PostProcesses/thinFilterPostProcess.js.map +1 -0
- package/PostProcesses/thinTonemapPostProcess.d.ts +52 -0
- package/PostProcesses/thinTonemapPostProcess.js +83 -0
- package/PostProcesses/thinTonemapPostProcess.js.map +1 -0
- package/PostProcesses/tonemapPostProcess.d.ts +23 -21
- package/PostProcesses/tonemapPostProcess.js +55 -46
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +6 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/geometry.fragment.js +3 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.js +10 -2
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/picking.fragment.js +20 -6
- package/Shaders/picking.fragment.js.map +1 -1
- package/Shaders/picking.vertex.js +4 -3
- package/Shaders/picking.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +3 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +10 -2
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/picking.fragment.js +11 -6
- package/ShadersWGSL/picking.fragment.js.map +1 -1
- package/ShadersWGSL/picking.vertex.js +4 -3
- package/ShadersWGSL/picking.vertex.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.d.ts +1 -1
- package/XR/features/WebXRBackgroundRemover.d.ts +1 -1
- package/XR/features/WebXRControllerMovement.d.ts +1 -1
- package/XR/features/WebXRControllerPhysics.d.ts +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +1 -1
- package/XR/features/WebXRControllerTeleportation.d.ts +1 -1
- package/XR/features/WebXRDOMOverlay.d.ts +1 -1
- package/XR/features/WebXRDepthSensing.d.ts +1 -1
- package/XR/features/WebXREyeTracking.d.ts +1 -1
- package/XR/features/WebXRFeaturePointSystem.d.ts +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -1
- package/XR/features/WebXRHitTest.d.ts +1 -1
- package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
- package/XR/features/WebXRImageTracking.d.ts +1 -1
- package/XR/features/WebXRLayers.d.ts +1 -1
- package/XR/features/WebXRLightEstimation.d.ts +1 -1
- package/XR/features/WebXRMeshDetector.d.ts +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +1 -1
- package/XR/features/WebXRPlaneDetector.d.ts +1 -1
- package/XR/features/WebXRRawCameraAccess.d.ts +1 -1
- package/XR/features/WebXRSpaceWarp.d.ts +1 -1
- package/XR/webXRDefaultExperience.js +1 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +116 -27
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EffectWrapper } from "../Materials/effectRenderer.js";
|
|
2
|
+
import { Engine } from "../Engines/engine.js";
|
|
3
|
+
import { Matrix } from "../Maths/math.vector.js";
|
|
4
|
+
/**
|
|
5
|
+
* Post process used to apply a kernel filter
|
|
6
|
+
*/
|
|
7
|
+
export class ThinFilterPostProcess extends EffectWrapper {
|
|
8
|
+
_gatherImports(useWebGPU, list) {
|
|
9
|
+
if (useWebGPU) {
|
|
10
|
+
this._webGPUReady = true;
|
|
11
|
+
list.push(import("../ShadersWGSL/filter.fragment.js"));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
list.push(import("../Shaders/filter.fragment.js"));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new filter post process
|
|
19
|
+
* @param name Name of the effect
|
|
20
|
+
* @param engine Engine to use to render the effect. If not provided, the last created engine will be used
|
|
21
|
+
* @param options Options to configure the effect
|
|
22
|
+
*/
|
|
23
|
+
constructor(name, engine = null, options) {
|
|
24
|
+
super({
|
|
25
|
+
...options,
|
|
26
|
+
name,
|
|
27
|
+
engine: engine || Engine.LastCreatedEngine,
|
|
28
|
+
useShaderStore: true,
|
|
29
|
+
useAsPostProcess: true,
|
|
30
|
+
fragmentShader: ThinFilterPostProcess.FragmentUrl,
|
|
31
|
+
uniforms: ThinFilterPostProcess.Uniforms,
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* The matrix to be applied to the image
|
|
35
|
+
*/
|
|
36
|
+
this.kernelMatrix = Matrix.Identity();
|
|
37
|
+
}
|
|
38
|
+
bind(noDefaultBindings = false) {
|
|
39
|
+
super.bind(noDefaultBindings);
|
|
40
|
+
this._drawWrapper.effect.setMatrix("kernelMatrix", this.kernelMatrix);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The fragment shader url
|
|
45
|
+
*/
|
|
46
|
+
ThinFilterPostProcess.FragmentUrl = "filter";
|
|
47
|
+
/**
|
|
48
|
+
* The list of uniforms used by the effect
|
|
49
|
+
*/
|
|
50
|
+
ThinFilterPostProcess.Uniforms = ["kernelMatrix"];
|
|
51
|
+
//# sourceMappingURL=thinFilterPostProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinFilterPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinFilterPostProcess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAWjC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAsC;QACrG,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,qBAAqB,CAAC,WAAW;YACjD,QAAQ,EAAE,qBAAqB,CAAC,QAAQ;SAC3C,CAAC,CAAC;QAGP;;WAEG;QACI,iBAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IALxC,CAAC;IAOe,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,MAAO,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;;AA7CD;;GAEG;AACoB,iCAAW,GAAG,QAAQ,AAAX,CAAY;AAE9C;;GAEG;AACoB,8BAAQ,GAAG,CAAC,cAAc,CAAC,AAAnB,CAAoB","sourcesContent":["import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\n\r\n/**\r\n * Post process used to apply a kernel filter\r\n */\r\nexport class ThinFilterPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"filter\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"kernelMatrix\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/filter.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/filter.fragment\"));\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a new filter post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinFilterPostProcess.FragmentUrl,\r\n uniforms: ThinFilterPostProcess.Uniforms,\r\n });\r\n }\r\n\r\n /**\r\n * The matrix to be applied to the image\r\n */\r\n public kernelMatrix = Matrix.Identity();\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n this._drawWrapper.effect!.setMatrix(\"kernelMatrix\", this.kernelMatrix);\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from "../index.js";
|
|
2
|
+
import { EffectWrapper } from "../Materials/effectRenderer.js";
|
|
3
|
+
/** Defines operator used for tonemapping */
|
|
4
|
+
export declare enum TonemappingOperator {
|
|
5
|
+
/** Hable */
|
|
6
|
+
Hable = 0,
|
|
7
|
+
/** Reinhard */
|
|
8
|
+
Reinhard = 1,
|
|
9
|
+
/** HejiDawson */
|
|
10
|
+
HejiDawson = 2,
|
|
11
|
+
/** Photographic */
|
|
12
|
+
Photographic = 3
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Options used to create a ThinTonemapPostProcess.
|
|
16
|
+
*/
|
|
17
|
+
export interface ThinTonemapPostProcessOptions extends EffectWrapperCreationOptions {
|
|
18
|
+
/** Defines the operator to use (default: Reinhard) */
|
|
19
|
+
operator?: TonemappingOperator;
|
|
20
|
+
/** Defines the required exposure adjustment (default: 1.0) */
|
|
21
|
+
exposureAdjustment?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Post process used to apply a tone mapping operator
|
|
25
|
+
*/
|
|
26
|
+
export declare class ThinTonemapPostProcess extends EffectWrapper {
|
|
27
|
+
/**
|
|
28
|
+
* The fragment shader url
|
|
29
|
+
*/
|
|
30
|
+
static readonly FragmentUrl = "tonemap";
|
|
31
|
+
/**
|
|
32
|
+
* The list of uniforms used by the effect
|
|
33
|
+
*/
|
|
34
|
+
static readonly Uniforms: string[];
|
|
35
|
+
protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Constructs a new tone mapping post process
|
|
38
|
+
* @param name Name of the effect
|
|
39
|
+
* @param engine Engine to use to render the effect. If not provided, the last created engine will be used
|
|
40
|
+
* @param options Options to configure the effect
|
|
41
|
+
*/
|
|
42
|
+
constructor(name: string, engine?: Nullable<AbstractEngine>, options?: ThinTonemapPostProcessOptions);
|
|
43
|
+
/**
|
|
44
|
+
* Gets the operator to use (default: Reinhard)
|
|
45
|
+
*/
|
|
46
|
+
readonly operator: TonemappingOperator;
|
|
47
|
+
/**
|
|
48
|
+
* Defines the required exposure adjustment (default: 1.0)
|
|
49
|
+
*/
|
|
50
|
+
exposureAdjustment: number;
|
|
51
|
+
bind(noDefaultBindings?: boolean): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EffectWrapper } from "../Materials/effectRenderer.js";
|
|
2
|
+
import { Engine } from "../Engines/engine.js";
|
|
3
|
+
/** Defines operator used for tonemapping */
|
|
4
|
+
export var TonemappingOperator;
|
|
5
|
+
(function (TonemappingOperator) {
|
|
6
|
+
/** Hable */
|
|
7
|
+
TonemappingOperator[TonemappingOperator["Hable"] = 0] = "Hable";
|
|
8
|
+
/** Reinhard */
|
|
9
|
+
TonemappingOperator[TonemappingOperator["Reinhard"] = 1] = "Reinhard";
|
|
10
|
+
/** HejiDawson */
|
|
11
|
+
TonemappingOperator[TonemappingOperator["HejiDawson"] = 2] = "HejiDawson";
|
|
12
|
+
/** Photographic */
|
|
13
|
+
TonemappingOperator[TonemappingOperator["Photographic"] = 3] = "Photographic";
|
|
14
|
+
})(TonemappingOperator || (TonemappingOperator = {}));
|
|
15
|
+
/**
|
|
16
|
+
* Post process used to apply a tone mapping operator
|
|
17
|
+
*/
|
|
18
|
+
export class ThinTonemapPostProcess extends EffectWrapper {
|
|
19
|
+
_gatherImports(useWebGPU, list) {
|
|
20
|
+
if (useWebGPU) {
|
|
21
|
+
this._webGPUReady = true;
|
|
22
|
+
list.push(import("../ShadersWGSL/tonemap.fragment.js"));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
list.push(import("../Shaders/tonemap.fragment.js"));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new tone mapping post process
|
|
30
|
+
* @param name Name of the effect
|
|
31
|
+
* @param engine Engine to use to render the effect. If not provided, the last created engine will be used
|
|
32
|
+
* @param options Options to configure the effect
|
|
33
|
+
*/
|
|
34
|
+
constructor(name, engine = null, options) {
|
|
35
|
+
const operator = options?.operator ?? 1 /* TonemappingOperator.Reinhard */;
|
|
36
|
+
let defines = "#define ";
|
|
37
|
+
if (operator === 0 /* TonemappingOperator.Hable */) {
|
|
38
|
+
defines += "HABLE_TONEMAPPING";
|
|
39
|
+
}
|
|
40
|
+
else if (operator === 1 /* TonemappingOperator.Reinhard */) {
|
|
41
|
+
defines += "REINHARD_TONEMAPPING";
|
|
42
|
+
}
|
|
43
|
+
else if (operator === 2 /* TonemappingOperator.HejiDawson */) {
|
|
44
|
+
defines += "OPTIMIZED_HEJIDAWSON_TONEMAPPING";
|
|
45
|
+
}
|
|
46
|
+
else if (operator === 3 /* TonemappingOperator.Photographic */) {
|
|
47
|
+
defines += "PHOTOGRAPHIC_TONEMAPPING";
|
|
48
|
+
}
|
|
49
|
+
super({
|
|
50
|
+
...options,
|
|
51
|
+
name,
|
|
52
|
+
engine: engine || Engine.LastCreatedEngine,
|
|
53
|
+
useShaderStore: true,
|
|
54
|
+
useAsPostProcess: true,
|
|
55
|
+
fragmentShader: ThinTonemapPostProcess.FragmentUrl,
|
|
56
|
+
uniforms: ThinTonemapPostProcess.Uniforms,
|
|
57
|
+
defines,
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Gets the operator to use (default: Reinhard)
|
|
61
|
+
*/
|
|
62
|
+
this.operator = 1 /* TonemappingOperator.Reinhard */;
|
|
63
|
+
/**
|
|
64
|
+
* Defines the required exposure adjustment (default: 1.0)
|
|
65
|
+
*/
|
|
66
|
+
this.exposureAdjustment = 1;
|
|
67
|
+
this.operator = operator;
|
|
68
|
+
this.exposureAdjustment = options?.exposureAdjustment ?? 1;
|
|
69
|
+
}
|
|
70
|
+
bind(noDefaultBindings = false) {
|
|
71
|
+
super.bind(noDefaultBindings);
|
|
72
|
+
this._drawWrapper.effect.setFloat("_ExposureAdjustment", this.exposureAdjustment);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The fragment shader url
|
|
77
|
+
*/
|
|
78
|
+
ThinTonemapPostProcess.FragmentUrl = "tonemap";
|
|
79
|
+
/**
|
|
80
|
+
* The list of uniforms used by the effect
|
|
81
|
+
*/
|
|
82
|
+
ThinTonemapPostProcess.Uniforms = ["_ExposureAdjustment"];
|
|
83
|
+
//# sourceMappingURL=thinTonemapPostProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinTonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinTonemapPostProcess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,4CAA4C;AAC5C,MAAM,CAAN,IAAkB,mBASjB;AATD,WAAkB,mBAAmB;IACjC,YAAY;IACZ,+DAAS,CAAA;IACT,eAAe;IACf,qEAAY,CAAA;IACZ,iBAAiB;IACjB,yEAAc,CAAA;IACd,mBAAmB;IACnB,6EAAgB,CAAA;AACpB,CAAC,EATiB,mBAAmB,KAAnB,mBAAmB,QASpC;AAcD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAWlC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAuC;QACtG,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,wCAAgC,CAAC;QAEnE,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,IAAI,QAAQ,sCAA8B,EAAE,CAAC;YACzC,OAAO,IAAI,mBAAmB,CAAC;QACnC,CAAC;aAAM,IAAI,QAAQ,yCAAiC,EAAE,CAAC;YACnD,OAAO,IAAI,sBAAsB,CAAC;QACtC,CAAC;aAAM,IAAI,QAAQ,2CAAmC,EAAE,CAAC;YACrD,OAAO,IAAI,kCAAkC,CAAC;QAClD,CAAC;aAAM,IAAI,QAAQ,6CAAqC,EAAE,CAAC;YACvD,OAAO,IAAI,0BAA0B,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,sBAAsB,CAAC,WAAW;YAClD,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;YACzC,OAAO;SACV,CAAC,CAAC;QAMP;;WAEG;QACa,aAAQ,wCAAqD;QAE7E;;WAEG;QACI,uBAAkB,GAAG,CAAC,CAAC;QAZ1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,CAAC,CAAC;IAC/D,CAAC;IAYe,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,MAAO,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACvF,CAAC;;AApED;;GAEG;AACoB,kCAAW,GAAG,SAAS,AAAZ,CAAa;AAE/C;;GAEG;AACoB,+BAAQ,GAAG,CAAC,qBAAqB,CAAC,AAA1B,CAA2B","sourcesContent":["import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/** Defines operator used for tonemapping */\r\nexport const enum TonemappingOperator {\r\n /** Hable */\r\n Hable = 0,\r\n /** Reinhard */\r\n Reinhard = 1,\r\n /** HejiDawson */\r\n HejiDawson = 2,\r\n /** Photographic */\r\n Photographic = 3,\r\n}\r\n\r\n/**\r\n * Options used to create a ThinTonemapPostProcess.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface ThinTonemapPostProcessOptions extends EffectWrapperCreationOptions {\r\n /** Defines the operator to use (default: Reinhard) */\r\n operator?: TonemappingOperator;\r\n\r\n /** Defines the required exposure adjustment (default: 1.0) */\r\n exposureAdjustment?: number;\r\n}\r\n\r\n/**\r\n * Post process used to apply a tone mapping operator\r\n */\r\nexport class ThinTonemapPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"tonemap\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"_ExposureAdjustment\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/tonemap.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/tonemap.fragment\"));\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a new tone mapping post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: ThinTonemapPostProcessOptions) {\r\n const operator = options?.operator ?? TonemappingOperator.Reinhard;\r\n\r\n let defines = \"#define \";\r\n\r\n if (operator === TonemappingOperator.Hable) {\r\n defines += \"HABLE_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.Reinhard) {\r\n defines += \"REINHARD_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.HejiDawson) {\r\n defines += \"OPTIMIZED_HEJIDAWSON_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.Photographic) {\r\n defines += \"PHOTOGRAPHIC_TONEMAPPING\";\r\n }\r\n\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinTonemapPostProcess.FragmentUrl,\r\n uniforms: ThinTonemapPostProcess.Uniforms,\r\n defines,\r\n });\r\n\r\n this.operator = operator;\r\n this.exposureAdjustment = options?.exposureAdjustment ?? 1;\r\n }\r\n\r\n /**\r\n * Gets the operator to use (default: Reinhard)\r\n */\r\n public readonly operator: TonemappingOperator = TonemappingOperator.Reinhard;\r\n\r\n /**\r\n * Defines the required exposure adjustment (default: 1.0)\r\n */\r\n public exposureAdjustment = 1;\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n this._drawWrapper.effect!.setFloat(\"_ExposureAdjustment\", this.exposureAdjustment);\r\n }\r\n}\r\n"]}
|
|
@@ -1,43 +1,45 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Camera } from "../Cameras/camera.js";
|
|
2
|
+
import type { PostProcessOptions } from "./postProcess.js";
|
|
2
3
|
import { PostProcess } from "./postProcess.js";
|
|
3
4
|
import type { Nullable } from "../types.js";
|
|
4
5
|
import type { AbstractEngine } from "../Engines/abstractEngine.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/** Reinhard */
|
|
10
|
-
Reinhard = 1,
|
|
11
|
-
/** HejiDawson */
|
|
12
|
-
HejiDawson = 2,
|
|
13
|
-
/** Photographic */
|
|
14
|
-
Photographic = 3
|
|
15
|
-
}
|
|
6
|
+
import type { ThinTonemapPostProcessOptions, TonemappingOperator } from "./thinTonemapPostProcess.js";
|
|
7
|
+
import { ThinTonemapPostProcess } from "./thinTonemapPostProcess.js";
|
|
8
|
+
import type { Scene } from "../scene.js";
|
|
9
|
+
export type ToneMapPostProcessOptions = ThinTonemapPostProcessOptions & PostProcessOptions;
|
|
16
10
|
/**
|
|
17
11
|
* Defines a post process to apply tone mapping
|
|
18
12
|
*/
|
|
19
13
|
export declare class TonemapPostProcess extends PostProcess {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Defines the required exposure adjustment
|
|
16
|
+
*/
|
|
17
|
+
get exposureAdjustment(): number;
|
|
18
|
+
set exposureAdjustment(value: number);
|
|
19
|
+
/**
|
|
20
|
+
* Gets the operator used for tonemapping
|
|
21
|
+
*/
|
|
22
|
+
get operator(): TonemappingOperator;
|
|
23
23
|
/**
|
|
24
24
|
* Gets a string identifying the name of the class
|
|
25
25
|
* @returns "TonemapPostProcess" string
|
|
26
26
|
*/
|
|
27
27
|
getClassName(): string;
|
|
28
|
+
protected _effectWrapper: ThinTonemapPostProcess;
|
|
28
29
|
/**
|
|
29
30
|
* Creates a new TonemapPostProcess
|
|
30
31
|
* @param name defines the name of the postprocess
|
|
31
|
-
* @param
|
|
32
|
+
* @param operator defines the operator to use
|
|
32
33
|
* @param exposureAdjustment defines the required exposure adjustment
|
|
33
34
|
* @param camera defines the camera to use (can be null)
|
|
34
35
|
* @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)
|
|
35
36
|
* @param engine defines the hosting engine (can be ignore if camera is set)
|
|
36
|
-
* @param
|
|
37
|
+
* @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
|
|
37
38
|
* @param reusable If the post process can be reused on the same frame. (default: false)
|
|
38
39
|
*/
|
|
39
|
-
constructor(name: string,
|
|
40
|
-
/**
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
constructor(name: string, operator: TonemappingOperator, exposureAdjustment: number, camera: Nullable<Camera> | ToneMapPostProcessOptions, samplingMode?: number, engine?: AbstractEngine, textureType?: number, reusable?: boolean);
|
|
41
|
+
/**
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
static _Parse(parsedPostProcess: any, targetCamera: Camera, scene: Scene, rootUrl: string): Nullable<TonemapPostProcess>;
|
|
43
45
|
}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
|
+
import { __decorate } from "../tslib.es6.js";
|
|
2
|
+
import { Camera } from "../Cameras/camera.js";
|
|
1
3
|
import { PostProcess } from "./postProcess.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
TonemappingOperator[TonemappingOperator["Hable"] = 0] = "Hable";
|
|
8
|
-
/** Reinhard */
|
|
9
|
-
TonemappingOperator[TonemappingOperator["Reinhard"] = 1] = "Reinhard";
|
|
10
|
-
/** HejiDawson */
|
|
11
|
-
TonemappingOperator[TonemappingOperator["HejiDawson"] = 2] = "HejiDawson";
|
|
12
|
-
/** Photographic */
|
|
13
|
-
TonemappingOperator[TonemappingOperator["Photographic"] = 3] = "Photographic";
|
|
14
|
-
})(TonemappingOperator || (TonemappingOperator = {}));
|
|
5
|
+
import { RegisterClass } from "../Misc/typeStore.js";
|
|
6
|
+
import { serialize } from "../Misc/decorators.js";
|
|
7
|
+
import { SerializationHelper } from "../Misc/decorators.serialization.js";
|
|
8
|
+
import { ThinTonemapPostProcess } from "./thinTonemapPostProcess.js";
|
|
15
9
|
/**
|
|
16
10
|
* Defines a post process to apply tone mapping
|
|
17
11
|
*/
|
|
18
12
|
export class TonemapPostProcess extends PostProcess {
|
|
13
|
+
/**
|
|
14
|
+
* Defines the required exposure adjustment
|
|
15
|
+
*/
|
|
16
|
+
get exposureAdjustment() {
|
|
17
|
+
return this._effectWrapper.exposureAdjustment;
|
|
18
|
+
}
|
|
19
|
+
set exposureAdjustment(value) {
|
|
20
|
+
this._effectWrapper.exposureAdjustment = value;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Gets the operator used for tonemapping
|
|
24
|
+
*/
|
|
25
|
+
get operator() {
|
|
26
|
+
return this._effectWrapper.operator;
|
|
27
|
+
}
|
|
19
28
|
/**
|
|
20
29
|
* Gets a string identifying the name of the class
|
|
21
30
|
* @returns "TonemapPostProcess" string
|
|
@@ -26,48 +35,48 @@ export class TonemapPostProcess extends PostProcess {
|
|
|
26
35
|
/**
|
|
27
36
|
* Creates a new TonemapPostProcess
|
|
28
37
|
* @param name defines the name of the postprocess
|
|
29
|
-
* @param
|
|
38
|
+
* @param operator defines the operator to use
|
|
30
39
|
* @param exposureAdjustment defines the required exposure adjustment
|
|
31
40
|
* @param camera defines the camera to use (can be null)
|
|
32
41
|
* @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)
|
|
33
42
|
* @param engine defines the hosting engine (can be ignore if camera is set)
|
|
34
|
-
* @param
|
|
43
|
+
* @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
|
|
35
44
|
* @param reusable If the post process can be reused on the same frame. (default: false)
|
|
36
45
|
*/
|
|
37
|
-
constructor(name,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
defines += "REINHARD_TONEMAPPING";
|
|
49
|
-
}
|
|
50
|
-
else if (this._operator === 2 /* TonemappingOperator.HejiDawson */) {
|
|
51
|
-
defines += "OPTIMIZED_HEJIDAWSON_TONEMAPPING";
|
|
52
|
-
}
|
|
53
|
-
else if (this._operator === 3 /* TonemappingOperator.Photographic */) {
|
|
54
|
-
defines += "PHOTOGRAPHIC_TONEMAPPING";
|
|
55
|
-
}
|
|
56
|
-
//sadly a second call to create the effect.
|
|
57
|
-
this.updateEffect(defines);
|
|
58
|
-
this.onApply = (effect) => {
|
|
59
|
-
effect.setFloat("_ExposureAdjustment", this.exposureAdjustment);
|
|
46
|
+
constructor(name, operator, exposureAdjustment, camera, samplingMode = 2, engine, textureType = 0, reusable) {
|
|
47
|
+
const cameraIsCamera = camera === null || camera instanceof Camera;
|
|
48
|
+
const localOptions = {
|
|
49
|
+
operator,
|
|
50
|
+
exposureAdjustment,
|
|
51
|
+
uniforms: ThinTonemapPostProcess.Uniforms,
|
|
52
|
+
camera: cameraIsCamera ? camera : undefined,
|
|
53
|
+
samplingMode,
|
|
54
|
+
engine,
|
|
55
|
+
reusable,
|
|
56
|
+
textureType,
|
|
60
57
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (useWebGPU) {
|
|
64
|
-
this._webGPUReady = true;
|
|
65
|
-
list.push(Promise.all([import("../ShadersWGSL/tonemap.fragment.js")]));
|
|
58
|
+
if (!cameraIsCamera) {
|
|
59
|
+
Object.assign(localOptions, camera);
|
|
66
60
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
super(name, ThinTonemapPostProcess.FragmentUrl, {
|
|
62
|
+
effectWrapper: cameraIsCamera || !camera.effectWrapper ? new ThinTonemapPostProcess(name, engine, localOptions) : undefined,
|
|
63
|
+
...localOptions,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
static _Parse(parsedPostProcess, targetCamera, scene, rootUrl) {
|
|
70
|
+
return SerializationHelper.Parse(() => {
|
|
71
|
+
return new TonemapPostProcess(parsedPostProcess.name, parsedPostProcess.operator, parsedPostProcess.exposureAdjustment, targetCamera, parsedPostProcess.renderTargetSamplingMode, scene.getEngine(), parsedPostProcess.textureType, parsedPostProcess.reusable);
|
|
72
|
+
}, parsedPostProcess, scene, rootUrl);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
75
|
+
__decorate([
|
|
76
|
+
serialize()
|
|
77
|
+
], TonemapPostProcess.prototype, "exposureAdjustment", null);
|
|
78
|
+
__decorate([
|
|
79
|
+
serialize()
|
|
80
|
+
], TonemapPostProcess.prototype, "operator", null);
|
|
81
|
+
RegisterClass("BABYLON.TonemapPostProcess", TonemapPostProcess);
|
|
73
82
|
//# sourceMappingURL=tonemapPostProcess.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAKvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAKlE;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C;;OAEG;IAEH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;IAClD,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACnD,CAAC;IAED;;OAEG;IAEH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAID;;;;;;;;;;OAUG;IACH,YACI,IAAY,EACZ,QAA6B,EAC7B,kBAA0B,EAC1B,MAAoD,EACpD,eAAuB,SAAS,CAAC,6BAA6B,EAC9D,MAAuB,EACvB,WAAW,GAAG,SAAS,CAAC,yBAAyB,EACjD,QAAkB;QAElB,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,YAAY,MAAM,CAAC;QAEnE,MAAM,YAAY,GAAG;YACjB,QAAQ;YACR,kBAAkB;YAClB,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;YACzC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC3C,YAAY;YACZ,MAAM;YACN,QAAQ;YACR,WAAW;SACd,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,WAAW,EAAE;YAC5C,aAAa,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3H,GAAG,YAAY;SAClB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,MAAM,CAAU,MAAM,CAAC,iBAAsB,EAAE,YAAoB,EAAE,KAAY,EAAE,OAAe;QACrG,OAAO,mBAAmB,CAAC,KAAK,CAC5B,GAAG,EAAE;YACD,OAAO,IAAI,kBAAkB,CACzB,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,QAAQ,EAC1B,iBAAiB,CAAC,kBAAkB,EACpC,YAAY,EACZ,iBAAiB,CAAC,wBAAwB,EAC1C,KAAK,CAAC,SAAS,EAAE,EACjB,iBAAiB,CAAC,WAAW,EAC7B,iBAAiB,CAAC,QAAQ,CAC7B,CAAC;QACN,CAAC,EACD,iBAAiB,EACjB,KAAK,EACL,OAAO,CACV,CAAC;IACN,CAAC;CACJ;AA5FG;IADC,SAAS,EAAE;4DAGX;AAUD;IADC,SAAS,EAAE;kDAGX;AAgFL,aAAa,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,CAAC","sourcesContent":["import { Camera } from \"../Cameras/camera\";\r\nimport type { PostProcessOptions } from \"./postProcess\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { ThinTonemapPostProcessOptions, TonemappingOperator } from \"./thinTonemapPostProcess\";\r\nimport { ThinTonemapPostProcess } from \"./thinTonemapPostProcess\";\r\nimport type { Scene } from \"../scene\";\r\n\r\nexport type ToneMapPostProcessOptions = ThinTonemapPostProcessOptions & PostProcessOptions;\r\n\r\n/**\r\n * Defines a post process to apply tone mapping\r\n */\r\nexport class TonemapPostProcess extends PostProcess {\r\n /**\r\n * Defines the required exposure adjustment\r\n */\r\n @serialize()\r\n public get exposureAdjustment() {\r\n return this._effectWrapper.exposureAdjustment;\r\n }\r\n\r\n public set exposureAdjustment(value: number) {\r\n this._effectWrapper.exposureAdjustment = value;\r\n }\r\n\r\n /**\r\n * Gets the operator used for tonemapping\r\n */\r\n @serialize()\r\n public get operator() {\r\n return this._effectWrapper.operator;\r\n }\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"TonemapPostProcess\" string\r\n */\r\n public override getClassName(): string {\r\n return \"TonemapPostProcess\";\r\n }\r\n\r\n protected override _effectWrapper: ThinTonemapPostProcess;\r\n\r\n /**\r\n * Creates a new TonemapPostProcess\r\n * @param name defines the name of the postprocess\r\n * @param operator defines the operator to use\r\n * @param exposureAdjustment defines the required exposure adjustment\r\n * @param camera defines the camera to use (can be null)\r\n * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)\r\n * @param engine defines the hosting engine (can be ignore if camera is set)\r\n * @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n operator: TonemappingOperator,\r\n exposureAdjustment: number,\r\n camera: Nullable<Camera> | ToneMapPostProcessOptions,\r\n samplingMode: number = Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n reusable?: boolean\r\n ) {\r\n const cameraIsCamera = camera === null || camera instanceof Camera;\r\n\r\n const localOptions = {\r\n operator,\r\n exposureAdjustment,\r\n uniforms: ThinTonemapPostProcess.Uniforms,\r\n camera: cameraIsCamera ? camera : undefined,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n textureType,\r\n };\r\n\r\n if (!cameraIsCamera) {\r\n Object.assign(localOptions, camera);\r\n }\r\n\r\n super(name, ThinTonemapPostProcess.FragmentUrl, {\r\n effectWrapper: cameraIsCamera || !camera.effectWrapper ? new ThinTonemapPostProcess(name, engine, localOptions) : undefined,\r\n ...localOptions,\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static override _Parse(parsedPostProcess: any, targetCamera: Camera, scene: Scene, rootUrl: string): Nullable<TonemapPostProcess> {\r\n return SerializationHelper.Parse(\r\n () => {\r\n return new TonemapPostProcess(\r\n parsedPostProcess.name,\r\n parsedPostProcess.operator,\r\n parsedPostProcess.exposureAdjustment,\r\n targetCamera,\r\n parsedPostProcess.renderTargetSamplingMode,\r\n scene.getEngine(),\r\n parsedPostProcess.textureType,\r\n parsedPostProcess.reusable\r\n );\r\n },\r\n parsedPostProcess,\r\n scene,\r\n rootUrl\r\n );\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TonemapPostProcess\", TonemapPostProcess);\r\n"]}
|
|
@@ -414,8 +414,13 @@ export class GeometryBufferRenderer {
|
|
|
414
414
|
return false;
|
|
415
415
|
}
|
|
416
416
|
const defines = [];
|
|
417
|
-
const attribs = [VertexBuffer.PositionKind
|
|
417
|
+
const attribs = [VertexBuffer.PositionKind];
|
|
418
418
|
const mesh = subMesh.getMesh();
|
|
419
|
+
const hasNormals = mesh.isVerticesDataPresent(VertexBuffer.NormalKind);
|
|
420
|
+
if (hasNormals) {
|
|
421
|
+
defines.push("#define HAS_NORMAL_ATTRIBUTE");
|
|
422
|
+
attribs.push(VertexBuffer.NormalKind);
|
|
423
|
+
}
|
|
419
424
|
let uv1 = false;
|
|
420
425
|
let uv2 = false;
|
|
421
426
|
const color = false;
|