

ShaderLab入门实践5
qSEdOHKkLj
TA
阅读 1243
2020年2月24日
描边Shader的实现
Hello,小伙伴们,汪汪又来给大家带来Shader实践了。这次是描边shader的实现。
截至目前为止,我们的shader实践已经进行了5期了(目前为止看不懂的小伙伴们可以回顾一下汪汪前面写的基础哦~),我们都是从最基本来开始的,“颜色”,“UV”,之后是本篇文章的“法线”,当然了,后面还有光照,序列帧动画等,这些我们后面会慢慢发布实践来为大家讲解。本次法线的案例讲解是为了后面“毛茸茸”材质的讲解做铺垫,如果大家喜欢,可以关注汪汪,汪汪会持续更新Shader案例,还有一些美术开发技巧。
好了,这次我们要做的是一个描边Shader,我们首先来看一下效果吧:

无描边

描边后
当然了,除了卡通渲染以外,我们还能高亮(可以加HDR和Bloom)突出物体,一些需要重点提示的道具,人物都能用这样的方法来实现:

那具体原理是什么样的呢?

首先我们将我们需要描边的物体往外扩大一圈,再上色为边缘色
然后再返回我们模型原本的贴图,但是由于我们第一次渲染模型往外扩了一圈,原本模型被遮挡了,所以我们看不到我们原本模型,以及贴图
最后把扩大的模型正面剔除,这样,我们原本的模型就能显示了。
我们简单分析了原理,现在我们开始入手:
首先我们需要把模型扩大,然后渲染为纯色:

然后,我们渲染模型本体和贴图,这里和第二节讲的并无区别:

好了,我们看看效果:

这里汪汪设置的OutLine为黑色,所以我们扩大后的模型也是黑色。
接下来就需要进行我们的最后又一步:剔除
我们需要剔除放大后模型的正面:
我们加上Cull Front

再来看一下效果:


针对以上代码,汪汪有几点要说明:
矩阵变换:
矩阵变换,也就是坐标转换,物体-世界-视图-投影的转换,这里是计算机图形学基础了,了解一些计算机图形学基础很利于大家写Shader哦,但是汪汪在这里如果详细讲解,没有必要,会浪费很多时间,这里汪汪只给出一些转换方法和含义:
UNITY_MATRIX_MVP 当前模型视图投影矩阵
UNITY_MATRIX_MV 当前模型视图矩阵
UNITY_MATRIX_V 当前视图矩阵
UNITY_MATRIX_P 当前的投影矩阵
UNITY_MATRIX_VP 当前视图投影矩阵
UNITY_MATRIX_T_MV 模型视图矩阵的转置
UNITY_MATRIX_IT_MV 模型视图矩阵的逆转置
_Object2World 当前模型矩阵
_World2Object 当前世界矩阵的逆矩阵
其中,汪汪在第二节提到的o.pos=UnityObjectToClipPos(v.vertex);,这个其实也是坐标转换,相当于
o.pos = mul(UNITY_MATRIX_MVP,v.vertex)
剔除:
Cull Off 不剔除
Cull Back 剔除背面(背向摄像机的面)
Cull Front 剔除前面 (朝向摄像机的面)
好啦,本期入门实践就到这里啦~是不是很简单?
大家有什么意见和建议,都可以评论留言哦,另外有错误和不足之处也请小伙伴们多多指出!(*/ω\*)
发布于技术交流
8条评论

问
AI
全新AI功能上线
1. 基于Unity微调:专为Unity优化,提供精准高效的支持。
2. 深度集成:内置于团结引擎,随时查阅与学习。
3. 多功能支持:全面解决技术问题与学习需求。

问
AI