作者:Carmack
4 ?" P6 ]& k( J1 M. a; x5 x* R
* L# w; S- D! {. |7 O$ |. ?) ^2 K; t 关于阿凡提... 0 S. t7 y( h: h! C
2 B q$ B5 S/ W, b. N
制作一个像阿凡提这样的角色前,通常要了解一下他的历史... "阿凡提"并不是人名,而是一种称号,他源自于突厥语:"Efcndi"(由于音译,可能拼法会有不同)。意为"先生"、"老师",是对有学问、有知识人的尊称。他的本名是"纳斯尔丁(Nasreddin)"。纳斯尔丁·阿凡提究竟是真实的历史人物,还是一个流传于民间的虚构人物,众说纷纭。关于他的国籍,似乎也未有定论,维吾尔族朋友说他十二世纪出生在中国新疆的喀什,乌兹别克人说他出生在乌兹别克斯坦的布哈拉,阿拉伯人说他出生在伊拉克的巴格达,土耳其人则说他出生在土耳其西南部的阿克谢海尔城…不过可以肯定的是,阿凡提现在已经成为了一个世界性的人物形象,他的故事在世界各地广为流传…好像扯远了,呵~~ 在国内,大众对阿凡提这个形象的了解认识可能大都源于上海美术电影制片厂于七、八十年代拍摄的木偶系列片《阿凡提的故事》。' Q6 b* T, ~ U% b! m6 z. D
9 W2 W/ r4 [; `; B+ Q& n 3 H* Y s7 S; S1 P6 j( F% t
& S8 o' J. p, D) u2 k7 G 在做之前,我先从网上DOWN了一些片子,虽然清晰度很低,但做参考素材还是基本可以了。DOWN下来后,首先把片子通看几遍,找找感觉。同时从片中截取了大量的图片(如上)。看完后把截取下来的图片进行分类,以便于日后制作时方便查找: c: Y' N* ?& v* D" n' `6 I7 e
; n' ~* p" [ c$ e
接下来就进入实际制作阶段
" o6 Q" U% n# H$ g
, |& o9 v# C# I% s6 ]) h 模型部分: `. G$ \% Q+ h
9 A2 p, Z8 f1 p 首先是建筑,我从众多截取下来的图片中选中了几个我认为是片中比较有特色的,有代表性的建筑。由于考虑到最后的场景可能比较大,所以没有集中到一起建模,而是采取各自单独建立模型,最后合并场景的方法。(如图)是我建的各种场景模型(当然,他们的样子看起来可能与原系列片会有些小的区别。),每个模型在建立时随手都赋予了相应的材质,但大都没有进行精细的调节。因为场景还没有合并,灯光也还没有建立,此时进行过细的材质设定没有意义。
7 G, t: C& Y/ V6 p$ G0 E4 D
- F7 H4 g" c* P% F- j + |0 C5 L, Y' f9 ]
& X5 U- o" s9 S4 A# e4 L3 u$ l 制作初期时还做了一张预告图放到CDV,HXSD内部论坛里。~~呵 " Y7 E0 h* e' z4 A
9 l7 d1 Y- h+ Z
5 s7 A. z% n- R7 X) j8 p/ b; b( o6 k; H, _4 S1 o3 t" c! D. Q
继续..上面的那些模型并不复杂,在此不做详叙~大部分都是多边形建模,有些个别的(比如罐子)使用了NURBS。 在建模过程中我使用了一个MAYA小MEL插件:Randomize Points v1.6 它可以对选择的模型的点做随机变形,在这幅作品的建模程中我大量的使用了这个插件,给建模节省了不少时间
4 m; B7 o9 o8 b: n6 U* G* [
" W$ {! F$ x" e, x
1 `, G/ B( \3 b% }% q/ t: J) B5 F7 C' t# {$ a9 x2 ^
模型建完后,开始将大部分主要的建筑及物品合并成为一个场景。(图)是当时对场景的初步布局。
6 m- p6 j% u9 z- i
) k. n- M: q* C8 \1 }. R% E# X& Z' n* L* g
. p' y* z2 P! g* p% M4 i$ z! j% `, M8 T- j: t4 w
关于角色,经过仔细考虑,选择了这个阿凡提常用的经典动作,歪着头,手里拿一根小草在他那头驴的头顶晃来晃去… 因为没有打算做动画,所以模型是直接建成这种姿势的。6 q& R1 A' q0 a' m7 b' q/ `
( u0 Z0 M/ M3 G6 a% x, I4 ?
3 n* T: e& V# d
~" J5 T( [" U3 Z4 N% _ r6 Y$ \* d
灯光部分& J& F( F! P4 S% ]
5 h' R E- w1 _! M 在灯光方面,我也使用了一个MAYA的插件:GI_Joe。它通过灯光阵列的方式模拟GI效果,很方便的让我们可以用较快的时间模拟出不错的天空光效。
- g2 p3 J( E% {0 a5 F2 L+ B3 b, J5 Q5 h+ }& g
GI_joe提供了多种数量的灯光阵列选择,考虑到渲染速度的问题,我选择了16/16的模式(也就是Skylight与Groundlight各16盏灯,一共32盏灯来做阵列)
# S2 o. K9 d: s( V4 [* `# a1 t5 X) C- z) X3 e# D- M; q# _
5 ~- L% {' r; Z4 g7 y, L, U8 m3 L
; S0 A( x! C5 V: ] / Y- [: C2 m5 T9 U
. v' A; s0 H4 ?4 T6 Z
除了用GI_Joe建造的灯光阵列外,场景中还自己手工设了一些灯光。 (如上图)就是场景中所有灯光的示意图,我用英文字母给每一盏灯做了标记,下边依次解释一下他们的作用。& f" T; g- ~1 F, j
6 V/ O) d: {7 D% r- j" r
) J, J4 {$ g. d: W* b/ y# I% u( N5 I) k# A& U/ M
(A).这盏灯是模拟场景中的太阳光直射,并生成阴影。是场景中主光源。(光源类型为Directional Light)
# T% h* V8 R' }; ~( n+ E2 e0 l6 k" H; M
(B).灯光照射角度与A几乎一致,是一盏聚光灯(Spot Light),此灯并不参与照明,而是主要用来生成灯光雾,用来模拟环境中的大气效果。以此来加强场景的空间感。, ?% p, `3 \9 N3 j( I. V
) A& j: i- |, i, T, l
(C).此聚光灯(Spot Light)通过对其Color属性进行帖图,来模拟类似于树阴的光影效果,来丰富地面的变化。# o4 j0 M4 }) A! K, c. \1 B- k, L
( t2 o0 {7 y9 Z9 j Z3 G! L' [- z4 D
(D).是一个面光灯(Area Light),用来加强伞下石头的漫反射效果,使其不至于显得太飘。关于这一点,可能大家不太明白。在后边我会做具体的解释。
+ k/ D2 w& P( c: m9 ]# g. p+ g/ P! g2 g( |
(E).此灯与D是类似的作用。3 D: Z. ?0 E% |+ O1 w# ^
: \9 O( ?! K+ v- Z
(F).这是一盏体积灯(Volume Light),此灯的亮度为负值,功能是给尖顶房子的大门内部面降低亮度,这里使用体积灯是因为它的光照范围可以很容易控制。
, r7 A+ v; Q* X( i1 e7 N
/ v* B; `; L( T' g: \ l# r- \ (G)与F类似,主要是给楼梯下面的小储藏室降低亮度。
: u, K q1 ?# q, T( Y7 j
0 L) e; h, `- H- q7 T (H)(I)(J)(K)(L)这几盏灯都是为角色单独提供照明用的。其实有的灯并不产生实际的照明,而只是产生高光。比如大家可以注意观察一下阿凡提的靴子,会发现在阿凡提的靴子上有着丰富的高光(这也是能够体现靴子质感最重要的部分)(如图),另外阿凡提的眼睛的高光点也由单独的灯光生成。; S9 ?7 ~8 A( {6 o- `% N
C/ s8 ?* V0 U" P. u (M)GI_Joe生成的灯光阵列。主要模拟场景中的漫反射效果。7 Q2 M3 F0 f2 @7 l3 q
) |# e+ n( H; B' Q( p9 a + e* p8 t1 P! |
+ t* C, Z6 ^7 M2 c: j N4 p
为了使大家可以更清楚的认识以上灯光的用处。我特意将GI_Joe的照明效果与自定义灯光的照明效果各自单独生成一张图。大家可以比较一下。其实把这两张图叠加起来,就是渲染的最终效果了。(如图,上图是自定义灯光的单独照射效果,下图是GI_Joe的单独照射效果)" a9 f, [: T# I+ {" Y0 f3 h
0 W( Z4 ]) t! I
$ p4 m! t* k, E9 P" t1 r3 |5 B3 Y, q+ x3 z
下面回过头我再谈谈(D)(E)两盏灯的作用。前边我们提到了,场景中用GI_Joe生成的灯光阵列进行漫反射照明。它是依靠阵列中每盏灯的深度帖图阴影组合在一起来体现漫反射效果的。而深度帖图阴影的特点,是他会随着场景的复杂程度不同而不同。比如在深度帖图尺寸固定的情况下,场景越是复杂,效果就越模糊。反之就越锐利。所以如果想在比较复杂的场景中产生较清晰的漫反射效果就需要把阴影帖图尺寸设得足够高。 举例说明比较容易理解,如(图)所示。这是一个较简单的场景,场景中是一些碎石块儿。使用16/16的阵列来照明。图中红框框住的地方就是GI_Joe的深度帖图的尺寸设置。默认是128,图A就是在这种设置下的渲染效果。可以发现效果很不错。再看图B,图B是我在场景中加入其它建筑物品之类的东西后渲染的(当然,那些建筑并不在摄影机范围内),大家会发现由于新加入的建筑等物品都会分配掉有限的深度帖图资源,这使得分配给石头的帖图尺寸变小,从渲染效果上来看,就是漫射效果更模糊化,对于一些体积非常小的石块儿来说,漫反射效果几乎看不到了。石块儿像是从地面漂浮起来一样。失去了真实的感觉。可能有朋友会讲,按照前面的说法,将刚才那个帖图的尺寸值"128"提高不就可以解决这个问题了吗!,理论上是这样的。不过对于非常复杂的场景,想要使如此细小的石子都看得出漫反射效果,要把这个值提到很高才可以。暂不管GI_Joe是否可以无限制的提高帖图尺寸值。我们可以先想像一下,这个值实际上是同时对32盏灯起作用,一但提得太高会使渲染时间和内存占用成几十倍的增长,所以这并不是一个好办法。 我采用的是另一种方法。在石头的上方垂直建立一盏灯(作品中实际用的面光灯Area Light,而这里的演示场景我使用的是方向灯Directional Light)并打开阴影。这样就可以生成类似于A的效果(效果如图C),虽然效果上可能会比A来差一些,但渲染时间却几乎没有增加。控制起来也很方便,不会影响场景的其它部分。 为了使新加入的垂直方向的灯不至于影响当前的已经设置好的光照效果,可将其亮度值设得很低(比如0.001),而后将阴影亮度值以同样的比例调低。或者也可以在同样的位置再建立一盏同样类型的灯(但不开阴影),把灯亮度值调整为互相抵消状态(比如原灯亮度为1,那么此灯亮度设置为-1),这样,事实上灯光对场景的影响就消失了。只留下了我们需要的阴影效果。* {9 V4 L) Z- o5 k
# e: ?: U. i% X" i+ p- G: L# O9 \" \
) ]3 {8 }: W/ D8 S$ d( H4 r+ Z9 v) {5 h9 H9 m' F% J' v
类似的问题,有些地方我用了另一种方法。我想这张图可能大家都看得明白,就不多说了。(如图)所示 ! f: a/ s1 o5 q; I6 p# ^1 D3 s
9 U0 s' _' l0 ?& h3 B2 D( O
& Q* d4 p' |1 M8 Z" I) ~$ ~! a) g
材质部分! o7 p# g' l* B
m+ C7 S% k U% `# g6 Q- f/ [) ?9 P7 d
下面讨论一下材质方面的问题。 上图是场景中的材质球总图$ [ P' r7 P* M. b* [& |- d
& a/ ?) H$ S, |' J" v/ w
4 N& ?2 @$ ?6 z" `7 z
4 p! H S/ U3 I9 ]6 W# p# Y 是场景中的纹理帖图总图(包括位图纹理、2D程序纹理、3D程序纹理)。 在此幅作品的纹理设置中,除了非常不起眼的物品外,绝大部分物品我都使用了多层帖图(Layered Texture),因为我觉得这样会留下很大的调整余地,当然,这也会影响渲染速度
/ y6 t4 X1 B9 e# n; I+ {6 |3 m; V$ ^
$ f" w/ j8 w" _7 ~5 i. c9 x C( H, f/ F' Z& ]: x3 N( \, x
, K) |/ y+ y( b5 c7 E2 a/ J$ ]6 H% O' V
从以上两张图可以看出,场景中使用了大量的材质球和纹理帖图。我们看一下纹理总图。不过如果仔细观察就不难发现有一种类型的帖图纹理我反复使用了很多次。这就是MAYA的2D程序纹理:Ramp8 _: b3 J% b3 r! q/ K& ?+ {4 x' c
4 C, @, w4 r: `$ K+ J7 P( H
% B! ]& w) a# Y' G
' i3 E* v0 a% P' a 这个看似不太起眼的纹理在场景中的应用得十分广泛,可以说遍布了场景中的各个角落。下面举一个最简单的例子(如图):两个完全一样的多边形立方体,左边的使用了Maya默认的Lambert材质,右边的则在Lambert材质的基础上对Color属性帖了一个Ramp纹理(注意红框中的Ramp纹理参数设置)。我们会发现,右边加了Ramp纹理的立方体的质感变得强烈起来了。
* h) c5 m8 g Q3 T2 K8 x- |; d# ]
9 C# d! c5 V1 E
" L9 J- t) p7 _$ T: l l8 p* Z
0 ?' ?) P# E8 N3 M; M6 U 为了便于大家理解,我再从场景中提出其中一个尖顶的小屋来做为例子说明一下Ramp的用处。(如图),这个建筑非常具有典型性,因为它几乎每一个元素都使用到了Ramp这个纹理。我们可以看一下在同样光照的状态,使用了Ramp纹理(上图)和不使用Ramp纹理(下图)他们的对比渲染效果。图中以房体的材质为例,展示了Ramp的用处。如图所示,房体使用的是Layered Texture,也就是通过两层或两层以上的纹理的叠加来表现复杂的效果(叠加模式可以自选,这有些类似于PHOTOSHOP中图层之间的叠加模式)。相类似的,此建筑中每一个元素都是这样。
0 A7 n9 X& N0 \0 R# R/ p
4 ^1 @0 L; G+ w% e- ? ! C& b' s$ O: W- p J0 @
. p0 q$ T+ [7 S1 @3 f, C
同样的问题,场景中有些物品由于其形状的特殊性,用Ramp达不到很好的效果,所以我直接制作了专门的帖图,用帖图来代替Ramp模拟这种效果。(如图)所示6 y; L n. g' o4 ~& |" N% j( p) u
8 E* ?" m( i: @+ L( T6 p
5 b9 K' d- G9 e ^
; u7 O4 m8 q+ F 关于地面,最初本来打算使用多层程序纹理配合高密集的置换来制作,(如图)所示,就是我在开始时做的测试。效果是比较满意的$ c0 L5 N5 `, _
; b3 @+ r, x; V7 Z
; ^) ~& r& \2 n; ~ [* g9 e% G
: j5 e% B/ ^3 q( z" g$ h 但后来在实际使用时发现,由于场景中的地面面积非常大,如此高密集的置换所带来的计算量实在无法接受,而且经常出错。(maya渲染器的置换功能一直是被人抱怨的热点),最后只能放弃了全局置换而改为局部置换。(图)是最终的地面材质节点网和地面的顶视图渲染图。
) n$ f9 \- m4 s0 i7 U2 A; a# C9 b* U% k! o
, {( C6 `8 N$ u8 l7 O! S
6 g9 w' a/ X& v+ v 只在近景需要更多细节表现的水塘处使用了置换。(如图)所示,因为水与地面的衔接处显得太光滑了,缺欠细节。而加了置换之后效果就不同。水塘变得更加真实可信。; K3 g/ W. u) w* H& H2 R
" c# { b/ f* Z) i. }& h: _+ [8 | ' I2 X) ~- G0 {2 m
2 @8 T* |8 e# v4 N
除了水塘外,水面也做了比较细致的加工,因为是近景,所以要多花些心思。 主要给水面加了波纹和由罐子里流出的奶迹等细节~。 水面只是一个NURBS平面,波纹并不是置换或直接建模得来的,而是向水面材质的Bump属性添加帖图而得的,帖图是由一张水纹照片经过在PHOTOSHOP中去色变形得到。(如图)所示,图中是水面的材质节点网和用到的两张帖图。注意,节点网中的纯白色的纹理其实是一张比较混沌的位图,用来表现水中牛奶的混沌效果。由于我调高了它的亮度值,所以在节点视图中显示为了全白色)7 h( t* @- @. y
( |/ e" i/ f5 U' z) x. H! ?& N
# T' t7 r) `7 F, M& U1 ?7 }/ M( r4 B& r' M% }
水塘最终效果!6 H' Y' D' v( `0 d* i4 t' @0 R
8 _5 k7 ~3 u: _- _6 I8 _8 D
: L$ \6 ]: R2 s1 o
' L& T5 a' |3 g1 b6 ~1 l9 H 石头的材质是场景中为数不多的完全由程序纹理组成的材质之一(图)。大家看一下它的节点网,完全由3D程序纹理生成。同时一个2D Ramp纹理将石头分成上下两种颜色(如果注意观察一下就会发现石头的上半部分要比下半部分颜色来得浅),这其实是模拟石头浸在水中时的效果。(观察"水塘最终效果"中的石头也可以发现这一点)
9 k+ U' t: Y4 D E4 b5 r- t; Q7 ~8 j. \) I+ l- l2 V, ~
2 V8 O) U/ Z2 K+ W2 ~6 Y5 ^0 }' o! g# Q& y6 m0 ~+ w" H
本来想在网上找一些新疆传统花纹,可实在资料太少,Google搜了半天一无所获。于是我就自己制作了一些花纹,但总觉得不太地道,所以也没敢用得太多。(图)
5 J( o# t# c" N5 X
- l | [% C) |2 t 2 E |, D) A( K/ B" M" R
8 q& W3 d) w% b0 q! }/ H% b 角色方面,材质的设定也不是很复杂。以驴的身体材质为例。可能大家都会觉得驴子的身体有一种毛绒绒的感觉。这其实是使用了MAYA自4.5版后新加入的Ramp Shader材质,它可因灯光或摄影机角度的不同而使材质显现出不同的效果。(如图)所示,左侧为没有毛绒效果,右侧为有毛绒效果。大家仔细观察可以发现他们在参数设置上的差异造成的在实际效果上的不同点。当然,也可以自己手工连一个节点来实现类似的效果# }1 y }9 T" \. G6 d0 e
$ E. z: W# v8 K+ Z/ ^
! C0 l# }4 V4 z( S- R% h
* |- u5 H7 |( S- p5 P 同样使用这种方法的还有场景中竖立着的伞及其它一些物品及房屋等1 D3 p" q$ N0 r# |/ i
+ b+ v$ n2 b2 P( T5 h3 g
* `& o2 X. B1 t! l' r. l, V( \6 [! Q- S
阿凡提的衣服及脸部手部都体现出一种布料的质地。在MAYA中主要通过2D Cloth这个程序纹理来模拟。% ] T; Q+ d* N2 ]
* n7 O4 ^3 _1 k- v! E3 V * G3 G9 B( n- J3 S' }" d1 ^
6 [/ | e2 i& _! c! }5 z7 Q 是阿凡提脸部的材质节点网。其它衣服之类的材质与之类似。7 H @3 h9 c$ `: ?6 k7 M4 [
1 ]* o2 v/ @# Z) E7 D; j
* r7 d% X& i3 X. G* x4 f' T
6 Y! f* G* H# F9 z8 B J) F% P 天空在一张现成的图片基础上加工得到,帖在一个环境球上) T+ Z$ t* `( N0 x6 P( C
) ^& O5 i8 R6 p! \% h
4 E. r9 u/ @. _2 @
+ l/ t5 _6 `! Y$ c7 F6 f 屋顶烟囱冒出的烟雾使用了particleIllusion 3.0,它的2D粒子可以很方便的生成真实的烟雾效果。从中抓出几帧,到Photoshop里合成一下即可。 其实,加上烟雾也好,给水面加波纹也好,都是为了使场景"活"起来,不至于显得太死气沉沉的。( W+ w' N& L B$ O% T
3 e! n3 l% [/ j0 v4 G
! }1 ?( x: b# U4 k
. }$ ^8 Y7 e2 [6 \% [ 后期润色 l6 T& l2 |9 J
) K# `2 S6 ^- S9 F+ H) I; V4 T 我个人很注重后期的作用,对于静帧作品,后期软件当然是非Photoshop莫数了!直接由3D软件render出来的图或多或少都会有不满意的地方,比如整体的颜色可能会不太好啦,对比度或许也有问题…等等。有的朋友可能认为只有不用后期,直接由3D软件渲染出好图的才算高手。其实想一想,这些人可能是钻了牛角尖儿了。我以前也有同样的想法,不过现在我觉得,只要能达到满意的效果,我不在乎使用任何手段。况且在绝大多数情况下,在后期里解决问题要比去3D中修改、重新渲染效率要高得多。 x, C& d3 C8 t
5 K' P& O6 x0 Q' K' s/ f: V 现单就此图说说我对其进行润色的方法(注意:每幅作品情况都不相同,没有什么固定的操作模式,主要靠感觉): (如图)在Photoshop中将原始图层进行复制,对复制的位于上层的图层应用Gaussian Blur滤镜,将图层叠加模式改为"Soft Light",之后两图层结合为一个图层。此时图像可能会显得有些模糊,锐化一下,然后调一调色(比如改变一下色调,或饱和度等),大概就是这样。(如果你认为有必要的话,还可以单独生成Z通道,Alpha通道进行更细的调节),我当时制作时好像还做了些别的操作,但具体我记不清楚了,主要靠感觉..$ S# r9 W3 ^2 A
( U7 P Q' Z# _2 ~: N; G/ v
7 a8 _/ h& O0 i: \- m4 i& S
. ]# c+ G9 H- ^) X; q) x Maya原始渲染图与经过Photoshop后期润色图的对比! L) [+ E& M% i) F5 i
+ c z4 H: }( j0 ~* m& B
9 o9 n+ b, K3 V* P1 a" ?* i
2 P5 e% _3 I3 e) P 左上角好像有点儿空,加上文字刚刚好!!
. m5 B$ P6 y4 h* F3 j( J+ t
% \5 f( O6 A; W3 o) f
, G% E; M; P& E2 r+ U3 p( n
' l' W1 J1 H1 f/ B( Z. U ~ 如果嫌上面的对比不够大的话,这是我以前作品润色前和润色后的对比,从中可以体会出后期的重要性(只是调了颜色,其它未做修改)
5 I6 G) x/ _. E
& ]% `2 n2 b2 Q% h7 u
% \ X7 l/ q* \6 d( ^4 d! S6 W. I7 o8 |
在制作过程中,用PS随手调的几种效果~~& d7 j9 S. C) {/ p7 @4 j8 y
; G ~* J- m. A& v7 Z8 j |