Scala 3 で GLSL のための c-like-for を実装してみた
by
TATSUNO Yasuhiro
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
TATSUNO Yasuhiro 2025/03/14 #scala_waiwai TATSUNO Yasuhiro Implementing C-like-for for GLSL in Scala 3
Slide 2
Slide 2 text
自己紹介 - TATSUNO Yasuhiro @exoego on GitHub & Twitter(𝕏) - データ分析系 SaaS の Stuff Software Engineer - 趣味で Scala Steward のメンテナンスなどをしています - 東京のおいしいカレー屋を食べて帰りたいので教えてく ださい
Slide 3
Slide 3 text
わたしと Scala 3年間 Isomorphic Scala.jsで 開発してました 最近は主に TypeScript と Kotlin でメシを食べてます
Slide 4
Slide 4 text
【悲報】 会社で新規に Scala 利用禁止令
Slide 5
Slide 5 text
仕事で書けないなら 趣味で書けばいい 大井昌和『パンがなければ焼けばいい』竹書房, 2022
Slide 6
Slide 6 text
個人開発で作りたいものが 特にないのだった… 個人開発してる人マジすごい https://nota.connpass.com/event/346659/
Slide 7
Slide 7 text
あっ… ゲーム作りたかったな… 小学生のころから… 30年何もできてないが… アスキー『RPGツクール2』1996
Slide 8
Slide 8 text
Scala 製ゲームエンジン Indigo Scala.js で JS に変換し、ブラウザなどで実行 開発されたゲームがスマホに数個リリースされてる グラフィックスは WebGL で描画 Scala で Shader を書ける
Slide 9
Slide 9 text
ゲームにおける Shader とはなんぞや 2D や 3D のグラフィックスを計算で加工する仕組み 光と影、質感、画面効果などを与えられる、らしい https://www.reddit.com/r/admincraft/comments/k4pibq/made_a_comparison_of_the_3_most_popular_shaders/ Minecraft における光源や水表現の強化 https://www.reddit.com/r/RetroGamePorn/comments/10k40am/jet_set_radio_wi thout_celshaded_graphics_is_cursed/#lightbox Jet Set Radio におけるトゥーンレンダリング
Slide 10
Slide 10 text
Shader ってどう書くの GLSL(OpenGL Shading Language)という C 風言語が主。 グラフィックス処理に必須のベクトルや行列を扱えて、色ん なハードウェアで動かせる、らしい 他にも固有言語あり ● High-Level Shading Language。Microsoft DirectX 用 ● Metal Shading Language。Apple の Metal 用
Slide 11
Slide 11 text
Shader でこんなことも 素材なし、計算だけで イケてるグラフィックスを生成 センスがあれば…… https://x.com/XorDev/status/1605413317165490176
Slide 12
Slide 12 text
Scala ゲームエンジン Indigo で Shader はどう使う? ultraviolet という Scala 3 to GLSL トランスパイラーが Scala コードを GLSL に変換してくれる !!!!
Slide 13
Slide 13 text
ultraviolet で生成する GLSL Shader 型は単純な関数 c-like な for cfor(初期状態, 継続条件, 次の状態) 中身こんな感じ。えっ普通…? これが GLSL WebGL で実行できる ここで魔法が起きます
Slide 14
Slide 14 text
魔法の中身 = Scala 3マクロ ≒ コンパイル時の AST 変 換 fragment.toGLSL[T] は cfor コードから GLSL 文字列を コンパイル時に生成 入力:Shader インスタンスの AST 出力:別の AST 今回は GLSL インスタンス
Slide 15
Slide 15 text
AST 変換:欲しいツリーをマッチで こんな cfor を こんなツリーのパターンマッチで解析して あとは新しいツリーを生成するだけ マッチ作るまでがダルかった
Slide 16
Slide 16 text
https://x.com/McDonaldsJapan/status/1892439036947485111 kwsk はこちらを見るお https://github.com/PurpleKingdomGames/ultraviolet/pull/142
Slide 17
Slide 17 text
ところで ゲーム開発どうなった? アッ ハイ…… 終