@zephyr3d/scene 0.9.18 → 0.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/scriptregistry.js +124 -6
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/index.d.ts +270 -7
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +11 -5
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/shader/helper.js +21 -8
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/skin.js +4 -6
- package/dist/material/skin.js.map +1 -1
- package/dist/material/water.js +1 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +177 -29
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +111 -204
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/motionblur.js +3 -0
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +79 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/skinsss.js +10 -10
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssr.js +247 -16
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +121 -19
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +6 -6
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +2 -1
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/envlight.js +6 -3
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/hzb.js +11 -4
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +7 -15
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/renderer.js +4 -3
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +78 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -0
- package/dist/render/rendergraph/executor.js +41 -11
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +495 -201
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js +29 -0
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/shaders/ssr.js +52 -21
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/utility/misc.js +10 -1
- package/dist/utility/misc.js.map +1 -1
- package/package.json +2 -2
package/dist/shaders/ssr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr.js","sources":["../../src/shaders/ssr.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst MAX_FLOAT_VALUE = 3.402823466e38;\r\n\r\n/** @internal */\r\nexport function SSR_calcJitter(scope: PBInsideFunctionScope, viewPos: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_calcJitter', [pb.vec3('viewPos'), pb.float('roughness')], function () {\r\n this.$l.h = pb.fract(pb.mul(this.viewPos, 0.8));\r\n this.h = pb.add(this.h, pb.dot(this.h, pb.add(this.h.yxz, pb.vec3(19.19))));\r\n this.h = pb.fract(pb.mul(pb.add(this.h.xxy, this.h.yxx), this.h.zyx));\r\n this.h = pb.sub(this.h, pb.vec3(0.5));\r\n this.$return(pb.mix(pb.vec3(0), this.h, this.roughness));\r\n });\r\n return scope.SSR_calcJitter(viewPos, roughness);\r\n}\r\n\r\n/** @internal */\r\n// source: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/gpu/shaders/material/gpu_shader_material_fresnel.glsl\r\nexport function SSR_fresnel(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n normal: PBShaderExp,\r\n eta: PBShaderExp | number = 1.5\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_fresnel', [pb.vec3('viewVec'), pb.vec3('viewNormal'), pb.float('eta')], function () {\r\n this.$l.cos = pb.dot(this.viewVec, this.viewNormal);\r\n this.$l.c = pb.abs(this.cos);\r\n this.$l.g = pb.add(pb.sub(pb.mul(this.eta, this.eta), 1), pb.mul(this.c, this.c));\r\n this.$l.r = pb.float();\r\n this.$if(pb.greaterThan(this.g, 0), function () {\r\n this.g = pb.sqrt(this.g);\r\n this.$l.A = pb.div(pb.sub(this.g, this.c), pb.add(this.g, this.c));\r\n this.$l.B = pb.div(\r\n pb.sub(pb.mul(this.c, pb.add(this.g, this.c)), 1),\r\n pb.add(pb.mul(this.c, pb.sub(this.g, this.c)), 1)\r\n );\r\n this.r = pb.mul(this.A, this.A, 0.5, pb.add(pb.mul(this.B, this.B), 1));\r\n }).$else(function () {\r\n this.r = 1;\r\n });\r\n this.$return(pb.min(1, pb.mul(this.r, 5)));\r\n });\r\n return scope.SSR_fresnel(viewVec, normal, eta);\r\n}\r\n\r\n/** @internal */\r\nexport function SSR_dither(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.getDevice().type === 'webgl') {\r\n return pb.float(0);\r\n }\r\n if (!pb.getGlobalScope().Z_dither) {\r\n pb.getGlobalScope().Z_dither = [\r\n pb.float(0),\r\n pb.float(0.5),\r\n pb.float(0.125),\r\n pb.float(0.625),\r\n pb.float(0.75),\r\n pb.float(0.25),\r\n pb.float(0.875),\r\n pb.float(0.375),\r\n pb.float(0.187),\r\n pb.float(0.687),\r\n pb.float(0.0625),\r\n pb.float(0.562),\r\n pb.float(0.937),\r\n pb.float(0.437),\r\n pb.float(0.812),\r\n pb.float(0.312)\r\n ];\r\n pb.func('SSR_dither', [pb.vec2('uv')], function () {\r\n this.$l.ditherUV = pb.mod(this.uv, pb.vec2(4));\r\n this.$return(this.Z_dither.at(pb.uint(pb.add(pb.mul(this.ditherUV.x, 4), this.ditherUV.y))));\r\n });\r\n return scope.SSR_dither(uv);\r\n }\r\n}\r\n/** @internal */\r\nfunction invProjectPosition(scope: PBInsideFunctionScope, pos: PBShaderExp, mat: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n return scope.invProjectPosition(pos, mat);\r\n}\r\n\r\n/** @internal */\r\nfunction validateHit(\r\n scope: PBInsideFunctionScope,\r\n hit2D: PBShaderExp,\r\n hit3D: Nullable<PBShaderExp>,\r\n surfaceZ: PBShaderExp,\r\n thickness: Nullable<PBShaderExp>,\r\n uv: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n textureSize: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = hit3D ? 'SSR_validateHit_HiZ' : 'SSR_validateHit';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('hit2d'),\r\n ...(hit3D ? [pb.vec3('hit3d')] : []),\r\n ...(hit3D ? [pb.float('thickness')] : []),\r\n pb.float('surfaceZ'),\r\n pb.vec2('uv'),\r\n pb.vec3('viewSpaceRayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$if(\r\n pb.or(pb.any(pb.lessThan(this.hit2d, pb.vec2(0))), pb.any(pb.greaterThan(this.hit2d, pb.vec2(1)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n this.$l.manhattanDist = pb.abs(pb.sub(this.hit2d, this.uv));\r\n this.$if(\r\n pb.all(pb.lessThan(this.manhattanDist, pb.vec2(pb.div(pb.vec2(2), this.textureSize.xy)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n if (normalTexture) {\r\n this.$l.hitNormalWS = pb.sub(\r\n pb.mul(pb.textureSampleLevel(normalTexture, this.hit2d, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.hitNormalVS = pb.mul(this.viewMatrix, pb.vec4(this.hitNormalWS, 0)).xyz;\r\n this.$if(pb.greaterThan(pb.dot(this.hitNormalVS, this.viewSpaceRayDirection), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n }\r\n this.$l.viewSpaceSurface = invProjectPosition(\r\n this,\r\n pb.vec3(this.hit2d, this.surfaceZ),\r\n this.invProjMatrix\r\n );\r\n this.$l.fov = pb.mul(pb.vec2(pb.div(this.textureSize.y, this.textureSize.x), 1), 0.05);\r\n this.$l.border = pb.mul(\r\n pb.smoothStep(pb.vec2(0), this.fov, this.hit2d),\r\n pb.sub(pb.vec2(1), pb.smoothStep(pb.sub(pb.vec2(1), this.fov), pb.vec2(1), this.hit2d))\r\n );\r\n this.$l.vignette = pb.mul(this.border.x, this.border.y);\r\n if (this.hit3d) {\r\n this.$l.distance = pb.distance(this.viewSpaceSurface, this.hit3d);\r\n this.$l.confidence = pb.sub(1, pb.smoothStep(0, this.thickness, this.distance));\r\n this.$return(pb.mul(this.vignette, this.confidence, this.confidence));\r\n } else {\r\n this.$return(this.vignette);\r\n }\r\n }\r\n );\r\n return hit3D\r\n ? scope[funcName](hit2D, hit3D, thickness, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize)\r\n : scope[funcName](hit2D, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize);\r\n}\r\n\r\nexport function screenSpaceRayTracing_Linear2D(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxDistance: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n stride: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n linearDepthTex: PBShaderExp,\r\n normalTexture?: PBShaderExp,\r\n useBackfaceDepth?: boolean\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('distanceSquared', [pb.vec2('a'), pb.vec2('b')], function () {\r\n this.$l.x = pb.sub(this.a, this.b);\r\n this.$return(pb.dot(this.x, this.x));\r\n });\r\n pb.func(\r\n 'rayIntersectDepth',\r\n [pb.float('zA'), pb.float('zB'), pb.float('thickness'), pb.vec2('uv'), pb.float('cameraFar')],\r\n function () {\r\n let thickness = this.thickness;\r\n if (useBackfaceDepth) {\r\n this.$l.sceneZ = ShaderHelper.sampleLinearDepthWithBackface(this, linearDepthTex, this.uv, 0);\r\n this.$l.sceneZMax01 = this.sceneZ.x;\r\n thickness = pb.max(this.thickness, pb.mul(pb.sub(this.sceneZ.y, this.sceneZ.x), this.cameraFar));\r\n } else {\r\n this.$l.sceneZMax01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.uv, 0);\r\n }\r\n this.sceneZMax = pb.neg(pb.mul(this.sceneZMax01, this.cameraFar));\r\n this.$return(\r\n pb.and(\r\n pb.lessThan(this.sceneZMax01, 1),\r\n pb.greaterThanEqual(this.zA, pb.sub(this.sceneZMax, thickness)),\r\n pb.lessThanEqual(this.zB, this.sceneZMax)\r\n )\r\n );\r\n }\r\n );\r\n pb.func(\r\n 'traceRayLinear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.mat4('projMatrix'),\r\n pb.vec4('textureSize'),\r\n pb.vec3('hit2D').out(),\r\n pb.vec3('hit3D').out(),\r\n pb.vec2('origin').out(),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.rayLen = this.$choice(\r\n pb.greaterThan(\r\n pb.add(this.rayOrigin.z, pb.mul(this.rayDirection.z, this.maxDistance)),\r\n pb.neg(this.cameraNearFar.x)\r\n ),\r\n pb.div(pb.sub(pb.neg(this.cameraNearFar.x), this.rayOrigin.z), this.rayDirection.z),\r\n this.maxDistance\r\n );\r\n this.$l.rayEnd = pb.add(this.rayOrigin, pb.mul(this.rayDirection, this.rayLen));\r\n this.$l.zMin = pb.min(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.zMax = pb.max(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.rayOriginH = pb.mul(this.projMatrix, pb.vec4(this.rayOrigin, 1));\r\n this.$l.rayEndH = pb.mul(this.projMatrix, pb.vec4(this.rayEnd, 1));\r\n this.$l.k0 = pb.div(1, this.rayOriginH.w);\r\n this.$l.k1 = pb.div(1, this.rayEndH.w);\r\n this.$l.Q0 = pb.mul(this.rayOrigin, this.k0);\r\n this.$l.Q1 = pb.mul(this.rayEnd, this.k1);\r\n this.$l.rayOriginNDC = pb.mul(this.rayOriginH, this.k0);\r\n this.$l.rayEndNDC = pb.mul(this.rayEndH, this.k1);\r\n this.origin = pb.add(pb.mul(this.rayOriginNDC.xy, 0.5), pb.vec2(0.5));\r\n this.$l.P0 = pb.mul(this.origin, this.textureSize.zw);\r\n this.$l.P1 = pb.mul(pb.add(pb.mul(this.rayEndNDC.xy, 0.5), pb.vec2(0.5)), this.textureSize.zw);\r\n this.$l.xMin = 0.5;\r\n this.$l.xMax = pb.sub(this.textureSize.z, 0.5);\r\n this.$l.yMin = 0.5;\r\n this.$l.yMax = pb.sub(this.textureSize.w, 0.5);\r\n this.$l.t = pb.float();\r\n this.$if(pb.or(pb.greaterThan(this.P1.y, this.yMax), pb.lessThan(this.P1.y, this.yMin)), function () {\r\n this.t = pb.div(\r\n pb.sub(this.P1.y, this.$choice(pb.greaterThan(this.P1.y, this.yMax), this.yMax, this.yMin)),\r\n pb.sub(this.P1.y, this.P0.y)\r\n );\r\n });\r\n this.$if(pb.or(pb.greaterThan(this.P1.x, this.xMax), pb.lessThan(this.P1.x, this.xMin)), function () {\r\n this.t2 = pb.div(\r\n pb.sub(this.P1.x, this.$choice(pb.greaterThan(this.P1.x, this.xMax), this.xMax, this.xMin)),\r\n pb.sub(this.P1.x, this.P0.x)\r\n );\r\n this.t = pb.max(this.t, this.t2);\r\n });\r\n this.P1 = pb.mix(this.P1, this.P0, this.t);\r\n this.k1 = pb.mix(this.k1, this.k0, this.t);\r\n this.Q1 = pb.mix(this.Q1, this.Q0, this.t);\r\n this.P1 = this.$choice(\r\n pb.lessThan(this.distanceSquared(this.P0, this.P1), 0.0001),\r\n pb.add(this.P1, pb.vec2(0.01)),\r\n this.P1\r\n );\r\n this.$l.delta = pb.sub(this.P1, this.P0);\r\n this.$l.permute = false;\r\n this.$if(pb.lessThan(pb.abs(this.delta.x), pb.abs(this.delta.y)), function () {\r\n this.permute = true;\r\n this.delta = this.delta.yx;\r\n this.P0 = this.P0.yx;\r\n this.P1 = this.P1.yx;\r\n });\r\n this.$l.stepDir = pb.sign(this.delta.x);\r\n this.$l.invdx = pb.div(this.stepDir, this.delta.x);\r\n this.$l.dQ = pb.mul(pb.sub(this.Q1, this.Q0), this.invdx);\r\n this.$l.dK = pb.mul(pb.sub(this.k1, this.k0), this.invdx);\r\n this.$l.dP = pb.vec2(this.stepDir, pb.mul(this.delta.y, this.invdx));\r\n //this.$l.strideScalar = pb.sub(1, pb.min(1, pb.div(pb.neg(this.rayOrigin.z), this.strideZCutoff)));\r\n //this.$l.pixelStride = pb.add(1, pb.mul(this.strideScalar, this.stride));\r\n this.$l.pixelStride = this.stride;\r\n this.dP = pb.mul(this.dP, this.pixelStride);\r\n this.dQ = pb.mul(this.dQ, this.pixelStride);\r\n this.dK = pb.mul(this.dK, this.pixelStride);\r\n this.$l.jitter = pb.float(1); //dither(this, this.P0);\r\n this.P0 = pb.add(this.P0, pb.mul(this.dP, this.jitter));\r\n this.Q0 = pb.add(this.Q0, pb.mul(this.dQ, this.jitter));\r\n this.k0 = pb.add(this.k0, pb.mul(this.dK, this.jitter));\r\n this.$l.prevZMaxEstimate = this.rayOrigin.z;\r\n this.$l.zA = this.prevZMaxEstimate;\r\n this.$l.zB = this.prevZMaxEstimate;\r\n this.$l.pqk = pb.vec4(this.P0, this.Q0.z, this.k0);\r\n this.$l.dpqk = pb.vec4(this.dP, this.dQ.z, this.dK);\r\n this.$l.invRenderTargetSize = pb.div(pb.vec2(1), this.textureSize.zw);\r\n this.$l.intersected = false;\r\n this.$l.hitUV = pb.vec2();\r\n this.$l.hitZ = pb.float();\r\n this.numIterations = 0;\r\n this.skippedIterations = pb.min(this.maxIterations, 1);\r\n this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ? 1000 : this.maxIterations, function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.maxIterations), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$if(pb.and(this.intersected, pb.greaterThanEqual(this.i, this.skippedIterations)), function () {\r\n this.$break();\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n this.pqk = pb.add(this.pqk, this.dpqk);\r\n this.zA = this.prevZMaxEstimate;\r\n this.zB = pb.div(\r\n pb.add(pb.mul(this.dpqk.z, 0.5), this.pqk.z),\r\n pb.add(pb.mul(this.dpqk.w, 0.5), this.pqk.w)\r\n );\r\n this.zB = pb.clamp(this.zB, this.zMin, this.zMax);\r\n this.prevZMaxEstimate = this.zB;\r\n this.hitZ = this.zB;\r\n this.$if(pb.greaterThan(this.zB, this.zA), function () {\r\n this.$l.t = this.zB;\r\n this.zB = this.zA;\r\n this.zA = this.t;\r\n });\r\n this.hitUV = this.$choice(this.permute, this.pqk.yx, this.pqk.xy);\r\n this.hitUV = pb.mul(this.hitUV, this.invRenderTargetSize);\r\n this.intersected = this.rayIntersectDepth(\r\n this.zA,\r\n this.zB,\r\n this.thickness,\r\n this.hitUV,\r\n this.cameraNearFar.y\r\n );\r\n });\r\n this.hit2D = pb.vec3(this.hitUV, this.hitZ);\r\n this.Q0 = pb.vec3(pb.add(this.Q0.xy, pb.mul(this.dQ.xy, this.numIterations)), this.pqk.z);\r\n this.hit3D = pb.div(this.Q0, this.pqk.w);\r\n this.$return(this.intersected);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_Linear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$l.hit2D = pb.vec3();\r\n this.$l.hit3D = pb.vec3();\r\n this.$l.origin = pb.vec2();\r\n this.$l.numIterations = pb.float();\r\n this.$l.intersected = this.traceRayLinear2D(\r\n this.rayOrigin,\r\n this.rayDirection,\r\n this.stride,\r\n this.maxDistance,\r\n this.maxIterations,\r\n this.thickness,\r\n this.cameraNearFar,\r\n this.projMatrix,\r\n this.textureSize,\r\n this.hit2D,\r\n this.hit3D,\r\n this.origin,\r\n this.numIterations\r\n );\r\n this.$if(pb.not(this.intersected), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.hit2D.xy, 0);\r\n this.$if(pb.equal(this.surfaceZ01, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ = ShaderHelper.linearDepthToNonLinear(\r\n this,\r\n pb.mul(this.surfaceZ01, this.cameraNearFar.y),\r\n this.cameraNearFar\r\n );\r\n this.$l.confidence = validateHit(\r\n this,\r\n this.hit2D.xy,\r\n null,\r\n this.surfaceZ,\r\n null,\r\n this.origin,\r\n this.rayDirection,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit2D.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.origin.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit2D.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_Linear2D(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n stride,\r\n maxDistance,\r\n maxIterations,\r\n thickness,\r\n cameraNearFar,\r\n textureSize\r\n );\r\n}\r\n\r\nexport function screenSpaceRayTracing_HiZ(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxMipLevel: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n HiZTexture: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('getMipResolution', [pb.int('mipLevel')], function () {\r\n this.$return(pb.vec2(pb.textureDimensions(HiZTexture, this.mipLevel)));\r\n });\r\n pb.func('SSR_loadDepth', [pb.vec2('uv'), pb.float('level')], function () {\r\n this.$return(pb.textureSampleLevel(HiZTexture, this.uv, this.level).r);\r\n });\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n pb.func('projectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.projected = pb.mul(this.mat, pb.vec4(this.p, 1));\r\n this.projected = pb.div(this.projected, this.projected.w);\r\n this.projected = pb.add(pb.mul(this.projected, 0.5), pb.vec4(0.5));\r\n this.$return(this.projected.xyz);\r\n });\r\n pb.func(\r\n 'projectDirection',\r\n [pb.vec3('p'), pb.vec3('d'), pb.vec3('screenSpacePos'), pb.mat4('mat')],\r\n function () {\r\n this.$return(pb.sub(this.projectPosition(pb.add(this.p, this.d), this.mat), this.screenSpacePos));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_initialAdvanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipResolution'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.vec3('position').out(),\r\n pb.float('currentT').out()\r\n ],\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.origin.xy);\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.t = pb.mul(pb.sub(this.xyPlane, this.origin.xy), this.invDirection.xy);\r\n this.currentT = pb.min(this.t.x, this.t.y);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_advanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipPosition'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.float('surfaceZ'),\r\n pb.vec3('position').inout(),\r\n pb.float('currentT').inout()\r\n ],\r\n function () {\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.boundaryPlanes = pb.vec3(this.xyPlane, this.surfaceZ);\r\n this.$l.t = pb.mul(pb.sub(this.boundaryPlanes, this.origin), this.invDirection);\r\n this.t.z = this.$choice(pb.greaterThan(this.direction.z, 0), this.t.z, MAX_FLOAT_VALUE);\r\n this.$l.tMin = pb.min(pb.min(this.t.x, this.t.y), this.t.z);\r\n this.$l.aboveSurface = pb.greaterThan(this.surfaceZ, this.position.z);\r\n this.$l.skippedTile = pb.and(\r\n pb.notEqual(pb.floatBitsToUint(this.tMin), pb.floatBitsToUint(this.t.z)),\r\n this.aboveSurface\r\n );\r\n this.currentT = this.$choice(this.aboveSurface, this.tMin, this.currentT);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n this.$return(this.skippedTile);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_RaymarchHiZ',\r\n [\r\n pb.vec3('screenSpacePos'),\r\n pb.vec3('screenSpaceDirection'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec2('screenSize'),\r\n pb.int('mostDetailMip'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations'),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.invDirection = this.$choice(\r\n pb.all(pb.compNotEqual(this.screenSpaceDirection, pb.vec3(0))),\r\n pb.div(pb.vec3(1), this.screenSpaceDirection),\r\n pb.vec3(MAX_FLOAT_VALUE)\r\n );\r\n this.$l.currentMip = this.mostDetailMip;\r\n this.$l.currentMipResolution = this.getMipResolution(this.currentMip);\r\n this.$l.invCurrentMipResolution = pb.div(pb.vec2(1), this.currentMipResolution);\r\n this.$l.uvOffset = pb.div(pb.mul(0.005, pb.exp2(pb.float(this.mostDetailMip))), this.screenSize);\r\n this.uvOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.neg(this.uvOffset.x), this.uvOffset.x),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.neg(this.uvOffset.y), this.uvOffset.y)\r\n );\r\n this.$l.floorOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.float(0), pb.float(1)),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.float(0), pb.float(1))\r\n );\r\n this.$l.currentT = pb.float();\r\n this.$l.position = pb.vec3();\r\n this.SSR_initialAdvanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipResolution,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.position,\r\n this.currentT\r\n );\r\n this.numIterations = pb.float(0);\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.numIterations, this.maxIterations),\r\n pb.greaterThanEqual(this.currentMip, this.mostDetailMip)\r\n ),\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.position.xy);\r\n this.$l.surfaceZ = pb.textureLoad(HiZTexture, pb.ivec2(this.currentMipPosition), this.currentMip).r;\r\n this.$l.skippedTile = this.SSR_advanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipPosition,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.surfaceZ,\r\n this.position,\r\n this.currentT\r\n );\r\n this.$l.nextMipIsOutOfRange = pb.and(\r\n this.skippedTile,\r\n pb.greaterThanEqual(this.currentMip, this.maxMipLevel)\r\n );\r\n this.$if(pb.not(this.nextMipIsOutOfRange), function () {\r\n this.currentMip = pb.add(this.currentMip, this.$choice(this.skippedTile, pb.int(1), pb.int(-1)));\r\n this.currentMipResolution = pb.mul(\r\n this.currentMipResolution,\r\n this.$choice(this.skippedTile, 0.5, 2)\r\n );\r\n this.invCurrentMipResolution = pb.mul(\r\n this.invCurrentMipResolution,\r\n this.$choice(this.skippedTile, 2, 0.5)\r\n );\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n }\r\n );\r\n this.$l.validHit = this.$choice(\r\n pb.lessThanEqual(this.numIterations, this.maxIterations),\r\n pb.float(1),\r\n pb.float(0)\r\n );\r\n this.$return(pb.vec4(this.position, this.validHit));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_HiZ',\r\n [\r\n pb.vec3('viewPos'),\r\n pb.vec3('traceRay'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec2('cameraNearFar'),\r\n pb.float('thickness'),\r\n pb.vec4('textureSize'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations')\r\n ],\r\n function () {\r\n this.$if(pb.greaterThan(this.traceRay.z, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.originH = pb.mul(this.projMatrix, pb.vec4(this.viewPos, 1));\r\n this.$l.originCS = pb.div(this.originH.xyz, this.originH.w);\r\n this.$l.originTS = pb.add(pb.mul(this.originCS, 0.5), pb.vec3(0.5));\r\n this.$l.directionTS = this.projectDirection(\r\n this.viewPos,\r\n this.traceRay,\r\n this.originTS,\r\n this.projMatrix\r\n );\r\n this.$l.mostDetailMip = pb.int(0);\r\n this.$l.numIterations = pb.float();\r\n this.$l.hit = this.SSR_RaymarchHiZ(\r\n this.originTS,\r\n this.directionTS,\r\n this.cameraNearFar,\r\n this.textureSize.zw,\r\n this.mostDetailMip,\r\n this.maxMipLevel,\r\n this.maxIterations,\r\n this.numIterations\r\n );\r\n this.$l.confidence = pb.float(0);\r\n this.$if(pb.notEqual(this.hit.w, 0), function () {\r\n this.$l.surfaceZ = pb.textureSampleLevel(HiZTexture, this.hit.xy, 0).r;\r\n this.$if(pb.equal(this.surfaceZ, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.hit3D = invProjectPosition(this, this.hit.xyz, this.invProjMatrix);\r\n this.confidence = validateHit(\r\n this,\r\n this.hit.xy,\r\n this.hit3D,\r\n this.surfaceZ,\r\n this.thickness,\r\n this.originTS.xy,\r\n this.traceRay,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n });\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n this.$l.viewAttenuation = pb.sub(1, pb.smoothStep(-0.5, 0, this.traceRay.z));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation, this.viewAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.originTS.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_HiZ(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n cameraNearFar,\r\n thickness,\r\n textureSize,\r\n pb.sub(maxMipLevel, 1),\r\n maxIterations\r\n ) as PBShaderExp;\r\n}\r\n\r\n/*\r\nfloat2 cell(float2 ray, float2 cell_count, uint camera) {\r\n\treturn floor(ray.xy * cell_count);\r\n}\r\n\r\nfloat2 cell_count(float level) {\r\n\treturn input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));\r\n}\r\n\r\nfloat3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {\r\n\tfloat2 cell_size = 1.0 / cell_count;\r\n\tfloat2 planes = cell_id/cell_count + cell_size * cross_step;\r\n\r\n\tfloat2 solutions = (planes - pos)/dir.xy;\r\n\tfloat3 intersection_pos = pos + dir * min(solutions.x, solutions.y);\r\n\r\n\tintersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);\r\n\r\n\treturn intersection_pos;\r\n}\r\n\r\nbool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {\r\n\treturn (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;\r\n}\r\n\r\nfloat minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {\r\n\treturn input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;\r\n}\r\n\r\nfloat3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {\r\n\tfloat level = HIZ_START_LEVEL;\r\n\tfloat3 v_z = v/v.z;\r\n\tfloat2 hi_z_size = cell_count(level);\r\n\tfloat3 ray = p;\r\n\r\n\tfloat2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);\r\n\tfloat2 cross_offset = cross_step * 0.00001;\r\n\tcross_step = saturate(cross_step);\r\n\r\n\tfloat2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);\r\n\tray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);\r\n\r\n\titerations = 0;\r\n\twhile(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {\r\n\t\t// get the cell number of the current ray\r\n\t\tfloat2 current_cell_count = cell_count(level);\r\n\t\tfloat2 old_cell_id = cell(ray.xy, current_cell_count, camera);\r\n\r\n\t\t// get the minimum depth plane in which the current ray resides\r\n\t\tfloat min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);\r\n\r\n\t\t// intersect only if ray depth is below the minimum depth plane\r\n\t\tfloat3 tmp_ray = ray;\r\n\t\tif(v.z > 0) {\r\n\t\t\tfloat min_minus_ray = min_z - ray.z;\r\n\t\t\ttmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;\r\n\t\t\tfloat2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);\r\n\t\t\tif(crossed_cell_boundary(old_cell_id, new_cell_id)) {\r\n\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t\t}else{\r\n\t\t\t\tif(level == 1 && abs(min_minus_ray) > 0.0001) {\r\n\t\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\t\tlevel = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if(ray.z < min_z) {\r\n\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t}\r\n\r\n\t\tray.xyz = tmp_ray.xyz;\r\n\t\t--level;\r\n\r\n\t\t++iterations;\r\n\t}\r\n\treturn ray;\r\n}\r\n*/\r\n"],"names":["MAX_FLOAT_VALUE","SSR_calcJitter","scope","viewPos","roughness","pb","$builder","func","vec3","float","$l","h","fract","mul","add","dot","yxz","xxy","yxx","zyx","sub","$return","mix","invProjectPosition","pos","mat","mat4","c","p","u","vec4","div","w","xyz","validateHit","hit2D","hit3D","surfaceZ","thickness","uv","traceRay","viewMatrix","invProjMatrix","textureSize","normalTexture","funcName","vec2","$if","or","any","lessThan","hit2d","greaterThan","manhattanDist","abs","all","xy","hitNormalWS","textureSampleLevel","rgb","hitNormalVS","viewSpaceRayDirection","viewSpaceSurface","fov","y","x","border","smoothStep","vignette","hit3d","distance","confidence","screenSpaceRayTracing_Linear2D","projMatrix","cameraNearFar","maxDistance","maxIterations","stride","linearDepthTex","useBackfaceDepth","a","b","sceneZ","ShaderHelper","sampleLinearDepthWithBackface","sceneZMax01","max","cameraFar","sampleLinearDepth","sceneZMax","neg","and","greaterThanEqual","zA","lessThanEqual","zB","out","rayLen","$choice","rayOrigin","z","rayDirection","rayEnd","zMin","min","zMax","rayOriginH","rayEndH","k0","k1","Q0","Q1","rayOriginNDC","rayEndNDC","origin","P0","zw","P1","xMin","xMax","yMin","yMax","t","t2","distanceSquared","delta","permute","yx","stepDir","sign","invdx","dQ","dK","dP","pixelStride","jitter","prevZMaxEstimate","pqk","dpqk","invRenderTargetSize","intersected","hitUV","hitZ","numIterations","skippedIterations","$for","getDevice","type","i","$break","clamp","rayIntersectDepth","traceRayLinear2D","not","surfaceZ01","equal","linearDepthToNonLinear","iterationAttenuation","hitPixel","startPixel","hitDistance","length","SSR_Linear2D","screenSpaceRayTracing_HiZ","maxMipLevel","HiZTexture","int","textureDimensions","mipLevel","level","r","projected","projectPosition","d","screenSpacePos","currentMipPosition","currentMipResolution","xyPlane","floor","floorOffset","invCurrentMipResolution","uvOffset","invDirection","currentT","position","direction","inout","boundaryPlanes","tMin","aboveSurface","skippedTile","notEqual","floatBitsToUint","compNotEqual","screenSpaceDirection","currentMip","mostDetailMip","getMipResolution","exp2","screenSize","SSR_initialAdvanceRay","$while","textureLoad","ivec2","SSR_advanceRay","nextMipIsOutOfRange","validHit","originH","originCS","originTS","directionTS","projectDirection","hit","SSR_RaymarchHiZ","viewAttenuation","SSR_HiZ"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ssr.js","sources":["../../src/shaders/ssr.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst MAX_FLOAT_VALUE = 3.402823466e38;\r\n\r\n/** @internal */\r\nexport function SSR_calcJitter(scope: PBInsideFunctionScope, viewPos: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_calcJitter', [pb.vec3('viewPos'), pb.float('roughness')], function () {\r\n this.$l.h = pb.fract(pb.mul(this.viewPos, 0.8));\r\n this.h = pb.add(this.h, pb.dot(this.h, pb.add(this.h.yxz, pb.vec3(19.19))));\r\n this.h = pb.fract(pb.mul(pb.add(this.h.xxy, this.h.yxx), this.h.zyx));\r\n this.h = pb.sub(this.h, pb.vec3(0.5));\r\n this.$return(pb.mix(pb.vec3(0), this.h, this.roughness));\r\n });\r\n return scope.SSR_calcJitter(viewPos, roughness);\r\n}\r\n\r\n/** @internal */\r\n// source: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/gpu/shaders/material/gpu_shader_material_fresnel.glsl\r\nexport function SSR_fresnel(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n normal: PBShaderExp,\r\n eta: PBShaderExp | number = 1.5\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_fresnel', [pb.vec3('viewVec'), pb.vec3('viewNormal'), pb.float('eta')], function () {\r\n this.$l.cos = pb.dot(this.viewVec, this.viewNormal);\r\n this.$l.c = pb.abs(this.cos);\r\n this.$l.g = pb.add(pb.sub(pb.mul(this.eta, this.eta), 1), pb.mul(this.c, this.c));\r\n this.$l.r = pb.float();\r\n this.$if(pb.greaterThan(this.g, 0), function () {\r\n this.g = pb.sqrt(this.g);\r\n this.$l.A = pb.div(pb.sub(this.g, this.c), pb.add(this.g, this.c));\r\n this.$l.B = pb.div(\r\n pb.sub(pb.mul(this.c, pb.add(this.g, this.c)), 1),\r\n pb.add(pb.mul(this.c, pb.sub(this.g, this.c)), 1)\r\n );\r\n this.r = pb.mul(this.A, this.A, 0.5, pb.add(pb.mul(this.B, this.B), 1));\r\n }).$else(function () {\r\n this.r = 1;\r\n });\r\n this.$return(pb.min(1, pb.mul(this.r, 5)));\r\n });\r\n return scope.SSR_fresnel(viewVec, normal, eta);\r\n}\r\n\r\n/** @internal */\r\nexport function SSR_dither(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.getDevice().type === 'webgl') {\r\n return pb.float(0);\r\n }\r\n if (!pb.getGlobalScope().Z_dither) {\r\n pb.getGlobalScope().Z_dither = [\r\n pb.float(0),\r\n pb.float(0.5),\r\n pb.float(0.125),\r\n pb.float(0.625),\r\n pb.float(0.75),\r\n pb.float(0.25),\r\n pb.float(0.875),\r\n pb.float(0.375),\r\n pb.float(0.187),\r\n pb.float(0.687),\r\n pb.float(0.0625),\r\n pb.float(0.562),\r\n pb.float(0.937),\r\n pb.float(0.437),\r\n pb.float(0.812),\r\n pb.float(0.312)\r\n ];\r\n pb.func('SSR_dither', [pb.vec2('uv')], function () {\r\n this.$l.ditherUV = pb.mod(this.uv, pb.vec2(4));\r\n this.$return(this.Z_dither.at(pb.uint(pb.add(pb.mul(this.ditherUV.x, 4), this.ditherUV.y))));\r\n });\r\n return scope.SSR_dither(uv);\r\n }\r\n}\r\n/** @internal */\r\nfunction invProjectPosition(scope: PBInsideFunctionScope, pos: PBShaderExp, mat: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n return scope.invProjectPosition(pos, mat);\r\n}\r\n\r\n/** @internal */\r\nfunction validateHit(\r\n scope: PBInsideFunctionScope,\r\n hit2D: PBShaderExp,\r\n hit3D: Nullable<PBShaderExp>,\r\n surfaceZ: PBShaderExp,\r\n thickness: Nullable<PBShaderExp>,\r\n uv: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n textureSize: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = hit3D ? 'SSR_validateHit_HiZ' : 'SSR_validateHit';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('hit2d'),\r\n ...(hit3D ? [pb.vec3('hit3d')] : []),\r\n ...(hit3D ? [pb.float('thickness')] : []),\r\n pb.float('surfaceZ'),\r\n pb.vec2('uv'),\r\n pb.vec3('viewSpaceRayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$if(\r\n pb.or(pb.any(pb.lessThan(this.hit2d, pb.vec2(0))), pb.any(pb.greaterThan(this.hit2d, pb.vec2(1)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n this.$l.manhattanDist = pb.abs(pb.sub(this.hit2d, this.uv));\r\n this.$if(\r\n pb.all(pb.lessThan(this.manhattanDist, pb.vec2(pb.div(pb.vec2(2), this.textureSize.xy)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n if (normalTexture) {\r\n this.$l.hitNormalWS = pb.sub(\r\n pb.mul(pb.textureSampleLevel(normalTexture, this.hit2d, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.hitNormalVS = pb.mul(this.viewMatrix, pb.vec4(this.hitNormalWS, 0)).xyz;\r\n this.$if(pb.greaterThan(pb.dot(this.hitNormalVS, this.viewSpaceRayDirection), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n }\r\n this.$l.viewSpaceSurface = invProjectPosition(\r\n this,\r\n pb.vec3(this.hit2d, this.surfaceZ),\r\n this.invProjMatrix\r\n );\r\n this.$l.fov = pb.mul(pb.vec2(pb.div(this.textureSize.y, this.textureSize.x), 1), 0.05);\r\n this.$l.border = pb.mul(\r\n pb.smoothStep(pb.vec2(0), this.fov, this.hit2d),\r\n pb.sub(pb.vec2(1), pb.smoothStep(pb.sub(pb.vec2(1), this.fov), pb.vec2(1), this.hit2d))\r\n );\r\n this.$l.vignette = pb.mul(this.border.x, this.border.y);\r\n if (this.hit3d) {\r\n this.$l.distance = pb.distance(this.viewSpaceSurface, this.hit3d);\r\n this.$l.confidence = pb.sub(1, pb.smoothStep(0, this.thickness, this.distance));\r\n this.$return(pb.mul(this.vignette, this.confidence, this.confidence));\r\n } else {\r\n this.$return(this.vignette);\r\n }\r\n }\r\n );\r\n return hit3D\r\n ? scope[funcName](hit2D, hit3D, thickness, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize)\r\n : scope[funcName](hit2D, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize);\r\n}\r\n\r\nexport function screenSpaceRayTracing_Linear2D(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxDistance: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n stride: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n linearDepthTex: PBShaderExp,\r\n normalTexture?: PBShaderExp,\r\n useBackfaceDepth?: boolean\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('distanceSquared', [pb.vec2('a'), pb.vec2('b')], function () {\r\n this.$l.x = pb.sub(this.a, this.b);\r\n this.$return(pb.dot(this.x, this.x));\r\n });\r\n pb.func(\r\n 'rayIntersectDepth',\r\n [pb.float('zA'), pb.float('zB'), pb.float('thickness'), pb.vec2('uv'), pb.float('cameraFar')],\r\n function () {\r\n let thickness = this.thickness;\r\n if (useBackfaceDepth) {\r\n this.$l.sceneZ = ShaderHelper.sampleLinearDepthWithBackface(this, linearDepthTex, this.uv, 0);\r\n this.$l.sceneZMax01 = this.sceneZ.x;\r\n thickness = pb.max(this.thickness, pb.mul(pb.sub(this.sceneZ.y, this.sceneZ.x), this.cameraFar));\r\n } else {\r\n this.$l.sceneZMax01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.uv, 0);\r\n }\r\n this.sceneZMax = pb.neg(pb.mul(this.sceneZMax01, this.cameraFar));\r\n this.$return(\r\n pb.and(\r\n pb.lessThan(this.sceneZMax01, 1),\r\n pb.greaterThanEqual(this.zA, pb.sub(this.sceneZMax, thickness)),\r\n pb.lessThanEqual(this.zB, this.sceneZMax)\r\n )\r\n );\r\n }\r\n );\r\n pb.func(\r\n 'traceRayLinear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.mat4('projMatrix'),\r\n pb.vec4('textureSize'),\r\n pb.vec3('hit2D').out(),\r\n pb.vec3('hit3D').out(),\r\n pb.vec2('origin').out(),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.rayLen = this.$choice(\r\n pb.greaterThan(\r\n pb.add(this.rayOrigin.z, pb.mul(this.rayDirection.z, this.maxDistance)),\r\n pb.neg(this.cameraNearFar.x)\r\n ),\r\n pb.div(pb.sub(pb.neg(this.cameraNearFar.x), this.rayOrigin.z), this.rayDirection.z),\r\n this.maxDistance\r\n );\r\n this.$l.rayEnd = pb.add(this.rayOrigin, pb.mul(this.rayDirection, this.rayLen));\r\n this.$l.zMin = pb.min(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.zMax = pb.max(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.rayOriginH = pb.mul(this.projMatrix, pb.vec4(this.rayOrigin, 1));\r\n this.$l.rayEndH = pb.mul(this.projMatrix, pb.vec4(this.rayEnd, 1));\r\n this.$l.k0 = pb.div(1, this.rayOriginH.w);\r\n this.$l.k1 = pb.div(1, this.rayEndH.w);\r\n this.$l.Q0 = pb.mul(this.rayOrigin, this.k0);\r\n this.$l.Q1 = pb.mul(this.rayEnd, this.k1);\r\n this.$l.rayOriginNDC = pb.mul(this.rayOriginH, this.k0);\r\n this.$l.rayEndNDC = pb.mul(this.rayEndH, this.k1);\r\n this.origin = pb.add(pb.mul(this.rayOriginNDC.xy, 0.5), pb.vec2(0.5));\r\n this.$l.P0 = pb.mul(this.origin, this.textureSize.zw);\r\n this.$l.P1 = pb.mul(pb.add(pb.mul(this.rayEndNDC.xy, 0.5), pb.vec2(0.5)), this.textureSize.zw);\r\n this.$l.xMin = 0.5;\r\n this.$l.xMax = pb.sub(this.textureSize.z, 0.5);\r\n this.$l.yMin = 0.5;\r\n this.$l.yMax = pb.sub(this.textureSize.w, 0.5);\r\n this.$l.t = pb.float();\r\n this.$if(pb.or(pb.greaterThan(this.P1.y, this.yMax), pb.lessThan(this.P1.y, this.yMin)), function () {\r\n this.t = pb.div(\r\n pb.sub(this.P1.y, this.$choice(pb.greaterThan(this.P1.y, this.yMax), this.yMax, this.yMin)),\r\n pb.sub(this.P1.y, this.P0.y)\r\n );\r\n });\r\n this.$if(pb.or(pb.greaterThan(this.P1.x, this.xMax), pb.lessThan(this.P1.x, this.xMin)), function () {\r\n this.t2 = pb.div(\r\n pb.sub(this.P1.x, this.$choice(pb.greaterThan(this.P1.x, this.xMax), this.xMax, this.xMin)),\r\n pb.sub(this.P1.x, this.P0.x)\r\n );\r\n this.t = pb.max(this.t, this.t2);\r\n });\r\n this.P1 = pb.mix(this.P1, this.P0, this.t);\r\n this.k1 = pb.mix(this.k1, this.k0, this.t);\r\n this.Q1 = pb.mix(this.Q1, this.Q0, this.t);\r\n this.P1 = this.$choice(\r\n pb.lessThan(this.distanceSquared(this.P0, this.P1), 0.0001),\r\n pb.add(this.P1, pb.vec2(0.01)),\r\n this.P1\r\n );\r\n this.$l.delta = pb.sub(this.P1, this.P0);\r\n this.$l.permute = false;\r\n this.$if(pb.lessThan(pb.abs(this.delta.x), pb.abs(this.delta.y)), function () {\r\n this.permute = true;\r\n this.delta = this.delta.yx;\r\n this.P0 = this.P0.yx;\r\n this.P1 = this.P1.yx;\r\n });\r\n this.$l.stepDir = pb.sign(this.delta.x);\r\n this.$l.invdx = pb.div(this.stepDir, this.delta.x);\r\n this.$l.dQ = pb.mul(pb.sub(this.Q1, this.Q0), this.invdx);\r\n this.$l.dK = pb.mul(pb.sub(this.k1, this.k0), this.invdx);\r\n this.$l.dP = pb.vec2(this.stepDir, pb.mul(this.delta.y, this.invdx));\r\n //this.$l.strideScalar = pb.sub(1, pb.min(1, pb.div(pb.neg(this.rayOrigin.z), this.strideZCutoff)));\r\n //this.$l.pixelStride = pb.add(1, pb.mul(this.strideScalar, this.stride));\r\n this.$l.pixelStride = this.stride;\r\n this.dP = pb.mul(this.dP, this.pixelStride);\r\n this.dQ = pb.mul(this.dQ, this.pixelStride);\r\n this.dK = pb.mul(this.dK, this.pixelStride);\r\n this.$l.jitter = pb.float(1); //dither(this, this.P0);\r\n this.P0 = pb.add(this.P0, pb.mul(this.dP, this.jitter));\r\n this.Q0 = pb.add(this.Q0, pb.mul(this.dQ, this.jitter));\r\n this.k0 = pb.add(this.k0, pb.mul(this.dK, this.jitter));\r\n this.$l.prevZMaxEstimate = this.rayOrigin.z;\r\n this.$l.zA = this.prevZMaxEstimate;\r\n this.$l.zB = this.prevZMaxEstimate;\r\n this.$l.pqk = pb.vec4(this.P0, this.Q0.z, this.k0);\r\n this.$l.dpqk = pb.vec4(this.dP, this.dQ.z, this.dK);\r\n this.$l.invRenderTargetSize = pb.div(pb.vec2(1), this.textureSize.zw);\r\n this.$l.intersected = false;\r\n this.$l.hitUV = pb.vec2();\r\n this.$l.hitZ = pb.float();\r\n this.numIterations = 0;\r\n this.skippedIterations = pb.min(this.maxIterations, 1);\r\n this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ? 1000 : this.maxIterations, function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.maxIterations), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$if(pb.and(this.intersected, pb.greaterThanEqual(this.i, this.skippedIterations)), function () {\r\n this.$break();\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n this.pqk = pb.add(this.pqk, this.dpqk);\r\n this.zA = this.prevZMaxEstimate;\r\n this.zB = pb.div(\r\n pb.add(pb.mul(this.dpqk.z, 0.5), this.pqk.z),\r\n pb.add(pb.mul(this.dpqk.w, 0.5), this.pqk.w)\r\n );\r\n this.zB = pb.clamp(this.zB, this.zMin, this.zMax);\r\n this.prevZMaxEstimate = this.zB;\r\n this.hitZ = this.zB;\r\n this.$if(pb.greaterThan(this.zB, this.zA), function () {\r\n this.$l.t = this.zB;\r\n this.zB = this.zA;\r\n this.zA = this.t;\r\n });\r\n this.hitUV = this.$choice(this.permute, this.pqk.yx, this.pqk.xy);\r\n this.hitUV = pb.mul(this.hitUV, this.invRenderTargetSize);\r\n this.intersected = this.rayIntersectDepth(\r\n this.zA,\r\n this.zB,\r\n this.thickness,\r\n this.hitUV,\r\n this.cameraNearFar.y\r\n );\r\n });\r\n this.hit2D = pb.vec3(this.hitUV, this.hitZ);\r\n this.Q0 = pb.vec3(pb.add(this.Q0.xy, pb.mul(this.dQ.xy, this.numIterations)), this.pqk.z);\r\n this.hit3D = pb.div(this.Q0, this.pqk.w);\r\n this.$return(this.intersected);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_Linear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$l.hit2D = pb.vec3();\r\n this.$l.hit3D = pb.vec3();\r\n this.$l.origin = pb.vec2();\r\n this.$l.numIterations = pb.float();\r\n this.$l.intersected = this.traceRayLinear2D(\r\n this.rayOrigin,\r\n this.rayDirection,\r\n this.stride,\r\n this.maxDistance,\r\n this.maxIterations,\r\n this.thickness,\r\n this.cameraNearFar,\r\n this.projMatrix,\r\n this.textureSize,\r\n this.hit2D,\r\n this.hit3D,\r\n this.origin,\r\n this.numIterations\r\n );\r\n this.$if(pb.not(this.intersected), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.hit2D.xy, 0);\r\n this.$if(pb.equal(this.surfaceZ01, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ = ShaderHelper.linearDepthToNonLinear(\r\n this,\r\n pb.mul(this.surfaceZ01, this.cameraNearFar.y),\r\n this.cameraNearFar\r\n );\r\n this.$l.confidence = validateHit(\r\n this,\r\n this.hit2D.xy,\r\n null,\r\n this.surfaceZ,\r\n null,\r\n this.origin,\r\n this.rayDirection,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit2D.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.origin.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit2D.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_Linear2D(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n stride,\r\n maxDistance,\r\n maxIterations,\r\n thickness,\r\n cameraNearFar,\r\n textureSize\r\n );\r\n}\r\n\r\nexport function screenSpaceRayTracing_HiZ(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxMipLevel: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n maxDistance: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n HiZTexture: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('getMipResolution', [pb.int('mipLevel')], function () {\r\n this.$return(pb.vec2(pb.textureDimensions(HiZTexture, this.mipLevel)));\r\n });\r\n pb.func('SSR_loadDepth', [pb.vec2('uv'), pb.float('level')], function () {\r\n this.$return(pb.textureSampleLevel(HiZTexture, this.uv, this.level).r);\r\n });\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n pb.func('projectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.projected = pb.mul(this.mat, pb.vec4(this.p, 1));\r\n this.projected = pb.div(this.projected, this.projected.w);\r\n this.projected = pb.add(pb.mul(this.projected, 0.5), pb.vec4(0.5));\r\n this.$return(this.projected.xyz);\r\n });\r\n pb.func(\r\n 'projectDirection',\r\n [pb.vec3('p'), pb.vec3('d'), pb.vec3('screenSpacePos'), pb.mat4('mat')],\r\n function () {\r\n this.$return(pb.sub(this.projectPosition(pb.add(this.p, this.d), this.mat), this.screenSpacePos));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_initialAdvanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipResolution'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.vec3('position').out(),\r\n pb.float('currentT').out()\r\n ],\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.origin.xy);\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.t = pb.mul(pb.sub(this.xyPlane, this.origin.xy), this.invDirection.xy);\r\n this.currentT = pb.min(this.t.x, this.t.y);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_advanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipPosition'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.float('surfaceZ'),\r\n pb.float('surfaceZMax'),\r\n pb.int('currentMip'),\r\n pb.vec3('position').inout(),\r\n pb.float('currentT').inout()\r\n ],\r\n function () {\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.skippedTile = pb.bool();\r\n this.$if(pb.greaterThan(this.direction.z, 0), function () {\r\n // Preserve the proven min-depth traversal for rays moving away from the camera.\r\n this.$l.boundaryPlanes = pb.vec3(this.xyPlane, this.surfaceZ);\r\n this.$l.forwardT = pb.mul(pb.sub(this.boundaryPlanes, this.origin), this.invDirection);\r\n this.$l.tMin = pb.min(pb.min(this.forwardT.x, this.forwardT.y), this.forwardT.z);\r\n this.$l.aboveSurface = pb.greaterThan(this.surfaceZ, this.position.z);\r\n this.skippedTile = pb.and(\r\n pb.notEqual(pb.floatBitsToUint(this.tMin), pb.floatBitsToUint(this.forwardT.z)),\r\n this.aboveSurface\r\n );\r\n this.currentT = this.$choice(this.aboveSurface, this.tMin, this.currentT);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n }).$else(function () {\r\n this.$l.reverseT = pb.mul(pb.sub(this.xyPlane, this.origin.xy), this.invDirection.xy);\r\n this.$l.tExit = pb.min(this.reverseT.x, this.reverseT.y);\r\n this.$l.exitZ = pb.add(this.origin.z, pb.mul(this.direction.z, this.tExit));\r\n this.$l.rayMinZ = pb.min(this.position.z, this.exitZ);\r\n this.$l.rayMaxZ = pb.max(this.position.z, this.exitZ);\r\n this.$l.overlapsDepth = pb.and(\r\n pb.greaterThanEqual(this.rayMaxZ, this.surfaceZ),\r\n pb.lessThanEqual(this.rayMinZ, this.surfaceZMax)\r\n );\r\n this.skippedTile = pb.not(this.overlapsDepth);\r\n this.$if(this.skippedTile, function () {\r\n this.currentT = this.tExit;\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n }).$elseif(pb.equal(this.currentMip, 0), function () {\r\n this.$if(pb.greaterThan(pb.abs(this.direction.z), 1e-6), function () {\r\n this.currentT = pb.div(pb.sub(this.surfaceZMax, this.origin.z), this.direction.z);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n });\r\n });\r\n });\r\n this.$return(this.skippedTile);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_RaymarchHiZ',\r\n [\r\n pb.vec3('screenSpacePos'),\r\n pb.vec3('screenSpaceDirection'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec2('screenSize'),\r\n pb.int('mostDetailMip'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations'),\r\n pb.float('maxT'),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.invDirection = pb.vec3(\r\n this.$choice(\r\n pb.greaterThan(pb.abs(this.screenSpaceDirection.x), 1e-8),\r\n pb.div(1, this.screenSpaceDirection.x),\r\n MAX_FLOAT_VALUE\r\n ),\r\n this.$choice(\r\n pb.greaterThan(pb.abs(this.screenSpaceDirection.y), 1e-8),\r\n pb.div(1, this.screenSpaceDirection.y),\r\n MAX_FLOAT_VALUE\r\n ),\r\n this.$choice(\r\n pb.greaterThan(pb.abs(this.screenSpaceDirection.z), 1e-8),\r\n pb.div(1, this.screenSpaceDirection.z),\r\n MAX_FLOAT_VALUE\r\n )\r\n );\r\n this.$l.currentMip = this.mostDetailMip;\r\n this.$l.currentMipResolution = this.getMipResolution(this.currentMip);\r\n this.$l.invCurrentMipResolution = pb.div(pb.vec2(1), this.currentMipResolution);\r\n this.$l.uvOffset = pb.div(pb.mul(0.005, pb.exp2(pb.float(this.mostDetailMip))), this.screenSize);\r\n this.uvOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.neg(this.uvOffset.x), this.uvOffset.x),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.neg(this.uvOffset.y), this.uvOffset.y)\r\n );\r\n this.$l.floorOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.float(0), pb.float(1)),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.float(0), pb.float(1))\r\n );\r\n this.$l.currentT = pb.float();\r\n this.$l.position = pb.vec3();\r\n this.SSR_initialAdvanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipResolution,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.position,\r\n this.currentT\r\n );\r\n this.numIterations = pb.float(0);\r\n this.$while(\r\n pb.and(\r\n pb.and(\r\n pb.lessThan(this.numIterations, this.maxIterations),\r\n pb.greaterThanEqual(this.currentMip, this.mostDetailMip)\r\n ),\r\n pb.and(\r\n pb.lessThanEqual(this.currentT, this.maxT),\r\n pb.all(pb.greaterThanEqual(this.position.xy, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.position.xy, pb.vec2(1)))\r\n )\r\n ),\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.position.xy);\r\n this.$l.depthRange = pb.textureLoad(\r\n HiZTexture,\r\n pb.ivec2(this.currentMipPosition),\r\n this.currentMip\r\n ).rg;\r\n this.$l.skippedTile = this.SSR_advanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipPosition,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.depthRange.x,\r\n this.depthRange.y,\r\n this.currentMip,\r\n this.position,\r\n this.currentT\r\n );\r\n this.$l.nextMipIsOutOfRange = pb.and(\r\n this.skippedTile,\r\n pb.greaterThanEqual(this.currentMip, this.maxMipLevel)\r\n );\r\n this.$if(pb.not(this.nextMipIsOutOfRange), function () {\r\n this.currentMip = pb.add(this.currentMip, this.$choice(this.skippedTile, pb.int(1), pb.int(-1)));\r\n this.currentMipResolution = pb.mul(\r\n this.currentMipResolution,\r\n this.$choice(this.skippedTile, 0.5, 2)\r\n );\r\n this.invCurrentMipResolution = pb.mul(\r\n this.invCurrentMipResolution,\r\n this.$choice(this.skippedTile, 2, 0.5)\r\n );\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n }\r\n );\r\n this.$l.validHit = this.$choice(\r\n pb.and(\r\n pb.lessThan(this.currentMip, this.mostDetailMip),\r\n pb.and(pb.greaterThanEqual(this.currentT, 0), pb.lessThanEqual(this.currentT, this.maxT))\r\n ),\r\n pb.float(1),\r\n pb.float(0)\r\n );\r\n this.$return(pb.vec4(this.position, this.validHit));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_HiZ',\r\n [\r\n pb.vec3('viewPos'),\r\n pb.vec3('traceRay'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec2('cameraNearFar'),\r\n pb.float('maxDistance'),\r\n pb.float('thickness'),\r\n pb.vec4('textureSize'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations')\r\n ],\r\n function () {\r\n this.$l.rayDirection = pb.normalize(this.traceRay);\r\n this.$l.reverseRay = pb.greaterThan(this.rayDirection.z, 1e-6);\r\n this.$l.rayLength = this.maxDistance;\r\n this.$if(this.reverseRay, function () {\r\n this.rayLength = pb.min(\r\n this.rayLength,\r\n pb.div(pb.sub(pb.neg(this.cameraNearFar.x), this.viewPos.z), this.rayDirection.z)\r\n );\r\n });\r\n this.$if(pb.lessThanEqual(this.rayLength, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.originH = pb.mul(this.projMatrix, pb.vec4(this.viewPos, 1));\r\n this.$l.originCS = pb.div(this.originH.xyz, this.originH.w);\r\n this.$l.originTS = pb.add(pb.mul(this.originCS, 0.5), pb.vec3(0.5));\r\n this.$l.endTS = this.projectPosition(\r\n pb.add(this.viewPos, pb.mul(this.rayDirection, this.rayLength)),\r\n this.projMatrix\r\n );\r\n this.$l.directionTS = this.$choice(\r\n this.reverseRay,\r\n pb.sub(this.endTS, this.originTS),\r\n this.projectDirection(this.viewPos, this.rayDirection, this.originTS, this.projMatrix)\r\n );\r\n this.$l.maxT = this.$choice(this.reverseRay, pb.float(1), pb.float(MAX_FLOAT_VALUE));\r\n this.$l.mostDetailMip = pb.int(0);\r\n this.$l.numIterations = pb.float();\r\n this.$l.hit = this.SSR_RaymarchHiZ(\r\n this.originTS,\r\n this.directionTS,\r\n this.cameraNearFar,\r\n this.textureSize.zw,\r\n this.mostDetailMip,\r\n this.maxMipLevel,\r\n this.maxIterations,\r\n this.maxT,\r\n this.numIterations\r\n );\r\n this.$l.confidence = pb.float(0);\r\n this.$if(pb.notEqual(this.hit.w, 0), function () {\r\n this.$l.surfaceZ = pb.textureSampleLevel(HiZTexture, this.hit.xy, 0).r;\r\n this.$if(pb.equal(this.surfaceZ, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.hit3D = invProjectPosition(this, this.hit.xyz, this.invProjMatrix);\r\n this.confidence = validateHit(\r\n this,\r\n this.hit.xy,\r\n this.hit3D,\r\n this.surfaceZ,\r\n this.thickness,\r\n this.originTS.xy,\r\n this.rayDirection,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n });\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.originTS.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_HiZ(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n cameraNearFar,\r\n maxDistance,\r\n thickness,\r\n textureSize,\r\n pb.sub(maxMipLevel, 1),\r\n maxIterations\r\n ) as PBShaderExp;\r\n}\r\n\r\n/*\r\nfloat2 cell(float2 ray, float2 cell_count, uint camera) {\r\n\treturn floor(ray.xy * cell_count);\r\n}\r\n\r\nfloat2 cell_count(float level) {\r\n\treturn input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));\r\n}\r\n\r\nfloat3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {\r\n\tfloat2 cell_size = 1.0 / cell_count;\r\n\tfloat2 planes = cell_id/cell_count + cell_size * cross_step;\r\n\r\n\tfloat2 solutions = (planes - pos)/dir.xy;\r\n\tfloat3 intersection_pos = pos + dir * min(solutions.x, solutions.y);\r\n\r\n\tintersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);\r\n\r\n\treturn intersection_pos;\r\n}\r\n\r\nbool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {\r\n\treturn (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;\r\n}\r\n\r\nfloat minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {\r\n\treturn input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;\r\n}\r\n\r\nfloat3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {\r\n\tfloat level = HIZ_START_LEVEL;\r\n\tfloat3 v_z = v/v.z;\r\n\tfloat2 hi_z_size = cell_count(level);\r\n\tfloat3 ray = p;\r\n\r\n\tfloat2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);\r\n\tfloat2 cross_offset = cross_step * 0.00001;\r\n\tcross_step = saturate(cross_step);\r\n\r\n\tfloat2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);\r\n\tray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);\r\n\r\n\titerations = 0;\r\n\twhile(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {\r\n\t\t// get the cell number of the current ray\r\n\t\tfloat2 current_cell_count = cell_count(level);\r\n\t\tfloat2 old_cell_id = cell(ray.xy, current_cell_count, camera);\r\n\r\n\t\t// get the minimum depth plane in which the current ray resides\r\n\t\tfloat min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);\r\n\r\n\t\t// intersect only if ray depth is below the minimum depth plane\r\n\t\tfloat3 tmp_ray = ray;\r\n\t\tif(v.z > 0) {\r\n\t\t\tfloat min_minus_ray = min_z - ray.z;\r\n\t\t\ttmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;\r\n\t\t\tfloat2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);\r\n\t\t\tif(crossed_cell_boundary(old_cell_id, new_cell_id)) {\r\n\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t\t}else{\r\n\t\t\t\tif(level == 1 && abs(min_minus_ray) > 0.0001) {\r\n\t\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\t\tlevel = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if(ray.z < min_z) {\r\n\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t}\r\n\r\n\t\tray.xyz = tmp_ray.xyz;\r\n\t\t--level;\r\n\r\n\t\t++iterations;\r\n\t}\r\n\treturn ray;\r\n}\r\n*/\r\n"],"names":["MAX_FLOAT_VALUE","SSR_calcJitter","scope","viewPos","roughness","pb","$builder","func","vec3","float","$l","h","fract","mul","add","dot","yxz","xxy","yxx","zyx","sub","$return","mix","invProjectPosition","pos","mat","mat4","c","p","u","vec4","div","w","xyz","validateHit","hit2D","hit3D","surfaceZ","thickness","uv","traceRay","viewMatrix","invProjMatrix","textureSize","normalTexture","funcName","vec2","$if","or","any","lessThan","hit2d","greaterThan","manhattanDist","abs","all","xy","hitNormalWS","textureSampleLevel","rgb","hitNormalVS","viewSpaceRayDirection","viewSpaceSurface","fov","y","x","border","smoothStep","vignette","hit3d","distance","confidence","screenSpaceRayTracing_Linear2D","projMatrix","cameraNearFar","maxDistance","maxIterations","stride","linearDepthTex","useBackfaceDepth","a","b","sceneZ","ShaderHelper","sampleLinearDepthWithBackface","sceneZMax01","max","cameraFar","sampleLinearDepth","sceneZMax","neg","and","greaterThanEqual","zA","lessThanEqual","zB","out","rayLen","$choice","rayOrigin","z","rayDirection","rayEnd","zMin","min","zMax","rayOriginH","rayEndH","k0","k1","Q0","Q1","rayOriginNDC","rayEndNDC","origin","P0","zw","P1","xMin","xMax","yMin","yMax","t","t2","distanceSquared","delta","permute","yx","stepDir","sign","invdx","dQ","dK","dP","pixelStride","jitter","prevZMaxEstimate","pqk","dpqk","invRenderTargetSize","intersected","hitUV","hitZ","numIterations","skippedIterations","$for","getDevice","type","i","$break","clamp","rayIntersectDepth","traceRayLinear2D","not","surfaceZ01","equal","linearDepthToNonLinear","iterationAttenuation","hitPixel","startPixel","hitDistance","length","SSR_Linear2D","screenSpaceRayTracing_HiZ","maxMipLevel","HiZTexture","int","textureDimensions","mipLevel","level","r","projected","projectPosition","d","screenSpacePos","currentMipPosition","currentMipResolution","xyPlane","floor","floorOffset","invCurrentMipResolution","uvOffset","invDirection","currentT","position","direction","inout","skippedTile","bool","boundaryPlanes","forwardT","tMin","aboveSurface","notEqual","floatBitsToUint","$else","reverseT","tExit","exitZ","rayMinZ","rayMaxZ","overlapsDepth","surfaceZMax","$elseif","currentMip","screenSpaceDirection","mostDetailMip","getMipResolution","exp2","screenSize","SSR_initialAdvanceRay","$while","maxT","depthRange","textureLoad","ivec2","rg","SSR_advanceRay","nextMipIsOutOfRange","validHit","normalize","reverseRay","rayLength","originH","originCS","originTS","endTS","directionTS","projectDirection","hit","SSR_RaymarchHiZ","SSR_HiZ"],"mappings":"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"}
|
package/dist/utility/misc.js
CHANGED
|
@@ -78,6 +78,15 @@ let defaultCopyRenderState = null;
|
|
|
78
78
|
}
|
|
79
79
|
return sampler ?? null;
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Get the sampler options of a sampler preset, e.g. for use with the
|
|
83
|
+
* withSampler() shader declaration modifier.
|
|
84
|
+
* @param type - The sampler type
|
|
85
|
+
* @returns The sampler options for the given type
|
|
86
|
+
* @public
|
|
87
|
+
*/ function getSamplerOptions(type) {
|
|
88
|
+
return samplerOptions[type];
|
|
89
|
+
}
|
|
81
90
|
/**
|
|
82
91
|
* Utility function to copy a texture
|
|
83
92
|
* @param src - Source texture to copy from
|
|
@@ -101,5 +110,5 @@ let defaultCopyRenderState = null;
|
|
|
101
110
|
copyBlitter.blit(src, dest, layer, sampler);
|
|
102
111
|
}
|
|
103
112
|
|
|
104
|
-
export { copyTexture, fetchSampler };
|
|
113
|
+
export { copyTexture, fetchSampler, getSamplerOptions };
|
|
105
114
|
//# sourceMappingURL=misc.js.map
|
package/dist/utility/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sources":["../../src/utility/misc.ts"],"sourcesContent":["import type {\r\n BaseTexture,\r\n FrameBuffer,\r\n RenderStateSet,\r\n SamplerOptions,\r\n TextureSampler\r\n} from '@zephyr3d/device';\r\nimport { CopyBlitter } from '../blitter/copy';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Metadata interface for storing additional information\r\n * @public\r\n */\r\nexport interface Metadata {\r\n [key: string]:\r\n | string\r\n | number\r\n | boolean\r\n | null\r\n | Metadata\r\n | Array<string | number | boolean | null | undefined | Metadata>;\r\n}\r\n\r\n/**\r\n * Sampler types\r\n * @public\r\n */\r\nexport type SamplerType =\r\n | 'clamp_linear'\r\n | 'clamp_linear_nomip'\r\n | 'clamp_nearest'\r\n | 'clamp_nearest_nomip'\r\n | 'repeat_linear'\r\n | 'repeat_linear_nomip'\r\n | 'repeat_nearest'\r\n | 'repeat_nearest_nomip';\r\n\r\nconst samplerOptions: Record<SamplerType, SamplerOptions> = {\r\n clamp_linear: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'linear'\r\n },\r\n clamp_linear_nomip: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n },\r\n clamp_nearest: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'nearest'\r\n },\r\n clamp_nearest_nomip: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none'\r\n },\r\n repeat_linear: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'linear'\r\n },\r\n repeat_linear_nomip: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n },\r\n repeat_nearest: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'nearest'\r\n },\r\n repeat_nearest_nomip: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n};\r\n\r\nconst samplers: Partial<Record<SamplerType, TextureSampler>> = {};\r\nlet copyBlitter: Nullable<CopyBlitter> = null;\r\nlet defaultCopyRenderState: Nullable<RenderStateSet> = null;\r\n\r\n/**\r\n * Fetch a sampler by type\r\n * @param type - The sampler type to fetch\r\n * @returns The sampler for the given type\r\n * @public\r\n */\r\nexport function fetchSampler(type: SamplerType) {\r\n let sampler = samplers[type];\r\n if (!sampler) {\r\n const opt = samplerOptions[type];\r\n if (opt) {\r\n sampler = getDevice().createSampler(opt);\r\n samplers[type] = sampler;\r\n }\r\n }\r\n return sampler ?? null;\r\n}\r\n\r\n/**\r\n * Utility function to copy a texture\r\n * @param src - Source texture to copy from\r\n * @param dest - Destination texture to copy to\r\n * @param sampler - Sampler object use to sample the source texture\r\n * @param renderState - RenderStateSet object used to copy texture\r\n * @param layer - Texture layer to copy\r\n * @param srgbOut - true if output color in sRGB color space\r\n * @internal\r\n */\r\nexport function copyTexture(\r\n src: BaseTexture,\r\n dest: BaseTexture | FrameBuffer,\r\n sampler: Nullable<TextureSampler> = null,\r\n renderState: Nullable<RenderStateSet> = null,\r\n layer = 0,\r\n srgbOut = false\r\n) {\r\n if (!renderState && !defaultCopyRenderState) {\r\n defaultCopyRenderState = src.device.createRenderStateSet();\r\n defaultCopyRenderState.useDepthState().enableTest(false).enableWrite(false);\r\n defaultCopyRenderState.useRasterizerState().setCullMode('none');\r\n }\r\n if (!copyBlitter) {\r\n copyBlitter = new CopyBlitter();\r\n }\r\n copyBlitter.renderStates = renderState ?? defaultCopyRenderState;\r\n copyBlitter.srgbOut = srgbOut;\r\n copyBlitter.blit(src, dest, layer, sampler);\r\n}\r\n"],"names":["samplerOptions","clamp_linear","addressU","addressV","magFilter","minFilter","mipFilter","clamp_linear_nomip","clamp_nearest","clamp_nearest_nomip","repeat_linear","repeat_linear_nomip","repeat_nearest","repeat_nearest_nomip","samplers","copyBlitter","defaultCopyRenderState","fetchSampler","type","sampler","opt","getDevice","createSampler","copyTexture","src","dest","renderState","layer","srgbOut","device","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","CopyBlitter","renderStates","blit"],"mappings":";;;AAuCA,MAAMA,cAAsD,GAAA;IAC1DC,YAAc,EAAA;QACZC,QAAU,EAAA,OAAA;QACVC,QAAU,EAAA,OAAA;QACVC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAC,kBAAoB,EAAA;QAClBL,QAAU,EAAA,OAAA;QACVC,QAAU,EAAA,OAAA;QACVC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAE,aAAe,EAAA;QACbN,QAAU,EAAA,OAAA;QACVC,QAAU,EAAA,OAAA;QACVC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAG,mBAAqB,EAAA;QACnBP,QAAU,EAAA,OAAA;QACVC,QAAU,EAAA,OAAA;QACVC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAI,aAAe,EAAA;QACbR,QAAU,EAAA,QAAA;QACVC,QAAU,EAAA,QAAA;QACVC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAK,mBAAqB,EAAA;QACnBT,QAAU,EAAA,QAAA;QACVC,QAAU,EAAA,QAAA;QACVC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA,QAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAM,cAAgB,EAAA;QACdV,QAAU,EAAA,QAAA;QACVC,QAAU,EAAA,QAAA;QACVC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA;AACb,KAAA;IACAO,oBAAsB,EAAA;QACpBX,QAAU,EAAA,QAAA;QACVC,QAAU,EAAA,QAAA;QACVC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA,SAAA;QACXC,SAAW,EAAA;AACb;AACF,CAAA;AAEA,MAAMQ,WAAyD,EAAC;AAChE,IAAIC,WAAqC,GAAA,IAAA;AACzC,IAAIC,sBAAmD,GAAA,IAAA;AAEvD;;;;;IAMO,SAASC,YAAAA,CAAaC,IAAiB,EAAA;IAC5C,IAAIC,OAAAA,GAAUL,QAAQ,CAACI,IAAK,CAAA;AAC5B,IAAA,IAAI,CAACC,OAAS,EAAA;QACZ,MAAMC,GAAAA,GAAMpB,cAAc,CAACkB,IAAK,CAAA;AAChC,QAAA,IAAIE,GAAK,EAAA;YACPD,OAAUE,GAAAA,SAAAA,EAAAA,CAAYC,aAAa,CAACF,GAAAA,CAAAA;YACpCN,QAAQ,CAACI,KAAK,GAAGC,OAAAA;AACnB;AACF;AACA,IAAA,OAAOA,OAAW,IAAA,IAAA;AACpB;AAEA;;;;;;;;;AASC,IACM,
|
|
1
|
+
{"version":3,"file":"misc.js","sources":["../../src/utility/misc.ts"],"sourcesContent":["import type {\r\n BaseTexture,\r\n FrameBuffer,\r\n RenderStateSet,\r\n SamplerOptions,\r\n TextureSampler\r\n} from '@zephyr3d/device';\r\nimport { CopyBlitter } from '../blitter/copy';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Metadata interface for storing additional information\r\n * @public\r\n */\r\nexport interface Metadata {\r\n [key: string]:\r\n | string\r\n | number\r\n | boolean\r\n | null\r\n | Metadata\r\n | Array<string | number | boolean | null | undefined | Metadata>;\r\n}\r\n\r\n/**\r\n * Sampler types\r\n * @public\r\n */\r\nexport type SamplerType =\r\n | 'clamp_linear'\r\n | 'clamp_linear_nomip'\r\n | 'clamp_nearest'\r\n | 'clamp_nearest_nomip'\r\n | 'repeat_linear'\r\n | 'repeat_linear_nomip'\r\n | 'repeat_nearest'\r\n | 'repeat_nearest_nomip';\r\n\r\nconst samplerOptions: Record<SamplerType, SamplerOptions> = {\r\n clamp_linear: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'linear'\r\n },\r\n clamp_linear_nomip: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n },\r\n clamp_nearest: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'nearest'\r\n },\r\n clamp_nearest_nomip: {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none'\r\n },\r\n repeat_linear: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'linear'\r\n },\r\n repeat_linear_nomip: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n },\r\n repeat_nearest: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'nearest'\r\n },\r\n repeat_nearest_nomip: {\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n};\r\n\r\nconst samplers: Partial<Record<SamplerType, TextureSampler>> = {};\r\nlet copyBlitter: Nullable<CopyBlitter> = null;\r\nlet defaultCopyRenderState: Nullable<RenderStateSet> = null;\r\n\r\n/**\r\n * Fetch a sampler by type\r\n * @param type - The sampler type to fetch\r\n * @returns The sampler for the given type\r\n * @public\r\n */\r\nexport function fetchSampler(type: SamplerType) {\r\n let sampler = samplers[type];\r\n if (!sampler) {\r\n const opt = samplerOptions[type];\r\n if (opt) {\r\n sampler = getDevice().createSampler(opt);\r\n samplers[type] = sampler;\r\n }\r\n }\r\n return sampler ?? null;\r\n}\r\n\r\n/**\r\n * Get the sampler options of a sampler preset, e.g. for use with the\r\n * withSampler() shader declaration modifier.\r\n * @param type - The sampler type\r\n * @returns The sampler options for the given type\r\n * @public\r\n */\r\nexport function getSamplerOptions(type: SamplerType): SamplerOptions {\r\n return samplerOptions[type];\r\n}\r\n\r\n/**\r\n * Utility function to copy a texture\r\n * @param src - Source texture to copy from\r\n * @param dest - Destination texture to copy to\r\n * @param sampler - Sampler object use to sample the source texture\r\n * @param renderState - RenderStateSet object used to copy texture\r\n * @param layer - Texture layer to copy\r\n * @param srgbOut - true if output color in sRGB color space\r\n * @internal\r\n */\r\nexport function copyTexture(\r\n src: BaseTexture,\r\n dest: BaseTexture | FrameBuffer,\r\n sampler: Nullable<TextureSampler> = null,\r\n renderState: Nullable<RenderStateSet> = null,\r\n layer = 0,\r\n srgbOut = false\r\n) {\r\n if (!renderState && !defaultCopyRenderState) {\r\n defaultCopyRenderState = src.device.createRenderStateSet();\r\n defaultCopyRenderState.useDepthState().enableTest(false).enableWrite(false);\r\n defaultCopyRenderState.useRasterizerState().setCullMode('none');\r\n }\r\n if (!copyBlitter) {\r\n copyBlitter = new CopyBlitter();\r\n }\r\n copyBlitter.renderStates = renderState ?? defaultCopyRenderState;\r\n copyBlitter.srgbOut = srgbOut;\r\n copyBlitter.blit(src, dest, layer, sampler);\r\n}\r\n"],"names":["samplerOptions","clamp_linear","addressU","addressV","magFilter","minFilter","mipFilter","clamp_linear_nomip","clamp_nearest","clamp_nearest_nomip","repeat_linear","repeat_linear_nomip","repeat_nearest","repeat_nearest_nomip","samplers","copyBlitter","defaultCopyRenderState","fetchSampler","type","sampler","opt","getDevice","createSampler","getSamplerOptions","copyTexture","src","dest","renderState","layer","srgbOut","device","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","CopyBlitter","renderStates","blit"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zephyr3d/scene",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.19",
|
|
4
4
|
"description": "Scene API for zephyr3d",
|
|
5
5
|
"homepage": "https://github.com/gavinyork/zephyr3d#readme",
|
|
6
6
|
"type": "module",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@types/draco3d": "^1.4.9",
|
|
69
69
|
"@webgpu/types": "^0.1.65",
|
|
70
70
|
"@zephyr3d/base": "^0.2.8",
|
|
71
|
-
"@zephyr3d/device": "^0.2.
|
|
71
|
+
"@zephyr3d/device": "^0.2.15",
|
|
72
72
|
"es-module-lexer": "^1.7.0"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|