NEKOPARTY STUDIO

Godot卡通角色渲染

字数统计: 527阅读时长: 1 min
2025/06/20
loading

其实这篇文章也没什么好讲的,卡通渲染的内容已经被分析烂了,知乎上随便翻翻都能找到对各种不同游戏的卡通渲染方法的分析。这篇内容只会简单交代一下我采用的方法,以及是一个对Godot 4.5更新的Stencil内容的尝试。

外描边

外描边使用最简单的办法,也就是法线外扩。这是一个不需要改造整体管线,定制程度高的办法,越简单越好用。

单纯的外扩固定距离的话,很容易导致离近了描边过粗,离远了描边看不见的情况。这个问题的解法是获取这个顶点在屏幕空间的深度(或者是到摄像机的距离),然后将宽度乘以这个距离的一定比例即可。

Cell-Shading

结果

目的是保证这种Shading方法能和所有光源都能产生正常互动,而不是只接受Directional Light的结果。

我这个项目的做法非常简单,就是计算光线方向与法线的点积,然后拿这个值去采样一张Ramp图即可。至于阴影部分算进这个点积的结果中,然后去采样Ramp图。采样Ramp图完成之后,乘以光源颜色即可得到结果。

点光源也是相同的处理方法,乘以衰减输入参数即可。但是由于点光源本身存在衰减的原因,实际效果可能没那么好。

由于管线限制,现在还做不到和Godot本身的GI解决方案互动,等更新。

面部着色

为了渲染鼻侧的勃朗伦光的效果,使用了通常的SDF面部阴影的方案进行实现。

面部

刘海阴影

这是高贵的Godot 4.5支持了Stencil才能完成的新功能。

结果

做法是给面部材质写进Stencil层。然后在头发材质的Next Pass里放一个纯渲染阴影的材质,做一定的顶点偏移,去检查面部的Stencil即可。

CATALOG
  1. 1. 外描边
  2. 2. Cell-Shading
  3. 3. 面部着色
  4. 4. 刘海阴影