成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

3D開發理論:光照,著色與材質

移動開發 Android
我保證這是我目前寫過的所有科普教程中最不科普、最底層、最不想被讀、最難理解、最晦澀的一篇。但我也保證這是我目前寫過的所有科普教程中最專業、最珍貴、最耗時、最盡力,最精益求精的一篇。

我保證這是我目前寫過的所有科普教程中最不科普、***層、最不想被讀、最難理解、最晦澀的一篇。

但我也保證這是我目前寫過的所有科普教程中最專業、最珍貴、最耗時、最盡力,最精益求精的一篇。

以下正文。

做3D開發(尤其是建模相關)的話,“材質”一定是個會經常遇到的概念,對于這個總在用的東西,你究竟了解多少呢?——至少我在不久前還是個只用參數不知原理的人。因此,今日特來與大家分享下我的學習心得和研究理解。

厭倦或者害怕晦澀枯燥的圖形學教科書嗎?不用擔心,在白藍紫的文章中不會出現那些過于嚴謹的繞口詞語——我只提供科普級別的讀物而已。So,Let's go!

首先,讓我們理清思路,看看這三者間的關系。

材質是反映物體與光線互相作用,最終影響著色的屬性;因此要講什么是材質,就先要說說在實時渲染中是如何進行著色的;而著色又是根據光照來計算的,因此要先梳理下光照。

【光照】

光照就是根據光學原理計算光強變化。

光學知識在初高中物理課上都講過,什么直線傳播啊,反射折射吸收啊,這些都是排在課本最前面幾章的入門知識,比力學電學容易得多,如果你不幸忘記了,可以敲開鄰居的門,請教一下人家孩子——或者問谷歌吧。

對于計算機渲染而言,我們有一些額外的說明,比如什么光線都是有顏色的,不考慮不可見光,光源分為點光源,體積光,平行光,聚光燈等等……有興趣的人可以——不用我說了吧?找一本以專業嚴謹和枯燥催眠而著稱的清華大學出版社的圖形學書籍啃吧!

【著色】

著色就是根據光線和材質確定物體顏色的步驟啦。

首先要說明的一點是,光照模型——也就是模擬光效的計算方法——有很多種,而我只是針對實時渲染而言——你不想游戲跟3dsMax的渲染一樣,一幀等一小 時吧?——因此,這里以常用的像素級別的PHONG模型為準(另一種常用的是頂點級別的GOURAUD模型,這兩種是目前可行而常用的模型,詳見最下面的 鏈接)

材質對光線的影響有這些:

1、漫反射

眾所周知,這是由于表面粗糙不平所引起的,它的結果只與光源位置有關而與視點位置無關,即:

物體表面相對于光源的角度決定它對來自光源的光的反射。表面越接近垂直于光線,被反射的漫射光線就越多。

根據lambert余弦定律可以這樣求出結果:

漫反射強度=材質的漫反射系數×光源強度×(法線方向向量·入射光方向向量)

例如:0.5(反射一半)×1(***,白色)×cos0(入射光垂直于法線,夾角0)=0.5(半減,灰色)

*所有的“強度”“系數”都是和“顏色”是等價的,因為將RGB三個分量計算過后,合并的結果就是顏色而不再是強度了。即“漫反射顏色=材質的漫反射顏色×光源顏色×(法線方向向量·入射光方向向量)”(下同)

*注意,“×”是數乘,而“·”則是點乘,也就是說***兩向量的點積表示的就是它們夾角的cos值。(下同)

*注意,所有向量都是單位向量,并且入射光向量由反射點指向平面外。(下同)

*圖示,L是入射光,N是發現,R是反射光,eye是視點

2、鏡面反射

理想鏡面是不存在的,對一般的光滑表面而言,反射光會集中在一個范圍內,它的結果與視點有關,即:

鏡面反射強度=材質鏡面反射系數×光源強度×(法線方向向量·入射光與視點夾角一半的方向向量)^光澤度

例如:0.5(反射一半)×1(***,白色)×cos0(視點位于反射光方向上,夾角0)^1(加權1)=0.5(半減,灰色)

