CG語言 基本光照渲染

2021-08-14 05:23:03 字數 2818 閱讀 3120

本人新人一枚,想要將自己所學分享給大家,如有錯誤或不足請大家毫不猶豫的指出,謝謝大家的支援!!!那麼開始吧:

乙個物體我們能看見是通過被光線照亮後經過反射進入我們的眼睛後大腦成像。計算機(gpu)就是計算進入眼睛之前的各個步驟得到的從而給我們反饋乙個結果。

計算公式:su***cecolor=emissive+ambient+diffuse+specular+...;

su***cecolor-物體最終渲染結果;

emissive-放射;

ambient-環境放射;

diffuse-漫反射;

specular-鏡面反射;

...-其他資料或自定義資料;

注:乙個簡單的光照渲染中emissive(放射)和specular(鏡面反射)和...(其他資料或自定義資料)不是必須的。

上面的公式看著複雜,其實都是一些很簡單的運算,接下來我們乙個個的分析**:

1>emissive  放射

放射簡單來講就是物體發光,可以當做自發光,比如燈泡之類的。

emissive=ka ——ka表示材質的放射光顏色

2>ambient  環境反射

環境反射簡單講就是反射的從四面八方來的環境中的光

ambient=kb*globleambient——kb是材質環境反射係數,globleambient是入射環境光顏色。

3>diffuse 漫反射

漫反射就是對於表面凹凸不平的物體對於光的反射,比如瀝青路面,黑板表面等等。

diffuse=kc*lightcolor*max(n*l,0)——kc是材質漫反射顏色,lightcolor是入射光的顏色,n是歸一化的表面法向量,l是歸一化的指向光源的向量。其中n*l是n向量點乘l向量。

注:歸一化是將向量變成單位向量,也就是說此向量我們不需要其大小僅僅需要其方向進行計算。歸一化也有叫規範化。

4>specular 鏡面反射

這個好理解,就是類似於鏡子中的光反射,但是看到鏡子中物體到底有什麼取決於觀察者的位置,位置不同看到鏡子中物體也不同,可以簡單理解為美術中的高光。多用於光澤度比較大的物體,例如拋光金屬等。

specular=kd*lightcolor*facing*(max(n*h),0)^mglass——kd是材質的鏡面反射顏色,lightcolor是入射鏡面反射光顏色,n是歸一化法向量,v是指向視點的歸一化向量,l是指向光源的歸一化向量,h是v向量和l向量的中間向量,mglass是材質的光澤度。其中n*h是n向量點乘h向量。

好了基本原理講解完了剩下就是碼cg**了;

cg語言中有兩種著色器,頂點著色器和片元著色器。頂點和片元著色器中的**搞明白其中乙個就行,另乙個就是貼上複製,一樣的原理,兩者就是著色效果會有一點點區別,一般如果物體頂點少的話用頂點著色器會看出物體的三角面,採用片元著色器會好一點。頂點越多線性插值越豐富顏色過度越好,但相對消耗效能。

**基於unity3d 2017.3.of3 版本渲染:

shader "custom/diffusevertexlevelmat"//逐頂點光照

注:如果這裡新增自發光只是會顯示顏色,並不會真正意義上變亮,只是簡單地光照渲染所以沒有給出。

unityshader入門精要 馮樂樂 人民郵電出版社 2023年6月第1版

CG渲染概念

1.渲染render 把3d變為2d的過程,指用軟體從模型生成影象的過程。模型是用嚴格定義的語言或者資料結構對於三維物體的描述,它包括幾何 視點 紋理以及照明資訊。首先定位攝像機的位置 四個預設的攝像機 頂檢視 正檢視 側檢視和透檢視 我們大多數時候渲染的是透檢視,透檢視的攝像機基本遵循真實攝像機的...

光照模型及cg實現

經典光照模型 illumination model 物體表面光照顏色由入射光 物體材質,以及材質和光的互動規律共同決定。由於環境光給予物體各個點的光照強度相同,且沒有方向之分,所以在只有環境光的情況下,同一物體各點的明暗程度均一樣。環境光是對光照現象的最簡單抽象,侷限性很大。它僅能描述光線在空間中無...

光照與渲染(二) 光照技術

廣義的來說,unity的全域性光照是 實時 或是 預先計算好 的,在某些情況下兩種方法可以結合使用,照出更逼真的場景。本節我們會針對兩種技術的差異優勢和使用時機做個簡單的描述。實時照明 realtime lighting 預設情況下,unity的燈源 直接光源,投射燈,點光源 都是實時的,代表這些燈...