Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SSRPass (screen space reflection) #20156

Merged
merged 108 commits into from
Feb 23, 2021
Merged
Changes from 1 commit
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
65679de
SSRPass init
gonnavis Aug 10, 2020
4b41a96
a
gonnavis Aug 10, 2020
204ea1f
a
gonnavis Aug 10, 2020
614ae8b
a
gonnavis Aug 11, 2020
1bcff91
a
gonnavis Aug 11, 2020
4078f7a
a
gonnavis Aug 11, 2020
78fa272
a
gonnavis Aug 11, 2020
9703d2c
a
gonnavis Aug 11, 2020
88c78e8
a
gonnavis Aug 11, 2020
d103220
a
gonnavis Aug 11, 2020
7468084
use resolution & delete depthRenderMaterial
gonnavis Aug 11, 2020
67aa950
SSRPassPerspective
gonnavis Aug 11, 2020
ebc4ab8
a
gonnavis Aug 11, 2020
d483010
a
gonnavis Aug 11, 2020
16a6725
a
gonnavis Aug 12, 2020
9ed5d1f
a
gonnavis Aug 12, 2020
5786c74
a
gonnavis Aug 12, 2020
cc14b55
a
gonnavis Aug 20, 2020
cadb7f9
a
gonnavis Aug 21, 2020
672f8bd
use pointToLineDistance, maybe ok
gonnavis Aug 21, 2020
65bc8c2
a
gonnavis Aug 21, 2020
5262a8c
almost OK
gonnavis Aug 21, 2020
673b2ff
increase FOV
gonnavis Aug 21, 2020
304b3ad
a
gonnavis Aug 21, 2020
b65ed77
a
gonnavis Aug 22, 2020
963e6b1
a
gonnavis Aug 22, 2020
0d24e9d
A
gonnavis Aug 22, 2020
4e9f48b
A
gonnavis Aug 22, 2020
83f19f8
a
gonnavis Aug 22, 2020
5c77745
clean
gonnavis Aug 22, 2020
f776e9a
clean
gonnavis Aug 22, 2020
acf4d06
screenshot
gonnavis Aug 22, 2020
898c688
a
gonnavis Aug 22, 2020
fbf6f8e
gui
gonnavis Aug 23, 2020
e86f5c9
a
gonnavis Aug 23, 2020
f005e08
new pointToLineDistance function
gonnavis Aug 23, 2020
0bb587e
#define MAX_STEP & onresize replace MAX_STEP
gonnavis Aug 23, 2020
27b2d88
bug fix
gonnavis Aug 23, 2020
7b6a6d0
a
gonnavis Aug 23, 2020
a5b89ee
mobile bug fix
gonnavis Aug 24, 2020
0b3054b
surfDist affected by clipW
gonnavis Aug 25, 2020
600fc0f
performance improvement
gonnavis Aug 26, 2020
91da469
a
gonnavis Aug 26, 2020
58bd9ce
SSRPassSelective
gonnavis Aug 30, 2020
1c5854c
a
gonnavis Aug 30, 2020
135b3f3
selective ok
gonnavis Aug 30, 2020
3ce1c0d
selective ok
gonnavis Aug 30, 2020
6df5b11
a
gonnavis Aug 30, 2020
7de93ca
a
gonnavis Aug 30, 2020
bed4359
use traverse for selective reflect first, try other methods after
gonnavis Aug 30, 2020
518da6a
Configurable encoding
gonnavis Aug 31, 2020
252e87b
support OrthographicCamera
gonnavis Aug 31, 2020
14df55a
traverseVisible
gonnavis Aug 31, 2020
a3261bf
SSRPass_bouncing
gonnavis Sep 2, 2020
80b48b5
a
gonnavis Sep 2, 2020
e026754
a
gonnavis Sep 2, 2020
9fa2a96
performance improvement
gonnavis Sep 7, 2020
3abcc06
a
gonnavis Sep 20, 2020
776917b
No need to calculate clipW separately
gonnavis Sep 24, 2020
e12c022
performance: Use the same skip strategy as viewZ for vZ
gonnavis Sep 27, 2020
e3f0aed
Merge branch 'SSRPass' of https://github.com/gonnavis/three.js into S…
gonnavis Sep 27, 2020
4420625
clean
gonnavis Sep 28, 2020
ff425c9
use lineLineIntersection instead of pointToLineDistance, can get accu…
gonnavis Sep 28, 2020
13e3078
lineLineIntersection & DistanceAttenuation.
gonnavis Sep 28, 2020
8db64cb
Merge branch 'SSRPass' of https://github.com/gonnavis/three.js into S…
gonnavis Sep 28, 2020
753fe6b
default DistanceAttenuation on
gonnavis Sep 28, 2020
d0b0b93
bugfix: OrthographicCamera support
gonnavis Sep 28, 2020
62e4079
infiniteThick
gonnavis Sep 28, 2020
6607e29
normal noise
gonnavis Sep 28, 2020
28aef30
a
gonnavis Sep 28, 2020
c51855d
a
gonnavis Sep 28, 2020
f6a1f3e
fit morphTargets
gonnavis Sep 29, 2020
d5d25a2
Separate blur setting
gonnavis Sep 29, 2020
36473a2
performance: use #ifdef instead of if
gonnavis Sep 30, 2020
7511ce7
a
gonnavis Sep 30, 2020
8c59420
New d1viewPosition calc method, seems same performance, but more conc…
gonnavis Oct 2, 2020
9fe3281
Use Perspective-Correct Interpolation instead of lineLineIntersection
gonnavis Oct 7, 2020
311bf63
performance & priliminary angleCompensation
gonnavis Oct 7, 2020
454c82d
NormalBlending
gonnavis Oct 13, 2020
34e2044
screenshot
gonnavis Oct 13, 2020
b8b7b82
a
gonnavis Oct 13, 2020
6029774
Resolve conflict of examples/files.js
gonnavis Oct 25, 2020
8181946
bugfix: maxDistance and attenuation should compared by distance perpe…
gonnavis Oct 26, 2020
da39b17
fresnel
gonnavis Oct 26, 2020
7ae5672
Merge branch 'dev' into SSRPass
gonnavis Oct 27, 2020
b0fc8ef
Merge https://github.com/mrdoob/three.js into SSRPass
gonnavis Oct 29, 2020
5aebdd8
calculated maxReflectRayLen
gonnavis Oct 31, 2020
6666d3b
bugfix: Character morphTarget normalMaterial.
gonnavis Oct 31, 2020
92ead6b
bugfix: Character morphTarget normalMaterial.
gonnavis Nov 1, 2020
640daa0
change default scene to bunny
gonnavis Jan 20, 2021
d042fdf
surfDist compensation by angle
gonnavis Jan 21, 2021
701f6a5
With Refelector.js, default off. Now just add a reflector to hide the…
gonnavis Jan 22, 2021
cd8eb7a
Let Reflector.js can handle opacity by depthTexture.
gonnavis Jan 23, 2021
2e79d4a
fix the "jumpiness" of the reflection
gonnavis Jan 24, 2021
4dcbe8c
1. Exclude Reflector from SSRPass if Reflector is on. 2. Increase ref…
gonnavis Jan 25, 2021
7e08822
Decrease the vertical offset between SSR and Reflector.
gonnavis Jan 25, 2021
01588a5
Revert plane.depthWrite = false & Revert to reflector.position.y = pl…
gonnavis Jan 25, 2021
2c56b95
Remove the noise setting.
gonnavis Jan 25, 2021
58c2812
Use pointToLineDistance instead of viewReflectRayZ to calculate away,…
gonnavis Jan 25, 2021
15a1bd1
Performance: perform pointToLineDistance only if viewReflectRayZ-sD<=vZ.
gonnavis Jan 26, 2021
ba1630c
1. Reduce the size of the reflector to prevent glitch caused by low p…
gonnavis Jan 26, 2021
424b074
Merge remote-tracking branch 'upstream/dev' into SSRPass
gonnavis Feb 3, 2021
a1e8e98
Fix: .getClearColor() now requires a Color as an argument.
gonnavis Feb 6, 2021
98f9aaa
postprocessing with reflector performance problem quick hack.
gonnavis Feb 18, 2021
1142c1b
Turn on GroundReflector by default & some clean up.
gonnavis Feb 19, 2021
414da57
Let groundReflector also follow settings.
gonnavis Feb 21, 2021
de0c8f7
Fix zigzag problem between ground and objects.
gonnavis Feb 21, 2021
c37e040
gui folder
gonnavis Feb 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
a
gonnavis committed Aug 11, 2020
commit d103220f17e53c5e8922bd5ac5dde415b28a1446
2 changes: 1 addition & 1 deletion examples/jsm/postprocessing/SSRPass.js
Original file line number Diff line number Diff line change
@@ -224,7 +224,7 @@ SSRPass.prototype = Object.assign(Object.create(Pass.prototype), {

// render normals

this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0);
this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0, 0);

