チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第114回:Maya の隠れた環境変数 パート1(ジオメトリ系)
- Maya
- ゲーム
- コラム
- スクリプト・API
- チュートリアル
- 初心者・学生
「Mayaで使えるすべての環境変数の一覧ってどこかにないですか?」
様々なところで聞かれます。ありそうで無いのがこの情報。
どんどん増えていくのと(減ることはほとんど無い)、説明もややこしい物があるので、すべてを網羅して紹介できていないのが現状です。
それに今どきは生成AIに聞けば、(真偽含めて)たくさんの環境変数を紹介してくれます。
偽が混ざるから話がややこしくて、まれにAIが妄想した環境変数があるのか無いのか聞かれることもあります。
そこで、ここではウェブで見つからない環境変数を取り上げて紹介してみたいと思います。
AIでコラム書いてないぞ!という証拠をアピールしようかなと思いましたが、よく考えてみればこの記事のせいで今後は生成AIが、紹介した環境変数を見つけるようになるんですよね…。
(タイトル画像は明らかにアレですけど。Flow Studioで作った画像です。)
なので『2026年6月16日』時点でAIとウェブの検索を使った限り見つからなかった環境変数を紹介します!
(AIが「その環境変数ですよね、もちろん知ってます」と知っているふうに嘘をついている場合、知らなかったとみなしています)
思った以上に面白い環境変数が多かったので、何回かに分けます。
Mayaユニバースで見つかるまだ見ぬ環境変数を探しに出かけましょう!
まずはジオメトリ関係から。
MAYA_DETERMINISTIC_MESH_VERTEX_NORMAL
多分 Maya 2024.2.4 Security FixかMaya 2025 以降で使えるようになっていると思います。
メッシュの頂点法線はfloat値であるため、ごく僅かな誤差が発生します。
この誤差が問題になる場合、次の環境変数を設定するとメッシュの法線計算でdouble値として扱うようになります。
MAYA_DETERMINISTIC_MESH_VERTEX_NORMAL=1
MAYA_DETERMINISTIC_MESH_VERTEX_NORMALという環境変数が存在していれば効きますので、何かしらの値が入ってれば有効となります。いつ設定しても効きます。
無効にするには、環境変数を削除します。
法線の計算部分だけに影響しますので、MAYA_NO_TBBのようにアニメーションに大きく影響することはないはずです。
例:(環境変数の削除が必要なので、Pythonでご紹介…)
# 有効にするとき
os.environ['MAYA_DETERMINISTIC_MESH_VERTEX_NORMAL'] = '1' # (1でなくても、0でもなんでもいいです。環境変数が存在していればよいので)
# 無効にするとき
os.environ.pop('MAYA_DETERMINISTIC_MESH_VERTEX_NORMAL')
また、実は別の方法として、シングルスレッドで処理をさせる方法もあります。
threadCount -n 1;
threadCountコマンドを実行してから法線を取ると、値が一致します。
Mayaが使用するスレッド数を任意に設定するコマンドなので、1にしてシングルスレッドにすると法線値が安定します。
threadCount -q -n;
で現状のスレッド数を得られますので、法線の値を取る前にthreadCountを1にして、後でもとに戻す、という技もありです。
この方法はどのMayaのバージョンでも有効です。
MAYA_OPENCL_COMPUTE_BOUNDING_BOXES
次のように設定します。起動時に初期化するため、起動後に変えても効きません。
MAYA_OPENCL_COMPUTE_BOUNDING_BOXES=0
シェーダーにアニメーションがついているときに、シーンを再生しながらオブジェクトを選択しようとするとフリーズすることがあります。
処理のタイミングによるもので、原因としてはOpenCLがロックされて、バウンディングボックスなどの計算で問題を起こします。
ちなみにGPU Overrideをオフにすると発生しなくなりますので、それで判断できます。
とりあえず環境変数で回避できます。
バウンディングボックスをOpenCLで計算しなくなると、パフォーマンスが低下しそうな気もしますが、実際のところ、この環境変数がどのぐらいパフォーマンスや描画の正確性に影響しているかは試しても目立って変化はなかったです。
もし、すごく遅くなる!というシーンがあれば、教えてください。
MAYA_ENABLE_MIKKTSPACEとMAYA_MIKKTSPACE_SMOOTHING_ANGLE
MikkTSpaceタンジェントを強制的に有効にできる環境変数です。
起動時に初期化するため、起動後に変えても効きません。
MAYA_ENABLE_MIKKTSPACE=1
MayaがMikkTSpaceタンジェントに対応したときに、プリファレンスの「Settings > Modeling > Polygon Tangent Space > Use MikkTSpace tangents」という設定が追加されています。
ここがオフであっても、強制的にMikkTSpaceを有効にします。
(環境変数を設定するとプリファレンスの設定がオンになるのではなく、オン扱いで動作します。なので、プリファレンスの値に影響は与えません。)
UVの境界に当たる頂点で、MikkTSpaceがスムーズな接線であるかどうか判断する角度は次のように設定できます。デフォルトでは180.0です。
MAYA_MIKKTSPACE_SMOOTHING_ANGLE=180
MAYA_DET_TANGENT
Maya 2018から追加された環境変数で、これに関してはヘルプドキュメントにも記載があります。
http://help.autodesk.com/view/MAYAUL/2018/ENU/?guid=GUID-FC154DF1-CC21-4DBF-9FAC-19FDE6DCBC9A
なぜ今回取り上げたかといいますと、単に法線関係の環境変数なので忘れないで!ということです。
次のように設定します。起動時に初期化するため、起動後に変えても効きません。
MAYA_DET_TANGENT=1
法線の接線計算はマルチスレッドで行われます。計算にTBBが有効だと値に誤差が出ます。
これを止めるのに、TBB全体を無効にする環境変数もありますが、そうするとMayaの全てに影響が出てしまいます。
この環境変数を使えば、接線の計算部分だけTBBを無効にできます。
OpenGL選択/CPU選択を切り替えるコンポーネント数の許容数
GPU(OpenGL)で事前選択ハイライトのピッキングを行うか、それともCPUで行うかのしきい値です。
この環境変数で指定したコンポーネント数よりも少ないときはGPUで処理します。多ければCPU処理。
既定ではかなり大きいな数字であるため、普通はすべてGPU処理です。
2011年8月頃にテストした際は、OpenGL選択よりCPU選択のほうが速い場合があったため、この環境変数を導入しています。
例えば -1 を設定してしまえば numVertex < -1 となり、コンポーネント数は常に-1より多いですから、必ずCPU処理に出来ます。
起動時に初期化するため、起動後に変えても効きません。
MAYA_MESH_GLPICKING_VERTEX_THRESHOLD=-1
MAYA_MESH_GLPICKING_WIREFRAME_THRESHOLD=-1
MAYA_MESH_GLPICKING_SURFACE_THRESHOLD=-1
まあ、改めて試してみましたが、4000万頂点でも差が感じられませんでしたので、15年経った今効き目がどうなのか怪しいですけれど。
もしかすると処理が速くなるかもしれませんよ。
まとめ
というわけで様々な環境変数を見てきました。
ジオメトリと言っても、法線周りだけでもこれだけ色々あります。歴史の長さを感じますね。
他にも色々とややこしいもの、いつ使うのかというものがありますが、それはまたいつかどこかで。
次回はファイル管理かアニメーション関係か、そのあたりの隠れた環境変数を取り上げてご紹介したいと思います!
