@onerjs/core 8.28.1 → 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.
Files changed (67) hide show
  1. package/Collisions/gpuPicker.d.ts +40 -16
  2. package/Collisions/gpuPicker.js +216 -95
  3. package/Collisions/gpuPicker.js.map +1 -1
  4. package/Decorators/nodeDecorator.d.ts +5 -1
  5. package/Decorators/nodeDecorator.js +4 -0
  6. package/Decorators/nodeDecorator.js.map +1 -1
  7. package/Engines/abstractEngine.js +2 -2
  8. package/Engines/abstractEngine.js.map +1 -1
  9. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +30 -0
  10. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +56 -0
  11. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -0
  12. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +32 -0
  13. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +62 -0
  14. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -0
  15. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +36 -0
  16. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +88 -0
  17. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -0
  18. package/FrameGraph/Node/Blocks/index.d.ts +3 -0
  19. package/FrameGraph/Node/Blocks/index.js +3 -0
  20. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  21. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +17 -0
  22. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +18 -0
  23. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -0
  24. package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +16 -0
  25. package/FrameGraph/Tasks/PostProcesses/filterTask.js +17 -0
  26. package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -0
  27. package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +16 -0
  28. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +17 -0
  29. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -0
  30. package/FrameGraph/index.d.ts +3 -0
  31. package/FrameGraph/index.js +3 -0
  32. package/FrameGraph/index.js.map +1 -1
  33. package/Materials/effect.d.ts +1 -0
  34. package/Materials/effect.js +7 -1
  35. package/Materials/effect.js.map +1 -1
  36. package/Physics/v2/physicsAggregate.js +4 -3
  37. package/Physics/v2/physicsAggregate.js.map +1 -1
  38. package/PostProcesses/colorCorrectionPostProcess.d.ts +3 -3
  39. package/PostProcesses/colorCorrectionPostProcess.js +21 -21
  40. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  41. package/PostProcesses/filterPostProcess.d.ts +4 -2
  42. package/PostProcesses/filterPostProcess.js +22 -15
  43. package/PostProcesses/filterPostProcess.js.map +1 -1
  44. package/PostProcesses/index.d.ts +3 -0
  45. package/PostProcesses/index.js +3 -0
  46. package/PostProcesses/index.js.map +1 -1
  47. package/PostProcesses/thinColorCorrectionPostProcess.d.ts +30 -0
  48. package/PostProcesses/thinColorCorrectionPostProcess.js +52 -0
  49. package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -0
  50. package/PostProcesses/thinFilterPostProcess.d.ts +29 -0
  51. package/PostProcesses/thinFilterPostProcess.js +51 -0
  52. package/PostProcesses/thinFilterPostProcess.js.map +1 -0
  53. package/PostProcesses/thinTonemapPostProcess.d.ts +52 -0
  54. package/PostProcesses/thinTonemapPostProcess.js +83 -0
  55. package/PostProcesses/thinTonemapPostProcess.js.map +1 -0
  56. package/PostProcesses/tonemapPostProcess.d.ts +23 -21
  57. package/PostProcesses/tonemapPostProcess.js +55 -46
  58. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  59. package/Shaders/picking.fragment.js +20 -6
  60. package/Shaders/picking.fragment.js.map +1 -1
  61. package/Shaders/picking.vertex.js +4 -3
  62. package/Shaders/picking.vertex.js.map +1 -1
  63. package/ShadersWGSL/picking.fragment.js +11 -6
  64. package/ShadersWGSL/picking.fragment.js.map +1 -1
  65. package/ShadersWGSL/picking.vertex.js +4 -3
  66. package/ShadersWGSL/picking.vertex.js.map +1 -1
  67. package/package.json +1 -1
