前言:本篇部落格只是乙個簡單的了解光的反射實現原理的例子,主要是當做筆記使用。
核心要點:如下所示:
1.光的折射原理主要依賴於斯涅爾定義。如下所示:
2.光的反射原理主要依賴於菲涅爾定義。由於其過於複雜,一般使用菲涅爾近似值來表示。如下所示:
核心**:如下所示:
shader "unlit/fresnelshader"
// fresnel偏移量
_fresneloffset("fresneloffset", range(0, 1)) = 0
// fresnel縮放量
_fresnelscale("fresnelscale", range(0, 1)) = 0
// fresnel開方係數
_fresnelpow("fresnelpow", range(1, 5)) = 1
// 折射光顏色
_refractioncol("refractioncol", color) = (1, 1, 1, 1)
} subshader
lod 100
pass
cgprogram
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"
;struct v2f
;sampler2d _maintex;
float4 _maintex_st;
float _fresneloffset, _fresnelscale, _fresnelpow;
float4 _refractioncol;
fixed4 frag (v2f i) : sv_target
endcg
} }}
執行效果:如下所示:
c 執行時反射實現原理實現
一直在研究如何巧妙地在c 語言層面上實現反射功能,boost庫內有乙個magic get的反射,但是它是基於編譯時的模板反射,給使用者的感覺來說,雖然是非侵入式的,但是使用上不夠靈活,下面直接上 看看執行時的反射是怎麼實現的。include include include template stru...
光場相機原理
簡單的說,光場就是光線,它包含光線本身的強度 位置和方向等資訊。一般採用兩個相互平行的平面來表徵光場,如圖所示 若一條光線通過兩個平面uv和st所產生的交點座標分別為 u,v 和 s,t 此時就可以通過光場函式l u,v,s,t 來表示這條光線的分布。l代表光線的強度,而 u,v 和 s,t 共同確...
光場相機原理
簡單的說,光場就是光線,它包含光線本身的強度 位置和方向等資訊。一般採用兩個相互平行的平面來表徵光場,如圖所示 若一條光線通過兩個平面uv和st所產生的交點座標分別為 u,v 和 s,t 此時就可以通過光場函式l u,v,s,t 來表示這條光線的分布。l代表光線的強度,而 u,v 和 s,t 共同確...