@zephyr3d/scene 0.9.3 → 0.9.4

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 (129) hide show
  1. package/dist/animation/spring/spring_particle.js +4 -4
  2. package/dist/animation/spring/spring_particle.js.map +1 -1
  3. package/dist/app/engine.js +119 -71
  4. package/dist/app/engine.js.map +1 -1
  5. package/dist/asset/assetmanager.js +296 -244
  6. package/dist/asset/assetmanager.js.map +1 -1
  7. package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
  8. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  9. package/dist/asset/model.js +57 -57
  10. package/dist/asset/model.js.map +1 -1
  11. package/dist/index.d.ts +684 -33
  12. package/dist/index.js +10 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/material/material.js +1 -1
  15. package/dist/material/material.js.map +1 -1
  16. package/dist/material/msdf_text.js +180 -0
  17. package/dist/material/msdf_text.js.map +1 -0
  18. package/dist/material/msdf_text_sprite.js +64 -0
  19. package/dist/material/msdf_text_sprite.js.map +1 -0
  20. package/dist/material/pbrblueprint.js +123 -108
  21. package/dist/material/pbrblueprint.js.map +1 -1
  22. package/dist/material/shader/helper.js +277 -277
  23. package/dist/material/shader/helper.js.map +1 -1
  24. package/dist/material/sprite_sdf.js +106 -0
  25. package/dist/material/sprite_sdf.js.map +1 -0
  26. package/dist/posteffect/ssr.js +1 -0
  27. package/dist/posteffect/ssr.js.map +1 -1
  28. package/dist/render/abuffer_oit.js +1 -0
  29. package/dist/render/abuffer_oit.js.map +1 -1
  30. package/dist/render/cluster_light.js.map +1 -1
  31. package/dist/render/cull_visitor.js +28 -0
  32. package/dist/render/cull_visitor.js.map +1 -1
  33. package/dist/render/drawable.js.map +1 -1
  34. package/dist/render/drawable_mixin.js +1 -0
  35. package/dist/render/drawable_mixin.js.map +1 -1
  36. package/dist/render/fbm_wavegenerator.js +1 -0
  37. package/dist/render/fbm_wavegenerator.js.map +1 -1
  38. package/dist/render/gerstner_wavegenerator.js +1 -0
  39. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  40. package/dist/render/globalbindgroup_allocator.js +1 -0
  41. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  42. package/dist/render/render_queue.js +1 -0
  43. package/dist/render/render_queue.js.map +1 -1
  44. package/dist/scene/basesprite.js +1 -5
  45. package/dist/scene/basesprite.js.map +1 -1
  46. package/dist/scene/batchgroup.js +29 -17
  47. package/dist/scene/batchgroup.js.map +1 -1
  48. package/dist/scene/environment.js +1 -0
  49. package/dist/scene/environment.js.map +1 -1
  50. package/dist/scene/mesh.js +86 -87
  51. package/dist/scene/mesh.js.map +1 -1
  52. package/dist/scene/meshdrawable.js +96 -0
  53. package/dist/scene/meshdrawable.js.map +1 -0
  54. package/dist/scene/msdftext.js +341 -0
  55. package/dist/scene/msdftext.js.map +1 -0
  56. package/dist/scene/msdftextsprite.js +349 -0
  57. package/dist/scene/msdftextsprite.js.map +1 -0
  58. package/dist/scene/particlesys.js +1 -0
  59. package/dist/scene/particlesys.js.map +1 -1
  60. package/dist/scene/scene.js +1 -0
  61. package/dist/scene/scene.js.map +1 -1
  62. package/dist/scene/scene_node.js +234 -228
  63. package/dist/scene/scene_node.js.map +1 -1
  64. package/dist/scene/sdftextsprite.js +322 -0
  65. package/dist/scene/sdftextsprite.js.map +1 -0
  66. package/dist/scene/terrain-cm/grass.js +1 -0
  67. package/dist/scene/terrain-cm/grass.js.map +1 -1
  68. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  69. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  70. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  71. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  72. package/dist/scene/textsprite.js +120 -0
  73. package/dist/scene/textsprite.js.map +1 -0
  74. package/dist/scene/water.js +1 -0
  75. package/dist/scene/water.js.map +1 -1
  76. package/dist/shadow/shader.js +1 -0
  77. package/dist/shadow/shader.js.map +1 -1
  78. package/dist/text/font/font_asset.js +884 -0
  79. package/dist/text/font/font_asset.js.map +1 -0
  80. package/dist/text/font/sfnt_reader.js +43 -0
  81. package/dist/text/font/sfnt_reader.js.map +1 -0
  82. package/dist/text/msdf/generator.js +417 -0
  83. package/dist/text/msdf/generator.js.map +1 -0
  84. package/dist/text/msdf/shape.js +143 -0
  85. package/dist/text/msdf/shape.js.map +1 -0
  86. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  87. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  88. package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
  89. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  90. package/dist/text/runtime/text_layout.js +96 -0
  91. package/dist/text/runtime/text_layout.js.map +1 -0
  92. package/dist/utility/blueprint/material/inputs.js +1275 -1091
  93. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  94. package/dist/utility/blueprint/material/ir.js +16 -1
  95. package/dist/utility/blueprint/material/ir.js.map +1 -1
  96. package/dist/utility/blueprint/material/pbr.js +32 -0
  97. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  98. package/dist/utility/serialization/manager.js +321 -277
  99. package/dist/utility/serialization/manager.js.map +1 -1
  100. package/dist/utility/serialization/scene/animation.js +2 -0
  101. package/dist/utility/serialization/scene/animation.js.map +1 -1
  102. package/dist/utility/serialization/scene/batch.js +2 -0
  103. package/dist/utility/serialization/scene/batch.js.map +1 -1
  104. package/dist/utility/serialization/scene/camera.js +2 -0
  105. package/dist/utility/serialization/scene/camera.js.map +1 -1
  106. package/dist/utility/serialization/scene/light.js +2 -0
  107. package/dist/utility/serialization/scene/light.js.map +1 -1
  108. package/dist/utility/serialization/scene/material.js +1 -0
  109. package/dist/utility/serialization/scene/material.js.map +1 -1
  110. package/dist/utility/serialization/scene/mesh.js +2 -0
  111. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  112. package/dist/utility/serialization/scene/node.js +2 -0
  113. package/dist/utility/serialization/scene/node.js.map +1 -1
  114. package/dist/utility/serialization/scene/particle.js +2 -0
  115. package/dist/utility/serialization/scene/particle.js.map +1 -1
  116. package/dist/utility/serialization/scene/primitive.js +1 -0
  117. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  118. package/dist/utility/serialization/scene/sprite.js +2 -0
  119. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  120. package/dist/utility/serialization/scene/terrain.js +2 -0
  121. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  122. package/dist/utility/serialization/scene/text.js +516 -0
  123. package/dist/utility/serialization/scene/text.js.map +1 -0
  124. package/dist/utility/serialization/scene/water.js +2 -0
  125. package/dist/utility/serialization/scene/water.js.map +1 -1
  126. package/dist/utility/serialization/types.js.map +1 -1
  127. package/dist/values.js +48 -48
  128. package/dist/values.js.map +1 -1
  129. package/package.json +3 -3
