[翻译]使用cycles的toon shader节点实现卡通风格渲染
blender吧
全部回复
仅看楼主
level 6
mobilefzb 楼主
原文:http://www.minimaexpresion.es/?p=1070&lang=en
作者全部都用cycles做的,以前一些教程还是在blender render模式下,用freestyle做个边然后最后合成跑到cycles中,不过现在freestyle for cycles要出来了,所以,这个文章就大家看看即可。
2014年10月02日 04点10分 1
level 14
[乖]直播,
2014年10月02日 04点10分 2
level 6
mobilefzb 楼主
ycles渲染引擎最近的一个扩展就是toon着色器。许多人对它很感兴趣,但是除了源码展示(http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56980)。关于它没有更多的信息了,所以就需要依靠以前的经验了。这个教程目标是教会渲染者如何使用这个toon着色器来创建带动漫效果的渲染器,下面就是一个例子:
教程分为4个不同的章节
1.灯光设置
2.着色(shading)
3.渲染参数
4.合成
灯光设置
第一步是设置我们的灯光,基本上是一个key light和一个fill light。两个灯光都是点光源且尺寸是0.任何灯光的尺寸不同于0将创建渐变色效果在着色的时候。但是这里我们希望着色尽可能的平(flat),然后我们将手动创建和控制渐变色在我们的物体上和人物上使用尺寸和光滑参数在toon着色器。
Key Light:我们使用一个点光源,放在人物的右上方,然后设置灯光的*strength*为一个很大的值。这个将成为我们的主要灯光,这个将定义着色方向和唯一一个铸造影子(casting shadows)在我们的场景中。这个很高的*strenght*值展示这里需要一个灯光照亮的模型有10个blender单位高。更小的物体这个值应该设置的更小。
Fill Light:我们使用一个点光源以相机为父物体(这个不太理解,可能翻译有误),且关闭*cast shadow*所以它不能创建一个第二阴影在物体和人物下。这个灯光这里用来填充物体的黑边,所以他们不会成为漆黑一片。它也会创建一个另外的高光和细节在我们的物体中。然后,看起来过度的*strengh*值应和被着凉的模型尺寸相关。更小的物体需要更加普通的值。
World Background:通常我们背景是完全的黑色,但是如果你可以调整下,比如灰色。它可以帮助填充阴影,但是也有一些噪声,将要求更高的采样来清除,且这个意味着更长的渲染时间。在这个特别的场景中我们不使用背景光。
着色(shading)
在这个章节我们将设置材质来定义模型的外表。我们将使用toon shader来制作所有的材质,所以一些关于它的行为的建议也会如下给出。
首先,你应该总是使用toon shader带smooth shading,否则你将得到一个不想要的结果。
其它需要注意的是当使用toon shader必然包含*size*和*smooth*设置在shader中将提供非常明显的光影分界线(terminator artifact)在低模物体上。
toon shader能工作在diffuse模式和glossy(平滑)模式,且一个组合导致失真在一个模式中可能不会到其它模式出现。通过一些实验后,我发现如下的两个规则对于diffuse和glossy模式,你可以避免分界失真:
Diffuse mode: size+smooth <= 0.9
Glossy mode: size+smooth <= 1.0
你不能设置size和smooth两者值加起来超过0.9在diffuse模式下或者1.0在glossy模式下,这样就在toon shader下就不会得到一个失真的分界线。
我们现在检查节点设置对于我们机器人的主材质。我们将开始设置我们的基本diffuse shader。*Size*将让我们定义灯光和阴影之间的比率在物体中。在另一方面,*smooth*将允许我们定义分界区域的宽度,这是一个边区域分割灯光和阴影区域在一个物体中。diffuse组件在我们的材质会有0.6的size值大小,分配光照表面光到一个模型的主要部分,0.2的smooth值,给出一个漂亮的过渡阴影。
2014年10月02日 04点10分 3
level 6
mobilefzb 楼主
下一步是添加光泽元素。它看起来是违反直觉的,这是我们将要使用其它toon shader在diffuse模式里。结果发现,设置smooth值到0将创建一个非常尖锐的终结线不带过渡在灯光和阴影之间,创建一个光滑观察。在必要情形下例如此例,一个toon shader在diffuse模式带smooth设置为0将给我们一个跟好的结果比一个toon shader在光滑模式。为了获取更多微妙的细节在必要的区域,我们将使用同样的颜色我们用于diffuse元素,然后降低到80%使用HSV节点。然后代替连接我们的diffuse和光滑元素带一个mix shader节点。驱动由一个层的重量节点,我们将简单使用add shader节点。
获取更多的细节展示,我们可分配这个材质不同的变化到我们模型的部分。
渲染参数
在到达后期章节前,我们必须设置这个场景的渲染设置。
Light paths:这里是设计卡通风格的渲染,所以和现实场景的渲染有所区别。所以我们不需要灯光四处波动。设置最小最大波动为0且关闭散焦。
Sampling:0反弹和硬灯光意味着噪声将被降低到几乎不用在意。通常50采样就可以获取一个足够干净的渲染。你可以使用更少的采样且可能没有更多不同到你的眼睛。但是边沿过滤节点在后期会注意这个不同且返回许多噪声在边沿我们需要我们的外形。并且,这个渲染器技术发展很快,所以低采样不会有太多好处。
Film:我们将要将我们的场景分为*background*和*foreground*渲染层,所以为了能合成他们我们需要开启过渡film。
如同我上面说的,在到达合成章节前,我们必须创建两个渲染层:Foreground和Background。这个是必要的来进行
正确的
边沿探测,且能帮助我们加速渲染(比在背景渲染层通道快很多)。它也会允许我们设置不同轮廓给背景或者前景元素。
Foreground渲染层:这个渲染层会包含所有场景内的物体除了背景元素比如地板,墙,天花板,风景或者地形。我们必须总是使能normal传入到渲染层中,作为必要的边探测在后期合成。你可以看见在下面的屏幕截图,这个渲染层只包含第一层,我们在这里放置了每个物体除了地板。
Backgroudn渲染层:这个渲染层用于存放背景元素例如地板,墙,天花板,风景或者地形。注意在下面的屏幕截图中我们只将这个层放到第二层,我们在这里放置地板。我们将使能normal传入到这个渲染层在我们想获取轮廓绘制到背景的情形的时候。在许多带简单背景情形下,比如这个场景里面的,我们能设置一个更低的采样给这层,可以加速渲染。这个可通过调整*Samples*指示器在下面的屏幕截图。如果我们使用默认值0,这个渲染层将被渲染使用场景同样的采样率。
合成
我们现在能点击渲染并开始合成。这个是节点配置我们将设置在合成器来创建我们的轮廓:
如同你能看的我们提取内部和外部轮廓从foreground渲染层。我们不提取轮廓从background渲染层在这个例子里因为地板只是一个很简单的平面。一旦我们提出出我们的轮廓,我们合成到background和foreground且然后乘(multiply)这个结果由内部和外部轮廓在独立步骤中,所以我们能使用不同强度的轮廓。
内部轮廓
这个是normal传入到演示的。我们会首先分离normal输出在foreground渲染层到它的HSV组件和过滤它的V(for Value)输出使用一个edge探测过滤器。在这个情形下我们将使用kirsch,但是在某一场景Prewitt和Soble也可以使用。
结果图像能展示一些噪点在源渲染比较暗的地方,这个可以被解决由提高factor在过滤器中。随后我们将翻转颜色来获取黑色边带一个白底背景,应用一个Dilate/Erode过滤器来使边更加均匀以及用高斯模糊(blur)来进行一些反锯齿。如果你不确定你将改变分辨率在未来,设置相对值给高斯模糊是比较好的,这个模式总是输出一样在不同的分辨率下,通过补偿。最后当我们应用这个轮廓乘(multplying)我们渲染,我们会使用0.4的因数,这个将带来一个巧妙的轮廓完整的整合到图像中。
2014年10月02日 05点10分 4
level 6
mobilefzb 楼主
看了这个教程,自己也学着做了下,还行吧,就是轮廓线有点粗,粗细不好调整,等freestyle for cycles出来后,在试试那玩意。
https://tieba.baidu.com/p/3325026417
2014年10月02日 05点10分 6
level 1
厉害了,多谢楼主[太开心]
2019年12月11日 06点12分 7
1