@@ -51,6 +51,7 @@ UberShader::UberShader(RenderPass* renderPass) {
5151 #define GAMMA 1
5252 #define FALSE_COLOR 2
5353 #define POS_NEG 3
54+ #define HASH 4
5455
5556 #define ERROR 0
5657 #define ABSOLUTE_ERROR 1
@@ -117,6 +118,10 @@ UberShader::UberShader(RenderPass* renderPass) {
117118 }
118119 }
119120
121+ vec3 hash(vec3 co){
122+ return fract(cos(dot(co.xyz, vec3(61.5499458, -40.7123604, 34.8567848))) * vec3(-41882.2148, 62285.1367, 38605.582));
123+ }
124+
120125 vec3 applyTonemap(vec3 col, vec4 background) {
121126 if (tonemap == SRGB) {
122127 col = col +
@@ -129,6 +134,8 @@ UberShader::UberShader(RenderPass* renderPass) {
129134 return falseColor(log2(average(col)+0.03125) / 10.0 + 0.5) + (background.rgb - falseColor(0.0)) * background.a;
130135 } else if (tonemap == POS_NEG) {
131136 return vec3(-average(min(col, vec3(0.0))) * 2.0, average(max(col, vec3(0.0))) * 2.0, 0.0) + background.rgb * background.a;
137+ } else if (tonemap == HASH) {
138+ return hash(col) + (background.rgb - hash(vec3(offset))) * background.a;
132139 }
133140 return vec3(0.0);
134141 }
@@ -230,6 +237,7 @@ UberShader::UberShader(RenderPass* renderPass) {
230237 #define GAMMA 1
231238 #define FALSE_COLOR 2
232239 #define POS_NEG 3
240+ #define HASH 4
233241
234242 #define ERROR 0
235243 #define ABSOLUTE_ERROR 1
@@ -272,6 +280,10 @@ UberShader::UberShader(RenderPass* renderPass) {
272280 }
273281 }
274282
283+ float3 hash(float3 co){
284+ return fract(cos(dot(co.xyz, float3(61.5499458f, -40.7123604f, 34.8567848f))) * float3(-41882.2148f, 62285.1367f, 38605.582f));
285+ }
286+
275287 float3 applyTonemap(float3 col, float4 background, int tonemap, float offset, float gamma, texture2d<float, access::sample> colormap, sampler colormapSampler) {
276288 switch (tonemap) {
277289 case SRGB:
@@ -286,6 +298,8 @@ UberShader::UberShader(RenderPass* renderPass) {
286298 return falseColor(log2(average(col)+0.03125f) / 10.0f + 0.5f, colormap, colormapSampler) + (background.rgb - falseColor(0.0f, colormap, colormapSampler)) * background.a;
287299 case POS_NEG:
288300 return float3(-average(min(col, float3(0.0f))) * 2.0f, average(max(col, float3(0.0f))) * 2.0f, 0.0f) + background.rgb * background.a;
301+ case HASH:
302+ return hash(col) + (background.rgb - hash(float3(offset))) * background.a;
289303 }
290304 return float3(0.0f);
291305 }
0 commit comments