SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

Unityのシェーダーを3dsMaxのビューポートシェーダーへ移植する その1


ということをしましたので、備忘録。

 

 Unityのシェーダーは"UnityCG.cginc"などによって難しい処理をカバーしていて、かなりラクできるようになっています。3dsMaxで書く場合はそう言った部分を自分でやらないといけないのと、3dsMax独自のセマンティクス等もあるみたいでさあ、どうしていきましょう。

 

※なお、UniytCG.cgincなどは以下のフォルダにあります。

C:\Program Files\Unity2017.1.2f1\Editor\Data\CGIncludes

このフォルダには他にもLighting.cgincだったりいろいろ宣言してあります。

 

そんなわけで、まず、3dsMaxのfxファイルサンプルを見てみます。

C:\Program Files\Autodesk\3ds Max 2016\maps\fx

 

 はい。さっぱりわかりませんでした。というか正しく動作しないものがあるのはなぜ?そんな不正確なものを参考にしていたらストレスがたまって確実にお腹をこわします。ので、3dsMax上でノードを組んでシェーダーを作れるShaderFXを利用し、自分の知りたい部分だけhlslソースに書き出して参考にする手順で作っていきました。(あくまで今回はUnityのシェーダーを移植する必要があったからこうやってますが、1から作るんだったらShaderFXでがんがん組んでもいいと思います)

 

f:id:sui332015:20171128192617p:plain

図1.コンパクトマテリアルエディタ。Mayaラーとしては使いにくい…

 

まず、3dsMaxのコンパクトマテリアルエディタを開きます。図1-1.のボタンで、マテリアルをDirectXシェーダにします。次に図1-2のボタンで、ShaderFXウィンドウを開きます。

 

 ここで、自分の知りたい機能だけ適当に組んでいきます。とりあえず私は「カメラの向き」や「Lightの向き」、「ワールド座標での法線」、「3dsmaxのUIに公開するブールパラメータ」、「ノーマルマップの貼り方」などを知りたかったので、ちゃちゃっと組みました。ここはだいたいどんなソフトでも似たような感じなので、ノードベースで組める人ならすぐ出来ると思います。

Tabキーでノードを探せるようでしたので、ひたすら欲しいノードを配置していきます。これは便利。

f:id:sui332015:20171128193356p:plain

図2.適当に組んだ。

 

f:id:sui332015:20171128194142p:plain

図3.HLSLとしてエクスポートする方法

 

HLSLファイルをエクスポートします。図3-1.のMaterialノードを選択します。右側のPropertiesウィンドウのFileNameに保存先を指定してとSave to Diskボタン(図3-2)で書き出します。

 

※ちなみに上みたいにきれいにノードをつながなくてもノードをおくだけで、書き出されたファイルには変数とかきちんと用意されてました。(図2でいうBoolとか)

 

www.suitechlog.net