Unity Shader 玻璃效果

2022-02-03 05:07:25 字數 1534 閱讀 6191

乙個玻璃效果主要分為兩個部分,一部分是折射效果的計算,另一部分則是反射。下面分類進行討論:

折射: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 透明度測試和透明度混合的基本原理如下 透明度測試 只要乙個片元的透明度不滿足條件 通常是小於某個閾值 那麼它對應的片元就會被捨...