@@ -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 type { Camera } from "../Cameras/camera.js";
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
- /** Defines operator used for tonemapping */
6
- export declare enum TonemappingOperator {
7
- /** Hable */
8
- Hable = 0,
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
- private _operator;
21
- /** Defines the required exposure adjustment */
22
- exposureAdjustment: number;
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 _operator defines the operator to use
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 textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
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, _operator: TonemappingOperator,
40
- /** Defines the required exposure adjustment */
41
- exposureAdjustment: number, camera: Nullable<Camera>, samplingMode?: number, engine?: AbstractEngine, textureFormat?: number, reusable?: boolean);
42
- protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
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
- /** 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 = {}));
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 _operator defines the operator to use
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 textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
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, _operator,
38
- /** Defines the required exposure adjustment */
39
- exposureAdjustment, camera, samplingMode = 2, engine, textureFormat = 0, reusable) {
40
- super(name, "tonemap", ["_ExposureAdjustment"], null, 1.0, camera, samplingMode, engine, reusable, null, textureFormat);
41
- this._operator = _operator;
42
- this.exposureAdjustment = exposureAdjustment;
43
- let defines = "#define ";
44
- if (this._operator === 0 /* TonemappingOperator.Hable */) {
45
- defines += "HABLE_TONEMAPPING";
46
- }
47
- else if (this._operator === 1 /* TonemappingOperator.Reinhard */) {
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
- _gatherImports(useWebGPU, list) {
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
- else {
68
- list.push(Promise.all([import("../Shaders/tonemap.fragment.js")]));
69
- }
70
- super._gatherImports(useWebGPU, list);
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":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,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;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C;;;OAGG;IACa,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACH,YACI,IAAY,EACJ,SAA8B;IACtC,+CAA+C;IACxC,kBAA0B,EACjC,MAAwB,EACxB,eAAuB,SAAS,CAAC,6BAA6B,EAC9D,MAAuB,EACvB,aAAa,GAAG,SAAS,CAAC,yBAAyB,EACnD,QAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAThH,cAAS,GAAT,SAAS,CAAqB;QAE/B,uBAAkB,GAAlB,kBAAkB,CAAQ;QASjC,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,IAAI,IAAI,CAAC,SAAS,sCAA8B,EAAE,CAAC;YAC/C,OAAO,IAAI,mBAAmB,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,yCAAiC,EAAE,CAAC;YACzD,OAAO,IAAI,sBAAsB,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,2CAAmC,EAAE,CAAC;YAC3D,OAAO,IAAI,kCAAkC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,6CAAqC,EAAE,CAAC;YAC7D,OAAO,IAAI,0BAA0B,CAAC;QAC1C,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpE,CAAC,CAAC;IACN,CAAC;IAEkB,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\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 * Defines a post process to apply tone mapping\r\n */\r\nexport class TonemapPostProcess extends PostProcess {\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 /**\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 textureFormat 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 private _operator: TonemappingOperator,\r\n /** Defines the required exposure adjustment */\r\n public exposureAdjustment: number,\r\n camera: Nullable<Camera>,\r\n samplingMode: number = Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n textureFormat = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n reusable?: boolean\r\n ) {\r\n super(name, \"tonemap\", [\"_ExposureAdjustment\"], null, 1.0, camera, samplingMode, engine, reusable, null, textureFormat);\r\n\r\n let defines = \"#define \";\r\n\r\n if (this._operator === TonemappingOperator.Hable) {\r\n defines += \"HABLE_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Reinhard) {\r\n defines += \"REINHARD_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.HejiDawson) {\r\n defines += \"OPTIMIZED_HEJIDAWSON_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Photographic) {\r\n defines += \"PHOTOGRAPHIC_TONEMAPPING\";\r\n }\r\n\r\n //sadly a second call to create the effect.\r\n this.updateEffect(defines);\r\n\r\n this.onApply = (effect: Effect) => {\r\n effect.setFloat(\"_ExposureAdjustment\", this.exposureAdjustment);\r\n };\r\n }\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(Promise.all([import(\"../ShadersWGSL/tonemap.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/tonemap.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n}\r\n"]}
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"]}
@@ -2,17 +2,31 @@
2
2
  import { ShaderStore } from "../Engines/shaderStore.js";
3
3
  const name = "pickingPixelShader";
4
4
  const shader = `#if defined(INSTANCES)
5
- varying vec4 vMeshID;
5
+ varying float vMeshID;
6
6
  #else
7
- uniform vec4 meshID;
7
+ uniform float meshID;
8
8
  #endif
9
- void main(void) {
9
+ void main(void) {float id;
10
10
  #if defined(INSTANCES)
11
- gl_FragColor=vMeshID;
11
+ id=vMeshID;
12
12
  #else
13
- gl_FragColor=meshID;
13
+ id=meshID;
14
14
  #endif
15
- }`;
15
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
16
+ int castedId=int(id);vec3 color=vec3(
17
+ float((castedId>>16) & 0xFF),
18
+ float((castedId>>8) & 0xFF),
19
+ float(castedId & 0xFF)
20
+ )/255.0;gl_FragColor=vec4(color,1.0);
21
+ #else
22
+ float castedId=floor(id+0.5);vec3 color=vec3(
23
+ floor(mod(castedId,16777216.0)/65536.0),
24
+ floor(mod(castedId,65536.0)/256.0),
25
+ mod(castedId,256.0)
26
+ )/255.0;gl_FragColor=vec4(color,1.0);
27
+ #endif
28
+ }
29
+ `;
16
30
  // Sideeffect
17
31
  if (!ShaderStore.ShadersStore[name]) {
18
32
  ShaderStore.ShadersStore[name] = shader;
@@ -1 +1 @@
1
- {"version":3,"file":"picking.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/picking.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;EAWb,CAAC;AACH,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"pickingPixelShader\";\nconst shader = `#if defined(INSTANCES)\nvarying vec4 vMeshID;\n#else\nuniform vec4 meshID;\n#endif\nvoid main(void) {\n#if defined(INSTANCES)\ngl_FragColor=vMeshID;\n#else\ngl_FragColor=meshID;\n#endif\n}`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pickingPixelShader = { name, shader };\n"]}
1
+ {"version":3,"file":"picking.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/picking.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"pickingPixelShader\";\nconst shader = `#if defined(INSTANCES)\nvarying float vMeshID;\n#else\nuniform float meshID;\n#endif\nvoid main(void) {float id;\n#if defined(INSTANCES)\nid=vMeshID;\n#else\nid=meshID;\n#endif\n#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)\nint castedId=int(id);vec3 color=vec3(\nfloat((castedId>>16) & 0xFF),\nfloat((castedId>>8) & 0xFF),\nfloat(castedId & 0xFF)\n)/255.0;gl_FragColor=vec4(color,1.0);\n#else\nfloat castedId=floor(id+0.5);vec3 color=vec3(\nfloor(mod(castedId,16777216.0)/65536.0),\nfloor(mod(castedId,65536.0)/256.0),\nmod(castedId,256.0)\n)/255.0;gl_FragColor=vec4(color,1.0);\n#endif\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pickingPixelShader = { name, shader };\n"]}
@@ -13,7 +13,7 @@ import "./ShadersInclude/bakedVertexAnimation.js";
13
13
  const name = "pickingVertexShader";
