天天看点

unity-NPR-卡通渲染

title: unity-NPR-卡通渲染

categories: Unity3d

tags: [unity, shader, npr, ta]

date: 2019-03-07 11:44:18

comments: false

NPR : Non Photorealistic Rendering, 非真实的渲染, 卡通渲染 是里面的一个范畴

前篇

  • NPR——卡通渲染(一) - https://blog.csdn.net/jvandc/article/details/81171250 (主要参考)
  • 【NPR】卡通渲染 - https://blog.csdn.net/candycat1992/article/details/50167285
    • 对应的git : https://github.com/candycat1992/NPR_Lab
  • 卡通渲染及其相关技术总结 ( good ) - https://blog.uwa4d.com/archives/usparkle_cartoonshading.html (主要参考)

名词解释

  • Cel Shading - 卡通渲染

卡通渲染的特点通常有三个:一般物体轮廓处有黑色描边;漫反射呈现明显的色块,而不是渐变;高光区域通常是一块突变的白色亮块。

npr代表作品

  • 美术风格 : 军团要塞2,
    • 美式卡通色彩比较丰富,光影表现更真实自然
  • 日式风格 : 崩坏3,
    • 日式卡通风格凸出大范围的纯色色块,光影边界明显,“非真实感”明显

卡通着色

卡通风格一般可以大致分为日式和美式的 [2], 日式卡通风格凸出大范围的纯色色块,光影边界明显,“非真实感”明显;而美式卡通色彩比较丰富,光影表现更真实自然。下文将探讨实现这两种风格的着色技术。

Cel Shading和Tone Based Shading

先来描述两种经典的NPR着色方法,分别是Cel Shading和Tone Based Shading5。

Cel-Shading

Cel Shading的基本思想是把色彩从多色阶降到低色阶,减少色阶的丰富程度,从而实现类似手工着色的效果,具体来说,可以用如下计算方法:

unity-NPR-卡通渲染

其中,Kd表示模型自身的贴图颜色,celCoord表示法线和光照方向的点积,然后将其点积值 [−1,1][−1,1] 映射至 [0,1][0,1],用作一维色彩表的查找坐标,而paletteTex则是由美术绘制的一维色阶表,一般来说是由几个纯色色块组成的,如下图:

unity-NPR-卡通渲染

上述做法可以用于模拟卡通渲染的漫反射分量,却并没有考虑到视角相关的光照分量的模拟,因此很难实现类似菲涅尔效果的卡通渲染。实际上,也可以用类似的查找表的思路来视角相关光照分量的色阶离散化6,只需要将一维查找表扩展到二维即可:

unity-NPR-卡通渲染

相应地,查找坐标也扩展到了二维。

unity-NPR-卡通渲染

Tone Based Shading

不同于Cel Shading,Tone Based Shading的风格化是基于美术指定的色调插值,并且插值得到的色阶是连续的。首先需要由美术指定冷色调和暖色调,而最终模型的着色将根据法线和光照方向的夹角,在这两个色调的基础上进行插值,具体算法如下:

unity-NPR-卡通渲染

其中,Kd仍是模型自身色彩贴图,Kblue,Kyellow和alpha,beta则均是自定义的参数。

unity-NPR-卡通渲染

基于tone based shading绘制的球体

日式卡通中的着色

引文 [1] 中介绍了游戏《罪恶装备》使用的卡通着色算法(西川善司的两篇文章详述了《罪恶装备》制作流程),表示如下:

unity-NPR-卡通渲染

继续阅读