|
電腦遊戲製作開發設計論壇 任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
waffenss 偶而上來逛逛的過客
註冊時間: 2008-10-17 文章: 8
14.39 果凍幣
|
發表於: 2008-10-17, PM 5:53 星期五 文章主題: 用Shader的實作模擬色盤 |
|
|
我現在有用shader來寫一些基本繪圖效果.
例如Parallax Normal Mapping.
不過這次丟上來的是模擬色盤的shader.
現在的GPU已經不直接支援色盤了.
色盤的好處是可以一直換顏色卻不太耗貼圖容量.
之前遇到一種情形是,很多介面大圖, 切換一次流程就要換一次顏色
如果換了5次,就是五倍圖量.
但是這些介面和底圖其實形狀和明度是不變的.
所以最後想出這個做法.
後來看到Halo3也是用類似做法來最佳化武器火光的貼圖.
它其實大部份火光是同一套灰階貼圖,靠模擬色盤來變換顏色.
[Vertex Shader]
varying vec2 vUV;
void main(void)
{
gl_Position = ftransform();
vUV.x = gl_MultiTexCoord0.x;
vUV.y = -gl_MultiTexCoord0.y;
} //以上只是做頂點座標變幻和貼圖座標輸出而已,沒什麼特別.
[Fragment Shader]
uniform sampler2D idx; //一張512X512灰階的圖.
uniform sampler2D pal; //一張256X1的彩色漸層圖
varying vec2 vUV;
void main(void)
{
float index = texture2D(idx,vUV).y;
//從灰階圖的綠色頻道取得明暗度當做色盤的索引index
vec2 newUV = vec2(1.0-index , 0.5);
//因為我色盤明暗做反了,所以1-index
//newUV.y可是任意值. 隨便給它0.5.
//newUV是新的貼圖座標, 等一下用它來讀色盤
// newUV.x = clamp(newUV.x , 0.1 , 0.9);
vec4 color = texture2D(pal,newUV);
//讀色盤
gl_FragColor = vec4(color.xyz, 1.0);
//回傳
}
我們只要做很多組256X1的彩色漸層圖
(256x1相當於8bit調色盤,你也可以8X1~128x1,如果不需很多顏色)
就可以一直換顏色.色盤只有256pixel所以很小,
更棒的是色盤是可以共用的,所以簡直不耗容量.
因為讀2次貼圖, 所以會稍微多耗一點效能. |
|
回頂端 |
|
|
Percy 偶而上來逛逛的過客
註冊時間: 2008-10-12 文章: 14
0.00 果凍幣
|
|
回頂端 |
|
|
vamper 對這略感興趣的新人
註冊時間: 2007-06-23 文章: 29 來自: 台灣 18.82 果凍幣
|
發表於: 2008-10-19, PM 9:45 星期日 文章主題: |
|
|
喔!看到有人談論shader呀~
這想法滿不錯的,是屬於color control的技術之一。
其實不只在UI中,在我們遊戲中的場景或怪物,
他們的外觀不保持不變,但是要讓玩家知道,這個怪物是不同等級的,
或者說同樣的場景,但是色調要不一樣,比如:金木水火土的色系。
那我們必須要用顏色來表示。
為了節省一些資源,在shader的幫助下可以讓我們來解決上面的問題,
只是消耗顯示卡的一點點運算(per-pixel或per-vertex),來節省一些記憶體。
至於演算法如何?就看個人的作法~頂樓的版友就是其中一個作法。
而且也給美術人員一個相當好的幫助與支援。
This's good! |
|
回頂端 |
|
|
waffenss 偶而上來逛逛的過客
註冊時間: 2008-10-17 文章: 8
14.39 果凍幣
|
發表於: 2008-10-20, AM 2:22 星期一 文章主題: Re: 用Shader的實作模擬色盤 |
|
|
只要是圖形類似但色相不同的貼圖,都能用色盤換色.
怪物的貼圖換色,天空貼圖換色,特效貼圖換色.....都可以.
甚至2D字型如果有辦法用shader,也可以做換色.
Halo3這種場景大貼圖多的遊戲容易繪圖記憶體不足.所以也用色盤來最佳化.
另外這種2pass的貼圖讀取的做法, 只要把第一張1D 貼圖換成大色塊的明暗色,
然後用即時光照的強度值(0~1)當做index去查找.
就可以簡單做出卡通算圖的色塊感.
算是蠻簡單好用又不太耗效能的做法
我本來是想做即時色相變化,但是那難度太高.
我又不是程式設計師, 實在寫不出color space conversion的即時換色.
還是模擬色盤簡單多了, |
|
回頂端 |
|
|
Percy 偶而上來逛逛的過客
註冊時間: 2008-10-12 文章: 14
0.00 果凍幣
|
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 可以 在這個版面附加檔案 您 可以 在這個版面下載檔案
|
|