天天看點

Unity光照概述

一:光源參數 屬性面闆的屬性含義:

Type:四種光源類型之一 。

1.平行光:最為簡單的光照,我們認為受平行光影響的物體接收到的光線方向是一緻的,unity中平行光源的位置是無所謂的,可以放在任何位置,這并不會影響光源的方向。

2.點光源:從一個點發出的光,影響範圍隻有半徑範圍為r的球體内,且光照強度随着遠離球心而不斷衰減。

3.聚光燈:同樣從一個點出發,但照亮範圍是一個錐形區域,我們可以把他想象成手電筒,宏觀來看,他是點光源的1/n,光照同樣會衰減,由于是錐形,比起圓來計算上要稍微複雜一點,他有一個張開的角度angle可以調節。

4.面光源:目前隻有在烘焙時才起作用,向某個方向發射的光,同樣會衰減。

Color:光源顔色。

Mode:實時光照,烘焙,混合三種模式。

Intensity:光照強度。

Indirect Multiplier:間接光照強度,即太陽光照射到物體之後,物體之間的反射強度,可以調節亮度。ShadowType:陰影類型:Hard Shadows, Soft Shadows, No shadows。

RealtimeShadows:實時陰影,相關參數可以調節光照的陰影效果,同時消耗也會不同。

RenderMode:光照的渲染計算類型,延遲渲染中會用到。

important:計算光照時會逐片元計算。

not important:逐頂點計算光照或者更高效的計算方式。

auto:由unity自己決定此光源的光照計算方式。

Culling Mask:根據物體的layer即層來控制此光源影響物體,我們可以将不想被光源影響的物體标記為統一的layer,在這裡設定他們。

二:BRDF(光照模型)任何在遊戲中看起來的表現都是數學計算的結果,那麼如何讓我們的光照看起來更加真實,更加符合人類的感覺認識,就看我們用的光照模型厲不厲害了。

1.标準光照模型光 = 自發光 + 環境光 + 漫反射 + 高光反射自發光:物體本身輻射的光,很簡單,可以直接使用材質的自發光顔色環境光:真實世界中,物體不僅會被光源照亮,還會被周圍環境中的物體照亮,我們假定用環境光來模拟周圍物體對我們物體影響的總和漫反射:與視角方向無關的,被認為反射出的光是随機的,均等的高光反射:受表面法線,光照方向,視角方向影響的部分,可以想象利刃上的光澤,是高光反射的結果,從不同的觀察角度,得到的計算結果不一樣

2.漫反射的計算蘭伯特定律:發射光線的強度和表面法線和光源方向之間夾角的餘弦值成正比(讀者可以畫個圖就了解了),其實就是越光線越是垂直表面,漫反射越強,計算公式為:Clight為光照顔色,Mdiffuse為漫反射顔色,Max取0和點乘結果的最大值,也就是将點乘結果小于0的部分設定為0,這也正是物體表面會分布不同強度的光照,而背面全是黑色的原因(背面的點乘為負值,被設定為0)

3.高光反射的計算Clight光照顔色,Mspecular高光反射顔色,n為法線方向,h為視角方向加上光照方向然後歸一化(簡化計算,避免計算反射方向)

4.菲涅爾反射想一下這樣的情景,你站在河邊,遠處的河水熠熠發光,近處的河水還能看見水下的魚,這是不是和我們的正常光照模型沖突了呢,好像是這樣,我們視角越是垂直于表面,反而反射效果越弱,我們如果需要得到更加豐富和更加細節的光照效果,菲涅爾反射也是我們需要考慮的一部分,比如把菲尼爾反射和标準光照模型結合起來。馮樂樂前輩的部落格中有篇就是利用漫反射和高光反射以及菲涅反射疊加起來,而在我們知道了原理後,調整各個部分的比例得到我們想要的結果就是不斷調節的過程了,沒有對錯之分隻有合不合适,“如果它看起來是對的 那麼它就是對的”。

5.逐頂點還是逐像素首先我們要了解一點,在模型中,片元說要比定點數多很多,三個頂點構成的三角形,裡面可以有幾十個片元,這些片元的某些資料是三個頂點線性插值的結果,是以,很明顯,在頂點中計算光照要比在片元中計算開銷更小,同樣的得到的效果也會稍差一些,這是相對的,需要我們去取舍。

更多unity2018的功能介紹請到paws3d爪爪學院查找。

繼續閱讀