@@ -0,0 +1,106 @@
1
+ import { DRef, Vector3, Vector4 } from '@zephyr3d/base';
2
+ import { SpriteMaterial } from './sprite.js';
3
+ import { fetchSampler } from '../utility/misc.js';
4
+
5
+ /**
6
+ * Single-channel signed-distance-field sprite material.
7
+ *
8
+ * @public
9
+ */ class SDFSpriteMaterial extends SpriteMaterial {
10
+ static FEATURE_SPRITE_TEXTURE = this.defineFeature();
11
+ _texture;
12
+ _color;
13
+ _sdfParams;
14
+ constructor(){
15
+ super();
16
+ this._texture = new DRef();
17
+ this._color = new Vector3(1, 1, 1);
18
+ this._sdfParams = new Vector4(8, 1, 1, 0);
19
+ this.blendMode = 'blend';
20
+ }
21
+ get spriteTexture() {
22
+ return this._texture.get();
23
+ }
24
+ set spriteTexture(tex) {
25
+ tex = tex ?? null;
26
+ if (tex !== this._texture.get()) {
27
+ this._texture.set(tex);
28
+ this.useFeature(SDFSpriteMaterial.FEATURE_SPRITE_TEXTURE, !!tex);
29
+ this.uniformChanged();
30
+ }
31
+ }
32
+ get textColor() {
33
+ return this._color;
34
+ }
35
+ set textColor(value) {
36
+ if (!this._color.equalsTo(value)) {
37
+ this._color.set(value);
38
+ this.uniformChanged();
39
+ }
40
+ }
41
+ get sdfDistanceRange() {
42
+ return this._sdfParams.x;
43
+ }
44
+ set sdfDistanceRange(value) {
45
+ if (this._sdfParams.x !== value) {
46
+ this._sdfParams.x = value;
47
+ this.uniformChanged();
48
+ }
49
+ }
50
+ setSDFTextureInfo(distanceRange, width, height) {
51
+ if (this._sdfParams.x !== distanceRange || this._sdfParams.y !== width || this._sdfParams.z !== height) {
52
+ this._sdfParams.setXYZW(distanceRange, width, height, 0);
53
+ this.uniformChanged();
54
+ }
55
+ }
56
+ clone() {
57
+ const other = new SDFSpriteMaterial();
58
+ other.copyFrom(this);
59
+ return other;
60
+ }
61
+ copyFrom(other) {
62
+ super.copyFrom(other);
63
+ this.spriteTexture = other.spriteTexture;
64
+ this.textColor = other.textColor;
65
+ this._sdfParams.set(other._sdfParams);
66
+ }
67
+ internalApplyUniforms(bindGroup, ctx) {
68
+ if (this.needFragmentColor(ctx)) {
69
+ bindGroup.setValue('zTextColor', this._color);
70
+ bindGroup.setValue('zSDFParams', this._sdfParams);
71
+ if (this.spriteTexture) {
72
+ bindGroup.setTexture('zSpriteTexture', this.spriteTexture, fetchSampler('clamp_linear'));
73
+ }
74
+ }
75
+ }
76
+ internalSetupUniforms(scope) {
77
+ const pb = scope.$builder;
78
+ if (pb.shaderKind === 'fragment' && this.needFragmentColor()) {
79
+ scope.zTextColor = pb.vec3().uniform(2);
80
+ scope.zSDFParams = pb.vec4().uniform(2);
81
+ if (this.spriteTexture) {
82
+ scope.zSpriteTexture = pb.tex2D().uniform(2);
83
+ }
84
+ }
85
+ }
86
+ calcFragmentColor(scope) {
87
+ const pb = scope.$builder;
88
+ if (!this.spriteTexture) {
89
+ return pb.vec4(scope.zTextColor, 1);
90
+ }
91
+ scope.$l.sdf = pb.textureSample(scope.zSpriteTexture, scope.$inputs.zVertexUV).r;
92
+ scope.$l.unitRange = pb.div(pb.vec2(scope.zSDFParams.x), pb.max(pb.vec2(scope.zSDFParams.y, scope.zSDFParams.z), pb.vec2(1)));
93
+ scope.$l.screenTexSize = pb.div(pb.vec2(1), pb.max(pb.fwidth(scope.$inputs.zVertexUV), pb.vec2(1e-4)));
94
+ scope.$l.screenPxRange = pb.max(pb.mul(0.5, pb.dot(scope.unitRange, scope.screenTexSize)), 1);
95
+ scope.$l.screenPxDistance = pb.mul(scope.screenPxRange, pb.sub(scope.sdf, 0.5));
96
+ scope.$l.alpha = pb.clamp(pb.add(scope.screenPxDistance, 0.5), 0, 1);
97
+ return pb.vec4(scope.zTextColor, scope.alpha);
98
+ }
99
+ onDispose() {
100
+ super.onDispose();
101
+ this._texture.dispose();
102
+ }
103
+ }
104
+
105
+ export { SDFSpriteMaterial };
106
+ //# sourceMappingURL=sprite_sdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprite_sdf.js","sources":["../../src/material/sprite_sdf.ts"],"sourcesContent":["import type { BindGroup, PBInsideFunctionScope, Texture2D } from '@zephyr3d/device';\r\nimport type { Clonable, Immutable } from '@zephyr3d/base';\r\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render/drawable';\r\nimport { SpriteMaterial } from './sprite';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Single-channel signed-distance-field sprite material.\r\n *\r\n * @public\r\n */\r\nexport class SDFSpriteMaterial extends SpriteMaterial implements Clonable<SDFSpriteMaterial> {\r\n static FEATURE_SPRITE_TEXTURE = this.defineFeature();\r\n protected _texture: DRef<Texture2D>;\r\n protected _color: Vector3;\r\n protected _sdfParams: Vector4;\r\n constructor() {\r\n super();\r\n this._texture = new DRef();\r\n this._color = new Vector3(1, 1, 1);\r\n this._sdfParams = new Vector4(8, 1, 1, 0);\r\n this.blendMode = 'blend';\r\n }\r\n get spriteTexture() {\r\n return this._texture.get();\r\n }\r\n set spriteTexture(tex) {\r\n tex = tex ?? null;\r\n if (tex !== this._texture.get()) {\r\n this._texture.set(tex);\r\n this.useFeature(SDFSpriteMaterial.FEATURE_SPRITE_TEXTURE, !!tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n get textColor(): Immutable<Vector3> {\r\n return this._color;\r\n }\r\n set textColor(value: Immutable<Vector3>) {\r\n if (!this._color.equalsTo(value)) {\r\n this._color.set(value);\r\n this.uniformChanged();\r\n }\r\n }\r\n get sdfDistanceRange() {\r\n return this._sdfParams.x;\r\n }\r\n set sdfDistanceRange(value: number) {\r\n if (this._sdfParams.x !== value) {\r\n this._sdfParams.x = value;\r\n this.uniformChanged();\r\n }\r\n }\r\n setSDFTextureInfo(distanceRange: number, width: number, height: number) {\r\n if (this._sdfParams.x !== distanceRange || this._sdfParams.y !== width || this._sdfParams.z !== height) {\r\n this._sdfParams.setXYZW(distanceRange, width, height, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n clone() {\r\n const other = new SDFSpriteMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.spriteTexture = other.spriteTexture;\r\n this.textColor = other.textColor;\r\n this._sdfParams.set(other._sdfParams);\r\n }\r\n protected internalApplyUniforms(bindGroup: BindGroup, ctx: DrawContext) {\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('zTextColor', this._color);\r\n bindGroup.setValue('zSDFParams', this._sdfParams);\r\n if (this.spriteTexture) {\r\n bindGroup.setTexture('zSpriteTexture', this.spriteTexture, fetchSampler('clamp_linear'));\r\n }\r\n }\r\n }\r\n protected internalSetupUniforms(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment' && this.needFragmentColor()) {\r\n scope.zTextColor = pb.vec3().uniform(2);\r\n scope.zSDFParams = pb.vec4().uniform(2);\r\n if (this.spriteTexture) {\r\n scope.zSpriteTexture = pb.tex2D().uniform(2);\r\n }\r\n }\r\n }\r\n protected calcFragmentColor(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n if (!this.spriteTexture) {\r\n return pb.vec4(scope.zTextColor, 1);\r\n }\r\n scope.$l.sdf = pb.textureSample(scope.zSpriteTexture, scope.$inputs.zVertexUV).r;\r\n scope.$l.unitRange = pb.div(\r\n pb.vec2(scope.zSDFParams.x),\r\n pb.max(pb.vec2(scope.zSDFParams.y, scope.zSDFParams.z), pb.vec2(1))\r\n );\r\n scope.$l.screenTexSize = pb.div(pb.vec2(1), pb.max(pb.fwidth(scope.$inputs.zVertexUV), pb.vec2(1e-4)));\r\n scope.$l.screenPxRange = pb.max(pb.mul(0.5, pb.dot(scope.unitRange, scope.screenTexSize)), 1);\r\n scope.$l.screenPxDistance = pb.mul(scope.screenPxRange, pb.sub(scope.sdf, 0.5));\r\n scope.$l.alpha = pb.clamp(pb.add(scope.screenPxDistance, 0.5), 0, 1);\r\n return pb.vec4(scope.zTextColor, scope.alpha);\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._texture.dispose();\r\n }\r\n}\r\n"],"names":["SDFSpriteMaterial","SpriteMaterial","FEATURE_SPRITE_TEXTURE","defineFeature","_texture","_color","_sdfParams","DRef","Vector3","Vector4","blendMode","spriteTexture","get","tex","set","useFeature","uniformChanged","textColor","value","equalsTo","sdfDistanceRange","x","setSDFTextureInfo","distanceRange","width","height","y","z","setXYZW","clone","other","copyFrom","internalApplyUniforms","bindGroup","ctx","needFragmentColor","setValue","setTexture","fetchSampler","internalSetupUniforms","scope","pb","$builder","shaderKind","zTextColor","vec3","uniform","zSDFParams","vec4","zSpriteTexture","tex2D","calcFragmentColor","$l","sdf","textureSample","$inputs","zVertexUV","r","unitRange","div","vec2","max","screenTexSize","fwidth","screenPxRange","mul","dot","screenPxDistance","sub","alpha","clamp","add","onDispose","dispose"],"mappings":"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"}
@@ -19,6 +19,7 @@ import '../material/pbrsg.js';
19
19
  import '../material/pbrblueprint.js';
