Creator3D shader13 水面漣漪

2021-10-09 15:12:57 字數 1190 閱讀 9256

首先咱們回顧一下之前的兩篇關於水面的文章

在上邊的這兩篇文章中,水面的動態效果都是基於頂點著色器,也就是模型的頂點來實現的。

其中在第二篇文章中,菜鳥預期是實現乙個波浪擴散的效果,但是最終沒有實現。於是菜鳥下去專門研究了一下,終於研究出來了。

在頂點著色器中我們能看見一行**:

v_uv = a_texcoord;
那麼uv,也就是a_texcoord到底表示的是什麼?

什麼是uv,簡單來說就是切圖對映到模型表面的依據。u代表在水平方向的座標,v代表在垂直方向的座標。

u,v的取值都是0~1,也就是(水平方向的第u個畫素/寬度,垂直方向的第v個畫素/高度)。它定義了上每個點的位置的資訊. 這些點與3d模型是相互聯絡的, 以決定表面紋理貼圖的位置. uv就是將影象上每乙個點精確對應到模型物體的表面. 在點與點之間的間隙位置由軟體進行影象光滑插值處理. 這就是所謂的uv貼圖.

仔細看圖,大家可能就會發現,漣漪的效果實際上也就是咱們最常用的正弦曲線,

實現原理

了解了uv,也了解了漣漪的原理,那麼怎樣將這兩點結合起來,實現咱們需要的效果呢。

//計算uv到起點的向量

vec2 dv = startpos - v_uv;

//計算向量的長度

float dis = sqrt(dv.x * dv.x + dv.y * dv.y);

//更具擴散範圍計算power

float p=(power/range)*((range-dis)>0.0 ? range-dis : 0.0);

float sinfactor = sin(dis*frequency-cc_time.x*speed)*0.01*p;

//歸一化

vec2 dv1=normalize(dv);

//計算每個畫素uv的偏移量

vec2 offset= dv1 * sinfactor;

// //偏移

vec2 uv=offset+v_uv;

u3d shader入門寫法

星期二的時候,開始要做乙個按鈕切換的效果,功能就是點一下選擇鍵盤,再點一下,選擇藍芽搖桿,其實可以用很簡單,或者很笨,但能用的方法實現 2個png切換 最後決定用shader 真的對 shader一竅不通,結果足足花了2天才完成,1個小功能,2天還是很值得,起碼shader技能1級,get。其實前面...

Unity3d Shader 運動模糊

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

Unity3D Shader 入門學習

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