@onerjs/core 8.28.4 → 8.28.5

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 (87) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +1 -0
  4. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  5. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +1 -0
  6. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  7. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +1 -0
  8. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  9. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +1 -0
  10. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  11. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.d.ts +94 -0
  12. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +312 -0
  13. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -0
  14. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +1 -0
  15. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  16. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +1 -0
  17. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  18. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +1 -0
  19. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  20. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +1 -0
  21. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  22. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +1 -1
  23. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
  24. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  25. package/FrameGraph/Node/Blocks/index.js +1 -0
  26. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  27. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  28. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  29. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -7
  30. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  31. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +0 -6
  32. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  33. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -4
  34. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  35. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -4
  36. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  37. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -4
  38. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  39. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +0 -8
  40. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  41. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -5
  42. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  43. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +13 -0
  44. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +25 -0
  45. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -0
  46. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +76 -0
  47. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +147 -0
  48. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -0
  49. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +14 -0
  50. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +29 -0
  51. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -0
  52. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +2 -11
  53. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  54. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +8 -9
  55. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  56. package/FrameGraph/index.d.ts +1 -0
  57. package/FrameGraph/index.js +1 -0
  58. package/FrameGraph/index.js.map +1 -1
  59. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +4 -0
  60. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +6 -0
  61. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  62. package/Materials/Node/nodeMaterial.js +1 -1
  63. package/Materials/Node/nodeMaterial.js.map +1 -1
  64. package/Materials/PBR/openPbrMaterial.js +5 -5
  65. package/Materials/PBR/openPbrMaterial.js.map +1 -1
  66. package/Meshes/Node/nodeGeometry.js +1 -1
  67. package/Meshes/Node/nodeGeometry.js.map +1 -1
  68. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  69. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  70. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +21 -30
  71. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +163 -256
  72. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  73. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +1 -3
  74. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  75. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.d.ts +130 -0
  76. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js +193 -0
  77. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js.map +1 -0
  78. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +26 -0
  79. package/PostProcesses/thinSSAO2BlurPostProcess.js +81 -0
  80. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -0
  81. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +15 -0
  82. package/PostProcesses/thinSSAO2CombinePostProcess.js +48 -0
  83. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -0
  84. package/PostProcesses/thinSSAO2PostProcess.d.ts +45 -0
  85. package/PostProcesses/thinSSAO2PostProcess.js +208 -0
  86. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -0
  87. package/package.json +1 -1
