見出し画像

【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()

【使い方】

  1. チェックしたい項目のshaderを選択

  2. 対象のメッシュを選択し、「add」でリストに登録(トップ階層でまとめてaddできます。)

  3. 対象のマテリアルを選択し、「add」でリストに登録
    ※デフォルトで登録できるマテリアルのShader typeは「lambert,phong,blinn」になっています。

  4. 「Render Setup」をクリックすると項目のShaderでマテリアルがオーバーライドされます。
    例)「CHECK_TwoSide」ではポリゴンの裏面が赤く表示されます。

  5. 通常の状態との切り替えは「switch material :True(False)」で行います。

  6. チェックが終わったら「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

【確認されている不具合】

  1. viewport2.0の透過度のアルゴリズムが「アルファカット」の場合hlslは機能しません。

  2. 鋭角なメッシュのエッジ部分では若干赤い点線が出ます

  3. rendersetupのマテリアルオーバーライドがTrueの時、オーバーライド元のマテリアルを何かしらのメッシュに割り当てるとShadingEngineノードが複製されてしまいます。ノード名が変わるので挙動がおかしくなります。

いいなと思ったら応援しよう!