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

ところで ゲーム開発どうなった? アッ ハイ…… 終