20
20
  import '../material/sprite.js';
21
21
  import '../material/sprite_std.js';
22
+ import '../material/msdf_text.js';
22
23
  import '../utility/blueprint/material/texture.js';
23
24
 
24
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, linearSampler);\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight()\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hash = ctx.env!.light.envLight ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hash = `${Number(blur)}:${\r\n ctx.env!.light.envLight ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n program = this._createIntersectProgram(ctx, blur);\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n this.resolve(ctx, inputColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n device.popDeviceStates();\r\n this.combine(\r\n ctx,\r\n inputColorTexture,\r\n pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D,\r\n srgbOutput\r\n );\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(this.sceneColor, this.reflectance, this.roughnessInfo);\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.float(0);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, this.alpha);\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n this.$l.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.reflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.intersectSample.w, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(\r\n this.intersectTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(\r\n this.roughnessTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectIntersectSample.w, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectIntersectSample.xy,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.intersectSample.xy,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectIntersectSample.w\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(\r\n this.intersectSample.xy,\r\n this.indirectRoughnessInfo\r\n );\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.intersectSample.xy, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.intersectSample.w\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n this.$if(pb.greaterThanEqual(this.roughness, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float();\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = ctx.HiZTexture\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitInfo.w, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitInfo.w;\r\n this.color = pb.vec3(this.hitInfo.xy, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.reflectance = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","createBindGroup","bindGroupLayouts","linearSampler","setTexture","SSRRoughnessTexture","setValue","ssrMaxRoughness","Vector4","getDrawingBufferWidth","getDrawingBufferHeight","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hash","env","light","envLight","getHash","_createResolveProgram","bindGroup","nearestSampler","SSRNormalTexture","width","height","Matrix4x4","invert","getProjectionMatrix","viewMatrix","worldMatrix","strength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","setFramebuffer","intersectTex","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","popDeviceStates","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","targetSize","float","outColor","func","vec3","$l","r","div","reflectance","clamp","roughnessValue","rgb","color","sceneColor","sub","$return","screenUV","fragCoord","textureSampleLevel","roughnessInfo","combined","greaterThanEqual","a","$else","resolveSample","equal","linearToGamma","name","initShaderBindings","normalTex","mat4","invViewMatrix","invProjMatrix","envLightStrength","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","x","clipSpacePos","wPos","mat","xyz","w","getPosition","roughness","viewPos","worldNormal","viewVec","normalize","viewNormal","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","mix","reflectSceneColor","alpha","discard","intersectSample","greaterThan","indirectIntersectSample","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","cameraPos","projMatrix","hizTex","depthMipLevels","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
1
+ {"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, linearSampler);\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight()\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hash = ctx.env!.light.envLight ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hash = `${Number(blur)}:${\r\n ctx.env!.light.envLight ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n program = this._createIntersectProgram(ctx, blur);\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n this.resolve(ctx, inputColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n device.popDeviceStates();\r\n this.combine(\r\n ctx,\r\n inputColorTexture,\r\n pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D,\r\n srgbOutput\r\n );\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(this.sceneColor, this.reflectance, this.roughnessInfo);\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.float(0);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, this.alpha);\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n this.$l.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.reflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.intersectSample.w, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(\r\n this.intersectTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(\r\n this.roughnessTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectIntersectSample.w, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectIntersectSample.xy,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.intersectSample.xy,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectIntersectSample.w\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(\r\n this.intersectSample.xy,\r\n this.indirectRoughnessInfo\r\n );\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.intersectSample.xy, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.intersectSample.w\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n this.$if(pb.greaterThanEqual(this.roughness, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float();\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = ctx.HiZTexture\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitInfo.w, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitInfo.w;\r\n this.color = pb.vec3(this.hitInfo.xy, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.reflectance = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","createBindGroup","bindGroupLayouts","linearSampler","setTexture","SSRRoughnessTexture","setValue","ssrMaxRoughness","Vector4","getDrawingBufferWidth","getDrawingBufferHeight","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hash","env","light","envLight","getHash","_createResolveProgram","bindGroup","nearestSampler","SSRNormalTexture","width","height","Matrix4x4","invert","getProjectionMatrix","viewMatrix","worldMatrix","strength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","setFramebuffer","intersectTex","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","popDeviceStates","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","targetSize","float","outColor","func","vec3","$l","r","div","reflectance","clamp","roughnessValue","rgb","color","sceneColor","sub","$return","screenUV","fragCoord","textureSampleLevel","roughnessInfo","combined","greaterThanEqual","a","$else","resolveSample","equal","linearToGamma","name","initShaderBindings","normalTex","mat4","invViewMatrix","invProjMatrix","envLightStrength","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","x","clipSpacePos","wPos","mat","xyz","w","getPosition","roughness","viewPos","worldNormal","viewVec","normalize","viewNormal","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","mix","reflectSceneColor","alpha","discard","intersectSample","greaterThan","indirectIntersectSample","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","cameraPos","projMatrix","hizTex","depthMipLevels","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
@@ -15,6 +15,7 @@ import '../material/pbrsg.js';
15
15
  import '../material/pbrblueprint.js';
16
16
  import '../material/sprite.js';
17
17
  import '../material/sprite_std.js';
18
+ import '../material/msdf_text.js';
18
19
  import '../utility/blueprint/material/texture.js';
19
20
 
20
21
  /**