@@ -63,6 +63,7 @@ const GTAOShader = {
63
63
radius : { value : 0.25 } ,
64
64
distanceExponent : { value : 1. } ,
65
65
thickness : { value : 1. } ,
66
+ distanceFallOff : { value : 1. } ,
66
67
scale : { value : 1. } ,
67
68
sceneBoxMin : { value : new Vector3 ( - 1 , - 1 , - 1 ) } ,
68
69
sceneBoxMax : { value : new Vector3 ( 1 , 1 , 1 ) } ,
@@ -91,6 +92,7 @@ const GTAOShader = {
91
92
uniform float radius;
92
93
uniform float distanceExponent;
93
94
uniform float thickness;
95
+ uniform float distanceFallOff;
94
96
uniform float scale;
95
97
#if SCENE_CLIP_BOX == 1
96
98
uniform vec3 sceneBoxMin;
@@ -224,15 +226,15 @@ const GTAOShader = {
224
226
vec3 viewDelta = sampleSceneViewPos - viewPos;
225
227
if (abs(viewDelta.z) < thickness) {
226
228
float sampleCosHorizon = dot(viewDir, normalize(viewDelta));
227
- cosHorizons.x = max(cosHorizons.x, sampleCosHorizon);
229
+ cosHorizons.x + = max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));
228
230
}
229
231
230
232
sampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);
231
233
sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);
232
234
viewDelta = sampleSceneViewPos - viewPos;
233
235
if (abs(viewDelta.z) < thickness) {
234
236
float sampleCosHorizon = dot(viewDir, normalize(viewDelta));
235
- cosHorizons.y = max(cosHorizons.y, sampleCosHorizon);
237
+ cosHorizons.y + = max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));
236
238
}
237
239
}
238
240
@@ -353,7 +355,7 @@ function generateMagicSquareNoise( size = 5 ) {
353
355
data [ inx * 4 ] = ( randomVec . x * 0.5 + 0.5 ) * 255 ;
354
356
data [ inx * 4 + 1 ] = ( randomVec . y * 0.5 + 0.5 ) * 255 ;
355
357
data [ inx * 4 + 2 ] = 127 ;
356
- data [ inx * 4 + 3 ] = 0 ;
358
+ data [ inx * 4 + 3 ] = 255 ;
357
359
358
360
}
359
361
0 commit comments