逐頂點高光反射

2021-08-22 11:35:48 字數 1040 閱讀 6766

///逐頂點高光反射

shader"unity shader book/chapter 6/specular vertex_leve1"

subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

//引用內建的變數

#include "lighting.cginc"

//定義和屬性相匹配變數

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

//頂點著色器的輸入結構體

struct a2v ;

//頂點著色器的輸出結構體,同時也是片元著色器的輸入結構體

struct v2f ;

//頂點著色器

對於高光反射部分:

先計算入射光線關於表面法線的反射方向【reflectdir】。由於cg的reflect函式的入射方向要求是由光源指向交點處的,因此我們需要對【worldlightdir】取反再傳給reflect函式。

然後通過【_worldspacecamerapos】得到世界空間中的攝像機位置,再把頂點從 模型空間變換到世界空間下,再通過和_worldspacecamerapos相減得到世界空間下的視角方向

逐頂點高光反射部分很不光滑,因為高光反射部分的計算是非線性的,而在頂點著色器中計算光照再進行插值的過程是線性的,破壞了原計算的非線性關係。(有待理解)

高光反射計算公式:

reflect(i,n):函式,由cg提供,通過  入射方向 和  法線方向  計算  反射方向

pow(x,y):函式  用來求 x 的 y 次冪(次方)

shader入門5 高光反射

高光反射一般用於實現金屬光澤的效果,原理是反射光與物體朝相機的方向的夾角cos值為標準進行光照補償,夾角越小補償值越高.其實現原理與在漫反射基礎上加了高光補償的部分,要注意的是世界座標系中的光照與入射角方向是相反的 n是normaldir v是viewdir l是lightdir 因為反射公式的入射...

高光反射Phong光照模型

高光反射是一種經驗模型,並不完全符合真實世界中的高光反射現象。先根據表面法線 視角方向 光源方向計算出反射方向。通過 phong 模型來計算高光反射的部分。一般都用逐畫素,得到更平滑的高光效果。公式 高光反射光線強度 入射光線顏色 高光反射顏色 max 0,視角方向 反射方向 高光反光度 case ...

shader高光反射漫反射學習

高光反射 會受到相機方向的影響 specular 直射光 pow max cos 0 10 shader效果 類似於乙個亮點 反射光的方向,unity方法reflect 反射光是平行光的反射 lightdir 法線是normaldir 得到的是光照的反射方向 reflectdir fixed3 re...