// render depths

24 changes: 19 additions & 5 deletions examples/jsm/shaders/SSRShader.js
Original file line number Diff line number Diff line change
@@ -105,6 +105,8 @@ var SSRShader = {

vec3 normal=texture2D(tNormal,uv).xyz*2.-1.;//screen rigth always red
vec3 reflectDir=reflect(vec3(0,0,-1),normal);
// float reflectDirLen=length(reflectDir);
// if(reflectDirLen<=0.) return;
// reflectDir.x=abs(reflectDir.x);
// reflectDir=normalize(vec3(-1,-1,0));
d1=d0+(reflectDir*MAX_DISTuv).xy*vec2(${innerWidth}.,${innerHeight}.);
@@ -114,7 +116,7 @@ var SSRShader = {
float totalStep=max(abs(xLen),abs(yLen));
float xSpan=xLen/totalStep;
float ySpan=yLen/totalStep;
for(float i=20.;i<MAX_STEP;i++){
for(float i=0.;i<MAX_STEP;i++){
if(i>=totalStep) break;
float x=d0.x+i*xSpan;
float y=d0.y+i*ySpan;
@@ -124,7 +126,19 @@ var SSRShader = {
float v=y/${innerHeight}.;
vec3 p=getPos(vec2(u,v));
vec3 rayPos=pos+(length(vec2(x,y)-d0)/totalLen)*(reflectDir*MAX_DISTuv);
if(length(rayPos-p)<SURF_DISTuv){
float away=length(rayPos-p);
if(away<SURF_DISTuv){
// float d=texture2D(tDepth,vec2(u,v)).r;
// if(d<=0.) continue;
vec3 n=texture2D(tNormal,vec2(u,v)).xyz*2.-1.;
// gl_FragColor=vec4(dot(reflectDir,n));
// gl_FragColor.a=1.;
// break;
if(dot(reflectDir,n)>=0.) continue;
// gl_FragColor=vec4(away*100.,0,0,1);
// break;
// gl_FragColor=vec4(u,v,0,1);
// break;
vec4 reflect=texture2D(tDiffuse,vec2(u,v));
// gl_FragColor=color;
gl_FragColor=reflect;
@@ -237,20 +251,20 @@ var SSRBlurShader = {
"void main() {",

" vec2 texelSize = ( 1.0 / resolution );",
" float result = 0.0;",
" vec3 result = vec3(0);",

" for ( int i = - 2; i <= 2; i ++ ) {",

" for ( int j = - 2; j <= 2; j ++ ) {",

" vec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;",
" result += texture2D( tDiffuse, vUv + offset ).r;",
" result += texture2D( tDiffuse, vUv + offset ).xyz;",

" }",

" }",

" gl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );",
" gl_FragColor = vec4( result / ( 5.0 * 5.0 ) , 1.0 );",

"}"