ShaderGraph节点解析(159):膜虹膜混合节点(Sclera Iris Blend Node)详解

目录

一、前言

二、节点功能概述

三、渲染管线兼容性

四、端口详解

4.1 输入端口(Input)

4.2 输出端口(Output)

五、工作原理简析

六、应用场景与实战案例

6.1 写实眼部材质整合(HDRP)

场景:将虹膜与巩膜的属性通过混合节点整合,输出到 HDRP 主节点

6.2 调整过渡效果(HDRP)

场景:扩大过渡带,使虹膜与巩膜边界更柔和(适合卡通风格眼部)

七、使用注意事项

八、总结


一、前言

在眼部渲染中,巩膜(眼白)与虹膜(彩色部分)的自然过渡是提升真实感的关键。这两个区域不仅颜色不同,其材质属性(如法线、平滑度、次表面散射特性)也存在显著差异 —— 虹膜质地相对细腻,巩膜则更 “粗糙” 且带有细微血管。

Unity Shader Graph 中的巩膜虹膜混合节点(Sclera Iris Blend Node)专为解决这一问题设计,它能根据片段在眼部的位置,自动混合巩膜与虹膜的所有属性(颜色、法线、平滑度等),实现从虹膜到巩膜的无缝过渡。

该节点仅支持高清渲染管线(HDRP),是写实眼部材质管线的核心整合工具。本文将详细解析其功能、参数及应用,助力开发者实现自然融合的眼部效果。

二、节点功能概述

巩膜虹膜混合节点(Sclera Iris Blend Node)的核心功能是整合巩膜与虹膜的材质属性,通过判断当前渲染片段属于虹膜还是巩膜区域,动态混合两者的颜色、法线、平滑度及次表面散射特性,输出统一的属性集用于后续渲染(如输入到 HDRP 主节点)。

其核心特性在于:

  • 基于物体空间位置自动区分虹膜与巩膜区域(通过距离虹膜中心的距离判断);
  • 对所有属性(颜色、法线、平滑度等)进行平滑过渡混合,避免硬边;
  • 整合次表面散射的扩散轮廓(Diffusion Profile),确保两个区域的透光特性自然衔接;
  • 仅支持 HDRP,需与虹膜、巩膜相关节点(如虹膜 UV 定位、角膜折射节点)协同,构成完整的眼部渲染管线。

三、渲染管线兼容性

节点通用渲染管线(URP)高清渲染管线(HDRP)
巩膜虹膜混合节点不支持支持

四、端口详解

4.1 输入端口(Input)

端口名称类型描述
Sclera ColorColor巩膜(眼白)的颜色(包含血管、泛黄等细节)
Sclera NormalVector3巩膜表面的法线(控制漫反射方向,通常带有细微粗糙纹理)
Sclera SmoothnessFloat巩膜的平滑度(值较低,体现眼白的 “哑光” 质感,通常 0.1-0.3)
Iris ColorColor虹膜的颜色(包含纹理、角膜缘环等细节)
Iris NormalVector3虹膜表面的法线(相对细腻,可能带有虹膜纹理的凹凸细节)
Cornea SmoothnessFloat角膜的平滑度(值较高,体现角膜的 “镜面” 特性,通常 0.8-1.0)
IrisRadiusFloat虹膜的半径(物体空间单位,默认 0.225,用于判断区域边界)
PositionOSVector3当前片段在物体空间中的位置(用于计算到虹膜中心的距离,区分区域)
Diffusion Profile ScleraDiffusion Profile巩膜的次表面散射扩散轮廓(控制光线在巩膜内的散射方式,如较宽的散射范围)
Diffusion Profile IrisDiffusion Profile虹膜的次表面散射扩散轮廓(散射范围较窄,体现虹膜的细腻透光)

4.2 输出端口(Output)

端口名称类型描述
EyeColorColor最终眼睛颜色(混合后的巩膜与虹膜颜色,带有自然过渡)
Surface MaskFloat表面遮罩(1 表示角膜 / 虹膜区域,0 表示巩膜区域,中间值为过渡带)
Diffuse NormalVector3漫反射法线(混合后的巩膜与虹膜法线,影响漫反射光照计算)
Specular NormalVector3高光法线(通常采用角膜法线,体现角膜的镜面反射特性)
EyeSmoothnessFloat最终眼睛平滑度(混合巩膜与角膜的平滑度,过渡自然)
SurfaceDiffusionProfileDiffusion Profile表面扩散轮廓(根据区域选择巩膜或虹膜的扩散轮廓,控制次表面散射)

五、工作原理简析

巩膜虹膜混合节点的核心逻辑是 “区域判断 + 属性混合”,步骤如下:

  1. 区域划分

    • 以物体空间原点(虹膜中心)为基准,计算当前片段(PositionOS)到中心的径向距离(distance = length(PositionOS.xy),忽略 Z 轴,假设眼部为 XY 平面对称);
    • 与 IrisRadius 比较:距离≤IrisRadius 为 “虹膜区域”,距离 > IrisRadius 为 “巩膜区域”,中间设置过渡带(如距离在 IrisRadius±0.02 范围内)。
  2. 过渡因子计算

    • smoothstep生成 0-1 的过渡因子(blendFactor):虹膜区域blendFactor=1,巩膜区域blendFactor=0,过渡带内从 1 平滑降至 0。
  3. 属性混合

    • 颜色EyeColor = lerp(ScleraColor, IrisColor, blendFactor)(虹膜区域显示虹膜色,巩膜区域显示眼白色,过渡带混合);
    • 法线DiffuseNormal = lerp(ScleraNormal, IrisNormal, blendFactor)(混合漫反射法线,确保过渡自然);
    • 平滑度EyeSmoothness = lerp(ScleraSmoothness, CorneaSmoothness, blendFactor)(虹膜区域用角膜平滑度,巩膜区域用巩膜平滑度);
    • 高光法线:通常保留角膜法线(SpecularNormal = CorneaNormal),因为角膜覆盖整个眼部表面,高光特性一致;
    • 扩散轮廓SurfaceDiffusionProfile = blendFactor > 0.5 ? DiffusionProfileIris : DiffusionProfileSclera(根据区域选择对应轮廓);
    • 表面遮罩SurfaceMask = blendFactor(直接用过渡因子表示区域归属)。

