unity3d中圖形學(xué)的光照原理是什么

這篇文章將為大家詳細(xì)講解有關(guān)unity3d中圖形學(xué)的光照原理是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

在廣靈等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),外貿(mào)營銷網(wǎng)站建設(shè),廣靈網(wǎng)站建設(shè)費(fèi)用合理。

首先,在物理學(xué)里我們知道,物體的顏色其實(shí)是它反射的光的顏色。光是白色的,但它的白色是由許許多多不同顏色不同頻率的光混在一起呈現(xiàn)的,也就是光譜(spectrum)。紅色的物體反射紅光比較多,藍(lán)光和綠光則被吸收。白色的衣服反射白光,黑色的衣服吸收白光,這也是為什么夏天穿白衣服會稍微稍微涼快一點(diǎn)的原因。

而我們要實(shí)現(xiàn)光照,就要去模擬物體的反射光,讓物體有明暗關(guān)系,有亮面有暗面。物體的反射光可以簡單分為3種:

1. 漫反射(Diffuse)
當(dāng)光照射到物體上面,物體會反射自身的顏色,這是最基本的反射,會根據(jù)光照方向產(chǎn)生明暗關(guān)系(明暗關(guān)系是有的地方亮有的地方暗,不是影子,影子是其他物體投射到你身上,你身上才有暗色的影子,本文不考慮投射影子。因?yàn)橐粋€(gè)物體,比如正方體,不會自己讓自己產(chǎn)生影子,只有在它前面放個(gè)球,球的影子才會映到正方體上),反射方向完美情況下是向四面八方,這也就是“漫”的由來。

unity3d中圖形學(xué)的光照原理是什么

我們?nèi)为?dú)一個(gè)切面進(jìn)行分析

unity3d中圖形學(xué)的光照原理是什么

N是物體的法線,L是入射光的方向向量,le是入射光的顏色,則反射光的顏色強(qiáng)度lj滿足:
lj = le Kd cos(θ) 或者 lj = le Kd (L·N)
其中,Kd是物體本身的顏色,比如橘子就是橙色。
這個(gè)公式理解起來就是:你反射的顏色,是你本來的顏色和照射你的光的顏色的混合。
比如你穿了個(gè)白衣服但紅光照你,那反射的就是偏紅色。你的顏色和光的顏色的混合比例通過θ來確定,當(dāng)θ為0,即光正對著使勁照你,那你就是很亮的紅色了,當(dāng)光正好和你平行擦著你過去,那你就沒顏色了,黑色的。光對你越正,你就越亮,否則越暗。
注意:本文所有的公式的光照方向向量和法線都必須是標(biāo)準(zhǔn)化了的。顏色向量的RGB范圍都是0~12. 高光(Specular)
這個(gè)是可有可無的。
高光就是指光滑的物體會有一小部分特別亮的地方,趨近于鏡面反射。

unity3d中圖形學(xué)的光照原理是什么

上圖的小球,中間那塊圓形白色就是高光。同一個(gè)小球,左上偏亮右下偏暗,這樣的明暗關(guān)系是漫反射。
高光顏色強(qiáng)度公式為:

unity3d中圖形學(xué)的光照原理是什么

V是視角向量,因?yàn)楦吖夂鸵暯怯嘘P(guān)系,當(dāng)你繞著一個(gè)光滑球走時(shí),你會發(fā)現(xiàn)它的高光鏡面反射的部位也會改變。 Ks就是物體鏡面反射的顏色,一般是白色,當(dāng)然如果很魔幻你想讓物體高光發(fā)藍(lán)色也可以。 R是反射光的方向向量,就是L入射光關(guān)于法線N的對稱向量。spec就是反射強(qiáng)度,看上圖那3個(gè)小球。
這個(gè)公式的理解就是:鏡面反射(高光)的顏色是入射光的顏色和鏡面反射光的顏色的疊加。鏡面反射光的強(qiáng)度取決于視角以及spec。
當(dāng)V和R平行時(shí),即反射的光直射你的眼睛,會亮到爆炸。到V和R垂直時(shí),光照全都照不進(jìn)你的眼,就沒有鏡面反射,沒有高光。3. 環(huán)境光(Ambient Light)
假設(shè)場景里就一個(gè)球和一個(gè)光源,那么按照目前的公式算出來,有光的地方有顏色,亮。沒光的地方一片漆黑。
但有人覺得一片漆黑不太好,應(yīng)該也能看見點(diǎn)東西,所以就加了一個(gè)環(huán)境光,讓整體再亮一點(diǎn),從而使暗部呈現(xiàn)一些顏色。
環(huán)境光顏色計(jì)算公式為:
lj = la Ka
la是環(huán)境光的顏色,Ka是物體的環(huán)境光系數(shù),一般而言Ka = Kd = 物體本身的顏色,只有高光的Ks不是物體本身的顏色,而是偏白色。

