← ALL ARTICLES

风格化眼睛

全库目录221
本文目录6

把虹膜和高光都画进同一张颜色图,转动视角时它们会一起移动,眼睛就像贴在球面上的图案。眼睛材质把虹膜放到表面后方,把角膜反射留在外表面,再分别处理眼睑遮挡。艺术化图案可以自由变化,这三层的空间关系仍要稳定。

虹膜的内部位置

先用平面模型说明视差。建立眼球局部切线坐标,外表面交点为 p=(x,y,0)p=(x,y,0),虹膜位于 z=−hz=-h,h>0h>0。视线 VV 从表面指向相机,向内的观察射线是 p−tVp-tV。令其 z 分量等于 −h-h,得到 t=h/Vzt=h/V_z,所以虹膜交点为:

piris,xy=pxy−hVxyVzp_{iris,xy}=p_{xy}-h\frac{V_{xy}}{V_z}

正面观察时 Vxy=0V_{xy}=0,图案不偏移。相机移到右边时,向内射线在更深的平面上向左移动,虹膜采样也向左。符号反了会产生凸起的印象。hh 使用眼球局部长度,交点映射到 UV 时再除以虹膜平面的宽高,不能直接把毫米和 UV 相加。

下面的 HLSL 机制片段假设 surfaceUV 对应外表面平面,planeSize 是该平面的局部宽高。调用者处理返回的有效标记,越界部分显示眼白或虹膜边缘遮罩。它没有模拟曲面折射。

hlsl
bool IrisUV(float2 surfaceUV, float3 viewEye,
            float depth, float2 planeSize, out float2 irisUV)
{
    irisUV = surfaceUV;
    if (viewEye.z <= 1e-4 || any(planeSize <= 0.0)) return false;
    irisUV -= depth * viewEye.xy / viewEye.z / planeSize;
    return all(irisUV >= 0.0) && all(irisUV <= 1.0);
}

例如虹膜深度1毫米、平面宽10毫米、V=(0.6,0,0.8),U偏移为-1*0.6/0.8/10=-0.075。V改成(-0.6,0,0.8),偏移变为+0.075。若把1毫米直接当1个UV单位,偏移会扩大十倍;对同一输入逐项显示局部交点与UV可以定位单位错误。

接近侧面时分母趋近零,平面模型不再适合。限制最大偏移可以保护采样,但会改变深度表现;完整近景模型需用角膜交点和折射方向求内部交点。Snell 定律约束折射角,角膜曲率和介质折射率共同决定光路,单层 UV 偏移只保留可控的视差线索。

角膜反射与虹膜合成

虹膜纹理给出内部颜色,角膜法线决定表面反射方向。两者若共用偏移后的高光贴图,高光就会跟着虹膜沉到内部。将角膜反射独立求值,观察方向变化时才能保留外表面的位置感。

一个可检验的艺术近似使用 Schlick 反射系数:F=F0+(1−F0)(1−N⋅V)5F=F_0+(1-F_0)(1-N\cdot V)^5。N,VN,V 都归一化并处于同一空间,F0F_0 是正面反射比例。假定输入反射环境已按角膜粗糙度预过滤,内部颜色已包含虹膜光照,则一次界面的简化合成为:

hlsl
float facing = saturate(dot(corneaNormalWS, viewWS));
float F = F0 + (1.0 - F0) * pow(1.0 - facing, 5.0);
float3 color = (1.0 - F) * irisLit * eyelidVisibility
             + F * corneaReflection;

这里用 1-F 减少内部层贡献,是为了避免两个满强度层直接相加。它省略多次折射、吸收和第二界面,不是眼球的完整能量传输解。风格化高光可再由专用遮罩塑形,但应记录它修改的是表面反射还是内部亮斑。内部亮斑可以模拟焦散的视觉线索,只有实际追踪或近似求解了聚光路径时才把它称为焦散计算结果。

眼睑与转动

眼睑遮罩作用于虹膜和眼白的可见区域,几何眼睑还会遮挡角膜反射。静态画在眼球 UV 顶部的暗带会随眼球转动,容易离开真正的上眼睑。近景可以在眼眶坐标中投影遮罩,或使用真实遮挡;远景采用固定遮罩时需要限制转动范围。

左右眼的注视目标应来自同一个空间点,各自根据眼球中心求方向。直接复制同一旋转只能表达平行视线,近距离注视会失去汇聚。目标过近时给最大转角与平滑速度设置上限,再检查眼睑和睫毛是否仍覆盖眼球边缘。

验证与成本

用正面、左右斜视和掠射四组相机位置,先显示虹膜 UV,再打开反射与眼睑。正面偏移应为零,左右偏移应反号;眼球转动时高光由反射方向决定,眼睑遮罩由眼眶决定。分层模型增加纹理读取,独立透明角膜还会增加绘制与排序成本,因此透明几何和单通道分层着色需按目标画面比较。

2026-10-22 执行 CPU参考测试通过,三项眼睛检查覆盖正面零偏移、斜视符号和掠射拒绝。编译检查已用 DXC 编译 IrisUV 与分层合成两个片段,目标为 ps_6_0;眼球曲面折射、引擎运行、GPU 捕获和性能测量未执行。

相关主题

参考资料

  • Pharr、Jakob、Humphreys,PBRT 4e §9.3,Snell's Law 与 Fresnel Reflectance:支持界面方向和反射比例,2026-10-22 核对。本文平面视差与艺术合成是明示假设下的独立推导。