ACG1:动漫风格化渲染

动漫风格化渲染 【声明】本文内容全部基于个人观察,具体算法细节可能有所不同,也没必要完全相同,毕竟这只是一个 basline,供日后改进使用 原神风格化渲染 选取原神作为 baseline,主要因为本人是原神玩家,同时原神的动漫风格化渲染一定程度上代表了业界主流做法,包含 ramp 采样阴影,屏幕空间边缘光,背向法线外扩描边,ilmMap 控制材质 演示界面为 unity 自带的 shader graph(然而目前 SG 不支持多 Pass,又只能写回 shader),其实用啥软件都可以,没有非常复杂的算法需要依赖于某些高级软件特性(可能获取深度图在某些软件中需要一丢丢工作量) 基础过程 动漫风格化渲染可以从 Unlit 开始: base_sg unlit 为了获得动漫的阴影硬边缘,需要依赖于 NdotL,并设定阈值: NdotL_sg hardShadow 如果希望过渡有彩色渐变,就需要依赖于一张 ramp,使用 NdotL 的值采样 ramp(原神采样 ramp 的公式为 saturate(NdotL + 1),大于一的部分不采样 ramp 直接返回 1,就是那条白黄交界线): ramp_sg ramp 边缘 边缘光和描边一样,都可以突出主体,原神人物边缘光为屏幕空间法线方向边缘光(叶子边缘光为光源方向),向法线方向偏移采样深度图,深度差大于阈值则使颜色变亮形成边缘光效果,宽度由偏移量控制,形成近似等宽的效果(这是相对于菲涅尔边缘光的优势): rim_sg rim 描边就是背向法线外扩描边,此时模型法线需要使用平均法线。 ilm 为了表现出材质区别,使用 ilm 标记区域,ilm 的通道分配直到现在,基本还是沿用罪恶装备的定义。R 通道表示材质粗糙度用于计算高光(各种高光算法其实都可以);G 通道表示接受阴影(原神中 0 表示永远为阴影,0.5 表示正常,1 表示永远为亮,原神中阴影色是单独定义的颜色,和 ramp 中最深的颜色是不同的,这样可以在阴影中创造层次);B 通道表示高光 mask(用于 mask 在 R 通道计算的高光);A 通道原神中表示采样 ramp 图的第几条:...

February 10, 2022