【MAYA・Python】hlslを利用してモデルチェックを行うツール
今回はmayaのrender setup機能を用いて、シェーダ(hlsl)モデルのエラーチェックを視覚的に行うツールを作成しました。以下の動画ではポリゴンの裏面が見えてしまっていないか、ポリゴンの法線がおかしくないかを確認しています。
【できること】
ポリゴンの裏面が見えてしまっていないか、ポリゴンの法線がおかしくないかを確認できます。またShaderを追加してデバッグ手段を自由に増やすことができます
【事前準備】
➀Windows/Settings/Preference/Preferenceを開き、Display/Viewport2.0/Rendering engineを「DirectX11」に変更します。
➁Windows/Settings/Preference/Plug-in Managerから「dx11Shader」をロードします。
➂ハードウェアテクスチャリングをオンにしておきます。
【実行方法】
➀「ChangeMatByRenderSetUp」をダウンロード後、MAYA_SCRIPT_PATHのパスが通っている場所にフォルダごと配置。(デフォルトはC:\Users\ユーザー名\Documents\maya\scripts)
➁以下コマンドをスクリプトエディタで実行
from ChangeMatByRenderSetUp.ChangeMatByRenderSetUp import *
main()
【使い方】
チェックしたい項目のshaderを選択
対象のメッシュを選択し、「add」でリストに登録(トップ階層でまとめてaddできます。)
対象のマテリアルを選択し、「add」でリストに登録
※デフォルトで登録できるマテリアルのShader typeは「lambert,phong,blinn」になっています。「Render Setup」をクリックすると項目のShaderでマテリアルがオーバーライドされます。
例)「CHECK_TwoSide」ではポリゴンの裏面が赤く表示されます。通常の状態との切り替えは「switch material :True(False)」で行います。
チェックが終わったら「RESET」でデータをきれいにできます。(デバッグ用のマテリアルやrender setupレイヤーが削除されます)
【仕組み解説】
本ツールはMAYAのRender Setup機能を利用しています。
Render Setup機能について以下のサイトにわかりやすくまとめてあります。
今回はShader Overeideでマテリアルを置き換えています。
hlsl(.fx)ファイルについて
置き換えるシェーダーはhlslです。mayaで使用するための.fxファイルは 本ツールパッケージの以下のパスに格納してください。デフォルトでは「CHECK_Normal」と「CHECK_TwoSide」があります。
ChangeMatByRenderSetUp / maya_materials
【プラグインとレンダリング変数について】
起動時にhlsl関連の設定を自動で行うこともできます。
➀userSetup.pyファイルに以下コードを記述。プラグイン「dx11Shader」を読み込み
import maya.cmds as cmds
def loadPlug(name):
cmds.evalDeferred("cmds.loadPlugin('"+name+"',qt=True)", lp=False)
cmds.evalDeferred("cmds.pluginInfo('"+name+"',e=True,autoload=True)", lp=False)
loadPlug("dx11Shader.mll")
➁batファイルに以下コードを記述。レンダイングエンジンを「dirextX11」に変更
set MAYA_VP2_DEVICE_OVERRIDE=VirtualDeviceDx11
【確認されている不具合】
viewport2.0の透過度のアルゴリズムが「アルファカット」の場合hlslは機能しません。
鋭角なメッシュのエッジ部分では若干赤い点線が出ます
rendersetupのマテリアルオーバーライドがTrueの時、オーバーライド元のマテリアルを何かしらのメッシュに割り当てるとShadingEngineノードが複製されてしまいます。ノード名が変わるので挙動がおかしくなります。