*“^光澤度”是“光澤度次方”,光澤度越大,高光的亮斑越小

*標準算法應該是指向視點的光線和反射線的單位向量的點乘(即上圖中的α角),但為了節省計算,我們按blin模型用此代替。

*那個半向量=視點方向向量+入射光方向向量,如果按下圖的箭頭,那么就是視點方向向量-入射光方向向量

*圖示,H為半向量,它與eye的夾角等于它與L的夾角,這個角只是近似(你可以很容易的發現,其實它少了一半),但對于實時渲染而言,這已經足夠了。

3、環境反射

環境光是一種經過多次反射平衡的光,它的強度是均勻的,并且分布是一樣的,即:

環境光沒有位置或方向上的特征,只有一個顏色亮度值,而且不會衰減,所以在所有方向和所有物體表面上投射的環境光的數量是恒定不變的。

因此,在局部光照明模型中(全局光照明包含對象間的作用,需要光線追蹤等算法。為了效率,實時渲染中可以忽略),我們用一個常量進行計算:

環境反射強度=材質環境反射系數×環境光強度

例如:0.5(反射一半)×1(***,白色)=0.5(半減,灰色)

4、自發光

自發光是指對象自己發出的光,即:

自發光只增加自身顏色,而不影響場景內其他對象,因為它不是光源,自發光不參與光運算。

通常來說,我們用一個常量代表自發光強度,但事實上為了節約計算,我們通常會忽略它,而改用漫反射系數代替,或者說,將它的結果融入漫反射系數中,最終合成我們的老朋友——貼圖。

5、各向異性的反射、菲涅爾效應、焦散與色散、下表面散射

略,PHONG模型忽略它們,同時為了實時渲染效率我也忽略它們。想了解更多,請——這次換寂寞的百度吧。

***,讓我們來說重頭戲——PHONG模型。

PHONG模型就是漫反射、鏡面反射與環境反射的和,即:

像素顏色=環境反射色+漫反射色+鏡面反射色

很簡單吧?但也許你會問,既然是和,那么超過上限的怎么辦?最簡單的當然是截斷不要,當作白色處理!但不管怎么說,畢竟是三個顏色相加,超過上限的幾率也太大了,這時候,你就需要分配權值再累加,比如說:

像素顏色=環境反射色×0.3+漫反射色×0.4+鏡面反射色×0.3

不過呢,一般來說這個權值已經包含在材質的反射系數里了,或者說,反射系數其實就是權值。

如果你理解了以上內容,那么恭喜你,你的光學物理和向量數學過關了,所以——準備好把高考不屑一顧的光學知識上升到一個新的高度,讓我們見識下真正用于程序中的計算方法吧!

不過在此之前,為了便于理解和自學,還是讓我們先來了解一下這些之前被我隱藏掉的英文吧:

light=光

ambient=環境反射(光/色/強度/系數)=陰影色

diffuse=漫反射(光/色/強度/系數)=固有色

specular=鏡面反射(光/色/強度/系數)=高光色

emissive=自發光(光/色/強度/系數)=輻射色

shininess=rough=光澤度=鏡面反射加權系數n

ka=環境反射系數

kd=漫反射系數

ks=鏡面反射系數

N=法線方向單位向量

L=入射光方向單位向量

R=反射光方向單位向量

V=視點方向單位向量

H=半方向單位向量

通常而言,漫反射系數加上鏡面反射系數等于1,因為材質通常除了漫反射就是鏡面反射。另外,環境反射和漫反射的默認值常為:

ambient=0x333333(顏色)=0.2(系數)

diffuse=0xCCCCCC(顏色)=0.8(系數)

如果你已經暈了,那么請從頭對照著圖示和范例再看一遍,如果還沒有暈,那么做好暈的準備——來迎接挑戰吧!

這就是經典的openGL光照模型,很嚇人么?

——不?那你一定學過計算機圖形學,或者是3D編程老鳥,或者是看了之前的內容256遍,再或者是在滿嘴跑火車。

