乙個玻璃效果主要分為兩個部分,一部分是折射效果的計算,另一部分則是反射。下面分類進行討論:
折射:1.利用grass pass對當前螢幕的渲染影象進行取樣
2.得到法線貼圖對折射的影響
3.對採集的螢幕影象進行關於法線方向上的扭曲和偏移,以模擬折射效果
反射:主要利用環境貼圖產生反射的殘影,並和主貼圖取樣結果混合
得到反射和折射的結果後,以乙個插值變數控制最終效果(類似於玻璃的透光率);
指令碼如下:
1效果如下://upgrade note: replaced '_object2world' with 'unity_objecttoworld'
23 shader "
myunlit/glassrefraction"4
8//這裡的法線貼圖用於計算折射產生的扭曲
9 _bumpmap("
normal map
",2d)="
bump"{}
10//
這裡的環境貼圖用於反射周圍環境的部分殘影
11 _cubemap("
environment map
",cube)="
_skybox"{}
12 _distortion("
distortion
",range(0,100))=10
13//
乙個折射係數,用於控制折射和反射的佔比
14 _refractamount("
refract amount
",range(0,1))=115}
16subshader
1720
//抓取當前螢幕的渲染影象並存入指定紋理
21 grabpass
2223
pass24;
3839
struct
v2f40;48
49sampler2d _maintex;
50float4 _maintex_st;
51sampler2d _bumpmap;
52float4 _bumpmap_st;
53samplercube _cubemap;
54float
_distortion;
55fixed
_refractamount;
56sampler2d _refractiontex;
57float4 _refractiontex_texelsize;
5859
6081
82fixed4 frag (v2f i) : sv_target
83104
endcg
105}
106}
107 fallback "
diffuse
"108 }
Unity Shader實現玻璃材質效果
主要是通過反射和折射來達到透明的效果,用菲涅爾來混疊。shader部分 shader unlit crystal 折射角度 etaratio etaratio range 0,1 0 菲涅爾係數 fresnelbias fresnelbias float 0.5 fresnelscale fresn...
unity Shader 扭曲效果
所謂扭曲就是擾動乙個物體的uv座標,表現出來就是乙個擾動效果,如火焰扭曲空氣,和水波對水底的影響。1.在shader 中我們需要一張當前渲染的紋理 2.給乙個物體渲染並使用當前紋理,用螢幕座標作為uv座標加上乙個擾動值 1.unity提供了抓取的pass grabpass unity官網介紹 每次遇...
Unity Shader透明效果
unity中通常使用2種方法來實現透明效果 第一種是使用透明度測試 alpha test 這種方法無法得到真正的半透明效果 另一種是透明度混合 alpha blending 透明度測試和透明度混合的基本原理如下 透明度測試 只要乙個片元的透明度不滿足條件 通常是小於某個閾值 那麼它對應的片元就會被捨...