感覺這一章講的有些抽象届宠,有點(diǎn)難看下去窘奏,我寫的順序和書中的有些出入,但是融入了我自己的一些理解艺糜,邊寫邊整理一下自己的思路吧。
第9章 更復(fù)雜的光照
我們前幾章中主要關(guān)心的是模型本身(材質(zhì))是什么樣子的幢尚,所以示例都只有一個平行光倦踢。而這一章關(guān)注的是模型與光源之間的交互,因此我們要考慮到多個模型以及多個不同種類光源的情況侠草。
Unity的渲染路徑:前向渲染辱挥、延遲渲染、頂點(diǎn)照明渲染边涕。
Unity 5.0以后頂點(diǎn)照明渲染就被拋棄了晤碘。Unity中處理光源的方式:逐頂點(diǎn)處理、逐像素處理功蜓、球諧函數(shù)(SH)處理园爷。
效果最好的是逐像素處理,但是計算效率最低式撼,因此不能每個光源都使用逐像素處理方式童社。渲染路徑給出了每個光源采用何種處理方式的規(guī)則。前向渲染:對每一個物體執(zhí)行n個Pass著隆,n為逐像素光源的個數(shù)扰楼;
延遲渲染:對每一個物體執(zhí)行2個Pass;
頂點(diǎn)照明渲染:對每一個物體執(zhí)行1個Pass美浦。前向渲染:通常定義一個Base Pass和一個Additional Pass弦赖。
Base Pass:用于計算一個逐像素的平行光以及所有逐頂點(diǎn)和SH光源,只執(zhí)行一次浦辨;
Additional Pass:用于計算其他 (n-1) 個影響該物體的逐像素光源蹬竖,執(zhí)行 (n-1) 次。在前向渲染中流酬,Unity選擇用何種方式處理每一個光源的規(guī)則如下:
頂點(diǎn)照明渲染:在一個Pass中計算所有影響該物體的光照币厕,全部采用逐頂點(diǎn)方式。效率最高芽腾,但是效果最差旦装。
延遲渲染:定義兩個Pass。
第一個Pass不進(jìn)行光照計算晦嵌,只進(jìn)行深度檢測同辣,把可見片元的信息儲存到G緩沖區(qū)中拷姿;
第二個Pass利用G緩沖區(qū)中的信息進(jìn)行光照計算。Unity的光源類型:平行光旱函、點(diǎn)光源响巢、聚光燈和面光源
Unity的光源屬性:位置、方向棒妨、顏色踪古、強(qiáng)度以及衰減平行光:場景中所有點(diǎn)的方向和強(qiáng)度都一樣,沒有位置和衰減券腔;
點(diǎn)光源:球體伏穆,其衰減可由一個函數(shù)定義,但是Unity中為了方便用一張紋理作為查找表得到光線的衰減纷纫;
聚光燈:錐形體枕扫,衰減函數(shù)比點(diǎn)光源略復(fù)雜,實現(xiàn)方式同上辱魁。
這一章還有一部分內(nèi)容是講陰影如何實現(xiàn)的烟瞧,放到下一篇文章再寫。下面總結(jié)幾個最近比較困擾的問題:
對顏色進(jìn)行操作時染簇,為什么有時候相乘参滴,有時候相加?
在對影響一個物體的不同光進(jìn)行疊加時使用加法锻弓,例如環(huán)境光砾赔、漫反射、高光反射等效果在一個物體上的疊加青灼,或多個光源對一個物體的影響暴心;在計算一種光的顏色時使用乘法,例如計算漫反射光時我們使用光線顏色乘以物體的漫反射顏色聚至。
在第一種情況下酷勺,每一個顏色都對應(yīng)了某一個光線的強(qiáng)度本橙;在第二種情況下扳躬,光源的顏色對應(yīng)的是光線的強(qiáng)度,但是漫反射顏色代表的是物體對不同顏色的光的反射率甚亭,并不沒有實際的光線與其對應(yīng)贷币。渲染隊列中Background和天空盒子的關(guān)系?
我看到好多資料上說我們可以把天空盒子設(shè)置為Background亏狰,在所有物體之前渲染役纹;但是在實際應(yīng)用中,Unity默認(rèn)天空盒子是在所有不透明物體之后渲染的暇唾,可以節(jié)約計算資源促脉,我們也可以自己修改辰斋。為什么透明混合中渲染順序會影響最終結(jié)果?
在理解前面第八章講的透明混合的時候瘸味,不能把這種透明理解為玻璃的透明宫仗,而是應(yīng)該想象成薄塑料片的感覺,有自己的漫反射顏色旁仿,但是也有一定的透明度藕夫。
我之前把它想象成玻璃,就很疑惑為什么兩個半透明物體的渲染順序會對最終的效果產(chǎn)生影響枯冈,如果是玻璃的話放置順序應(yīng)該不會影響觀察的結(jié)果毅贮;但是當(dāng)成塑料材質(zhì)就很容易理解了,我們觀察到的顏色除了它透過的顏色還有它漫反射的顏色尘奏。