UnityでShaderの入力パラメータとして行列を渡す

久しぶりにCG系の話題。かなりニッチな需要だとは思うけど、UnityのShader Labのお作法の話。

UnityのShaderで、入力パラメータ(プロパティ)として渡せるデータ型を調べてたら、なんと行列(Matrix4x4)もいけるらしいと分かったのでメモしておく。
Shader Lab関連の公式ドキュメントには行列の入力についてちゃんと載っていなかったんだけど、フォーラムの方にあった。

こちらが公式ドキュメントの入力パラメータ一覧↓

ShaderLab文法:プロパティ

Properties { Property [Property …] }
プロパティのブロックを定義します。波括弧{}の中で次のように複数のプロパティを定義します。

name (“display name”, Range (min, max)) = number
floatプロパティを定義し、インスペクタ上でスライドバーがminからmaxとして表現。

name (“display name”, Color) = (number,number,number,number)
colorプロパティを定義。

name (“display name”, 2D) = “name” { options }
2Dテクスチャプロパティを定義。

name (“display name”, Rect) = “name” { options }
長方形(2のべき乗でない)テクスチャのプロパティを定義。

name (“display name”, Cube) = “name” { options }
キューブマップテクスチャのプロパティを定義。

name (“display name”, Float) = number
floatプロパティを定義

name (“display name”, Vector) = (number,number,number,number)
4コンポーネント ベクトルのプロパティを定義。


スポンサーリンク

ここに列挙されているのはGUIのInspectorからいじれる入力パラメータのみで、実はScript経由だと他の型もパラメータとして入力できるという話。


スポンサーリンク


そして、フォーラムの以下に行列(Matrix4x4)をプロパティとして渡す方法が載っている。

How to set Matrix as a Property?

Script側

Shader側

というように、4×4の行列をパラメータとしてShaderに渡したい場合は、ScriptからMaterialクラスのSetMatrix関数を使って行列を渡せるみたい。

Material.SetMatrix

public void SetMatrix(string propertyName, Matrix4x4 matrix);
public void SetMatrix(int nameID, Matrix4x4 matrix);


スポンサーリンク

関連記事

UnityプロジェクトをGitHubで管理する
レンダラ制作はOpenGL とか DirectX を使わなくてもできるんだぜ
WinSCP
人体モデリングできるBlenderアドオン『ManuelBastioniLAB』
UnityでOpenCVを使うには?
MFnDataとMFnAttribute
書籍『ROSプログラミング』
注文してた本が届いた
服飾デザインツール『CLO』
OpenCVで動画の手振れ補正
白組による『シン・ゴジラ』CGメイキング映像が公開された!
Mayaのレンダリング アトリビュート
MFnMeshクラスのsplit関数
WordPressプラグインの作り方
OpenCV3.3.0でsfmモジュールのビルドに成功!
ジュラシック・パークの続編『ジュラシック・ワールド』
Windows Server 2008にAutodesk Maya 2009をインストール
Texturing & Modeling A Procedural ApproachをGoo...
Unityで学ぶC#
『ローグ・ワン/スター・ウォーズ・ストーリー』"あのキャラクター"のメイキング
リアルタイム レイトレーシングAPI『DirectX Raytracing (DXR)』
ZBrush 2018へのアップグレード
3Dデータ処理ライブラリ『Open3D』
フィクションに登場するUIデザインのまとめサイト
書籍『ゼロから作るDeep Learning』で自分なりに学ぶ
OpenCV 3.1のsfmモジュールを試す
C++ 標準テンプレートライブラリ (STL)
ポリゴン用各種イテレータと関数セット
昔Mayaでモデリングしたモデルをリファインしてみようか
中学3年生が制作した短編映像作品『2045』
OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる
Unite 2017 Tokyoに行ってきた
RSSフィードを読込んで表示するWordpressプラグイン『RSSImport』
『スター・ウォーズ フォースの覚醒』のVFXブレイクダウン まとめ
Unity ARKitプラグインサンプルのドキュメントを読む
Google XML Sitemap Generatorプラグインを3.4.1へダウングレード
PythonのHTML・XMLパーサー『BeautifulSoup』
Phongの表現力パネェ 材質別のPhong Shader用パラメータ一覧
オープンソースの顔認識フレームワーク『OpenBR』
生物の骨格
SDカードサイズのコンピューター『Intel Edison』
ZBrushで仮面ライダー3号を造る ベース編

コメント