14
14
  const shader = `attribute vec3 position;
15
15
  #if defined(INSTANCES)
16
- attribute vec4 instanceMeshID;
16
+ attribute float instanceMeshID;
17
17
  #endif
18
18
  #include<bonesDeclaration>
19
19
  #include<bakedVertexAnimationDeclaration>
@@ -22,7 +22,7 @@ attribute vec4 instanceMeshID;
22
22
  #include<instancesDeclaration>
23
23
  uniform mat4 viewProjection;
24
24
  #if defined(INSTANCES)
25
- varying vec4 vMeshID;
25
+ varying float vMeshID;
26
26
  #endif
27
27
  void main(void) {
28
28
  #include<morphTargetsVertexGlobal>
@@ -34,7 +34,8 @@ vec4 worldPos=finalWorld*vec4(position,1.0);gl_Position=viewProjection*worldPos;
34
34
  #if defined(INSTANCES)
35
35
  vMeshID=instanceMeshID;
36
36
  #endif
37
- }`;
37
+ }
38
+ `;
38
39
  // Sideeffect
39
40
  if (!ShaderStore.ShadersStore[name]) {
40
41
  ShaderStore.ShadersStore[name] = shader;
@@ -1 +1 @@
1
- {"version":3,"file":"picking.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/picking.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAE/C,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;EAuBb,CAAC;AACH,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\n\nconst name = \"pickingVertexShader\";\nconst shader = `attribute vec3 position;\n#if defined(INSTANCES)\nattribute vec4 instanceMeshID;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\n#if defined(INSTANCES)\nvarying vec4 vMeshID;\n#endif\nvoid main(void) {\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(position,1.0);gl_Position=viewProjection*worldPos;\n#if defined(INSTANCES)\nvMeshID=instanceMeshID;\n#endif\n}`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pickingVertexShader = { name, shader };\n"]}
1
+ {"version":3,"file":"picking.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/picking.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAE/C,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\n\nconst name = \"pickingVertexShader\";\nconst shader = `attribute vec3 position;\n#if defined(INSTANCES)\nattribute float instanceMeshID;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\n#if defined(INSTANCES)\nvarying float vMeshID;\n#endif\nvoid main(void) {\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(position,1.0);gl_Position=viewProjection*worldPos;\n#if defined(INSTANCES)\nvMeshID=instanceMeshID;\n#endif\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const pickingVertexShader = { name, shader };\n"]}
@@ -2,18 +2,23 @@
2
2
  import { ShaderStore } from "../Engines/shaderStore.js";
3
3
  const name = "pickingPixelShader";
