RhinoFreak 发表于 2022-11-2 13:57

[Unity卡通渲染悦读笔记]UTS2-卷〇:概述

本文是基于Unitychan Toon Shader 2.0.9,即UTS2的shader阅读笔记。由于笔者在C#、unity、shaderlab等部分也是萌新,如有疏漏错误还请各路大佬斧正。
引言

卡通渲染Toon Rendering是比较热门的话题,属于风格化的分支。相比图形api,这个题目在图形学中属于比较高阶的技能点,所以笔者遇到的第一个问题是到底如何入手。
如果说学习vulkan、dx12这样的api属于削皮、切菜、腌制这种做菜基本都会遇到的流程(只是想做菜的话直接买处理好的预制原料可能是更好的选择,指使用引擎等),卡通渲染估计可以算做成一盘红烧肉,可以加冰糖成甜口,也可以加大料成咸口,撒不撒葱花,加不加干豆角,配不配酒都行,关键是用户爱吃就行(looks right)。
于是笔者想到,先不从某个具体trick入手,而是找一个相对完整的解决方案(一盘大家都说好的菜),在其中自上而下地阅读理解,学习trick原理包括他们的组合思路。于是笔者选择了UTS2——Unitychan Toon Shader ver2尝试研究。
shader文件架构

先通过官方文档看看UTS2的文件框架,如下图。



shader分类目录

可以看到根据feature不同shader被分为许多目录,包括根目录、NoOutline(无描边)、transparent(透明)、AngelRing(天使环特效)、Mobile、Tessellation(细分)、Helper等。
先阅读文档大致了解每个目录的feature。
根目录
此目录下是相对基础的shader。文档中介绍道,UTS2的shader可以分为两大类:相对传统的DoubleShadeWithFeather和更加先进的ShadingGradeMap。两者均能实现接近的效果,总体来说前者更适合颜色分明的场景,而后者更适合颜色互相融合交融的情况。
大类下的shader又会根据某些小feature设置不同tag,其中主要tag及其含义如下:

[*]Clipping: 应该是直接裁掉某些texture。
[*]TransClipping: 对texture并非完全裁掉而是考虑α透明度
[*]StencilMask: 使用stencil buffer标记不被其他模型遮挡的部分,比如动漫中常见的不会被挡住的眉毛,必须和StencilOut shader一起使用。
[*]StencilOut : 和StencilMaskshader一起使用实现上述功能。
NoOutline目录
NoOutline直接来说是无描边,当只需要绘制颜色或想用其他描边技术(比如PSOFT Pencil+ 4 Line for Unity)替换时选择使用,所以名称如上图前缀是ToonColor。效果如下图。



无描边透明Toon shader

AngelRing目录
天使环效果如下图,仅有ShadingGradeMap类的shader支持。



天使环shader

Mobile目录
为了适应移动端等平台作出性能妥协的shader,主要特点在支持的实时平行光和点光数量减少或需要用trick替代方案。
Tessellation目录
细分目录的shader支持DirectX 11的Phong Tessellation功能,可以让low poly模型得到更好平滑。
Helper目录
此目录中的shader允许单独把描线作为一种material添加到mesh。
小结

本文对UTS2——Unitychan Toon Shader ver2的文件框架进行简单梳理,下一篇计划开始阅读shader代码。
页: [1]
查看完整版本: [Unity卡通渲染悦读笔记]UTS2-卷〇:概述