@@ -0,0 +1,208 @@
1
+
2
+ import { EffectWrapper } from "../Materials/effectRenderer.js";
3
+ import { Vector2, Vector3 } from "../Maths/math.vector.js";
4
+ import { Camera } from "../Cameras/camera.js";
5
+ import { RawTexture } from "../Materials/Textures/rawTexture.js";
6
+ import { RandomRange } from "../Maths/math.scalar.functions.js";
7
+ import { Texture } from "../Materials/Textures/texture.js";
8
+ /**
9
+ * @internal
10
+ */
11
+ export class ThinSSAO2PostProcess extends EffectWrapper {
12
+ _gatherImports(useWebGPU, list) {
13
+ if (useWebGPU) {
14
+ this._webGPUReady = true;
15
+ list.push(import("../ShadersWGSL/ssao2.fragment.js"));
16
+ }
17
+ else {
18
+ list.push(import("../Shaders/ssao2.fragment.js"));
19
+ }
20
+ }
21
+ get textureWidth() {
22
+ return this._textureWidth;
23
+ }
24
+ set textureWidth(width) {
25
+ if (this._textureWidth === width) {
26
+ return;
27
+ }
28
+ this._textureWidth = width;
29
+ }
30
+ get textureHeight() {
31
+ return this._textureHeight;
32
+ }
33
+ set textureHeight(height) {
34
+ if (this._textureHeight === height) {
35
+ return;
36
+ }
37
+ this._textureHeight = height;
38
+ }
39
+ set samples(n) {
40
+ this._samples = n;
41
+ this.updateEffect(this._getDefinesForSSAO());
42
+ this._sampleSphere = this._generateHemisphere();
43
+ }
44
+ get samples() {
45
+ return this._samples;
46
+ }
47
+ set epsilon(n) {
48
+ this._epsilon = n;
49
+ this.updateEffect(this._getDefinesForSSAO());
50
+ }
51
+ get epsilon() {
52
+ return this._epsilon;
53
+ }
54
+ constructor(name, scene, options) {
55
+ super({
56
+ ...options,
57
+ name,
58
+ engine: scene.getEngine(),
59
+ useShaderStore: true,
60
+ useAsPostProcess: true,
61
+ fragmentShader: ThinSSAO2PostProcess.FragmentUrl,
62
+ uniforms: ThinSSAO2PostProcess.Uniforms,
63
+ samplers: ThinSSAO2PostProcess.Samplers,
64
+ defines: `#define SSAO\n#define SAMPLES 8\n#define EPSILON 0.0001`,
65
+ shaderLanguage: scene.getEngine().isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
66
+ });
67
+ this.camera = null;
68
+ this._textureWidth = 0;
69
+ this._textureHeight = 0;
70
+ this._samples = 8;
71
+ this.totalStrength = 1.0;
72
+ this.radius = 2.0;
73
+ this.maxZ = 100.0;
74
+ this.minZAspect = 0.2;
75
+ this.base = 0;
76
+ this._epsilon = 0.02;
77
+ this._bits = new Uint32Array(1);
78
+ this._scene = scene;
79
+ this._createRandomTexture();
80
+ this.updateEffect(this._getDefinesForSSAO());
81
+ this._sampleSphere = this._generateHemisphere();
82
+ }
83
+ bind(noDefaultBindings = false) {
84
+ super.bind(noDefaultBindings);
85
+ const effect = this._drawWrapper.effect;
86
+ const camera = this.camera;
87
+ if (!camera) {
88
+ return;
89
+ }
90
+ const projectionMatrix = camera.getProjectionMatrix();
91
+ effect.setArray3("sampleSphere", this._sampleSphere);
92
+ effect.setFloat("randTextureTiles", 32.0);
93
+ effect.setFloat("samplesFactor", 1 / this.samples);
94
+ effect.setFloat("totalStrength", this.totalStrength);
95
+ effect.setFloat2("texelSize", 1 / this.textureWidth, 1 / this.textureHeight);
96
+ effect.setFloat("radius", this.radius);
97
+ effect.setFloat("maxZ", this.maxZ);
98
+ effect.setFloat("minZAspect", this.minZAspect);
99
+ effect.setFloat("base", this.base);
100
+ effect.setFloat("near", camera.minZ);
101
+ if (camera.mode === Camera.PERSPECTIVE_CAMERA) {
102
+ effect.setMatrix3x3("depthProjection", ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION);
103
+ effect.setFloat("xViewport", Math.tan(camera.fov / 2) * this._scene.getEngine().getAspectRatio(camera, true));
104
+ effect.setFloat("yViewport", Math.tan(camera.fov / 2));
105
+ }
106
+ else {
107
+ const halfWidth = this._scene.getEngine().getRenderWidth() / 2.0;
108
+ const halfHeight = this._scene.getEngine().getRenderHeight() / 2.0;
109
+ const orthoLeft = camera.orthoLeft ?? -halfWidth;
110
+ const orthoRight = camera.orthoRight ?? halfWidth;
111
+ const orthoBottom = camera.orthoBottom ?? -halfHeight;
112
+ const orthoTop = camera.orthoTop ?? halfHeight;
113
+ effect.setMatrix3x3("depthProjection", ThinSSAO2PostProcess.ORTHO_DEPTH_PROJECTION);
114
+ effect.setFloat4("viewport", orthoLeft, orthoRight, orthoBottom, orthoTop);
115
+ }
116
+ effect.setMatrix("projection", projectionMatrix);
117
+ effect.setTexture("randomSampler", this._randomTexture);
118
+ }
119
+ dispose() {
120
+ this._randomTexture.dispose();
121
+ super.dispose();
122
+ }
123
+ _createRandomTexture() {
124
+ const size = 128;
125
+ const data = new Uint8Array(size * size * 4);
126
+ const randVector = Vector2.Zero();
127
+ for (let index = 0; index < data.length;) {
128
+ randVector.set(RandomRange(0, 1), RandomRange(0, 1)).normalize().scaleInPlace(255);
129
+ data[index++] = Math.floor(randVector.x);
130
+ data[index++] = Math.floor(randVector.y);
131
+ data[index++] = 0;
132
+ data[index++] = 255;
133
+ }
134
+ const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, 2);
135
+ texture.name = "SSAORandomTexture";
136
+ texture.wrapU = Texture.WRAP_ADDRESSMODE;
137
+ texture.wrapV = Texture.WRAP_ADDRESSMODE;
138
+ this._randomTexture = texture;
139
+ }
140
+ //Van der Corput radical inverse
141
+ _radicalInverseVdC(i) {
142
+ this._bits[0] = i;
143
+ this._bits[0] = ((this._bits[0] << 16) | (this._bits[0] >> 16)) >>> 0;
144
+ this._bits[0] = ((this._bits[0] & 0x55555555) << 1) | (((this._bits[0] & 0xaaaaaaaa) >>> 1) >>> 0);
145
+ this._bits[0] = ((this._bits[0] & 0x33333333) << 2) | (((this._bits[0] & 0xcccccccc) >>> 2) >>> 0);
146
+ this._bits[0] = ((this._bits[0] & 0x0f0f0f0f) << 4) | (((this._bits[0] & 0xf0f0f0f0) >>> 4) >>> 0);
147
+ this._bits[0] = ((this._bits[0] & 0x00ff00ff) << 8) | (((this._bits[0] & 0xff00ff00) >>> 8) >>> 0);
148
+ return this._bits[0] * 2.3283064365386963e-10; // / 0x100000000 or / 4294967296
149
+ }
150
+ _hammersley(i, n) {
151
+ return [i / n, this._radicalInverseVdC(i)];
152
+ }
153
+ _hemisphereSampleUniform(u, v) {
154
+ const phi = v * 2.0 * Math.PI;
155
+ // rejecting samples that are close to tangent plane to avoid z-fighting artifacts
156
+ const cosTheta = 1.0 - u * 0.85;
157
+ const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta);
158
+ return new Vector3(Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta);
159
+ }
160
+ _generateHemisphere() {
161
+ const numSamples = this.samples;
162
+ const result = [];
163
+ let vector;
164
+ let i = 0;
165
+ while (i < numSamples) {
166
+ if (numSamples < 16) {
167
+ vector = this._hemisphereSampleUniform(Math.random(), Math.random());
168
+ }
169
+ else {
170
+ const rand = this._hammersley(i, numSamples);
171
+ vector = this._hemisphereSampleUniform(rand[0], rand[1]);
172
+ }
173
+ result.push(vector.x, vector.y, vector.z);
174
+ i++;
175
+ }
176
+ return result;
177
+ }
178
+ _getDefinesForSSAO() {
179
+ let defines = `#define SSAO\n#define SAMPLES ${this.samples}\n#define EPSILON ${this.epsilon.toFixed(4)}`;
180
+ if (this.camera?.mode === Camera.ORTHOGRAPHIC_CAMERA) {
181
+ defines += `\n#define ORTHOGRAPHIC_CAMERA`;
182
+ }
183
+ return defines;
184
+ }
185
+ }
186
+ ThinSSAO2PostProcess.ORTHO_DEPTH_PROJECTION = [1, 0, 0, 0, 1, 0, 0, 0, 1];
187
+ ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION = [0, 0, 0, 0, 0, 0, 1, 1, 1];
188
+ ThinSSAO2PostProcess.FragmentUrl = "ssao2";
189
+ ThinSSAO2PostProcess.Uniforms = [
190
+ "sampleSphere",
191
+ "samplesFactor",
192
+ "randTextureTiles",
193
+ "totalStrength",
194
+ "radius",
195
+ "base",
196
+ "range",
197
+ "projection",
198
+ "near",
199
+ "texelSize",
200
+ "xViewport",
201
+ "yViewport",
202
+ "viewport",
203
+ "maxZ",
204
+ "minZAspect",
205
+ "depthProjection",
206
+ ];
207
+ ThinSSAO2PostProcess.Samplers = ["randomSampler", "depthSampler", "normalSampler"];
208
+ //# sourceMappingURL=thinSSAO2PostProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinSSAO2PostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinSSAO2PostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, Scene, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { RawTexture } from \"core/Materials/Textures/rawTexture\";\r\nimport { RandomRange } from \"core/Maths/math.scalar.functions\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinSSAO2PostProcess extends EffectWrapper {\r\n private static readonly ORTHO_DEPTH_PROJECTION = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\n private static readonly PERSPECTIVE_DEPTH_PROJECTION = [0, 0, 0, 0, 0, 0, 1, 1, 1];\r\n\r\n public static readonly FragmentUrl = \"ssao2\";\r\n\r\n public static readonly Uniforms = [\r\n \"sampleSphere\",\r\n \"samplesFactor\",\r\n \"randTextureTiles\",\r\n \"totalStrength\",\r\n \"radius\",\r\n \"base\",\r\n \"range\",\r\n \"projection\",\r\n \"near\",\r\n \"texelSize\",\r\n \"xViewport\",\r\n \"yViewport\",\r\n \"viewport\",\r\n \"maxZ\",\r\n \"minZAspect\",\r\n \"depthProjection\",\r\n ];\r\n\r\n public static readonly Samplers = [\"randomSampler\", \"depthSampler\", \"normalSampler\"];\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/ssao2.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/ssao2.fragment\"));\r\n }\r\n }\r\n\r\n public camera: Nullable<Camera> = null;\r\n\r\n private _textureWidth = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n }\r\n\r\n private _textureHeight = 0;\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n }\r\n\r\n private _samples: number = 8;\r\n\r\n public set samples(n: number) {\r\n this._samples = n;\r\n this.updateEffect(this._getDefinesForSSAO());\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public totalStrength: number = 1.0;\r\n\r\n public radius: number = 2.0;\r\n\r\n public maxZ: number = 100.0;\r\n\r\n public minZAspect: number = 0.2;\r\n\r\n public base: number = 0;\r\n\r\n private _epsilon: number = 0.02;\r\n\r\n public set epsilon(n: number) {\r\n this._epsilon = n;\r\n this.updateEffect(this._getDefinesForSSAO());\r\n }\r\n public get epsilon(): number {\r\n return this._epsilon;\r\n }\r\n\r\n private _scene: Scene;\r\n private _randomTexture: Texture;\r\n private _sampleSphere: number[];\r\n\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinSSAO2PostProcess.FragmentUrl,\r\n uniforms: ThinSSAO2PostProcess.Uniforms,\r\n samplers: ThinSSAO2PostProcess.Samplers,\r\n defines: `#define SSAO\\n#define SAMPLES 8\\n#define EPSILON 0.0001`,\r\n shaderLanguage: scene.getEngine().isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n\r\n this._scene = scene;\r\n\r\n this._createRandomTexture();\r\n\r\n this.updateEffect(this._getDefinesForSSAO());\r\n this._sampleSphere = this._generateHemisphere();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n const camera = this.camera;\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n\r\n effect.setArray3(\"sampleSphere\", this._sampleSphere);\r\n effect.setFloat(\"randTextureTiles\", 32.0);\r\n effect.setFloat(\"samplesFactor\", 1 / this.samples);\r\n effect.setFloat(\"totalStrength\", this.totalStrength);\r\n effect.setFloat2(\"texelSize\", 1 / this.textureWidth, 1 / this.textureHeight);\r\n effect.setFloat(\"radius\", this.radius);\r\n effect.setFloat(\"maxZ\", this.maxZ);\r\n effect.setFloat(\"minZAspect\", this.minZAspect);\r\n effect.setFloat(\"base\", this.base);\r\n effect.setFloat(\"near\", camera.minZ);\r\n if (camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.PERSPECTIVE_DEPTH_PROJECTION);\r\n effect.setFloat(\"xViewport\", Math.tan(camera.fov / 2) * this._scene.getEngine().getAspectRatio(camera, true));\r\n effect.setFloat(\"yViewport\", Math.tan(camera.fov / 2));\r\n } else {\r\n const halfWidth = this._scene.getEngine().getRenderWidth() / 2.0;\r\n const halfHeight = this._scene.getEngine().getRenderHeight() / 2.0;\r\n const orthoLeft = camera.orthoLeft ?? -halfWidth;\r\n const orthoRight = camera.orthoRight ?? halfWidth;\r\n const orthoBottom = camera.orthoBottom ?? -halfHeight;\r\n const orthoTop = camera.orthoTop ?? halfHeight;\r\n effect.setMatrix3x3(\"depthProjection\", ThinSSAO2PostProcess.ORTHO_DEPTH_PROJECTION);\r\n effect.setFloat4(\"viewport\", orthoLeft, orthoRight, orthoBottom, orthoTop);\r\n }\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n effect.setTexture(\"randomSampler\", this._randomTexture);\r\n }\r\n\r\n public override dispose() {\r\n this._randomTexture.dispose();\r\n\r\n super.dispose();\r\n }\r\n\r\n private _createRandomTexture(): void {\r\n const size = 128;\r\n\r\n const data = new Uint8Array(size * size * 4);\r\n const randVector = Vector2.Zero();\r\n for (let index = 0; index < data.length; ) {\r\n randVector.set(RandomRange(0, 1), RandomRange(0, 1)).normalize().scaleInPlace(255);\r\n data[index++] = Math.floor(randVector.x);\r\n data[index++] = Math.floor(randVector.y);\r\n data[index++] = 0;\r\n data[index++] = 255;\r\n }\r\n\r\n const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n texture.name = \"SSAORandomTexture\";\r\n texture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n texture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n this._randomTexture = texture;\r\n }\r\n\r\n private _bits = new Uint32Array(1);\r\n\r\n //Van der Corput radical inverse\r\n private _radicalInverseVdC(i: number) {\r\n this._bits[0] = i;\r\n this._bits[0] = ((this._bits[0] << 16) | (this._bits[0] >> 16)) >>> 0;\r\n this._bits[0] = ((this._bits[0] & 0x55555555) << 1) | (((this._bits[0] & 0xaaaaaaaa) >>> 1) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x33333333) << 2) | (((this._bits[0] & 0xcccccccc) >>> 2) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x0f0f0f0f) << 4) | (((this._bits[0] & 0xf0f0f0f0) >>> 4) >>> 0);\r\n this._bits[0] = ((this._bits[0] & 0x00ff00ff) << 8) | (((this._bits[0] & 0xff00ff00) >>> 8) >>> 0);\r\n return this._bits[0] * 2.3283064365386963e-10; // / 0x100000000 or / 4294967296\r\n }\r\n\r\n private _hammersley(i: number, n: number) {\r\n return [i / n, this._radicalInverseVdC(i)];\r\n }\r\n\r\n private _hemisphereSampleUniform(u: number, v: number): Vector3 {\r\n const phi = v * 2.0 * Math.PI;\r\n // rejecting samples that are close to tangent plane to avoid z-fighting artifacts\r\n const cosTheta = 1.0 - u * 0.85;\r\n const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta);\r\n return new Vector3(Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta);\r\n }\r\n\r\n private _generateHemisphere(): number[] {\r\n const numSamples = this.samples;\r\n const result = [];\r\n let vector;\r\n\r\n let i = 0;\r\n while (i < numSamples) {\r\n if (numSamples < 16) {\r\n vector = this._hemisphereSampleUniform(Math.random(), Math.random());\r\n } else {\r\n const rand = this._hammersley(i, numSamples);\r\n vector = this._hemisphereSampleUniform(rand[0], rand[1]);\r\n }\r\n\r\n result.push(vector.x, vector.y, vector.z);\r\n i++;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _getDefinesForSSAO() {\r\n let defines = `#define SSAO\\n#define SAMPLES ${this.samples}\\n#define EPSILON ${this.epsilon.toFixed(4)}`;\r\n\r\n if (this.camera?.mode === Camera.ORTHOGRAPHIC_CAMERA) {\r\n defines += `\\n#define ORTHOGRAPHIC_CAMERA`;\r\n }\r\n\r\n return defines;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onerjs/core",
3
- "version": "8.28.4",
3
+ "version": "8.28.5",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",