——是?那你需要的是學好英語,或者對應之前講的理解,或者開始像德國boy那樣狂氣地毀鍵盤,再或者是……聽我講解?那么好吧,讓我們對照著這個嚇人的上古魔咒一句一句地翻譯,以找出破解2012末日詛咒的法術。

首先要補充一個概念,如你所見,這里計算的是頂點顏色(vertexcolor),原因是……嗯,這個一兩句話不好說明,但你應該知道,像素的顏色是通過 插值得到的,因此我們需要先計算出頂點的顏色。同時,為了光滑著色(避免一塊一塊邊界分明)又不失效率,我們可以使用GOURAUD明暗處理,即雙線性光 強插值算法。具體算法大家可以自己谷歌——但我覺得,Stage3D已經為我們選好了插值的方法,所以我們需要的只是計算出每個頂點的法線——注意,是頂 點法線而不是面法線!如果需要人工計算的話,頂點法向量可以用與其相鄰的所有多邊形法向量相加得出的均值來近似表示。

好了,讓我們開始翻譯這鬼畫符。

emission(material)指的是材質的自發光顏色,如你所見,這個值是作為常量直接被加的——但為了速度省略它更好。

ambient(lightmodel)指的是全局環境光顏色,而ambient(material)則是材質的環境反射系數,與上面講的一樣,它們相乘 得出環境色的最終值。但請注意倒數第三行,這里也有個ambient(light)和ambient(material),這一對兒表示的是針對各個光源 的環境色,主要用于計算物體間的影響(比如說,把手靠近國旗就會被它染紅),但通常為了速度也會省略(畢竟很玄的效果與很炫的幀頻相比,還是后者更有吸引 力)。因此,我們只計算***行的全局環境光就好了——當然你也可以省略計算,直接用一個常量代替它,視覺上并不會相差多少,但效率上卻會有所體現。

之后這個肥大的漢堡包就是各個光源的結果總和。如你所見,左邊的西格瑪(∑)代表求和,這相當于是一個循環(for i=0;i<n-1;i++),按照右邊的公式計算出各個光源的結果,并將其累加——毫無疑問,只有一個光源是最快的,這就是當年pv3d為什么只 能為一個對象賦予一個光源的原因!而事實也表明,我們通常不會需要那么多的動態光源——比起耗時的計算,我們更愿意將結果烘焙進模型的頂點顏色中!

來看這個漢堡的***層:一個分式乘以點光源效果(spotlight_effect),再將其結果乘到后面的三層——PHONG模型——上面。這是做什么用的呢?是光線衰減。

顯而易見,對同一個光源而言,離得越近的物體越亮。這個點光源效果就是點光源強度的加強系數——忽略(視為1)也未嘗不可——而前面的分式則是距離比率。

這個分數表示的是“光的衰減比例為傳播距離平方的倒數”這一光學定律,即1/(d^2)。但如你所見,這里的分母卻分明是(d+k)^2的展開式,為什么 除了距離d還多了一個系數k呢?很簡單,因為你不會希望d<1(特別是無限趨近于0)時,點光源的亮度變成無限大。因此,我們補上一個系數來確保分 式的結果不會大于1——也就是光源原本的亮度。

需要注意的是,這個衰減僅對點光源有效,因為平行光是無視距離的,它的分式永遠是1,即不衰減,而環境光在***行就算過了,至于其它種類的光(比如聚光燈),在實時渲染中則很少見(速度***,影響速度的統統忽略!)。

***,讓我們來看PHONG模型。

