眼睛着色器 (Eye Shader)
眼睛着色器可作为在高清渲染管线 (High Definition Render Pipeline, HDRP) 中渲染眼睛的起点。使用此着色器可以表现重要的现象,例如角膜屈光、焦散、瞳孔散大、角膜缘变暗和次表面散射,使角色栩栩如生。
本质上,眼睛着色器是一个预先配置的 Shader Graph。要进一步了解眼睛着色器的实现方式,或要创建自定义的眼睛着色器变体,请参阅关于眼睛主栈的 Shader Graph 文档。
眼睛解剖结构
渲染眼睛时,熟悉眼睛的实际生物学结构有助于产生逼真的效果。
- 虹膜是环绕瞳孔的扁平有色圆环。它位于角膜下层。
- 角膜是虹膜上层的透明晶状体。它反射光线并将光线聚焦到瞳孔中。
- 瞳孔是虹膜中的开口,使光线可以进入眼睛并到达视网膜。
- 角膜缘也称为“角膜缘环”,是角膜和巩膜之间的较暗边界区域。
- 巩膜是眼睛的不透明保护性外层。创作眼图
创作眼图
请务必注意,由于次表面散射、角膜缘环、平滑度属性和其他表面信息在虹膜和巩膜之间的混合方式,必须分别提供各自的眼图。在实际中,这意味着需要提供不包含虹膜信息的巩膜眼图和不包含巩膜信息的虹膜眼图。
创建眼睛材质
HDRP 中的新材质默认使用光照着色器。要从头开始创建毛发材质,请创建一个材质,然后将其设置为使用毛发着色器。为此需要执行以下操作:
- 在 Unity 编辑器中,导航到项目的 Asset 窗口。
- 右键单击 Asset 窗口,然后选择 Create > Material。这会在 Unity 项目的 Asset 文件夹中添加一个新材质。
- 在 Material Inspector 顶部,单击 Shader 下拉选单,然后选择 HDRP > Eye。
属性
Surface Options
Surface Options 控制材质表面的整体外观以及 Unity 如何在屏幕上渲染材质。
属性 | 描述 |
---|---|
Surface Type | 指定材质是否支持透明度。具有 Transparent Surface Type 的材质比具有 Opaque Surface Type 的材质在渲染时更耗资源。根据选择的选项,HDRP 会显示更多属性。选项包括: • Opaque: • Transparent:模拟光线可以穿透的半透明材质,例如透明塑料或玻璃。 有关该功能的更多信息以及每个 Surface Type 显示的属性列表,请参阅 Surface Type 文档。 |
- Rendering Pass | 指定 HDRP 处理此材质使用的渲染通道。 • Before Refraction:在折射通道之前绘制游戏对象。这意味着 HDRP 在处理折射时包含此材质。要显示此选项,请从 Surface Type 下拉选单中选择 Transparent。 • Default:根据 Surface Type,在默认的不透明或透明渲染通道中绘制游戏对象。 • Low Resolution:在 Default 通道后以半分辨率绘制游戏对象。 • After post-process:仅适用于无光照材质。在执行所有后期处理效果之后绘制游戏对象。 |
- Blending Mode | 指定 HDRP 将材质每个像素的颜色与背景像素混合的方法。选项包括: • Alpha:使用材质的 Alpha 值来更改对象的透明度。0 表示完全透明。1 表示完全不透明,但在透明渲染过程中仍然会渲染材质。对于你希望完全可见但随着时间的推移也会逐渐消失的视觉效果(例如云),这非常有用。 • Additive:将材质的 RGB 值添加到背景颜色。材质的 Alpha 通道可调节强度。值 0 表示不进行任何添加,值为 1 表示将材质颜色的 100% 添加到背景颜色。 • Premultiply:假设已经将材质的 RGB 值乘以 Alpha 通道。当过滤图像或构建不同的层时,这可以提供比 Alpha 混合更好的结果。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- - Preserve Specular Lighting |
指示是否使 Alpha 混合不降低镜面高光的强度。这可以保留透明表面上的镜面反射元素,例如阳光照射玻璃或水。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Sorting Priority | 允许更改重叠的透明表面的渲染顺序。有关更多信息以及用法示例,请参阅材质排序文档。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Receive Fog | 指示雾效是否影响透明表面。禁用后,HDRP 在计算场景中的雾效时不会考虑此材质。 |
- Back Then Front Rendering |
指示 HDRP 是否在两个单独的绘制调用中渲染该材质。HDRP 在第一个绘制调用中渲染背面,而在第二个中渲染正面。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Transparent Depth Prepass | 指示 HDRP 是否将透明表面中的多边形添加到深度缓冲区以改进其排序。HDRP 在光照通道之前执行此操作,此过程可提高 GPU 性能。 |
- Transparent Depth Postpass | 指示 HDRP 是否将多边形添加到后期处理使用的深度缓冲区。HDRP 在光照通道之前执行此操作。如果要使用需要深度信息的后期处理效果(如运动模糊或景深),启用此功能非常有用。 |
- Transparent Writes Motion Vectors | 指示 HDRP 是否为使用该材质的透明游戏对象写入运动矢量。这允许 HDRP 处理透明对象的运动模糊等效果。有关运动矢量的更多信息,请参阅运动矢量文档。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Depth Write | 指示 HDRP 是否为使用该材质的游戏对象写入深度值。 |
- Depth Test | 指定由 HDRP 用于深度测试的比较函数。 |
- Cull Mode | 指定对于使用此材质的游戏对象需要剔除哪个面。选项包括: • Front:剔除网格的正面。 • Back:剔除网格的背面。 仅当禁用 Double Sided 的情况下,才显示此属性。 |
Alpha Clipping |
指示该材质是否类似于镂空着色器 (Cutout Shader)。 有关该功能的更多信息以及该功能显示的属性列表,请参阅 Alpha Clipping 文档。 |
- Threshold | 由 HDRP 用于确定是否渲染每个像素的 Alpha 值阈值。如果像素的 Alpha 值等于或高于此阈值,则 HDRP 会渲染该像素。如果低于此阈值,则 HDRP 不会渲染该像素。默认值为 0.5。 |
- Use Shadow Threshold |
指示 HDRP 是否对 Alpha 裁剪阴影使用另一个阈值。 仅当启用 Alpha Clipping 时,才显示此属性。 |
- - Shadow Threshold |
HDRP 用于确定是否应渲染像素阴影的 Alpha 值阈值。 仅当启用 Use Shadow Threshold 时,才显示此属性。 |
- Alpha to Mask |
指示是否开启 alpha-to-coverage。如果项目使用 MSAA,alpha-to-coverage 会根据像素着色器结果 Alpha 值按比例修改多重采样覆盖率遮罩。通常用于植被抗锯齿和其他经过 Alpha 测试的着色器。 仅当启用 Alpha Clipping 时,才显示此属性。 |
- Prepass Threshold |
HDRP 用于透明深度预通道的 Alpha 值阈值。此属性的原理与上述主 Threshold 属性相同。 仅当启用 Transparent Depth Prepass 复选框时,才显示此属性。 |
- Postpass Threshold |
HDRP 用于透明深度后通道的 Alpha 值阈值。此属性的原理与上述主 Threshold 属性相同。 仅当启用 Transparent Depth Postpass 复选框时,才显示此属性。 |
Double Sided | 指示 HDRP 是否渲染几何体中多边形的两个面。有关该功能的更多信息以及该功能可显示的属性列表,请参阅 Double-Sided 文档。 |
- Normal Mode | 指定 HDRP 用于计算背面几何体法线的模式。 • Flip:背面法线与正面法线成 180°。这也适用于材质,这意味着材质在几何体的两面看起来相同。 • Mirror:背面法线是正面法线的镜像。这也适用于材质,这意味着材质在背面反转。当想要在几何体的两面保留相同的形状(例如叶子)时,这非常有用。 • None:背面法线与正面相同。 仅当启用 Double-Sided 时,才显示此属性。 |
Material Type | 指定材质的类型。允许根据选择的类型使用不同的设置对材质进行自定义。选项包括: • Subsurface Scattering:将次表面散射 (subsurface scattering) 工作流应用于材质。次表面散射工作流程可以模拟光线与半透明对象(如皮肤或植物叶子)的相互作用和穿透方式。光线穿透次表面散射材质的表面时,会在离开表面之前在不同点散射和模糊。 • Standard:将基本金属性着色器工作流程应用于材质。这是默认的 Material Type 设置。 • Anisotropy:将各向异性 (anisotropic) 工作流程应用于材质。从不同角度观看材质时,各向异性表面的高光会在外观上发生变化。使用此 Material Type 可以创建具有各向异性高光的材质。例如,拉丝金属或天鹅绒材质。 • Iridescence:将彩虹色 (Iridescence) 工作流程应用于材质。随着视角或光照角度的变化,彩虹色表面看起来会逐渐改变颜色。使用此 Material Type 可以创建诸如肥皂泡、闪光金属或昆虫翅膀之类的材质。 • Specular Color:将镜面反射颜色 (Specular Color) 工作流程应用于材质。使用此 Material Type 可以创建具有彩色镜面高光的材质。这类似于内置的镜面反射着色器 (Specular Shader)。 • Translucent:将半透明 (Translucent) 工作流程应用于材质。使用此 Material Type 和厚度贴图可以模拟半透明材质。与次表面散射材质不同,半透明材质不会模糊穿透材质的光线。 有关该功能的更多信息以及每个 Material Type 显示的属性列表,请参阅 Material Type 文档。 |
- Transmission |
指示 HDRP 是否使用厚度贴图模拟材质的半透明度。可以使用扩散配置文件 (Diffusion Profile) 来配置次表面散射和透射设置。如需了解更多信息,请参阅有关次表面散射的文档。 仅当从 Material Type 下拉选单中选择 Subsurface Scattering 时,才显示此属性。 |
Receive Decals | 指示 HDRP 是否可以在该材质的表面上绘制贴花。 |
Receive SSR/SSGI | 指示是否在处理屏幕空间反射通道时使 HDRP 包含该材质。HDRP 在计算屏幕空间全局光照时也会考虑此材质。 仅当 Surface Type 设置为 Opaque 时,才会显示此属性。 |
Receive SSR Transparent | 指示是否在处理屏幕空间反射通道时使 HDRP 包含该材质。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
Geometric Specular AA | 指示 HDRP 是否对此材质执行几何抗锯齿。这会修改曲面几何体表面上的平滑度值,从而消除镜面反射瑕疵。 有关该功能的更多信息以及该功能显示的属性列表,请参阅几何镜面反射抗锯齿 (Geometric Specular Anti-aliasing) 文档。 |
- Screen Space Variance | 几何镜面反射抗锯齿效果的强度(大小介于 0 和 1 之间)。较大的值会产生锯齿较少、更模糊的结果。 仅当启用 Geometric Specular AA 时,才显示此属性。 |
- Threshold | HDRP 为了减少瑕疵而从平滑度值减去的最大偏移值。 仅当启用 Geometric Specular AA 时,才显示此属性。 |
Displacement Mode | 指定 HDRP 用于更改材质表面高度的方法。选项包括: • None:不对材质应用位移。 • Vertex displacement:根据 Height Map 对网格顶点进行移位。 • Pixel displacement:根据 Height Map 对网格表面上的像素进行移位。 有关该功能的更多信息以及每个 Displacement Mode 显示的属性列表,请参阅 Displacement Mode 文档。 |
- Lock With Object Scale | 指示是否使用变换组件的缩放值更改位移高度。这样可以保持位移幅度与变换组件的缩放值之间的比率。 仅当 Displacement Mode 设置为 Vertex Displacement 或 Pixel Displacement 时,才显示此属性。 |
- Lock With Height Map Tiling Rate | 指示是否使用高度贴图 (Height Map) 的平铺值更改位移幅度。这样可以保持位移幅度与高度贴图 (Height Map) 纹理的缩放值之间的比率。 仅当 Displacement Mode 设置为 Vertex Displacement 或 Pixel Displacement 时,才显示此属性。 |
- Minimum Steps | Unity 处理像素位移时所需执行的最小纹理样本数。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Maximum Steps | Unity 处理像素位移时所需执行的最大纹理样本数。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Fading Mip Level Start | 像素位移效果开始淡出的 Mip 级别。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Primitive Length | Unity 应用位移贴图的网格长度(以米为单位)。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Primitive Width | Unity 应用位移贴图的网格宽度(以米为单位)。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Depth Offset | 指示 HDRP 是否根据位移修改深度缓冲区。因此,使用深度缓冲区的效果(例如,接触阴影 (Contact Shadows))可以捕获像素位移细节。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
Exposed Properties
属性 | 描述 |
---|---|
Sclera Map | 指定一个纹理来控制巩膜的颜色。 |
Sclera Normal Map | 指定一个纹理来定义巩膜的法线贴图。 |
Sclera Normal Strength | 在 0 到 8 之间调节巩膜法线强度。 |
Iris Map | 指定一个纹理来控制眼睛虹膜的颜色。 |
Iris Normal Map | 指定一个纹理来定义眼睛虹膜的法线贴图。 |
Iris Normal Strength | 在 0 到 8 之间调节虹膜的法线强度。 |
Iris Clamp Color | 设置当折射光线到达角膜内侧时将使用的颜色。 |
Pupil Radius | 设置虹膜眼图 (Iris Map) 中的瞳孔半径(采用百分比)。 |
Pupil Debug Mode | 启用此属性后将显示调试模式,该模式允许校准虹膜眼图 (Iris Map) 所需的 Pupil Radius 值。为了正确校准,请确保 Iris Offset 为 0,Pupil Aperture 为 0.5(中间位置),然后白色圆圈必须严格位于虹膜图案内。请参阅以下屏幕截图中的示例:![]() |
Pupil Aperture | 设置瞳孔状态,0 表示最小瞳孔 (Min Pupil Aperture),1 表示最大瞳孔 (Max Pupil Aperture)。 |
Min Pupil Aperture | 设置最小瞳孔值。 |
Max Pupil Aperture | 设置最大瞳孔值。 |
Sclera Smoothness | 设置巩膜的平滑度。 |
Cornea Smoothness | 设置角膜的平滑度。 |
Iris Offset | 设置虹膜位置偏移,这是有用的,因为现实世界中的眼睛永远不会对称且居中。 |
Limbal Ring Size Iris | 设置虹膜中角膜缘环的相对大小。 |
Limbal Ring Size Sclera | 设置巩膜中角膜缘环的相对大小。 |
Limbal Ring Fade | 设置角膜缘环的淡出强度。 |
Limbal Ring Intensity | 设置角膜缘环的黑暗程度。 |
Iris Diffusion Profile | 设置扩散配置文件 (Diffusion Profile) 来控制虹膜的次表面散射属性。 |
Sclera Diffusion Profile | 设置扩散配置文件 (Diffusion Profile) 来控制巩膜的次表面散射属性。 |
Advanced Options
属性 | 描述 |
---|---|
Enable GPU Instancing | 启用此复选框可以指示 HDRP 在一个批次中使用相同的几何体和材质来渲染网格(如果可能)。这样可以加快渲染速度。如果网格具有不同的材质或者硬件不支持 GPU 实例化,则 HDRP 无法在一个批次中渲染这些网格。例如,如果游戏对象具有基于对象轴心的动画,则不能对它们进行静态批处理,但 GPU 可以实例化它们。 |
Baked Emission | 指示发射颜色是否影响全局光照。 |
Motion Vector For Vertex Animation | 指示 HDRP 是否为使用顶点动画的游戏对象编写运动矢量。这将消除顶点动画可能导致的重影。 |
Add Precomputed Velocity | 指示是否使用存储在 Alembic 文件中的预先计算的速度信息。 |