光的反射實現原理

2021-09-25 03:02:56 字數 1239 閱讀 9762

前言:本篇部落格只是乙個簡單的了解光的反射實現原理的例子,主要是當做筆記使用。

核心要點:如下所示:

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 共同確...