///逐頂點高光反射
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...