GameDesign 板


LINE

前二天在這篇文章 文章代碼(AID): #1XJQL9jP (GameDesign) 才知道有 https://www.shadertoy.com/ 這個方便測試 WebGL 的網站, 就稱趁機寫了三篇非常入門的 shader language 教學, 幫想從零開始學 shader language (GLSL) 的網友省點時間 UV 座標 講 shader 一定要先提的是 UV 座標。 UV其實就是一個長方形的XY軸座標, 差別是UV的座標值是在 [0,1] 之間, 所以UV(0.5,0.5)就是平面的正中央。 舉例, 一個畫布長寬 (600,400), 某個點 a1 位置 (300, 100), 其 uv 是 (300/600, 100/400) = (0.5, 0.25)。 UV這名字的由來, 就只是因為這二個字母是在三維的(X,Y,Z)前, 沒別的意義。 UV 的原點, 在 WebGL 是在左下角, 在 Godot 是在左上角, 並不一定。 顏色 shader用 RGB 加上一個透明度的四個值代表顏色。 四個值都在[0,1]之間, 大於1都算1,小於0就是0。 白色就是(1,1,1,1),黑色就是(0,0,0,1)。 因為UV座標和顏色的值都是[0,1]之間, 所以馬上可以寫一個簡單的程式測試圓點在哪。 使用 ShaderToy 網站 開啟 https://www.shadertoy.com/ , 點右上的 New, 在右邊編輯框內打入下面程式, 按下面 compile 的三角形執行按鈕。 code https://i.imgur.com/VrybqHX.jpg img https://i.imgur.com/LeBQYwD.png 說明 每次要畫一個 pixel, 都會呼叫一次 mainImage()。 vec4 fragColor 是 pixel 的顏色, fragCoord 是 pixel 座標 (非UV)。 iResolution 是 ShaderToy 內建的參數, 代表了畫面的長寬最大值。 Godot 要怎麼寫? 在 Godot 中要寫 shader, 最快的方法是建立一個 ColorRect Node, 填入 Rect 的長寬 (size), 顏色 (color)。 再到右邊 Inspector 的 CanvasItem -> Materil -> ShaderMaterial -> New Shader 就可以在 Shader Editor 裏開始寫了。 在 Godot 中,同樣的 function 是這樣寫的。 code https://i.imgur.com/Kw0d526.jpg UV 是 global variable 不用計算, COLOR 也是類似的 variable。 因為都算是 GLSL, 長的都差不多。 比較 ShaderToy 和 Godot 的執行畫面, ShaderToy 的黑色區域在左下角, Godot 在左上角, 代表二者的原點位置不同。 橢圓弧形變正圓弧形 因為畫面不是正方形, 而是長方形, 所以看的出來畫出的漸層並非正圓弧, 而是橢圓形弧形的。 要解決 uv 的二個值最大都是 1, 代表的真實長度卻不同的問題, 我們可以重新計算 x 或 y 值。 一般來說 resolution.y 比較短 (橫向畫面), 所以當作 1,照比例調整 uv.x。 code https://i.imgur.com/QlLz5yE.jpg image https://i.imgur.com/3jhrLbm.png 在 Godot 裏, 語法也差不多。 差別是多了個可以從外部更改的 resolution 的 uniform 變數, 取得作畫範圍的像素長寬值。 code https://i.imgur.com/UyGE880.jpg 轉換了 uv.x 後, 畫出來的陰影就是個圓弧形, 而非橢圓弧形的了。 將原點改成畫面中心處 如果我們想把原點放在中央, 而非左上或左下, 只要加一行座標轉換就可以了。 code https://i.imgur.com/opVlKK9.jpg 這樣圓心就在中間了。 image https://i.imgur.com/XntdZ4F.png Godot version https://i.imgur.com/NNApsmn.jpg 下一篇, 要將這個漸層的圓形, 變成單色的圓形。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.97.156 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1632720747.A.76E.html ※ 編輯: meowyih (61.228.97.156 臺灣), 09/27/2021 14:48:06
1F:推 wangm4a1: 推 入門文章不多 因為本來就是進階 09/27 16:10
2F:推 dklassic: 推新手文,也推 shadertoy XD 09/27 16:31
3F:→ dklassic: 我還以為寫 shader 都知道這東西,看來沒我想像的廣播 09/27 16:31
4F:推 devon5: 感謝分享 09/27 17:32
5F:推 wel0789321: 讚 推個 09/27 19:20
6F:推 coolrobin: 感謝推一個 09/27 20:34
7F:推 LuMya: 推 學無止境 09/27 23:17
8F:推 louisalflame: 推分享 09/28 08:19
9F:推 CarpeDiemAL: 推 感謝! 09/28 15:53
10F:推 OSDim: 我今天才知道UV是怎麼來的 太神辣 09/28 23:26
11F:推 johnny94: 推 09/29 10:06
12F:推 leonardo0917: 推推 09/29 12:28
13F:推 Bencrie: OpenGL 的 texture coordinates 叫 strq,不是 uvw 啊 09/30 01:40
14F:推 grezod: 推 09/30 21:17
15F:推 johnkry: 我看很深奧啊... 10/01 08:49
16F:推 megah321: 推 10/08 18:53
17F:推 WanderLudens: push 10/09 12:07







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP