一日一Shader 水面折射 SG 17

2021-10-08 10:44:31 字數 940 閱讀 9051

今天回看昨天做的折射的效果,發現我想的太狹隘了,我完全是按球體的光學原理來實現,所以用其他形狀的透鏡時,效果就是錯誤的。想了想,不規則透鏡的折射效果更多的是一種模擬。不過,我還是想嘗試實現波紋水面的折射效果,因為只用考慮乙個面,所以光學模型還是比較容易構建的。

將上圖中的光線原理轉換為幾何問題:

已知向量ab(-v)、向量ad(-n1)、角bad(θ,根據v和n1計算出來)、角dac(λ,根據θ和折射率n計算出來),求向量ac。

當然,可以先簡化一點,只求單位長度的向量ac,再用另外的引數控制ac的長度。

推導公式:

cosθ=v·n1

sinθ=sqrt(1-cosθcosθ)

sinλ=nsinθ

cosλ=sqrt(1-sinλsinλ)

ac=cosλ/n1

封裝為自定義節點:

void refraction2_float(float3 v,float3 n1,float n,out float3 output)

最後完整的結構圖:

返回目錄:

一日一結2012 5 2

今天去圖書館把作業系統概念借到了,期待很久,欣喜萬分。專業知識部分 今天主要學習了一下mfc六大關鍵技術,感覺講得不錯。主要的例子是以基於文件類的程式,感覺學到了東西。以前看孫新老師的書時是有點半知不解,看了這個資料讓我對mfc程式的內部有了更深一層的理解。課外知識部分 看完10000小時code ...

一日一結2012 5 6

今天天氣很熱,感覺已經進入夏天。看了galaxy 3 效能評測,不錯。專業知識部分 今天看了作業系統概念的虛擬記憶體,了解了虛擬記憶體的概念和原理,虛擬記憶體這種記憶體管理技術允許執行程序不必完全在記憶體中。而且,虛擬記憶體將記憶體抽象成乙個巨大的 統一的儲存陣列,進而將使用者看到的邏輯記憶體和物理...

一日一Shader 幾何階段之增厚 SS 14

之前做了乙個爆散的效果,那是利用已有頂點的偏移來實現。今天做的增厚效果則是將已有的頂點複製出來乙個,然後沿法線方向偏移,形成雙層結構,讓最終繪製出來的影象有一定的厚度。shader myshader ss 14 mask mask 2d subshader struct v2f float3 twi...