From 511e27f9c9ddd66d26d9eeb0282fdaa9c1790e49 Mon Sep 17 00:00:00 2001 From: hhhhkrx <155431265+hhhhkrx@users.noreply.github.com> Date: Mon, 22 Jul 2024 22:53:43 +0800 Subject: [PATCH] Fix eye bug (#289) * refactor: fix eye bug --- .../src/advanced-shader/eye/EyeForwardPass.glsl | 5 +++-- .../src/advanced-shader/eye/EyeFunction.glsl | 9 ++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/custom-material/src/advanced-shader/eye/EyeForwardPass.glsl b/packages/custom-material/src/advanced-shader/eye/EyeForwardPass.glsl index f84af13e..b005cb07 100644 --- a/packages/custom-material/src/advanced-shader/eye/EyeForwardPass.glsl +++ b/packages/custom-material/src/advanced-shader/eye/EyeForwardPass.glsl @@ -75,10 +75,12 @@ void PBRFragment(Varyings varyings) { #ifdef RENDERER_HAS_TANGENT mat3 tbn = mat3(surfaceData.tangent, surfaceData.bitangent, surfaceData.normal); + #else + mat3 tbn = getTBNByDerivatives(aoUV, normal, varyings.positionWS, gl_FrontFacing); #endif // Modify surfaceData by eye algorithm - surfaceData.albedoColor = calculateEyeColor(varyings.uv, tbn); + surfaceData.albedoColor = calculateEyeColor(varyings.uv, tbn, surfaceData); surfaceData.normal =calculateEyeNormal(varyings.uv, tbn, gl_FrontFacing); surfaceData.f0 = 0.04; @@ -108,7 +110,6 @@ void PBRFragment(Varyings varyings) { // Emissive color.rgb += surfaceData.emissiveColor; - #if SCENE_FOG_MODE != 0 color = fog(color, varyings.positionVS); #endif diff --git a/packages/custom-material/src/advanced-shader/eye/EyeFunction.glsl b/packages/custom-material/src/advanced-shader/eye/EyeFunction.glsl index 2fc6828d..72c1056d 100644 --- a/packages/custom-material/src/advanced-shader/eye/EyeFunction.glsl +++ b/packages/custom-material/src/advanced-shader/eye/EyeFunction.glsl @@ -32,12 +32,11 @@ vec2 parallaxOffset( float heighttex, float height, vec3 viewDir ) { float heightTex = heighttex * height- height/2.0; vec3 s = viewDir; - s.z -= 0.42; - s.y -= s.y; + s.z += 0.42; return heightTex * (s.xy / s.z); } -vec3 calculateEyeColor(Varyings varyings, mat3 tbn) +vec3 calculateEyeColor(Varyings varyings, mat3 tbn, SurfaceData surfaceData) { // Sclera UV vec2 scleraUV = (varyings.uv * material_ScleraSize)-((material_ScleraSize-1.0)/2.0); @@ -68,7 +67,7 @@ vec3 calculateEyeColor(Varyings varyings, mat3 tbn) #ifdef MATERIAL_HAS_SCLERA_MASK vec3 irisMaskTex = (texture2D(material_ScleraMask, irisSizeUV)).rgb; float uvmask = 1.0 - (texture2D(material_ScleraMask, varyings.uv )).b; - heighttexture = 1.0 - (texture2D(material_ScleraMask, parallaxUV)).b; + heighttexture = (texture2D(material_ScleraMask, parallaxUV)).b; #else vec3 irisMaskTex = vec3(1.0); float uvmask = 1.0; @@ -76,7 +75,7 @@ vec3 calculateEyeColor(Varyings varyings, mat3 tbn) #endif // Transform ViewdirWS To ViewdirTS - vec3 vDir = normalize(camera_Position - varyings.positionWS); + vec3 vDir = surfaceData.viewDir; vec3 viewDirInTBN = tbn * vDir; vec2 offset = parallaxOffset(heighttexture, material_Parallax, viewDirInTBN);