しゅみぷろ読者になるしゅみぷろプログラミングとかこの広告は、90日以上更新していないブログに表示しています。UnityTexturePaintはじめにUnityTexturePaintは、リアルタイム(ゲーム実行中)にオブジェクトの持つテクスチャに対してペイントを行うアセットです。UnityTexturePaintは以下で公開しています。github.com基本的にはメインテクスチャへのペイントノーマルマップへのペイントハイトマップへのペイントをサポートしていますが、応用次第でとにかく色々できそうな予感がします。これを解決できるのがバンプマップです。バンプマップでは、面の細かな法線や高さの情報をテクスチャに格納しておき、描画の際にその法線と高さを考慮したシェーディングを行うことで、実際には無い凹凸を表現する方法です。この画像はノーマルマップのみを利用した凹凸表現です。実際のモデルはただの立方体ですが、ノーマルマップのお陰で凹凸があるように見えます。ペイントしている緑の液体も、ノーマルマップペイント機能のみ利用しています。こっちはハイトマップも併用しています。オブジェクトを近くで見た際の表現が段違いです。実際に浮き出ているように見えます。バンプマップは実際に凹凸があるわけではなく、オブジェクト表面の細かい凹凸を表現するのに適した方法です。ダイナミックに、実際に頂点を変形させたい場合が往々にして存在します。なると実際に頂点を弄っていく必要があるのですが、今回は変位マップを動的に変化させ、その変位マップを参照して頂点を変形させる方法について書いていきます。実際にやってみると、こんな感じの表現が出来るようになります。キャラが動いたらその部分を凹ませる。弾丸が壁を撃ち抜いたらそこを凹ませる。等、シンプルですが使いみちが結構あるかと思います。Fetch)とDisplacementMappingについて書きます。VTFですが、名前の通り、頂点シェーダーでテクスチャを参照する手法です。変形の手順ですが変形させたい位置に対してUnityTexturePaintの機能を使ってテクスチャにペイント処理を施すペイントされたテクスチャを頂点シェーダーで参照し頂点位置を調整するという感じになります。シェーダーは以下のような感じ。"Diffuse"}頂点シェーダーでtex2Dlodを使って、テクスチャの情報を読み込み、頂点のy座標を移動させているだけの単純なものです。RigitBodyを付けた球に対してUnityTexturePaintのCollisionPainterを付け、床に上記のシェーダーとDynamicCanvasを付けて各種設定を行って実行するとこんな感じになります。DisplacementMappingVTFでは、床(Plane)の頂点数が少ないため、変位させるとなんだかカクカクしてしまっています。これを解決するために、Tessellationを行います。Tessellationは以下の記事で。esprog.hatenablog.comDisplacementMappingの意味合いが「変位を与えるための情報(テクスチャ)を使って頂点を変形する手法」みたいな意味合いっぽい(?)ので、先程のVTFでの変形も広義のDisplacementMappingなのかなとか色々細かいツッコミがきそうですが、そこらへんはよくわかりません。変形の手順はVTFと変わりません。シェーダーだけがTessellationを利用するものに変わりますシェーダーは以下のような感じ。}}ちょっと雑ですが。こんな感じになります。VTFのときのカクカクが解消されました。おわりに描画の際、テクスチャは膨大な情報の保管庫となります。必要な様々なデータをテクスチャにのっけてシェーダーで処理すれば、色々出来ることが広がっていきます。UnityTexturePaintでは、リアルタイムにシェーダーに渡すテクスチャにデータを書き込むことが可能になる便利なツールになっています。久しぶりに手応えのある開発が出来ているので、色々なサンプルを作ってみて少しでも多くの人に知ってもらえたらなと思っています。サンプルは上のリンクから。今回はリングセレクトシステム(と呼んでいきます。)はてなブログをはじめよう!es_programさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。