ひつじTips

技術系いろいろつまみ食います。

Shaderで囲碁を打てるようにしたよ

何言ってるか自分もよくわかりませんが,囲碁を打てるShaderを作ってみましたよ 💪💪

自分の忘備録のためにおいおい解説記事を書くぞ,という気持ちと,iframe埋め込みでブログ上でもPlayできるの草,という気持ちで,技術解説はない単なる紹介エントリを書きます.

作ったのはこれです↓(コンパイルに十数秒かかります)

盤上をクリックすると石を置けるのでやってみてください~~
スマホは非対応ですごめんなさい…(shadertoyさんスマホでドラッグを取れるようにしてくれ~~))

www.shadertoy.com

実際に打ってる様子はこんな感じです

何ができるか(何ができないか)

  • 黒/白を交互に,合法手に石が置けます
    • 既に石があるところには置けません
    • 置いた瞬間に石が取られる箇所には置けません
    • コウの箇所には置けません
  • 相手の石の四方を囲めば石を取れます
    • 盤上から自動的に石を除いて,アゲハマに置いてくれます

ということで基本的なルールは抑えているはずです.

ただし

  • 「待った」ができません
  • 地の計算はできません
  • コンピュータ対戦はできません

という感じです.実際の物理盤で打つのに近い感じですかね.

何で作ったか

特に理由はないのですが,最近Shadertoyに入門しまして.

そしてたまたま最近囲碁にハマってまして.

軽く調べてみるとShadertoyで囲碁を作った人はいなさそうだったので作ってみた,という感じです.(囲碁ってググらビリティ低すぎて,ちゃんと調べるのむずすぎるんですが)

なんか19x19の配列でステートを管理したり,それを可視化したりするのってシェーダ得意そうじゃない?

感想

テクスチャで情報をキャッシュしていくのめっちゃめんどいよう..石が囲まれてるかチェックしたりするのも,普通のプログラムでできることでもシェーダでできないことも多いし...

デバッグも,デバッガつけて処理を止めて変数確認なんてもちろんできないし,printfデバッグすらできないので大変ですねぇ.nsightも使えないだろうし...

あとシンプルにローカルで開発できないのもめっちゃ辛かったです.gitでのコード管理もできないし... 途中までShadertoy互換のvscode拡張の「Shader Toy」を使ってローカルで開発してたのですが,バッファ周りの挙動が実際のshadertoyと微妙に違っていて,途中であきらめてshadertoy上で実装してました.

marketplace.visualstudio.com

普通にみんなどうやってあんなスゴいの開発してるんだろうか..開発フローが気になりますね..

でもまぁシェーダの気持ちになってチマチマ実装するのは楽しかったです! とはいえコレが実装できたからっておしゃれシェーダが書けるようには全くならないし... かなり無駄スキルですねw


どうやって捕捉してるのかわかりませんが,下記ページでこのシェーダが紹介されたので嬉しかったです! マジでPublicに公開してからものの10分でコメントがついたのでビビりました笑 shadertoyガチ勢がガチすぎる.

このシェーダが「Playable games in Shadertoy !」という記事にまとめられました!

Playable games in Shadertoy !shadertoyunofficial.wordpress.com

このページにまとめられてるPlayableなシェーダ,みんなスゴくてビビります... しかもソースを見るとかなり簡潔! 自分のはかなり冗長なので,なんでこんな短くてこんなシェーダ書けるんや...!という気持ちです.

2024とかWordleとか,流行ったゲームもかなり作られててみんなすげぇっすねぇ...

こぼれ話

自分のShadertoyアカウントで公開してるシェーダの,1つ目がレイトレ練習シェーダ,2つ目がこの囲碁シェーダだったのですが,「3つ目が何になるか気になるぜ(意訳)」ってコメントもらったから,「3D囲碁シェーダはやる気ないよw」って返したら煽られて草

コメントでチキン呼ばわりされて草