4
4
  const shader = `#if defined(INSTANCES)
5
- varying vMeshID: vec4f;
5
+ varying vMeshID: f32;
6
6
  #else
7
- uniform meshID: vec4f;
7
+ uniform meshID: f32;
8
8
  #endif
9
9
  @fragment
10
- fn main(input: FragmentInputs)->FragmentOutputs {
10
+ fn main(input: FragmentInputs)->FragmentOutputs {var id: i32;
11
11
  #if defined(INSTANCES)
12
- fragmentOutputs.color=input.vMeshID;
12
+ id=i32(input.vMeshID);
13
13
  #else
14
- fragmentOutputs.color=uniforms.meshID;
14
+ id=i32(uniforms.meshID);
15
15
  #endif
16
- }`;
16
+ var color=vec3f(
17
+ f32((id>>16) & 0xFF),
18
+ f32((id>>8) & 0xFF),
19
+ f32(id & 0xFF),
20
+ )/255.0;fragmentOutputs.color=vec4f(color,1.0);}
21
+ `;
17
22
  // Sideeffect
18
23
  if (!ShaderStore.ShadersStoreWGSL[name]) {
19
24
  ShaderStore.ShadersStoreWGSL[name] = shader;
@@ -1 +1 @@
1
- {"version":3,"file":"picking.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/picking.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;EAYb,CAAC;AACH,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"pickingPixelShader\";\nconst shader = `#if defined(INSTANCES)\nvarying vMeshID: vec4f;\n#else\nuniform meshID: vec4f;\n#endif\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#if defined(INSTANCES)\nfragmentOutputs.color=input.vMeshID;\n#else\nfragmentOutputs.color=uniforms.meshID;\n#endif\n}`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const pickingPixelShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"picking.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/picking.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;CAiBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"pickingPixelShader\";\nconst shader = `#if defined(INSTANCES)\nvarying vMeshID: f32;\n#else\nuniform meshID: f32;\n#endif\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var id: i32;\n#if defined(INSTANCES)\nid=i32(input.vMeshID);\n#else\nid=i32(uniforms.meshID);\n#endif\nvar color=vec3f(\nf32((id>>16) & 0xFF),\nf32((id>>8) & 0xFF),\nf32(id & 0xFF),\n)/255.0;fragmentOutputs.color=vec4f(color,1.0);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const pickingPixelShaderWGSL = { name, shader };\n"]}
@@ -13,7 +13,7 @@ import "./ShadersInclude/bakedVertexAnimation.js";
13
13
  const name = "pickingVertexShader";
14
14
  const shader = `attribute position: vec3f;
15
15
  #if defined(INSTANCES)
16
- attribute instanceMeshID: vec4f;
16
+ attribute instanceMeshID: f32;
17
17
  #endif
18
18
  #include<bonesDeclaration>
19
19
  #include<bakedVertexAnimationDeclaration>
@@ -22,7 +22,7 @@ attribute instanceMeshID: vec4f;
22
22
  #include<instancesDeclaration>
23
23
  uniform viewProjection: mat4x4f;
24
24
  #if defined(INSTANCES)
25
- varying vMeshID: vec4f;
25
+ varying vMeshID: f32;
26
26
  #endif
27
27
  @vertex
28
28
  fn main(input : VertexInputs)->FragmentInputs {
@@ -35,7 +35,8 @@ var worldPos: vec4f=finalWorld*vec4f(input.position,1.0);vertexOutputs.position=
35
35
  #if defined(INSTANCES)
36
36
  vertexOutputs.vMeshID=input.instanceMeshID;
37
37
  #endif
38
- }`;
38
+ }
39
+ `;
39
40
  // Sideeffect
40
41
  if (!ShaderStore.ShadersStoreWGSL[name]) {
41
42
  ShaderStore.ShadersStoreWGSL[name] = shader;
@@ -1 +1 @@
1
- {"version":3,"file":"picking.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/picking.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAE/C,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EAwBb,CAAC;AACH,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\n\nconst name = \"pickingVertexShader\";\nconst shader = `attribute position: vec3f;\n#if defined(INSTANCES)\nattribute instanceMeshID: vec4f;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\nuniform viewProjection: mat4x4f;\n#if defined(INSTANCES)\nvarying vMeshID: vec4f;\n#endif\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(input.position,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;\n#if defined(INSTANCES)\nvertexOutputs.vMeshID=input.instanceMeshID;\n#endif\n}`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const pickingVertexShaderWGSL = { name, shader };\n"]}
1
+ {"version":3,"file":"picking.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/picking.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAE/C,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\n\nconst name = \"pickingVertexShader\";\nconst shader = `attribute position: vec3f;\n#if defined(INSTANCES)\nattribute instanceMeshID: f32;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<instancesDeclaration>\nuniform viewProjection: mat4x4f;\n#if defined(INSTANCES)\nvarying vMeshID: f32;\n#endif\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(input.position,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;\n#if defined(INSTANCES)\nvertexOutputs.vMeshID=input.instanceMeshID;\n#endif\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const pickingVertexShaderWGSL = { name, shader };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onerjs/core",
3
- "version": "8.28.1",
3
+ "version": "8.28.2",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",