キー検知とシェーダーによる画面制御

こちらの記事はMinecraft Command Advent Calendar 2024への参加記事になっています
※いろいろ間に合いませんでした、コマンド例やデタパの公開先などは随時更新予定です

hi こんにちは
巷では最近、スナップショットにてキー検知が追加された事で盛り上がりを見せていましたが
今回はそんなキー検知を活用して、シェーダーを制御する方法についての紹介をしていきたいと思います

リソパシェーダーについて

リソパシェーダーについては過去の記事にてこれまでに紹介をしていきましたが
改めて端的に言い表すと画面の表示をすきに変えることができる機能となっています
もともとこのリソパシェーダーの制御には、スコアから値を読み取り、その値によって表示の決定をしていました
このスコアの値をキー入力によって変更することで、プレイヤーの操作を直接画面表示へと反映することが可能になります。

キー検知について

現在キー入力はプレイヤーのpredicateを参照する形で検知できます
具体的にはleft、right、backward、forward、sprint、jumpの6つの状態を取ることができます
デフォルトのキーで言うとWASD、Ctrl、Spaceの計6つのキー入力に対応しています
これらのキー操作でスコアを設定し、最終的にシェーダーへと渡すことで画面の制御を行っていこうと思います。

キー検知によるcoreシェーダーの制御

まずは先ほどのキー検知を用いて、シェーダーへ数値を渡すためのスコアの設定を行っていきます
今回は6つのキー入力を、それぞれXYZ軸のプラス、マイナス方向に見立ててみようと思います
大まかに言うと、WSで上下、ADで左右、CtrlSpaceで奥手前といった操作をシェーダーへ反映していきます
リソパシェーダーへ数値を受け渡すために、データパックTitleShader上ではTextColorR、TextColorG、TextColorBというスコアを使用していますが
今回はTextColorRにX方向、TextColorGにY方向、TextColorBにZ方向を割り当て、
これら3つのスコアの増減をキー操作によって変更できるようにコマンドを組んでいきます

以上の手順にて、プレイヤーの操作をシェーダーへ反映できるようになります
まずはcoreシェーダーへの導入を行ってきましたが、次にpostシェーダーについても導入をしてみたいと思います。

postシェーダーへの応用

今まで、postシェーダーをグラフィック設定に依存しない形で実行するには、スペクテイターによるモブへの憑依が必要でした
そのため、一方的に画面の表示を変えることはできても、プレイヤーからの入力によって画面を変えることはできない状態でした
しかし、今回導入したキー検知ではスペクテイター状態でもキー入力の取得が可能です、
そのためpostシェーダー表示中にもプレイヤーの入力を反映した画面の表示を可能となったのです
例えば、postシェーダーではcoreシェーダーとは違い、現在の画面表示をバッファとして保存し操作することが可能です
この保存した画面表示を、プレイヤーのキー入力に合わせて操作できるようにしてみます

このように、postシェーダーについてもプレイヤーからの操作によって制御できるようになりました。

終わりに

ここまで書いた内容は、predicateでのキー検知機能が追加された当時のアイディアを元に作成していますが、
最新版においては今回とは別の新機能を使うことであらゆるキー操作をリソースパックへと反映可能になっています
あらゆる操作なので、本当にすべてのキーにおいて検知が可能です
こうなってしまえば実質やりたい放題になったと言っても過言ではないかもしれません
なのでこちらのモデルから直接キー検知が可能な方法を用いたシェーダーの制御についても紹介をしていきたいと思います。
が、それを書くには余白が狭すぎました。

おわり

コメントを残す