六、应用场景与实战案例

6.1 写实眼部材质整合(HDRP)

场景:将虹膜与巩膜的属性通过混合节点整合,输出到 HDRP 主节点
  1. 连接流程

    hlsl

    // 1. 获取巩膜属性
    float3 scleraColor = _ScleraBaseColor * SAMPLE_TEXTURE2D(_ScleraTex, sampler_ScleraTex, IN.uv).rgb;
    float3 scleraNormal = UnpackNormal(SAMPLE_TEXTURE2D(_ScleraNormalMap, sampler_NormalMap, IN.uv));
    float scleraSmoothness = 0.2; // 巩膜低平滑度
    
    // 2. 获取虹膜属性(来自虹膜相关节点)
    float3 irisColor = IrisOutOfBoundColorClampNode.IrisColor; // 经过钳位的虹膜色
    float3 irisNormal = UnpackNormal(SAMPLE_TEXTURE2D(_IrisNormalMap, sampler_NormalMap, irisUV));
    float corneaSmoothness = 0.9; // 角膜高平滑度
    
    // 3. 输入混合节点
    ScleraIrisBlendNode.ScleraColor = scleraColor;
    ScleraIrisBlendNode.ScleraNormal = scleraNormal;
    ScleraIrisBlendNode.ScleraSmoothness = scleraSmoothness;
    ScleraIrisBlendNode.IrisColor = irisColor;
    ScleraIrisBlendNode.IrisNormal = irisNormal;
    ScleraIrisBlendNode.CorneaSmoothness = corneaSmoothness;
    ScleraIrisBlendNode.IrisRadius = 0.225; // 默认虹膜半径
    ScleraIrisBlendNode.PositionOS = IN.objectPosition;
    ScleraIrisBlendNode.DiffusionProfileSclera = _ScleraDiffusionProfile;
    ScleraIrisBlendNode.DiffusionProfileIris = _IrisDiffusionProfile;
    
    // 4. 输出到HDRP主节点
    o.Albedo = ScleraIrisBlendNode.EyeColor;
    o.Normal = ScleraIrisBlendNode.DiffuseNormal;
    o.Smoothness = ScleraIrisBlendNode.EyeSmoothness;
    o.SpecularNormal = ScleraIrisBlendNode.SpecularNormal;
    o.DiffusionProfile = ScleraIrisBlendNode.SurfaceDiffusionProfile;
    

6.2 调整过渡效果(HDRP)

场景:扩大过渡带,使虹膜与巩膜边界更柔和(适合卡通风格眼部)
  1. 参数调整
    • 手动扩展过渡范围:在自定义节点中修改smoothstep的阈值(如blendFactor = smoothstep(IrisRadius + 0.05, IrisRadius - 0.05, distance)),使过渡带从 0.05 扩大到 0.1,边界更模糊。

七、使用注意事项

  1. 渲染管线限制:仅支持 HDRP,URP 项目需手动实现混合逻辑(如上述工作原理中的步骤),但需注意次表面散射等高级特性可能无法复用。

  2. 参数匹配

    • IrisRadius必须与模型的实际虹膜尺寸一致(默认 0.225 对应 HDRP 标准模型),否则区域划分错误(如虹膜过大覆盖巩膜);
    • 扩散轮廓(Diffusion Profile)需提前在 HDRP 设置中创建(如巩膜用 “Skin” 轮廓,虹膜用 “Eye” 轮廓),错误的轮廓会导致次表面散射效果失真。
  3. 过渡自然度

    • 避免过渡带过窄(硬边)或过宽(虹膜与巩膜界限模糊),建议过渡范围为 IrisRadius 的 ±5%-10%(如半径 0.225 时,过渡带 0.205-0.245);
    • 法线混合需确保方向连续,可通过法线贴图的细节弱化过渡痕迹。
  4. 高光一致性:角膜覆盖整个眼部表面,因此SpecularNormal建议使用角膜法线(而非混合法线),确保高光在虹膜和巩膜区域的连续性(如光线照射下,角膜高光形状一致)。

八、总结

巩膜虹膜混合节点(Sclera Iris Blend Node)是 HDRP 中整合眼部材质的 “最后一公里” 工具,其核心价值在于:

  1. 属性整合:将虹膜与巩膜的颜色、法线、平滑度等属性无缝混合,解决 “两张皮” 问题;
  2. 区域区分:基于位置自动判断区域,确保属性切换符合眼部解剖结构;
  3. 高级特性支持:整合次表面散射扩散轮廓,为写实眼部的透光效果提供保障。

在眼部渲染中,自然的过渡比单独的细节更重要。该节点通过精准的区域判断与平滑混合,为高质量眼部效果提供了统一的输出,是连接各细分节点(虹膜、巩膜、角膜)与主节点的关键枢纽。实际开发中,需结合模型比例、风格需求调整过渡参数,才能实现既真实又符合设计的眼部渲染。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李也疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值