12_眼睛处理

眼睛处理

参数追加

眼睛需要进行半透明处理以及透过头发需要进行蒙版测试所以添加相关参数 声明 这里调整直接乘上4维的颜色,可以使用混合颜色进行调整透明度

蒙版测试的相关参数 相关字段 判断条件 处理方式

对应在基础Pass里面追加

透明度调整

眼影的基础染色给个纯黑在给一些透明度 调整混合模式,这里是常见的混合 这里设置为SrcAlpha和 OneMinusSrcAlpha就好了,默认是One和Zero 这样就透明了 同样的调整内高光

蒙版测试原理

这里有些绕,既要考虑蒙版测试和深度测试还得考虑渲染顺序 进行的优先级是先渲染顺序然后蒙版测试最后深度测试

渲染队列

Unity使用渲染队列调整渲染顺序,数字越大渲染顺序越靠后

蒙版测试和深度测试

这里参考下图,举一个例子,其他情况可以自己去推。给出两个物体AB,分别设置一个蒙版值,渲染顺序为A->B,前后关系是A在B前方。 这里注意默认蒙版值基数为0,判断条件都是以这个基数判断 A设置蒙版值为2,判断条件为大于等于,操作为“替换Replace”。 B物体蒙版值为3,判断条件为大于等于,操作为“替换Replace”。

首先考虑渲染顺序是A->B,所以A先计算 A首先进行模板测试,判断条件是大于等于2,蒙版值为2>基数0,模版测试通过,因为操作为“替换Replace”,所以在A渲染时蒙版值基数被替换为2。然后是深度测试,因为率先渲染,所以无遮挡,不需要剔除,深度测试通过

接下来是B进行渲染 先模板测试,判断条件是大于等于3,蒙版值为3>基数2,模版测试通过,因为操作为“替换Replace”,所以在B渲染时蒙版值基数被替换为3,重叠部分也变成了3,所以重叠部分应该为B的颜色。然后是深度测试,因为A先渲染,所以有遮挡关系,那么重叠部分B的颜色就会被剔除,最终效果上就为黑色

最后值得一提的是如果遮挡物是半透明,那么深度剔除就不会生效的

排序设置

渲染队列设置

基于上面说的原理,先对模型进行渲染排序,只需要对眼睛头发排序就行了 先对眼睛部分排序 眼睛肯定是最先渲染所以给个2001 其次就是高光了,内高光和外高光都给个2002

最后就是眼影了,给2003

头发就在后一点,2004吧

蒙版设置

需要眼睛在头发前面,那么先从整体来看,默认蒙版基数是0,头发是最后渲染。因为眼睛部分先渲染所以会替换蒙版值,那么只要保证头发的蒙版值比眼部的小就行了。这里直接让头发部分按照基数0来设置,而眼睛就大于这个值就行了 头发,判断条件为大于等于,因为默认基数为0,这里蒙版值给的0,可以保证默认通过蒙版测试 眼睛部分虽然可以都设为同一的蒙版值,但最好还是区分一下,从里到外递增,判断条件都是大于等于 眼睛 内高光和外高光 眼影

现在就有了透过头发的效果了,但是没有颜色,原因和上面说的一样,深度剔除给剔除了

重新绘制眼睛

追加Pass

为了解决穿过头发没有颜色的问题,这里需要进行重新绘制,就是在调一遍Pass 这里新增了一个无光照Pass 这里相当于在跑一遍之前的BasePass,而如果不开启就为空,什么也不做

参数调整

头发贴图中有透明度信息的,这里可以处理眼睛透过头发的强度 这里进行透明度设置,以及蒙版值,之前设置的眼睛部分最小的蒙版值是眼睛的也就是2,所以这里设置为小于2的值就好了

最终效果


章节导航

Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • URP - RendererFeature :ScreenSpaceOutline
  • 平滑法线处理 - 八面体映射
  • Lv.3 Unity主线:一个简单的PBRShader
  • 理论支线:直接光漫反射与GGX高光的混合问题
  • 理论支线:PBR - 基于图像的照明( image based lighting-IBL)
  • # #