From 99947c190c74bbcc3f3548b8f689960af87b04a9 Mon Sep 17 00:00:00 2001 From: FMS-Cat Date: Sat, 27 Mar 2021 20:50:08 +0900 Subject: [PATCH] performance: hey, raymarch can be started from the intersection --- src/shaders/raymarch-object.vert | 5 ++++- src/shaders/wobbleball.frag | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/shaders/raymarch-object.vert b/src/shaders/raymarch-object.vert index 8a53c1e..6d915f0 100644 --- a/src/shaders/raymarch-object.vert +++ b/src/shaders/raymarch-object.vert @@ -2,6 +2,8 @@ layout (location = 0) in vec3 position; +out vec4 vPosition; + uniform vec2 resolution; uniform mat4 projectionMatrix; uniform mat4 viewMatrix; @@ -10,7 +12,8 @@ uniform mat4 modelMatrix; // ------ void main() { - vec4 outPos = projectionMatrix * viewMatrix * modelMatrix * vec4( position, 1.0 ); + vPosition = modelMatrix * vec4( position, 1.0 ); + vec4 outPos = projectionMatrix * viewMatrix * vPosition; outPos.x *= resolution.y / resolution.x; gl_Position = outPos; diff --git a/src/shaders/wobbleball.frag b/src/shaders/wobbleball.frag index 35cbd3a..b9d6520 100644 --- a/src/shaders/wobbleball.frag +++ b/src/shaders/wobbleball.frag @@ -21,6 +21,8 @@ const float TAU = PI * 2.0; layout (location = 3) out vec4 fragWTF; #endif +in vec4 vPosition; + #ifdef SHADOW out vec4 fragColor; #endif @@ -111,7 +113,7 @@ void main() { vec3 rayOri = divideByW( inversePVM * vec4( p, 0.0, 1.0 ) ); vec3 farPos = divideByW( inversePVM * vec4( p, 1.0, 1.0 ) ); vec3 rayDir = normalize( farPos - rayOri ); - float rayLen = cameraNearFar.x; + float rayLen = length( vPosition.xyz - cameraPos ); vec3 rayPos = rayOri + rayDir * rayLen; float dist;