左邊的那個中括號“[”表示后面這三行的和,也就是三行累加的結果。

***行之前說過了,究竟是去是留請根據需求自便,略過不再提。

第二行是漫反射色,第三行則是鏡面反射色,與之前的公式完全一致,也不必多說,不過:

1、其中diffuse(light)漫反射光和specular(light)鏡面反射光可以用一個光源顏色表示以節約內存——也更合理。

2、diffuse(material)材質漫反射系數和specular(material)材質鏡漫反射系數通常相加得1(0xFFFFFF),因此 你可以只記錄一個參數,或者直接用通用的0.8(0xCCCCCC)與0.2(0x333333)常量來代替以加速計算。

3、向量乘法與之前所說的一樣,其中n是法向量,L是光線入射向量,s是半向量,shinine是光澤度。需要注意的是,這里對其結果做了一個與0取較大值的計算,這是為了避免處于背面還被光線照亮(即便顏色是負的)的緣故。

【材質】

***,來看材質。

材質是記錄物體表面對光線影響的參數集合,如果你已經理解了上面的一堆公式,那么,材質所包含的參數也就顯而易見了。

雖然由于渲染引擎的不同(實時與非實時)和光照模型的不同(非實時光照模型會更細膩——也更耗時),材質的參數會有多有少——這一點打開3dsMax的材質編輯器就可以發現——但對于實時渲染而言,總有那么幾個參數是常見的,那就是:

ambientColor——環境色,材質對環境光顏色RGB各分量的反射系數

diffuseColor——漫反射色,材質對光源顏色RGB各分量的漫反射系數

specularColor——鏡面反射色,材質對光源顏色RGB各分量的鏡面反射系數

emissiveColor——自發光色,材質自身的顏色

shininess——光澤度,高光光斑的大小范圍

transparency——透明度,材質的透明狀態,與真透明不同,這里的透明與厚度沒有關系

*對于其他叫法,請參考之前的中英文對照表

That's all for today~

希望對大家(特別是渴望寫shader或引擎的人)有所幫助。

***,附贈另一種著色貼圖的公式:

最終顏色=漫反射貼圖(正常紋理)×光線貼圖×混合因子+反射貼圖×(1-混合因子)

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2017-05-11 08:59:38

玻璃材質3D打印

2017-07-21 11:28:57

前端Threejs3D地圖

2024-06-26 10:07:38

2018-03-28 09:18:35

CITE智能制造3D打印館

2023-08-18 08:00:00

游戲開發3D模型

2012-11-26 12:51:44

木材3D打

2011-10-06 13:30:45

宏碁投影儀

2024-01-29 06:50:00

3D模型

2013-01-30 16:15:40

adobeHTML5css3

2011-05-26 10:05:07

優派投影機

2013-08-23 10:51:52

蘋果3D手勢

2023-06-03 08:06:20

項目開發客戶端

2010-09-08 11:26:26

Windows PhoXNA 4.0 3D游戲開發

2012-09-12 13:23:11

麗臺VMware Vi

2011-05-25 16:07:17

2015-09-09 11:05:52

3d視差引導頁

2021-12-28 10:52:10

鴻蒙HarmonyOS應用

2012-08-13 17:11:37

Silverlight

2023-03-03 21:42:18

鴻蒙

2011-04-26 14:21:20

3DJVC投影機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞午夜| 日韩性在线 | 天堂亚洲 | 精品国产乱码久久久久久牛牛 | 午夜小视频在线播放 | 久久亚洲综合 | 亚洲精品乱码久久久久久黑人 | 欧美日韩一区二区三区在线观看 | 蜜臀网| 99精品欧美一区二区蜜桃免费 | 91久久视频| 国产一级视屏 | 九色视频网站 | 日韩一区二区在线视频 | 欧美一级视频免费看 | 久久不卡 | 狠狠久久综合 | 成人午夜电影在线观看 | 亚洲精品精品 | 国产精品一区三区 | 日本午夜精品一区二区三区 | 日韩毛片中文字幕 | 成人a视频片观看免费 | 免费黄色录像片 | 久久久久国产精品人 | 国产成人区 | 91久久精品国产91久久性色tv | 国产精品免费一区二区三区四区 | 七七婷婷婷婷精品国产 | 欧美激情视频一区二区三区在线播放 | 午夜激情视频在线 | 日本激情视频中文字幕 | 精品一区二区久久久久久久网精 | 国产一区二区三区在线 | 国产精品1 | 精品美女视频在免费观看 | 欧美成人一区二区三区片免费 | 亚洲精品二区 | 成年免费在线观看 | 欧美一区2区三区4区公司二百 | 日韩精品久久一区二区三区 |