何言ってるか自分もよくわかりませんが,囲碁を打てるShaderを作ってみましたよ 💪💪
自分の忘備録のためにおいおい解説記事を書くぞ,という気持ちと,iframe埋め込みでブログ上でもPlayできるの草,という気持ちで,技術解説はない単なる紹介エントリを書きます.
作ったのはこれです↓(コンパイルに十数秒かかります)
盤上をクリックすると石を置けるのでやってみてください~~
(スマホは非対応ですごめんなさい…(shadertoyさんスマホでドラッグを取れるようにしてくれ~~))
実際に打ってる様子はこんな感じです
Shaderで囲碁が(けっこう)打てるようになったよ!!https://t.co/qDbNZXYwg7
— むぅー777 (@mu_777_) July 31, 2022
(コンピュータ対戦的なのはできないので一人で打ってね!)
(地の計算とかも自動ではできないので自分でやってね!) #shader #shadertoy #glsl #囲碁 pic.twitter.com/dB38PeoTv2
何ができるか(何ができないか)
- 黒/白を交互に,合法手に石が置けます
- 既に石があるところには置けません
- 置いた瞬間に石が取られる箇所には置けません
- コウの箇所には置けません
- 相手の石の四方を囲めば石を取れます
- 盤上から自動的に石を除いて,アゲハマに置いてくれます
ということで基本的なルールは抑えているはずです.
ただし
- 「待った」ができません
- 地の計算はできません
- コンピュータ対戦はできません
という感じです.実際の物理盤で打つのに近い感じですかね.
何で作ったか
特に理由はないのですが,最近Shadertoyに入門しまして.
Hello cubeしたhttps://t.co/qDV1BDD8S0
— むぅー777 (@mu_777_) May 29, 2022
そしてたまたま最近囲碁にハマってまして.
軽く調べてみるとShadertoyで囲碁を作った人はいなさそうだったので作ってみた,という感じです.(囲碁ってググらビリティ低すぎて,ちゃんと調べるのむずすぎるんですが)
なんか19x19の配列でステートを管理したり,それを可視化したりするのってシェーダ得意そうじゃない?
感想
テクスチャで情報をキャッシュしていくのめっちゃめんどいよう..石が囲まれてるかチェックしたりするのも,普通のプログラムでできることでもシェーダでできないことも多いし...
デバッグも,デバッガつけて処理を止めて変数確認なんてもちろんできないし,printfデバッグすらできないので大変ですねぇ.nsightも使えないだろうし...
あとシンプルにローカルで開発できないのもめっちゃ辛かったです.gitでのコード管理もできないし... 途中までShadertoy互換のvscode拡張の「Shader Toy」を使ってローカルで開発してたのですが,バッファ周りの挙動が実際のshadertoyと微妙に違っていて,途中であきらめてshadertoy上で実装してました.
普通にみんなどうやってあんなスゴいの開発してるんだろうか..開発フローが気になりますね..
でもまぁシェーダの気持ちになってチマチマ実装するのは楽しかったです! とはいえコレが実装できたからっておしゃれシェーダが書けるようには全くならないし... かなり無駄スキルですねw
どうやって捕捉してるのかわかりませんが,下記ページでこのシェーダが紹介されたので嬉しかったです! マジでPublicに公開してからものの10分でコメントがついたのでビビりました笑 shadertoyガチ勢がガチすぎる.
Playable games in Shadertoy !shadertoyunofficial.wordpress.com
このページにまとめられてるPlayableなシェーダ,みんなスゴくてビビります... しかもソースを見るとかなり簡潔! 自分のはかなり冗長なので,なんでこんな短くてこんなシェーダ書けるんや...!という気持ちです.
2024とかWordleとか,流行ったゲームもかなり作られててみんなすげぇっすねぇ...
こぼれ話
自分のShadertoyアカウントで公開してるシェーダの,1つ目がレイトレ練習シェーダ,2つ目がこの囲碁シェーダだったのですが,「3つ目が何になるか気になるぜ(意訳)」ってコメントもらったから,「3D囲碁シェーダはやる気ないよw」って返したら煽られて草