光照計(jì)算公式
綜上,一個(gè)物體在光照下?lián)碛忻靼店P(guān)系之后的顏色公式如下:

unity3d中圖形學(xué)的光照原理是什么

就是所有光源的高光計(jì)算結(jié)果+所有光源的漫反射計(jì)算結(jié)果+環(huán)境光顏色
場景中的環(huán)境光只有一個(gè),而發(fā)光光源可能有好幾個(gè),所以高光和漫反射每個(gè)光源都要算,然后加起來。

unity3d中圖形學(xué)的光照原理是什么

這個(gè)公式的加標(biāo)示版本:

unity3d中圖形學(xué)的光照原理是什么

其中,E是視角向量,就是V。

unity3d中圖形學(xué)的光照原理是什么

注意:

  1. 我們算光照的時(shí)候是在相機(jī)坐標(biāo)系空間下計(jì)算的,即image space(不懂空間變換的參考我的坐標(biāo)系空間變換)。所以E(視角向量)永遠(yuǎn)都是(0,0,-1),因?yàn)槲覀兺胺娇淳褪峭鵝=1的地方看,它的反向量就是 -1。
    為什么是相機(jī)空間?
    因?yàn)楣庹沼?jì)算涉及方向向量L, E, N, R,我們需要在仿射空間(affine space,即pre-perspective space, 包括model, world, image 3個(gè)space)進(jìn)行變換,因?yàn)閺膇mage變換到perspective空間會扭曲圖形損失信息。model, world, image 3個(gè)空間計(jì)算光照都行,本文選image。
    在image空間下,法線等方向向量都要變換到image space,但要注意的是,法線的變換是只有旋轉(zhuǎn),沒有位移和縮放的?。?!因?yàn)榉ň€如果位移,即在法線向量上加一個(gè)位移向量,兩個(gè)向量如果不平行,那么和向量的方向會和原法線不一致!

  2. 當(dāng)E和L不在一邊的時(shí)候,即我們在看物體正面,光從物體背面照過來,我們是什么都看不見的,是黑色,這種情況就不計(jì)算,直接跳過。當(dāng)E和L在同一邊,但法線N在另一邊的時(shí)候,算出來也是負(fù)的,不行,所以要把法線取個(gè)反再算。總之就是保證最后的顏色RGB在0~1范圍內(nèi)。

我們知道三角形三個(gè)頂點(diǎn)的光照顏色了,但屏幕像素中,落在三角形內(nèi)部的點(diǎn)的顏色怎么辦?
答:插值。在光柵化里我們計(jì)算過平面方程用于三角形內(nèi)部點(diǎn)的Z插值。那么其他的插值都可以按這個(gè)方法來。

根據(jù)插值方式的不同,shade又分為兩大類:

1. Gouraud Shading
三角形內(nèi)部點(diǎn)的顏色根據(jù)三個(gè)頂點(diǎn)的顏色插值得來,不用管內(nèi)部像素點(diǎn)的法線啊光照啊啥的,所以方便運(yùn)算,快。但精度差了點(diǎn)。比如光源正好位于三角形的正中央,那么3個(gè)頂點(diǎn)的顏色因?yàn)殡x光源遠(yuǎn),所以會比較暗,那么中間點(diǎn)的顏色插值出來也會暗。但實(shí)際上中間點(diǎn)離光源近,應(yīng)該更亮才對!

unity3d中圖形學(xué)的光照原理是什么

上圖為顏色插值方法,即構(gòu)造3維平面方程,把Z分別替換為R, G, B構(gòu)造3個(gè)平面,然后帶入像素點(diǎn)的x,y,求出3個(gè)Z(即R, G, B)。

2. Phong Shading
為了解決Gouraud的精度問題,我們可以在內(nèi)部像素每個(gè)像素點(diǎn)都重新算一遍光照顏色。所以我們需要計(jì)算出內(nèi)部像素點(diǎn)的法線N,通過插值算。然后帶入上面說的光照方程算出該點(diǎn)的顏色。這樣是最準(zhǔn)確的,但是計(jì)算量稍微大一點(diǎn)。目前的主流引擎基本都是默認(rèn)的Phong。
法線插值就構(gòu)造3個(gè)平面方程,把Z分別換成法線N的x, y, z。
帶入像素點(diǎn)的x,y,求出Nx, Ny, Nz,就得到了該點(diǎn)的N。

unity3d中圖形學(xué)的光照原理是什么

關(guān)于“unity3d中圖形學(xué)的光照原理是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

本文名稱:unity3d中圖形學(xué)的光照原理是什么
網(wǎng)站URL:http://muchs.cn/article4/pphiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、小程序開發(fā)、品牌網(wǎng)站建設(shè)、外貿(mào)建站、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)