unity 卡通风格渲染

在这里插入图片描述unity 卡通风格的渲染主要分成两个步骤,第一个步骤是给模型描边,第二个步骤是实现卡通着色的高光效果。这两个步骤同时也是对应的两个不同的pass。
第一个步骤首先要剔除正面,然后对背面的轮廓线进行描边,为什么要对背面进行描边呢。当然是因为对正面进行描边的效果很鬼畜啦,删除代码中的Cull Front,会看到下图的效果,所以这时候应该能理解为什么要对背面进行描边了,描边的方法是把顶点往法线的方向扩张一段距离,但是这样的话,如果一些内凹的物体,偏移的时候很可能就直接跑到前面来了,形成的画面很糟糕,因此,这里把所有的z值先减去0.5,然后再进行偏移。
在这里插入图片描述观察代码:

float4 pos = mul(UNITY_MATRIX_MV, v.vertex);
float3 normal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);  
normal.z = -0.5;
pos = pos + float4(normalize(normal), 0) * _Outline;
o.pos = mul(UNITY_MATRIX_P, pos);

其中有趣的是,我们是在观察空间进行偏移的,而不是在投影空间,因为投影空间已经不是线性变换了,这样扩张会出现错误,我们可以尝试着在投影空间进行上述变化。

float4 pos = mul(UNITY_MATRIX_MVP, v.vertex);
float3 normal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);  
normal.z = -0.5;
pos = pos + float4(normalize(normal), 0) * _Outline;
o.pos = pos;

会出现下图的效果,显然不是我们想要的。
在这里插入图片描述第二个步骤就是高光部分,高光的书写不同于blinn-phong模型,
fixed3 specular = _Specular.rgb * lerp(0, 1, smoothstep(-w, w, spec + _Specul在这里插入代码片arScale - 1)) * step(0.0001, _SpecularScale);
乍一看还是挺复杂的,我们可以去掉一些无关紧要的部分,比如去掉* step(0.0001, _SpecularScale);这

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值