高階光照與材質之模擬真實世界的光照

2022-02-15 04:42:37 字數 3524 閱讀 8683

讀書筆記第二章,加了許多博主的理解和補充。

第二章講的也是基礎知識,補充了博主許多知識縫隙。

介紹了四中型別光的光照模型,點光源,面光源,方向光,聚光燈,和他們的光照模型,還簡單介紹了下gi。

這章的幾個topics:

1.理想的點光源

2.幾何衰減

3.光照通過物質的衰減

4.方向光

5.面積光

6.聚光燈

7.本地和全域性光照模型

8.環境光

作者首先介紹了真實世界中一些光的例子,有各種各樣的形狀顏色和大小。實時渲染需要每幀都來計算所以需要注意權衡消耗,離線渲染就可以慢慢渲染計算複雜的高品質gi。

光照之所以顯得真實是光衰減的體現,所以計算光衰減就是計算光照的一大目的。

在虛擬世界中我們只能模擬理想情況下的點光源,點光源也是所有種類光源的原型,它的特性適用於所有種類光源,嗯,點光源是老祖宗,所有光源都是由點光源變種而來。

點光源就是在一點發射以某個半徑長度範圍內的球型的能量,但是在真實世界中的點光源是沒有範圍界限的,但是我們為了節約計算,為它定製範圍,以免去那些小的可以忽略不計的光強。

這裡出現了一條定義:球是按立體角來劃分的,球面度是立體角的單位,4π球面度就是整個球。

點光源是以流明lumen為單位的光通量luminous

flux來測量輻射功率。每段時間的能量被稱為flux通量,然後這個光能使它luminou發光。很方便的稱luminous

intensity光強作為每單位立體角發射的能量。對於可見光,每單位測量的光強稱為坎德拉candela(以它為單位)。

power功率是每單位時間測量出的energy能量。光強由功率得出。能量和功率這兩個單位是不可互換的。一些光照單位比如:candela,lumen,candlepower,nit等等它們之間的轉換需要單位變換。

接著說到了幾何衰減,光強有對距離的平方反比性,就是對到被照明物體表面的距離的平方成反比,衰減就與這個距離的平方成正比。

衰減的產生是由於距離和光穿過材質帶來的能量轉移而產生的,這個能量轉移與光穿過霧和渾濁水被其中的分子小顆粒大顆粒吸收、散射的情況不同,也就是說fog

等的吸收、散射效果與光衰減無關,衰減是不變的。另外注意光怎麼衰減都不會減到0,因為就算你除以無窮大的距離平方他也只是趨近於0但並不為0,這就是之

前所說真實世界的點光源是沒有範圍的的原因。

自然界是沒有完美點光源的,但是接下來要講的面光源更接近與真實世界的光源

點光源的光照公式如下圖,基本上是由於衰減而產生的變化。

最常見的方向光是太陽光。剛才講點光源的時候說過了,所有型別的光源都是由點光源的變形,那麼方向光是點光源怎麼變得呢?

情況1:方向光就是無限遠的點光源,角度相差過小可以忽略不計

情況2:點光源的大小大於或等於被照明物體

一張圖示全部解釋

還是舉太陽的例子,太陽離地球比十萬八千里還遠,好吧,其實是150000000km,

太陽與地球兩端的角度小於0.005度,當然可以忽略不計啦。又有人說了,衰減怎麼辦呢?等到能夠計算衰減的時候地球的另一半都是黑天了,根本沒有光照。。。這是一點,另外更重要的了一點,對於遙遠的光照距離,地球直徑這個小小的厚度所產生的衰減差也是小到可以忽略不計。

這也就是為什麼在unity中對光照的齊次向量_worldspacelightpos0,的xyz分量對於點光源是表示位置的,對於方向光是表示方向的,

而z就是齊次部分,我們知道,對於其次部分一般情況是為1,如果為0,就代表無窮大也就是表示方向,這也就是為什麼對於方向光的z部分為0,點光源的z部

分為1。

方向光的公式的計算量很小基本就是乙個常量,如下圖

面光源是最複雜計算量最大的光照模型,在unity中使用的話需要提前烘焙不能實時計算,以它為基礎可以引申出spotlight聚光燈

那麼面光源又是由點光源怎麼變來的呢?面光源可以理解為乙個矩陣的點光源集合,如下圖

每個點光源都計算一遍衰減,當然消耗得多,但這也是面光源看起來非常真實的原因。

可以用soft shadow和softer attenuation技術來模擬面光源的效果。

到達照明物體的能量與其與面光源的距離和他們之間的角度有關

面光源的衰減的計算也與點光源不同,不只是簡單的距離平方反比,

不同大小和形狀的面光源計算衰減的複雜性也不同,普遍的計算方式如下:

a為光衰減受距離平方影響的速率,b決定衰減的線性行為,c為偏差係數

聚光燈是面光源的延伸,聚光燈既有方向光的性質又有面積光的性質,它通過陰影的本影umbra和半影penumbra來表現柔和的光照(陰影)

可以把聚光燈想象為乙個圓筒照在點光源上,阻塞部分光照,根據圓筒開口範圍不同阻塞範圍不同露出光大小也不同。

本影和半影與圓筒的關係與圓筒開口範圍與點光源在圓筒內的位置決定,圓通開口大小並不能改變半影範圍大小,因為點光源本質不變,半影大小與光源在圓筒內的位置和光源大小有關

想要定義聚光燈模型,我們需要幾個引數,聚光燈的方向,本影方向,半影方向,

當點在本影範圍內時,光照強度為1,如果在半影範圍之外光照強度為0。如果在本影到半影角度之間則按下面的公式計算,f為衰減因子,各種余弦,,計算是不是也挺複雜的,挺消耗的。

全域性光照和區域性光照和環境光

這裡簡單介紹了一下為後面的光線追蹤做鋪墊。

在真實世界中物體受到的光照不止來自於光源,也來自於其他物體的反射。區域性光照就顯得效果非常虛假,甚至沒有陰影。

但是我們如果計算每個物體的反射光作為光源的話(比如光線追蹤)有很消耗並且很慢,不適宜用在實時渲染,所以我們用環境光來做近似,以使得沒有光照的地方不至於沒有一點亮度。

環境光消耗很少。

近期更新下一章

博主近期渲染:

近期的渲染

---- by wolf96

高階光照與材質之光照和反射模型

第五章講述了一些漫反射模型和鏡面反射模型的原理和數學公式 博主在unity中實現了一下,把部分結果貼在上面 有下面幾個主題 渲染公式 基本光照定義 光照和lambert法則 雙向反射分布函式brdf 漫反射材質原理簡介與模型 鏡面反射材質原理簡介與模型 對於我們眼睛可見的光對於表面的作用,他們會發生...

高階光照與材質之光的物理學

對advanced lighting and materials with shaders的讀書筆記與總結,05年的老書了,這本書簡單並且通俗易懂 這一章是講述光照理論知識的,雖然大部分的理論都知道,但是複習一遍總是好的 正如作者所說,你在知道 how 之前需要知道 why 之所以二元性,是因為我們...

高階光照與材質之光的物理學

對advanced lighting and materials with shaders的讀書筆記與總結,05年的老書了,這本書簡單並且通俗易懂 這一章是講述光照理論知識的,雖然大部分的理論都知道,但是複習一遍總是好的 正如作者所說,你在知道 how 之前需要知道 why 之所以二元性,是因為我們...