From afd02550a83cfe7f35d4b57fed12a04a92299413 Mon Sep 17 00:00:00 2001 From: xiangsilian Date: Thu, 23 Oct 2025 21:30:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9D=9E=E7=BA=BF=E6=80=A7?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/shaders/texture.frag | 36 +++++++++++++------ app/src/main/assets/shaders/texture.frag.spv | Bin 1436 -> 1776 bytes 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/assets/shaders/texture.frag b/app/src/main/assets/shaders/texture.frag index 4103ffd..1ae7ff1 100644 --- a/app/src/main/assets/shaders/texture.frag +++ b/app/src/main/assets/shaders/texture.frag @@ -6,26 +6,40 @@ layout (binding = 2) uniform sampler2D samplerColor_ex; layout (location = 0) in vec2 inUV; layout (location = 1) in vec3 inNormal; - layout (location = 0) out vec4 outFragColor; void main() { - vec4 color = texture(samplerColor, inUV); - vec4 color_ex = texture(samplerColor_ex, inUV); + vec4 color = texture(samplerColor, inUV); + vec4 color_ex = texture(samplerColor_ex, inUV); - vec3 N = normalize(inNormal); + vec3 N = normalize(inNormal); - vec4 textureColor = color; - - // 计算与 (0,0,1) 的点乘 + // 计算与 (0,0,1) 的点乘 float ndot = dot(N, vec3(0.0, 0.0, -1.0)); - // 保证结果 >= 0 + // 保证结果 >= 0 ndot = max(ndot, 0.0); - - vec4 blendedColor = mix(color_ex, color, ndot); + + // 重新映射ndot值,让中间2/3部分进行融合 + // 当ndot在[0.166, 0.833]范围内时进行混合,两端保持不变 + float blendFactor; + if (ndot < 0.166) { + blendFactor = 0.0; // 完全使用color_ex + } else if (ndot > 0.833) { + blendFactor = 1.0; // 完全使用color + } else { + // 在中间2/3部分进行平滑过渡 + blendFactor = (ndot - 0.166) / (0.833 - 0.166); + } - outFragColor = blendedColor; + // 使用smoothstep创建中间2/3的融合区域 + // 参数说明:smoothstep(edge0, edge1, x) + // 当x < edge0时返回0,当x > edge1时返回1,在中间时平滑过渡 + //float blendFactor = smoothstep(0.166, 0.833, ndot); + + + vec4 blendedColor = mix(color_ex, color, blendFactor); + outFragColor = blendedColor; } \ No newline at end of file diff --git a/app/src/main/assets/shaders/texture.frag.spv b/app/src/main/assets/shaders/texture.frag.spv index 39391f12ef6f1b57cf56e98fa94dca72e5bb17fc..097507dc1881c797de485c98ef09c797206d08ee 100644 GIT binary patch literal 1776 zcmZ9M*-leY6oxlL5v4K+f`~%_CkAl>L{X}ua6^cRK`%|EjUg$mDK+uNgoGO(z=tv3 zXnYwT!6_zw-#Ojn#FH%6`u{cVy>{tnpF9#mTj&Yh;YmopfzS>U;JOmMzVU2hZm(IM zn_swYL~rOw0*&b-uM@58mUe1729UGJD$-A^KAK>4P&tHeB<5hVIpU-Ew(He;1D&Jy zar9nk_f56ZSZ&csp7nQXThCG8To^(pc`qyPQm!kU#K`9A%F%xeeiJdz8Fy-%^~P?g ziV4#h#?iHMy_w=%xQ6knTB()SO505)bFO=ltCTZybtUJmziqBHO0N(3b!vJJ>v~@i zPhk6rJSte5~g^$NWLE%o|T`JFPK{-33=bMyTg5#NK~_zujm# zWt1%(L+iJG_KSFodObLdGe6%7l3Q+J&+KQvKD70m%lLk@wd9Q#dk1nc-!uD}KZ-Wr zS7-idbUJH_&w$M}&U~?VBxig99nU-iw$>!#7x9Gz?SGlYYn_XTF^awzH;w)M&(z8g zr3k~5Cww!x3 z-aC*p-u+)j-TRm=J%lXFav4HlohrW5_Hewy^*uyty599S26MHOS+vA{h zUw5$OJjaI?w~Q_C+l@8lvNf%pJ%{J9NBW-9w;AyYKHo~5p@{8WJSE!r2Z&r&^1OI` f50N$`t?xW(ymR?}^~XMsvE}snyAuB;dkOgmb>fN<#x#M49BCD28^eC%VW|wqY!jf>Iw4mVU%46=P zuqM3eciD5N=&=v}Fl$wppUG}09mk&F1f0798|O|{G?JOx5mx4SS7)|BCud(E_f~HF o2Sty5iH4p@+Laxu$xsA>3F88Tc@y+<@UhPH&|+2ik8Ym|zcBhLF#rGn