The Science Of CG 渲染背后的科学.docx
《The Science Of CG 渲染背后的科学.docx》由会员分享,可在线阅读,更多相关《The Science Of CG 渲染背后的科学.docx(15页珍藏版)》请在冰豆网上搜索。
![The Science Of CG 渲染背后的科学.docx](https://file1.bdocx.com/fileroot1/2023-1/10/81948ed0-5f09-4186-ab32-5fa4ec058dd9/81948ed0-5f09-4186-ab32-5fa4ec058dd91.gif)
TheScienceOfCG渲染背后的科学
TheScienceOfCG渲染背后的科学
算图要真实除了灯光,GI参数设置之外,材质本身也是非常重要的.成功的渲染图,这三项因素缺一不可.材质其实有很多不同的明暗器(shaders):
某些明暗器比较贴近真实世界的光影变化某些则是比较阳春,在本篇的讨论串中你可以看出材质的重要.另外RAW格式与光谱算图也有稍做讨论.
这篇文章翻译自CGTALK的讨论串,标题虽是TheScienceOfCG,但主要还是围绕着CG算图/材质在讨论,来自乌克兰的网友mister3d与playmesumch00ns提供了非常棒的文章与插图,所以特地选了这篇翻译成中文跟各位网友分享.
-----以下翻译自CGTALK讨论串-----
标题:
TheScienceOfCG渲染背后的科学
Dtox:
我不小心逛到同样标题的讨论串。
但是,为认为在那一帖中讨论的不是很多。
我简直不敢相信,那帖没有真正的深入讨论。
在那帖中有位老兄想讨论CG的物理,希望能够帮助软件操作的观念。
虽然有些人的答复都是有益的,但它并没有给任何人真正讨论方向。
有位提到想知道如何光如何运动,这样一来他就可以根据光的理论来套用在他的软件使用上。
这是我认为每个人都想要知道的。
大多数的答复是“去学一下艺术理论吧”,或“管他的只要调整参数看起来像,就对了”。
虽然这样说有其原因,但我认为还有更中庸的做法。
学习传统艺术能够更了解CG原理是一个基础,但是在理论与实务之间还有其他灰色地带。
尤其是关于打灯照明技术(lighting)。
光线受到物理法则所规范,如果你能更了解这些物理学,调整CG光线时就能得心应手。
如果您是3D动画的老手,当然你会很了解怎样打灯.但是,如果你还是菜鸟的话,除非你是学物理的或是很有兴趣,否则你不太可能很了解打灯技巧。
例如,“平方反比定律”并不只适用于光线,如果在CG的世界里面也可以应用在照明技术(lighting)。
反平方定律就是:
物体与光线的距离每增加一倍,光照强度就是原本的四分之一。
比较有经验的艺术家会注意到这点,喔,谁不知道这的定律呢?
但如果你看看WIP讨论板,你会发现到很多人其实忽略了“平方反比定律”。
我认为(IMO=InMyOpinion),这很重要,如果你是刚接触CG照明,并希望得到真实的算图效果。
我个人很喜欢灯光照明技术,因为我对物理学感兴趣。
讨论照明是很棒的,因为对大多数人照明是很复杂的。
cryptosporidium:
我认为这栏会是非常有趣的帖,我个人喜欢用“物理正确”的方式去做灯光照明。
但是:
就我所知,只有极少数人关心物理学。
绝大部分的电影制作让你不得不用艺术的角度来调整光线。
你必须让整个效果看起来好看且有趣。
无论是物理上不正确,而且常常导演要的东西都不是物理精确的效果。
有趣的是,如果你真的用所谓的物理精确的参数去计算CG照明/材质,算图时间可能会百万年后才会计算完(reachastronomicvalues)。
我想这也就是为什么这样的主题没有受到重视。
但是,我必须同意,了解物理学可以帮助您的工作。
mister3d:
这是个好问题。
大多数用户是随意地控制参数而不是依循物理法则。
一旦了解算图物理学后,这些观念会跟着你一辈子而且能够套用到任何一种渲染器中。
光迹追踪(retracing)是以物理为基础的(模拟光的行为,但其实不是物理精确的计算),渲染器外挂的使用手册都是这样写的。
所以,其实你需要学的是物理学而不是只是CG照明。
而如果你想学习CG照明还需要你不仅需要学习CG照明,你还需要学习传统照明。
研究这照明时,你不能不考虑材质与相机参数。
(Imagecourtesyof mister3d)
有分直接和间接照明的差别。
直接照明是说光线打在物体表面就停住了,因此没有光线反弹。
这绝不会发生在真实世界。
我认为,能量守恒定律可应用到任何反射材质上,这个反射数值不能超过光源的强度,所以反射光线会比原始光源暗一点,所以光线是以平方反比做衰减。
当光线打到表面可能会发生以下情形:
吸收,反射,折射(或是不完全折射)。
反射或折射有可能是漫射性质或是高光性质(specular)。
如果光线在漫射性质的表面反射则会发生混色/出血(color-bleeding)现象。
如果光线在高光性质的表面反射则会发生焦散(caustics)反射的现象。
如果光线穿透折射物质则会发生折射焦散的现象。
如果光线被物质表面吸收并且产生些微漫射折色(diffusedrefraction),则会发生次表面散色(subsurfacescattering)现象。
而且,材质必须要有点折色属性才能发生次表面散射现象。
吸收光是漫射折色外加漫射属性,这种现象已皮肤为例就是由水和肉构成,因此会同时有散色与折色的性质..
除此之外,还有焦散散射折射(causticsdispersionofrefraction)现象,但相当罕见,钻石就有这种现象。
它看起是彩色的折射
光源可能距离非常遥远,这种情况我们就不使用平方反比定律(但照我理解,他还是有衰减现象,但为了计算方便我们不考虑衰减,要不然我们就要把光源放在亿万英里远的距离,就好像太阳跟地球的距离一样。
因此,我们只好省略这类光源的平方衰减性质),除非,光源不亮也不远----我们就会套用平方反比衰减定律。
这就带出了一个非常重要的观念----场景的单位是很重要的,因为光的衰减和它所在的空间尺度有关。
光线阴影的锐利度受到光源大小所影响。
有一个定律是说:
反射优先于漫射,而折射优先于反射。
这表示,如果您有一个强烈反射材质,例如金属,您几乎看不到他的漫射效果。
因此,100%的反射=0%漫射。
100%的折射情况下----还能看到一点反射效果,但是漫射则完全看不到(这时候漫射干脆设定成黑色好了)。
所有物质表面都会反射!
全世界反射率最低的物质也有0.045的反射率.大部分的物质表面具有漫射性的反射,镜面反射则很少见。
为什么某些物质具有镜面反射而某些物质只有漫射性反射?
因为任何物质表面都有许多微小的结构面(microfaceted),这些结构不容易被肉眼观察出来,如果是镜面反射的话其微表面产生的反射射线是往同一个方向,漫射反射则是为表面产生的反射方向是多方向的。
这世界上有两种个类型的材质:
金属和其他材质。
所有材质都会有菲涅尔(Fresnel)反射效果,没错全部的材质都有!
所以,你应该每次都套用这样的反射类型。
Fresnel并不是简单的衰减曲线效果:
它是一开始是缓曲线,然后在端点的地方有个陡峭的线段。
而金属有更加突出的反射属性,例如80\100的反射值,这时候您的漫射应该改成黑色因为这时候的反射是优先计算的。
只有金属会有彩色的反射效果,因此,如果您需要制作任何非金属的反射效果,它的反射就只会是黑白反射而已。
还有一个数值:
反射折射率与折射反射率,这两个数值一定会相同。
你可以在表中查到这些数值。
的这些数值会控制物体反射/折射的效果,同样的数值在金属则是会稍微亮一点。
playmesumch00ns:
景深发生原因,是因为透镜的聚焦光线来自于一个圆锥的顶点投射到底片盒(filmback)。
这个圆锥的长度与物体到项机的距离,和镜头在相机中的位置有关。
如果底片没有恰好摆在这个圆锥的顶点位置,则圆椎与底片会形成一个圆形的交错(thecircleofconfusion)。
这就是为何当3D的点投射到底片时会变成圆形而且影像会变的模糊。
您对物体反射的解释有点不清楚。
希望我以下解释会更清楚。
有两种类型的材质:
导电材质(金属)和非导电物质(dielectrics)(其他非金属材质)。
当光子打到物体表面时,有三种情况可能会发生:
吸收,反射或穿透。
1)吸收。
光能转化为热能,然后就消失了。
当然这不是真的消失,但在渲染时我们只关心光线而不管热能。
实际应用时,表示任何材质都不该有100%的反射属性,如果你想制作真实的材质效果。
2)反射。
光子从表面反弹。
实际的光子反弹方向是受到物体表面的细微几何结构(microgeometry)影响。
非常光滑的表面会产生完全相同的反射方向(就像镜子一般),如果是非常粗糙表面会产生散射光,往各个方向反弹(但是不是真的往四面八方反弹)。
我们把平滑表面所产生的反射称为高光反射(specularreflections),从粗糙表面产生的反射称为“漫反射”(diffusereflections),介于两者之间的反射称为“光滑反射”(glossyreflections)。
非导电材质的反射总是与光源颜色相同,所以他们所产生的反射是“白色”的,而导导电物质则会让反射的光线带有颜色。
导电物质会反射出怎样颜色的反射光线是根据材质的化学结构与入射角度有关。
例如光子撞击到黄金表面,比较浅的入射角所产生的黄颜色会比直接打到黄金表面的光线颜色来的不明显。
3)穿透光(Transmission)。
光线穿透到物质里面就是“折射”,它使光线的运动方向改变。
确切的光线折射方向是根据材质的折射率,以及光线的入射角。
表面的细微构造可能会导致光线往多个方向分散运动,就好像漫反射或光泽反射(glossy)那样。
这种效应造成光线穿透毛玻璃(frostedglass)产生雾雾的效果。
只有非导电的物质(dielectrics)可以被光线穿透。
光线的穿透或是反射是根据他的入射角与物体的直射率。
我们利用菲涅尔方程式作为解释这个现象的模型。
基本上光线直接垂直打到物质表面会穿透过去,但是低的掠射角就会大部分产生反射。
上述事件只会有其中之一会发生在光子/物体表面的互动,但我们数学模型可能会导致难以想象的数值,因此,在处理光线反应数学模型时,我们会控制不同比例的光子做不同的反应。
因此,金属可能反射50%的光子,并吸收剩下的50%,对于玻璃来说,90%的光子穿透,5%反射,并吸收其余的光子。
这个反射规则称为规则反映了被称为能量守恒:
你反射的光子不该大于入设的光子数目。
这种条件对大部分的渲染器是很麻烦的。
常见的做法是采用相加层式的BRDFs(光照模型),在明暗器(shader)里面含有漫射与高光反射的选项。
你必须确保漫射与高光反射的总和不能大于1,这样才能符合物理规则。
当然,这不是材质真正运作的方式真正的材料的方式行事,但是这种做法让数学式更容易处理。
据我所知,只有maxwell与fryrender渲染器具有这样的参数。
当光线穿透到物质当中时,就会发生次表面散射(Subsurfacescattering)现象,光子会在内部弹跳。
光线在内部相互作用会造成一些能量被吸收,通常是不同波长的光线,因此,当光线最终弹出去时,颜色会比较暗而且会带有某些颜色。
只有非导电物质才会发生次表面散射,这是唯一一种情况非金属物质会产生有颜色的反射(记得吗刚刚说过,非导电物质的反色总是白色的)。
所以每次当你看到一个彩色的物体,而这个物体不是金属,光线穿透到物体内部,在内部反弹,过程中产生有颜色的光线,然后最后又弹出物体。
mister3d:
关于漫射,我不知道是不是有物理学上的根据,但除非是被折射或反射优先计算(在这种情况下,漫射是黑色的),漫射数值应该是在20-80%的亮度范围内,跟饱和度设定的概念是一样的。
这样的设定能产生更好的照明效果----比较不会有过度曝光或是过黑的问题。
高光反射有同向性反射(isotropic)或异向性反射(anisotropic)。
异向性高光反射与物体表面凹槽垂直的方向作反射,而同向性反射则是均匀分布。
谈到摄影机,有曝光,运动模糊,景深,白平衡等效果。
这些都很重要。
但其他效果,主要是滤境造成的。
曝光是底片在光线底下曝露多久。
暴露久一点---曝光比较亮,短一点---产生的影像比较黑。
曝光是由:
f-number(这个数值也控制景深),快门速度和底片速度(ISO)。
运动模糊是因为快门打开足够长的时间使运动物体在底片留下痕迹。
景深大多是由f-number所控制,但是它也受到镜头大小底片门(filmgate),能创造失焦的效果,这对写实渲染效果非常重要,例如微距摄影(macroshooting)。
在现实生活中,想要得到极端的景深效果代价是很昂贵的。
天知道为什么产生景深;也许镜头的快门区域部分被遮蔽,造成了部份成像模糊的结果。
每个光源多少会有颜色(colortemperature),但人眼会欺骗我们,当我们观看光源时人眼会很快适应让你误以为看到的是白灯。
白色平衡是在白色的光源变的更蓝,蓝的颜色变的更红。
下一步是你如何用CG软件来实现这些物理效果,当然这是个大问题。
当然,你还必须考虑到屏幕的影响:
您的软件必须有一个适当的校色功能---http:
//forums.cgsociety.org/showthread.php?
f=2&t=188341,颜色温度(6500k)和伽玛校正
如果你想造制作物理写实的算图效果,你就必须要控制这些参数。
下一步是如何使用您的渲染器实现这个目标,无论是利用与更先进的算法(光线跟踪)或以非物理算法来计算(fake-based)(Rays)。
以上是基本的解释。
playmesumch00ns:
全世界最反光材料是Spectralon,它可以这反射大约90%的入射光(以接近lambertian的方式反射)。
一张白皮书是反射率大约有80%。
全世界反射率最低的材料是到常见的iirc---大约有3%的反射。
当然您是可以将反射率射为1%,但大概只能在实验室里面才有可能有反射率那么低的物质。
mister3d:
这是我读过最棒的材料科学解释,谢谢你,你的解释比我更正确。
特别感谢你对景深(DOF)的解释。
我不太确定ㄟ,如果真的是这样的话,mentalray与vray的反射数值将超过1,对不对?
事实并非如此。
或者你是在谈Maxwell与fryrender的另外一个数学模型?
然而,我想提一下光线分布方式。
在现实生活中光线会扩散,因此对于聚光灯来说你很少能看到尖锐的阴影。
但是当你在3D软件中制作聚光灯时,通常有1\1的热点\faloff的比率,这是错的。
正确的比率应该是1\10,这样你才会有自然的衰减。
只要跟区域光源比较你就知道,真实光源是应该怎样表现的。
还有一点就是空气透视效果:
距离越远的物体颜色会比较昏暗,是因为空气含有小颗粒的灰尘,如果你是要表现物理真实的户外场景就要考虑到这点。
为了说明色温,色温规则对我来说就是没有任何规则。
主要有两种色温表示方式---kelvins和流明(lumens),但如果你死板地使用的话你就只是一个调色温的机器人,你应该要依据颜色来调整而不是kelvins和流明。
一般规则是,室外光亮度比很多室内亮很多,而且光源会有颜色。
某些艺术家不使用任何有颜色的光源。
这是因为他们认为眼睛会快速适应所观看到的有色光源,将它们视为白色。
但是,一但你用像机拍照的时候,你就会发现根本没有这样的事(除非你有设定白平衡whitebalance)。
请记住:
颜色会影响心情,在电影中也使用有颜色的底片,所以为了要表现戏剧性的画面你必须要研究色温心理学。
thev:
你的说法有点过时了,最新的渲染器其实已经强制设定能量守恒的效果,使用者根本不需要手动去设定---这包括V-Ray与mentalray渲染器。
(译者注:
thev是Vray的开发者之一)
playmesumch00ns:
不,我说的是这些渲染器的反射数学模型。
就我所知它们是用SchlickBRDF为基础的数学模型(但似乎比SchlickBRDF更好,因为我实际使用SchlickBRDF感觉根本不好用)。
不同的是,它们只有1个异向反射模型,而且这个反射模型可以表现由lambertian漫射到完美高光之间的连续变化状态。
因此,它们能够比blinn-phong表现出更符合真实世界的效果。
老式的漫射+高光明暗器面着色(diffuse+specularshaders)做出来的效果其实效果也还不错,因为大部分的常见物质都是有分层的或基板材料(substratematerials),例如:
油漆,塑料或涂漆木材。
这类材质,具有的漫射层,这个漫射层被高光层所覆盖(例如油漆,塑料等漫射材料被高光材质所覆盖)。
这类的材料可以被老式着色器很好地表现出来。
你甚至可以用这类数学模型表现出合理的皮肤材质,就像木材覆盖一层亮光漆一样。
正如thev所说,我的说法有点过时了,也许其他渲染器也有提供类似的参数设置,我很多年都没用过v-ray/brazil/finalrender,目前则是不用mentalray。
thev:
目前还没有一个解析BRDF数学模型,可以准确地表示世界上所有的材质;Cook-Torrance数学模型相当接近这个目标,但已采样的观点来说它不是很好用。
最好的方法是用测量出来的BRDF数据,但即使这样,通常需要一些逼近数字与某些假定。
mister3d:
还有一个东西,涉及硬表面模型,但是与照明有关的----那就是倒圆角(fillets)。
倒圆角可以在高光灯光底下强化模型的表现。
但要考虑倒圆角的实际尺寸。
不要对建筑物做10公尺的倒圆角;一定要依照实际尺寸来建立倒圆角。
我已经提过了,所有的物体在某种程度上都有反射的属性。
因此,如果你要表现写实的算图效果,记得把所有的材质都套用上菲涅尔反射设定,没有例外。
反射对于表现真实算图效果是第二重要的(第一重要的是全局照明)(从技术上来讲,天份才是最重要的)
下面的例子说明有反射与没反射的差别。
看看有反射有多丰富的表现效果。
这就是建筑业不断使用的----菲涅尔反射。
然而,在现实世界中反射大多是模糊,而不是镜子一样。
跟锐利和柔和一样的观念。
每次都使用柔和阴影,就不会错了。
尽管在许多初学者的作品中,你可以看到一辆汽车具有镜面反射与锐利影子。
这是一个很深入的话题,但真实照明仍然很重要。
在非常光明的影像中可能过于饱和,看起来不正确,应该要在后制里面作修正,无论是用Photoshop或在其他合成软件。
在真实的照片中暗部的地方表现是饱和的,但更明亮的地方应该会比较不饱。
cryptosporidium:
问到反射的颜色。
你为什么说所有的非导电物质都是反射白色呢?
当你看看四周,很显然所有的反射都是有色的。
我的看法是,有色的反射并不是受到材质表面的影响,而是受到入射光本身的波长有关。
换句话说,当被波长是红色的光线射重时,反射的光线就是红色的,这样讲有错吗?
所以,我会说不导电的材质不会把反射的光线染上颜色,而相反的,金属会把反射光染上它的颜色,因此金属的反射光可能是有点黄,有点蓝或是其他颜色。
如果我有讲错请更正我...
mister3d:
反射光看起来有颜色,是因为它们反射颜色,而不是因为材质将反射光染色,因此当你套用黑白的贴图到材质上面时,它将反射光源的颜色但是不会将光线染色。
也许我用错字了吧---不应该说是白色,而是它不反射颜色。
我的意思是贴图是黑白的,而不是说反射线不会反射颜色。
cryptosporidium:
OK,我现在正确地理解这些材质了。
非导电物质不会将反射光着色,但金属会。
playmesumch00ns:
当然可以。
所有我见过不同的BRDF都能符合测量数据(A&S提供了最新的论文),采用的是多重lobes数学模型。
但这不是使用者想要花时间去调整的参数。
当我说Maxwell与Fryrender的BRDF模型在概念上比较好的原因是:
在真实世界里面真的会有lambertian模块外加上高光lobe的情况吗?
我认为Maxwell与Fryrender的数学模型更具有吸引力,因为它们更方便进行艺术性的调整,虽然我说过了,我还没有看到这些渲染器能提供真实的皮肤材质
Dtox:
太好了,你们所提供的信息是我在整个cgtalk论坛里面看过最棒且详细的资料。
mister3d:
Tox兄,以上是我对CG科学的说明,但是如果您想要更深入的信息的话,我建议你读这本书,我买了最近买了这本内容非常棒,这本书介绍了所有关于物体材质照明等信息已经出了第八版了,而且价格合理。
Dtox:
我对摄影也有兴趣。
我不是一个真正摄影师但我常会为了要参考图去拍照。
光线让我深深着迷。
特别当我可以把现实世界的照明融合到CG的世界里。
当我在使用CG摄影机时,在想不知道有什么关于CG动画相关的理论。
像是有没有可能添加出了alpha与深度以外的通道到渲染器产生的影像当中。
如让你可以添加红外线(IR)通道到你的摄影机参数中。
例如让摄影机,除了捕捉可见光光谱以外,还能添加红外线通道,让您可以编辑最后影像的可见光谱。
而且还可以让您可以提供分pass。
它不仅让您可以控制灯光外,它也可以用来更准确地模拟爆炸的颜色效果从简单的碳火,到喷气机引擎,甚至恒星行程的效果和太空特效。
他们使用了类似哈伯望远镜的色彩技术。
我谈的是比较松散的讲法。
除非你生成一个热信息的灰阶图像来仿真爆炸和热效果,也可以用多种颜色表现温度控制与照明。
甚至你可以用紫外线信道用来动态控制gamma。
更容易地模拟太阳光且更真实。
我不知道Maxwell,Fry实际上是怎样计算,我甚至没有一套V-Ray。
我使用Cinema4D10内建的高级渲染模块。
但是当计算GI,SSS与焦散时会计算很缓慢。
所以,没有办法依照自己的想法去控制场景照明。
但长期来看C4D真的很容易制作逼真的影像。
Magnus3D:
我并不想开始发一个新帖,所以就直接在这里问问题了。
当你们设定材质的时候(shaders),你会用怎样的方法去设定?
你是用物理精确的方式吗?
也就是说,您会用实际测量的数据来设定您的材质。
或者你搜索大量的参考数据(图片和文字)去设定材质,然后只用肉眼观察参考数据来重建真实世界的材质?
我把这种方法称为从后拍照法(shoot-from-the-hip)。
上述两种方法你最喜欢哪一个?
或者你使用完全不同的做法呢?
cryptosporidium:
当建立材质时,我是用眼睛观察真实世界的材质效果,让它的视觉效果好看不见得使用物理精确的数值。
没有人会管说IOR,BDRF等参数,只要可以让材质看起来逼真就好。
BulletProof:
我同意。
我真的不管物理上是否精确。
我只用物理数值当作概括的轮廓。
然后我微调参数达到我想要的效果,这个效果不一定是相片写实的。
只要是最终材质的效果是你要的。
Magnus3D:
真有趣,你们是采用后拍照法来设定材质,而不是用物理精确的方式。
那我可不可以借问你们都是用什么渲染器?
我使用的Maxwell与Fry来算图,这两个渲染器使用比较物理精确的方法设定材质,老实说,当你修该材质时能预测最后的效果感觉会比较好。
我在Vray或Finalrender里面没有看到如此简单逻辑。
BulletProof:
我自己是很喜欢使用MODO与其算图引擎。
很容易设置,也可以很快算出结果。
因为我也用MAYA所以我的一些作品是用MAYA的MentalRay算图。
cryptosporidium:
我在制作电影特效十大部分都是用XSI/mentalray。
更准确地说,能用这种物理精确的渲染器很棒,我总是尽可能的使用这类渲染器.但现实的情况是,导演会告诉你,那边太暗,那边应该要多一点反射,你不可能跟导演说那样改的话就会违反物理定律,因为我知道现实状况不可