Unity3D Shader 熱扭曲效果

2021-09-10 21:45:42 字數 2187 閱讀 4189

【舊部落格轉移 - 2023年1月13日 13:18】

本來我是想寫乙個水的原理的,但是發現涉及的知識太多,還有好多不懂的,所以就先一步一步來

最近呢,我在網上撿到了一本《熱扭曲秘籍》,修煉數日,甚覺精妙

這次分享乙個很簡單的熱扭曲原理

1.這是原圖

2.加了特效之後~顯得很亮,很柔..

3.這個神秘的圖,才是效果的關鍵

擾**其實是把offset資訊寫入到r,g通道中的

下面我們拿乙個「照妖鏡」隨便找乙個畫素看一下它的真面目

可以看到畫素值為#946a00, r通道94,g通道6a,而b通道沒有值,是00,因為這裡暫時用不到b

float4 distex =tex2d(_distortionmap, i.uv);

float2 offsetuv = float2(distex.r, distex.g);

通過tex2d取樣,就可以取出擾動偏移量了

但是呢,顏色值是【0到1】,而擾動向量的值是【-1到1】

所以還需要轉換一下

offsetuv = (offsetuv-0.5)*2;

float4 bgtex = tex2d(_background, i.uv + offsetuv);
直接加上uv偏移量就行了

看到這裡,你已經掌握了扭曲的基本原理,沒錯就是這麼簡單~

偏移uv座標,把偏移資訊生成到一張中,就叫擾**

shader "

lijia/refractor1

" //

背景紋理

_backgroundscrollx ("

x offset

", float) = 0

//背景偏移

_backgroundscrolly ("

y offset

", float) = 0

_backgroundscalex (

"x scale

", float) = 1.0

//背景縮放

_backgroundscaley ("

y scale

", float) = 1.0

_refraction (

"refraction

", float) = 1.0

//折射值

_distortionmap ("

distortion map

", 2d) = "" {} //

扭曲 _distortionscrollx ("

x offset

", float) = 0

_distortionscrolly (

"y offset

", float) = 0

_distortionscalex (

"x scale

", float) = 1.0

_distortionscaley (

"y scale

", float) = 1.0

_distortionpower (

"distortion power

", float) = 0.08

} subshader

pass ;

struct

vertextofragment ;

vertextofragment o;

o.pos =mul(unity_matrix_mvp,v.vertex);

o.uv =v.texcoord.xy;

return

o; }

fixed4 frag(vertextofragment i) : color

endcg}}

}

posted @

2017-05-16 15:14

李嘉的部落格 閱讀(

...)

編輯收藏

Unity3d Shader 運動模糊

攝影常用的一招就是延時攝影,以使運動的物體產生運動模糊。攝影技巧為 1,三角架固定相機 2,調長 時間 3,物件有運動物體和靜止物體參照 用了延時攝影,會產生藝術感,見下圖 2015年1月 拍攝於上海陸家嘴 遊戲方面可喜的是unity3d也可以實現類似效果,先看效果圖 第一張為無運動模糊 第二張為有...

Unity3D Shader 入門學習

unity3d 的所有渲染工作離不開著色器.shader 著色器其實是一小段程式,它負責將輸入的mesh網格.以指定的方式和輸入的貼圖或者顏色等組合作用.然後輸出.繪圖單元可以依據這個輸出來將影象繪製到螢幕上 輸入的貼圖或顏色等,加上對應的shader,以及對shader的特定引數設定,將這些內容 ...

unity3d shader之浮雕效果

浮雕就是對影象上的乙個畫素和它右下的那個畫素的色差的一種處理 非常容易,只需要乙個簡單的演算法 用fragment shader來實現 我們只看實現部分就好 在frag函式中 mc00mc tex2d maintex,i.uv maintex rgb 獲取當前點的顏色 mc11 tex2d main...