作者meowyih (meowyih)
看板GameDesign
标题[程式] 超新手 shader language 教学文 (三)
时间Mon Sep 27 14:08:44 2021
画一条雷射光
下面程式会在画面中间画出一道雷射光,
原理 (只有一行) 请看 code 里面的说明。
code
https://i.imgur.com/BFoKfEo.jpg
效果
https://i.imgur.com/zSovp0B.png
朝中心缩小的雷射光
接下来加点变化,
我们更改 laser_coeff,
让该值越靠近中间就越细。
方法就是直接乘 abs(uv.x),
因为 uv.x 越中间就越接近 0。
code
https://i.imgur.com/ypU7t9Y.jpg
效果
https://i.imgur.com/bF6Tglb.png
日出感觉雷射光
我们也可以反过来,
让雷射越靠中间就越粗,
看起来也很像日出效果了。
code
https://i.imgur.com/uSJM8Vz.jpg
效果
https://i.imgur.com/ru1N2NI.png
变成一支光箭
把右边变短,左边变长,让它看起来像一支光箭。
code
https://i.imgur.com/u2WY39O.jpg
效果
https://i.imgur.com/8ibgccT.png
让光箭射出去
从左边射到右边,
只需要用 iTime 改变 uv.x 的值就好。
iTime 是 ShaderToy 提供的参数,
就是左边拨放器看到的拨放时间 (秒)。
这个程式只会射一次,
要再看一次需要点重头开始的按钮。
code
https://i.imgur.com/7fV0t2x.jpg
Godot 作法
在 Godot 上,
时间参数是执行时从 Script 提供的。
shader code
https://i.imgur.com/VEqQJWN.jpg
GDScript code
https://i.imgur.com/PKSC9o0.jpg
用 mod 和 sin/cos 让光箭扭来扭去一直射
最後,让直线的移动变成曲线,只要加一行改变 uv.y 就好。
code
https://i.imgur.com/5aV3IIJ.jpg
效果
https://www.youtube.com/watch?v=EjFOMY3xuxA
--
写这比想像中花时间,
所以写个三篇就好,
"万一" 真的有人在看我再写吧 XD。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.97.156 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1632722926.A.564.html
※ 编辑: meowyih (61.228.97.156 台湾), 09/27/2021 14:10:25
1F:推 peien0312: 推推,很难得看到中文的教学,感谢分享 09/27 14:14
2F:推 nicetw20xx: 推大大分享,感觉满有趣的 09/27 23:45
3F:推 louisalflame: 推教学 09/28 09:01
4F:→ CarpeDiemAL: 推推! 09/28 15:53
5F:推 leonardo0917: 推推,从头照着做一次,受益良多,谢谢教学。 09/29 14:03