在OpenGL ES 中, 使用紋理貼圖的方式來給一個物體模擬現(xiàn)實的材質(zhì), 讓幾何物體看起來更逼真, 但是在OpenGL ES中使用起來是超級麻煩. SceneKit中用來顯示紋理就方便多了, 最起碼它是面向?qū)ο蟮?
SceneKit支持四種不同的照明模型,它們定義將不同材質(zhì)的屬性與場景中的燈組合的數(shù)學方程,以產(chǎn)生每個渲染像素的精確最終顏色查蓉。在[SceneKit]光線(五)介紹了四種不同的光, 這個是四種不同的光照模型, 不要搞混了??
Lighting models光照模型
以下是每個模型的詳細信息:
?Constant:使用平面照明模型梁钾,在計算渲染像素的顏色時,僅將環(huán)境照明納入方程式渴邦。
?Lambert:在計算時加入環(huán)境照明和漫射信息
渲染像素的顏色。
?Blinn:結合環(huán)境,漫反射和鏡面照明信息迄委,其中使用Blinn-Phong公式計算鏡面高光。
?Phong类少。 包含環(huán)境叙身,漫反射和鏡面照明信息,其中使用Phong公式計算鏡面高光硫狞。
Materials通常被稱為紋理; 他們可以讓您在場景中引入更多的細節(jié)和現(xiàn)實感信轿,而不需要更多的幾何體。
紋理基本上是平面的二維圖像残吩,包裹3D幾何财忽,使用幾何中存儲的特殊紋理坐標。其實就是3d圖像的每個點都與對應的2d紋理之間有一個一一對應的映射關系, 把這個映射關系做好之后, 剩下的就是把2d圖像貼在3d幾何上面就OK了.
貼圖的類型
Diffuse map(漫反射貼圖)
最常用的紋理映射方法泣侮。它將位圖圖像包裹在3D幾何表面上即彪,同時顯示其原始像素顏色。
漫反射貼圖在游戲中表現(xiàn)出物體表面的反射和表面顏色旁瘫。換句話說祖凫,它可以表現(xiàn)出物體被光照射到而顯出的顏色和強度。我們通過顏色和明暗來繪制一幅漫反射貼圖酬凳,在這張貼圖中惠况,吸收了比較多的光線的部分比較暗,而表面反射比較強的部分宁仔,吸收的光線比較少稠屠。
刨去那些雜糅的東西,我們只談明顯的,漫反射貼圖表現(xiàn)了什么权埠? 列舉一下榨了,物體的固有色以及紋理,貼圖上的光影攘蔽。前面的固有色和紋理我們很容易理解龙屉,至于后面的光影,我們再繪制漫反射貼圖的時候需要區(qū)別對待满俗,比如我們做一堵墻转捕,每一塊磚都是用模型做出來的,那么我們就沒有必要繪制磚縫唆垃,因為這個可以通過打燈光來實現(xiàn)五芝。可是我們?nèi)绻媚P椭蛔隽艘幻鎵υ颍厦娴拇u塊是用貼圖來實現(xiàn)枢步,那么就得繪制出磚縫了。從美術的角度渐尿,磚縫出了事一條單獨的材質(zhì)帶外醉途,還有就是磚縫也是承接投影的,所以在漫反射圖上砖茸,繪制出投影也是很有必要的结蟋。
沒有什么物體能夠反射出跟照到它身上相同強度的光。因此渔彰,讓你的漫反射貼圖暗一些是一個不錯的想法。通常推正,光滑的面只有很少的光會散射恍涂,所以你的漫反射貼圖可以亮一些。
Normal map(法線貼圖)
法線貼圖是一種凹凸貼圖植榕。它們是一種特殊的紋理再沧,可以讓您將一些表面細節(jié)(如凸起,凹槽和劃痕)添加到模型中尊残,如同它們由實際幾何體所代表的那樣炒瘸。
例如,您可能希望顯示一個表面寝衫,如表面上有凹槽顷扩,螺釘或鉚釘,如飛機船體慰毅。這樣做的一個方法是將這些細節(jié)建模為幾何隘截,。
將法線貼圖視為定義幾何凹凸的紋理; 您可以使用它來模擬粗糙的表面,如月球表面的凹坑婶芭,雕刻在古老的石片上东臀,或者甚至是閃亮的足球上的凸起的斑塊和皮革圖案.
Diffuse map只有基礎的顏色紋理, Normal map只有基礎的使用光線來表示幾何物體反射光線的多少(因為我們?nèi)搜劭吹降臇|西是基于反射光, 如果有反射光進入眼睛就能看到, 否則則看不到), 要想既有顏色又有光亮與陰暗, 可以試下把二者結合
如果你想生成你自己的法線貼圖,有一個叫做CrazyBump的工具犀农。 你可以在crazybump.com找到它惰赋。
Reflective map(反射貼圖)
在開始了解反射貼圖之前, 需要先了解下多維數(shù)據(jù)集(cube mapping)映射的概念。 你知道一個立方體由六面組成呵哨。 類似地赁濒,立方體地圖由六個相同大小的紋理組成,全部包含在用于紋理多維數(shù)據(jù)集的所有邊的一個大圖中仇穗。
場景套件使用以下模式來定義多維數(shù)據(jù)集地圖流部,其中每個圖塊表示多維數(shù)據(jù)集的特定一面:
使用多維數(shù)據(jù)集貼圖的好處是您可以定義對象的細節(jié); 您的對象的反射性決定了這種反射有多少將是可見的。 例如纹坐,一個鏡面完成將使您的對象高度反光枝冀,并產(chǎn)生鍍鉻效果。
與前面的Diffuse map和Normal map貼圖不同的是, 前面兩者是把一張2維圖片包裹在3維幾何物體表面, 而Reflective map 則是使用cube mapping的方式把原始的2維圖像映射到3維物體之上, 更像是含有顏色的影子.
Occlusion map(閉塞貼圖)
Occlusion map用于提供關于模型的哪些區(qū)域應該接收高或低間接照明的信息耘子。間接照明來自于環(huán)境照明和反射果漾,因此您的模型如陡峭的凹陷部分,如裂紋或折痕谷誓,實際上不會接收太多的間接光绒障。
當它做得很好時,遮擋效應會給場景帶來很多現(xiàn)實感捍歪。 對于復雜的幾何形狀户辱,幾何形狀的部分將阻擋來自幾何的其他點的環(huán)境光,例如球的斑塊周圍的深脊:
應用遮擋圖之前和之后糙臼。部分被遮蔽的區(qū)域庐镐,特別是在脖子上的織物褶皺處,在左邊太亮了变逃。在分配了環(huán)境遮擋圖之后必逆,這些區(qū)域不再被來自周圍樹木環(huán)境的綠色環(huán)境光照亮。
Specular map(鏡面貼圖)
鏡面貼圖控制幾何的光澤揽乱。 貼圖的黑色部分定義了啞光部分名眉,而白色部分則表示光澤效果
控制從表面發(fā)出的光的顏色和強度。當您的場景中使用發(fā)光材料時凰棉,它似乎是可見的光源损拢。該物體將出現(xiàn)“自發(fā)光”。
Emission map(發(fā)光貼圖)
發(fā)光材料通常用于某些部件似乎從內(nèi)部照亮的物體上撒犀,例如顯示器的屏幕探橱,高速制動的汽車的盤式制動器申屹,控制面板上的發(fā)光按鈕或者怪物的眼睛,在黑暗中可見隧膏。
使用這些材料的對象即使在場景中的黑暗區(qū)域也會保持亮起哗讥。
紅色,綠色和藍色球體使用發(fā)光材料胞枕。即使它們處于黑暗的場景杆煞,它們也從內(nèi)部光源發(fā)光。
在Scene Kit中Emission map并不真正發(fā)光,只是模擬發(fā)光效果而已.就是說不能照亮其他物體,不能產(chǎn)生陰影.這點與其他3D創(chuàng)作工具不同.
Multiply map(乘法貼圖)
所有其他效果后應用乘法圖; 它可以用于著色腐泻,變亮或變暗的最終結果:
Transparency map(透明貼圖)
透明度貼圖使您幾何的幾何透明决乎,甚至完全不可見。 黑色部分定義不透明部分派桩,而白色部分最終為透明的部分构诚。像PS一樣