[程式] Lava shader example
去年在網路上看到很佛心的人分享一個 lava shader
今天剛好在整理這一部份寫成blog
就分享來這裡
因為也有幾行關鍵的數學判斷我看不懂
所以希望板上的大神如果願意的話幫我解惑一下 XD
另外覺得我有寫錯的部份也可以交流討論討論
http://riveragamer.blogspot.tw/2017/05/lava-shader-code.html
shader codes的話就跳過vertex shader
只貼fragment shader
(排版不佳傷眼, 不好意思XD)
=====================================
struct PS_OUTPUT
{
float4 RGBColor : COLOR0; // Pixel color
};
float time;
sampler2D tex0;
sampler2D tex1;
PS_OUTPUT pixelMain( float2 TexCoord : TEXCOORD0,
float4 Position : POSITION )
{
PS_OUTPUT Output;
// tex0 是作者準備的noise map, 作者將它視為normal map去應用
float4 noise = tex2D( tex0, TexCoord ); // sample color map
// 計算 2 組UV位移分量, 時間參數在此代入影響
float2 T1 = TexCoord + float2(1.5,-1.5)*time*0.02;
float2 T2 = TexCoord + float2(-0.5,2.0)*time*0.01;
// noise.xyz 分別代表tangent space(我譯為切線空間)中的x, z, y軸分量
// (xz平面視為水平面)
// T1.xy = noize.xy * 2 + T1.xy;
// 也就是noise空間的 xz 水平位移量影響T1
T1.x += (noise.x)*2.0;
T1.y += (noise.y)*2.0;
// T2.xy = noize.yz * 2 + T2.xy;
// 也就是noize空間的 yz 垂直面位移量影響T2
T2.x += (noise.y)*0.2;
T2.y += (noise.z)*0.2;
// 由T1再次對 tex0 (noise map)做fetch,
// 取得T1擾動影響後alpha結果 (p = noise.a)
float p = tex2D( tex0, T1*2.0).a;
// 以T2由 tex1 (lava炎漿貼圖) 去取得炎漿的原色
float4 col = tex2D( tex1, T2*2.0 );
// 神奇的數學來了, 我頭開始痛惹
// col 被 p * 2 影響後再加上自身 col * col - 0.1,
// 明顯是一個高亮度曝光的動作
float4 temp = col*(float4(p,p,p,p)*2.0)+(col*col-0.1);
// 這 3 個 if condition 我真的無法解釋 = =,
// 但最關鍵的就在這辣rrrrr
if(temp.r > 1.0 ) { temp.bg += clamp(temp.r-2.0,0.0,100.0); }
if(temp.g > 1.0 ) { temp.rb += temp.g-1.0; }
if(temp.b > 1.0 ) { temp.rg += temp.b-1.0; }
// Jobs done. QQ
Output.RGBColor = temp;
return Output;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.159.38
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1495886501.A.596.html
※ 編輯: riveranb (36.236.159.38), 05/27/2017 20:02:58
→
05/27 20:04, , 1F
05/27 20:04, 1F
→
05/27 20:04, , 2F
05/27 20:04, 2F
→
05/27 20:05, , 3F
05/27 20:05, 3F
推
05/28 03:24, , 4F
05/28 03:24, 4F
→
05/28 03:25, , 5F
05/28 03:25, 5F
→
05/28 03:25, , 6F
05/28 03:25, 6F
→
05/28 03:26, , 7F
05/28 03:26, 7F
→
05/28 03:26, , 8F
05/28 03:26, 8F
→
05/28 03:27, , 9F
05/28 03:27, 9F
→
05/28 03:28, , 10F
05/28 03:28, 10F
→
05/28 03:29, , 11F
05/28 03:29, 11F
→
05/28 03:30, , 12F
05/28 03:30, 12F
推
05/28 11:42, , 13F
05/28 11:42, 13F
→
05/28 11:43, , 14F
05/28 11:43, 14F
→
05/28 11:44, , 15F
05/28 11:44, 15F
→
05/28 11:44, , 16F
05/28 11:44, 16F
→
05/28 11:45, , 17F
05/28 11:45, 17F
→
05/29 13:32, , 18F
05/29 13:32, 18F
→
05/29 13:33, , 19F
05/29 13:33, 19F
→
05/29 13:35, , 20F
05/29 13:35, 20F
→
05/29 13:36, , 21F
05/29 13:36, 21F
推
05/29 18:59, , 22F
05/29 18:59, 22F
→
05/29 20:05, , 23F
05/29 20:05, 23F
推
05/29 20:05, , 24F
05/29 20:05, 24F
推
05/29 22:33, , 25F
05/29 22:33, 25F
→
05/30 01:10, , 26F
05/30 01:10, 26F
→
05/30 01:10, , 27F
05/30 01:10, 27F
推
05/30 06:40, , 28F
05/30 06:40, 28F
推
05/30 08:16, , 29F
05/30 08:16, 29F
→
05/30 15:09, , 30F
05/30 15:09, 30F
推
05/30 15:10, , 31F
05/30 15:10, 31F
→
05/30 15:10, , 32F
05/30 15:10, 32F
推
05/30 16:41, , 33F
05/30 16:41, 33F
→
05/30 20:02, , 34F
05/30 20:02, 34F
※ 編輯: riveranb (122.117.152.17), 06/10/2017 13:21:17
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章