Tips

Tips

3dsMaxのコマンドラインを使用したバッチレンダリング

3dsMaxのコマンドライン(3dsmaxcmd.exe)を使用したバッチレンダリングの方法について書いてみます。
3dsMaxにはBackburnerやバッチ レンダリング ツールなどいくつかバッチレンダリング機能が搭載されていますが、.batファイルを使用してレンダリングする方法をメモしておきます。

 

バッチファイル作成

例えばCut_001.max、Cut_002.max、Cut_003.maxのように複数のシーンファイルがあって、全てのシーンをレンダリングする場合について書いてみます。

 

テキストエディタを使用して3dsmaxcmdと.maxファイルへのパスを記述し、拡張子を.batにして保存します。バッチファイルは行ごとにコマンドが実行されるので改行には注意してください。

"C:\Program Files\Autodesk\3ds Max 2020\3dsmaxcmd" -o="C:\BatchFolder\Output\Cut_001_.png" "C:\BatchFolder\Cut_001.max"
"C:\Program Files\Autodesk\3ds Max 2020\3dsmaxcmd" -frames=1-5 -o="C:\BatchFolder\Output\Cut_002_.tga" "C:\BatchFolder\Cut_002.max"
"C:\Program Files\Autodesk\3ds Max 2020\3dsmaxcmd" -showRFW=0 -frames=1-10 -o="C:\BatchFolder\Output\Cut_003_.png" "C:\BatchFolder\Cut_003.max"
cmd /k

コマンドラインレンダリングはスイッチを設定して、maxファイルの設定を変えてレンダリングすることができます。

1行目が最も単純な記述方法です。レンダリング スイッチ -o="" はレンダリングした画像の出力先を指定するものです。ファイル名の拡張を .jpg や .tga に変えるとフォーマットを変更できます。

2行目 -frames=1-5 はレンダリング範囲の始点と終点です。

3行目 -showRFW=0 はレンダリング フレーム ウィンドウを非表示にします。レンダリングの進捗は確認できなくなりますが、レンダリングが速くなると思います。

基本的には「レンダリング設定」のレンダリング スイッチを覚えると便利に使えます。

 

.batをダブルクリックするとコマンドプロンプトが起動してレンダリングが実行されます。レンダリングが終了したらコマンドプロンプトを閉じて完了です。

 

ファイルパスについて

上の例ではファイルパスがわかりやすいようにドライブ名を含めた「C:\BatchFolder\Cut_001.max」のような絶対パスで記述してますが、バッチファイルからの相対パスで指定することもできます。

"C:\Program Files\Autodesk\3ds Max 2020\3dsmaxcmd" -showRFW=0 -frames=1-10 -o="%~dp0\Output\Cut_001_.png" "%~dp0\Cut_001.max"

「%~dp0」はバッチファイルのあるディレクトリを設定するコマンドです。

 

参考

コマンドライン レンダリング スイッチ

https://help.autodesk.com/view/3DSMAX/2020/JPN/?guid=GUID-E5239450-557C-4F51-8DBE-B9BE22F881CA

余談ですが、Autodeskのドキュメントに書かれてるコマンドレンダリングの記述例は、そのままコピペで動かないので注意が必要です。
恐らくサイトが勝手に記号を変換してます。記号の""が“”に変換されている、¥が異なる文字コードなので基本的に動かないです。

Tips

modoでMDDファイルを逆再生する方法

modoでMDDファイルを逆再生する方法について書いてみます。

modoには複数のアニメーションキャッシュ機能があります。
パーティクルキャッシュの場合はCSV Point CacheやRealflow Particle、ジオメトリキャッシュの場合はMDD InfluenceやAlembic ストリーミングデフォーマを使用します。

キャッシュアニメーションを逆再生したい場合、大抵は「オフセット」をいじれば逆再生できるのですが、MDD Influenceには「オフセット」がありません。
MDD Influenceを逆再生する場合は、「開始フレーム」にキーを設定して終了したいフレーム数から0になるように設定します。

サンプルファイル

スケマティックではチャンネルの制御がわかりやすいように、加算ノードを使用してアニメーションさせています。

 

ちなみに日本語のプロパティはチャンネル名の多くがズレてる気がするので注意が必要です。「終了フレーム」が「開始フレーム」です。スケマティックでは正しいチャンネル名が表示されるようでした。

 

参考

Tips

modoで面の広さに応じてアイテムがスケールする表現

modoでポリゴン面の広さに応じて、アイテムがスケールする表現の作り方について書いてみます。

サンプルファイル

 

スケマティックはこんな感じです。

平面をAxis Drillで適当にスライスして、Polygon Bevelで押し出します。
押し出した上の面だけ選択したいので、Assign Selection Setを作成します。
Area FalloffとSet Weightを使用して面にウェイトを設定して、そのウェイトマップをRemap Weightを使用してパーティクルサイズに変換しています。
最終的にReplicatorがパーティクルサイズを読み取って、面の広さに応じて複製したティーポットのサイズをスケールします。

最後のParticle Look At Modifierはティーポットの回転を制御する用です。
Axis Drillはテンプレートサーフェースに接続したアイテムのトランスフォームが0だと、アニメーションが反映されない不具合があるので注意が必要です。

 

ウェイトをRemap Weightでパーティクルサイズに変換する方法は以前の記事で紹介しましが、Cristobal Vilaさんが面の中心にポイントを生成するのにParticle Modifierを使用してるのを見かけて、面白そうだったのでまねしてみました。

Particle ModifierをMerge Meshesして、Transfer Vertex MapでポイントにWeightを転送するというのは他にも応用出来そうで面白いですね。

本当はReplicatorで複数のアイテムを複製したかったのですが、メッシュ編集系を使用すると毎フレームパーティクルIDが変わってしまいます。
Transfer Vertex Mapでパーティクルサイズが使用できればよかったのですが、簡単な解決方法が思いつかなかったのでティーポット単体になりました。

Tips

VOICEPEAKで、セリフブロックのナレーターや感情をまとて編集する方法

入力文字読み上げソフト「VOICEPEAK」で、セリフブロックの「ナレーター」や「感情」をまとて一括編集する方法について書いてみます。

VOICEPEAKはセリフブロックごとに「ナレーター」を設定したり、「感情」のパラメータを変更することができます。後からナレーターや感情まとめて変更したい場合があります。しかし、現状はUI上から変更することはできないようです。

複数のセリフブロックをまとめて変更したい場合は、テキストエディターで.vppファイルを開いて編集するとよいです。

 

ナレーター

ナレーターを「女性1 」から「男性3」にまとめて変更したい場合は "key": "Speaker/f1""key": "Speaker/m4" のように文字列を置換します。

 

ナレーターの種類は以下のようになってます。

  • 女性1 : f1
  • 女性2 : f3
  • 女性3 : f5
  • 男性1 : m1
  • 男性2 : m3
  • 男性3 : m4
  • 女の子 : f4b

 

感情

感情をまとめて変更したい場合は "emotions": {"happy": 0.0, "fun": 0.0, "angry": 0.0, "sad": 0.0}, の値を置換すると、まとめて変更できます。

例えば、「幸せ」20%、「楽しみ」50%、「怒り」70% 、「悲しみ」100% の場合、"happy": 0.2000000029802322, "fun": 0.5, "angry": 1.0, "angry": 0.699999988079071, "sad": 1.0 となります。

 

セリフブロックに感情の値が残ってるのに気がつかず作業を進めてしまい、後からまとめて設定変更するにはどうすればいいんだ?となったので、メモ的に残しておきます。

画面右のパラメータが目立つので編集しがちですが、セリフブロックごとに細かく変更する必要がなければ上のメニューにある「全体の感情設定」を使用するのがよさそうです。
また、「全体の感情設定」とセリフブロックの感情の両方を設定した場合、感情は加算された値になります。

 

VOICEPEAKは便利なソフトですが、出力ファイルの連番がファイル名の先頭に追加されたり、映像編集系のソフトとは少し文化が違う感じしますね。

Tips

Discrete Particles for Modo の使用方法

アイテムを重ならないように散布できるプラグイン「Discrete Particles」のメモです。使用バージョンは1.0です。
一部の設定を変更しないと機能が意図したように動作しなかったので、調べたこと残しておきます。

 

Discrete Particlesとは

Discrete Particlesは高速なパッキングアルゴリズムを使用して、メッシュの表面、またはメッシュのボリューム内にパーティクルを生成するプラグインです。
Replicatorを使用してアイテムを複製するときに、アイテム通しが重ならないようにパーティクルを生成できます。

modo標準の機能で例えると、Surface Particle Generatorの機能強化版です。

 

例えば下の画像は、ブーリアンとモーフィングを適用したメッシュにパーティクルを発生させる例です。

 

Surface Particle Generatorを使用すると、オブジェクト通しが重なります。またブーリアンでメッシュのトポロジーが変わる場合、パーティクルがランダムに生成されます。

 

Discrete Particlesはオブジェクトが重ならないようにパーティクルを生成します。また、テクスチャの投影のような仕組みになってるので、トポロジーが変わってもパーティクルの生成が安定しています。

また、Packing ModeにAABBを使用すると、デフォーマでサイズを変更してもオブジェクトが重ならないようにパーティクルが生成されます。

 

Chaosを使用するとパーティクルサイズをよりランダムにできますが、 パーティクル生成がランダムに変化してしまいます。

WhiteNoiseを使用するとパーティクルサイズをよりランダムにしながら、アニメーションしても大丈夫なようです。

 

 

使用方法

アイテム構成

Discrete Particlesをインストールするとアイテムが4つ追加されます。基本的に「Surface Distribution」「Volume Distribution」を追加して使用します。

  • Ray Domain
  • Ray Projection
  • Surface Distribution
  • Volume Distribution

 

Surface Distributionはメッシュの表面にパーティクルを散布するアイテムです。
Volume Distributionはメッシュのボリューム内にパーティクルを散布するアイテムです。

Ray DomainとRay Projectionはテクスチャロケータと同じ役割で、散布に使用するレイのプロジェクションタイプを指定するアイテムです。
Surface DistributionやVolume Distributionを追加すると、Ray DomainやRay Projectionは自動的に追加されます。

 

パーティクル生成

Surface DistributionやVolume Distributionを使用する場合は、アイテムの「Surface(Mesh)」「Volume(Mesh)」に散布用のメッシュを接続します。

 

サンプル見ずに使ってみたところ、一部の設定を変更しないと機能が意図したように動作しませんでした。疑問に思った設定をまとめておきます。

  • 「Sample Mode」 は「RayCast & Pack」に変更します。デフォルトだと「Preview」になっていてサーフェースやボリュームに散布されません。
  • 「Weight Map」を使用する場合は「WeightMap Blend」を1.0に変更します。デフォルトの0のままだと何も変化がありません。
  • Discrete Particlesでは「原型となるアイテム(プロトタイプ)」は1mを基準に動作します。1mより大きいとメッシュに重なりが発生します。

 

 

プロパティ

Discrete Particlesはドキュメントがないようなので、プロパティのツールチップを翻訳してみました。

 

Surface Distribution

Point Sampling

Sample Mode

4種類のサンプルモード

  • Preview : 投影ギズモ上のパーティクルを、MinSizeをパーティクルサイズとしてサンプリングします。
  • Raycast : MinSizeをパーティクルサイズとして、メッシュサーフェス上のパーティクルをサンプルし、レイキャスします。
  • Preview & Pack : MinSizeからMaxSizeまでのパーティクルサイズを使用して、プロジェクションギズモ上でパーティクルのサンプルとパックを行います。
  • Raycast & Pack : MinSizeからMaxSizeまでのパーティクルサイズを使用して、メッシュサーフェス上のパーティクルをサンプル、レイキャスト、パックします。
Backface Culling

バックフェイス ポリゴンのサンプリングが有効な場合は無視します。

Distribution

パーティクル分布の一様性

  • BlueNoise R2(一様)
  • Blue-Noise Hammersley (半統一)
  • WhiteNoise PSRand (ランダム)
Packing Mode

AABB = 軸方向に整列したバウンディングボックス (Axis Aligned Bounding Box)
AABBオプションを使用すると、プロトタイプをSurface DistributionとReplicatorノードに同じ順序でリンクする必要があります。

Point Count

頂点数。

Multiplier

Point Count * Multiplier はパーティクルの総数に相当します。
平面プロジェクションでMultiplierを1.0とした場合、ボックスプロジェクションではボックスの各面で同じパーティクル密度を得るために6.0に設定する必要があります。

Point Size

GLで描画するパーティクルの大きさ。

Point color

パーティクル色です。

 

Particle Settings

Prototype Domain

1.0mの原型基準領域を表示し、原型のサイジングの参考にできます。

Prototype Scale

パッキングアルゴリズムは、プロトタイプのサイズが1m以下であることを想定しています。プロトタイプのサイズをエレメントレベルで設定するか、このスケーリング値でスケールを調整してください。

Weight Map

ウェイトマップ。

MaxSize

パーティクルがサーフェースでサンプリングできる最大サイズ。

MinSize

パーティクルがサーフェースでサンプリングできる最小サイズ。

WeightMap Blend

ウェイトマップに基づいてパッキングパーティクルサイズを制御します。
値0.0はオフ。1.0は最大ブレンドに相当します。

Chaos

サンプリング中に各パーティクルが得るサイズのばらつきを制御します。
0.0ではパッキングアルゴリズムはデフォルトで各パーティクルのサイズを最大化しようとします。

Packing Distance

パーティクルサイズに比例して、パーティクルとパッキングボーダーの間に距離を追加します。
MaxSizeを大きくすることで縮小するパーティクル径を補うことができます。

Shrink Spacing

パーティクルを縮小し、パーティクルのパッキング境界線に間隔を作ります。

Post Sizing

ポストエフェクトとして、グラデーションに応じたサイジングを適用します。
グラデーションの左側が小さいパーティクル、右側が大きいパーティクルです。

Normal Alignment

サーフェース法線に対するパーティクルの向きのアライメント。値0.0はオフで、デフォルトはY-Up。

Surface Offset

サーフェス法線に基づいてパーティクルをオフセットします。

Display Packing

GLパッキングモードの描画。

PackMode color

パッキングモードの色です。

 

Performance Statistics

Enable

3Dビューポートのパフォーマンス統計情報を表示します。

Vertical Offset

垂直オフセット。

 

Volume Distribution

多くのプロパティがSurface Distributionと共通なので、Volume Distributionにあるプロパティだけ書いておきます。

 

Particle Settings

Packing Distance

パーティクル径に比例した充填距離。MaxSizeを大きくすることで縮小するパーティクル径を補うことができます。

Volume Constraint Mode

Shrinkモードは内包するメッシュと交差するパーティクルを縮小します。
Removeモードは内包するメッシュと交差しているパーティクルを削除します。

Volume Constraint

値を大きくすると内包するメッシュと交差するパーティクルを収縮させます。
1.0の値は交差が発生しないことを完全に保証するものではありません。

Normal Alignment

パーティクルの向きを最も近いポリゴン法線に揃えます。
0.0 を指定するとパーティクルは Y-Up 方向に整列します。

 

サンプルファイル

Discrete Particlesには11個のサンプルファイルが入ってます。
コメントノードにプロパティの解説やチュートリアルが書かれてるので、テキストを翻訳してみました。

 

1_Introduction.lxo

Discrete Particles は、Surface Distribution と Volume Distribution というパーティクルシステムを実装しています。これらは、DEX/Discrete Particlesセクションのアイテム追加ポップアップで見つかります。

これは、Discrete Particles システムを正しく動作させるために必要な基本的/最小限のノードの設定です。
以下のいずれかのノードのリンクを切断すると、パーティクルシステムは状態の評価を停止します。
Volume Distributionの設定は、Ray Projection 項目の代わりに Ray Domain 項目を使用する以外は同じです。

ただし、Ray Projectionアイテムの代わりに Ray Domainを使用します。Ray ProjectionとRay Domainを使用するため、シーンにDistributionアイテムを追加する必要があります。
Ray Projection と Ray Domain アイテムは自動的に追加されます。
先に進む前に「ロケータの表示」が有効になっていることを確認してください。

チュートリアル
  1. Ray Projectionアイテムをクリックし、Projectionドロップダウンリストから様々なプロジェクションタイプを試します。
  2. Planar projectionに戻します。
  3. Surface Distributionの項目をクリックし、そのプロパティフォームとチャンネルのツールチップを見ます。
  4. 半径 0.5m の球体を Prototype meshに追加し、アイテムリストで可視性をオフに設定します。
  5. シーン内の紫色の破線領域は、プロトタイプのサイズ制限を定義する 1m 単位の立方体です。
  6. この領域の外側にあるすべてのポリゴンは、重なりが発生する可能性があります。場合によってはプロトタイプをドメインより大きくしても良い場合があります。例えば平面上に高層ビルを詰め込むような場合です。
  7. Surface Distributionをクリックし、プロパティフォームで異なるSample Modesを試します。
  8. ツールチップを読んで、4つの異なるSample Modesが何をするのか理解してください。
  9. サンプルモードを Preview に戻します。
  10. Distributionのドロップダウンで3つの異なるDistributionを試します。そのツールチップを読んでください。
  11. サンプルモードを「Raycast & Pack」に設定します。
  12. Ray Projectionアイテム(ギズモ)を選択し、移動/回転/スケール変換を試します。
    次に、Surface Distributionシステムの様々な設定で遊んでみてください。
    Packing Modes については、別のチュートリアルで説明します。AABB モードを使用するには、最初にプロトタイプメッシュをSurface DistributionアイテムのAABBプロトタイプスロットに接続する必要があります。
    (AABBはAxis Aligned Bounding Boxの頭文字を取ったものです)。
  13. アイテムリストのSurface Tutoralフォルダの可視性をオフに設定します。
  14.  Volume Distribution を使って、同様のノード設定を行います。Volume Tutorial フォルダにアイテムを配置します。

チュートリアル終了

 

 

2_Surface_Packing_Modes.lxo

 

3_SurfaceDistribution_Falloff_example.lxo

この例ではBlend Falloff を使って、アニメーションするプロシージャルテクスチャをフォールオフフィールドに「変換」しています。
リニアフォールオフはテクスチャフォールオフとブレンドされます。
Ray Projectionはボックスプロジェクションモードに設定され、Surface Distribution パッキングモードはCircularに設定されています。

アニメーションをリアルタイムで見るには、タイムラインをスクラブしてください。

  • Distribution は完全にランダムな結果を生成するWhiteNoise PSRandに設定されています。
  • BlueNoise R2 は最も均一な結果を生成します。
  • BlueNoise Hammersley は「半」アンフォーム分布で、R2に比べてあまり均一な結果を生成しません。

 

 

4_SQUARE_vs_CUBE_Packing.lxo

スクエアvsキュービックパッキング

手順

  1. ノードグラフを調べます。
  2. SkyScraperプロトタイプメッシュの可視性をオンに設定します。
  3. SkyScrapersの下部が紫色のプロトタイプドメインの中央にどのように配置されているかを観察します。
    また、その上に拡張されます。パッキングはドメイン内のポリゴンのみを考慮します。
  4. SkyScraperプロトタイプメッシュの可視性をオフに設定します。
  5. タイムスライダーをフレーム70にドラッグします。
  6. SkyScraperの底面が平面ポリゴン上に完全に配置されていることを確認します。
  7. Surface Distributionを選択し、Packing modeをCubicに設定します。
    パックされたパーティクルのgl-drawing以外の違いは見られないはずです。
  8. Normal Aligmentを1.0に設定して、パーティクルが表面の湾曲にどのように整列するかを確認します。
  9. 次にSquare と Cubic パッキングモードを切り替えて、違いに注意してください。

結論
Normal Aligment を使用すると、Cubic パッキングによって曲面がオーバーラップする可能性が低くなります。Squareパッキングは少し高速で平らな面で使用する必要があります。

 

 

5_Volume_Packing_Modes .lxo

 

6_VolumeDistribution_Falloff_example.lxo

この例ではBlend Falloff を使用して、アニメートされたプロシージャルテクスチャをフォールオフフィールドに変換しています。
RayDomain は Box projection モードに設定され、Volume DistributionのPacking modeは Spherical に設定されています。

アニメーションをリアルタイムで見るには、タイムラインをスクラブしてください。

  • パーティクル分布は、最も均一な結果を生成するBlueNoise R2に設定されています。
  • BlueNoise Hammersleyは「半」アンフォーム分布で、R2よりも均一でない結果を生成します。
  • WhiteNoise PSRandは、完全にランダムな結果を生成する擬似ランダム分布です。

 

 

7_CUBE_vs_AABB_Packing_and_Transforms.lxo

Cubic vs AABB パッキングとトランスフォーム

AABBとは、Axis Aligned Bounding Boxの頭文字を取ったものです。

  • キュービック=黄
  • AABB = 緑

このチュートリアルでは、どちらのボリューム分布も VolumeMesh アイテムと Prototype アイテムを共有しています。
XYZのすべての寸法がちょうど1mなので、UnitCubeと名付けました。
Locatorアイテムはこの設定とは関係ありません。このチュートリアルのヘルパーとして機能するだけです。
Distributions は X 軸上で +/-1m 移動し、両者を離しています。

Distributions (Raycast mode)は、ボリュームメッシュやプロトタイプとは独立して動かすことができます。
シーンでの評価は、Ray Domain トランスフォームによって決定されるからです。同じルールが、Surface Distribution アイテムとRay Projectionアイテムにも適用されます。

 

チュートリアル
  1. シーン内のオレンジ色のロケータをクリックし、「Normal Aligment」チャンネルを開きます。
  2. Cubicパッキングが、すべてのバウンディングボックスの XYZ 寸法をどのように保持するかを観察します。
  3. AABBパッキングが、Replicatorのバウンディングボックスを動的に更新する様子を観察します。
  4. Particle Countを増やし(このチュートリアルリグでは1万個に制限)パッキングを観察します。AABBはパッキングをより最適化しますが、Cubicパッキングより若干パフォーマンスが劣ります。
    これはサイズや形状の異なる複数のプロトタイプがある場合に、より顕著になります。
    複数のプロトタイプを使用した AABB は、別のチュートリアルのシーンファイルで説明されています。トランスフォームの説明
  5. Ray Domain と Volume メッシュの可視性をオンにします。
  6. Volume Distribution アイテムの1つを移動します。
  7. 次に Ray Domain アイテムを動かして、何が起こるかを観察します。

    Ray DomainはDistributionがレイキャスティングを実行する場所をコントロールします。
    パーティクルは RayDomain が VolumeMesh と重なる場所にのみ追加されます。
    これらの2つの記述はSample ModeがRaycastingモードの時のみ有効です。

    Sample ModeがPreviewに設定されているときにステップ6と7を試してみると、結果がRay domain gizmoに束縛され、Volume meshのポリゴンを無視することが分かります。
    つまり、Previewはレイキャスティングのコストを無視して、特定のパッキングパターンをより速く見つけるための方法です。

     

     

    8_VolumeDist_Fill_a_Bowl_.lxo

    この例では球に立方体のパーティクルを充填するセットアップを紹介します。
    Ray DomainはBox projectionモードに設定され、Volume Distribution packingモードはCubicに設定されています。
    これらのモードは変更することができ、ユースケースによって異なる結果をもたらします。

    チュートリアル
    1. シーン内のパーティクルが球メッシュの「壁」内にどのように配置されているかを観察してください。
      レイキャスティングは各パーティクルに対して2本のレイを反対方向に送ります。両方のレイがポリゴンに当たった場合、法線がパーティクルの位置から離れる方向(つまりポリゴンの裏側)にあることから パーティクルがメッシュの内側にある可能性が高いことがわかります。
    2. プロパティのInvert Normalsパラメータをチェックし結果を確認します。
    3. レイキャスティングロジックを反転させたので、球にパーティクルが含まれているはずです。
    4. Replicatorの一部が球と干渉しています。これを修正するにはVolume Contraint を1.0に増やして、交差を減らします。
    5. Volume Contraint Mode を Replace に変更します。このパラメータのツールチップを見てください。

    DistributionはWhiteNoise PSRandに設定されています。均一なBlueNoise Distributionsを試して、その違いを見てください。

    チュートリアル終了

     

     

    9_Surface_Projection_Example.lxo

    タイムラインをスクラブすると、アニメーションが表示されます。
    Surface DistributionアイテムのPrototype Scale が 1.0 以上に設定され、プロトタイプのオーバーラッピングが意図的に発生するようになりました。Ray Projectionアイテムのスケールをアニメーションしています。

     

     

    10_Surface_Projection_Weightmap.lxo

    Plane メッシュを選択し、プロパティのWeight Mapにあるウェイトマップ「SurfDistWmap」を選択します。
    ウェイトマップツールでPlaneメッシュにペイントします。

     

    PalmTreeScene.lxo

    この数式ノードで使用する値によっては、かなり重いシーンになる可能性があります。そのため、クランプ関数は0.1〜5.0の間に値を制限しています。

    このシーンでは、2つのSurface Distributionが使用されています。
    一つはヤシの木用、もう一つは草用です。ヤシの木の下に草が生えるようにしたいので、これらの分布の間のパッキングは考慮されていません。

    また、Gound Planeにはウェイトマップが用意されています。いずれかの分布を選択し、ドロップダウンを使って選択します。ウェイトマップブレンドパラメータを使用して、それを微調整します。
    このシーンで遊んでみてください。

     

    参考

    Tips

    modoでパーティクルにテクスチャの色を設定する方法

    modoでパーティクルにテクスチャを使用して色を設定する方法について書いてみたいと思います。
    Steve Hillさんが公開していたビデオの内容を試してみた。という内容の記事です。

     

    ■サンプルファイル

     

    スケマティックはこんな感じです。

    パーティクルオペレータの「タイプ」で「新規」を使用して、パーティクルが発生時に色を設定します。

    テクスチャをパーティクルオペレータの「色」に接続するため、テクスチャの「スウィズル」を使用して画像をRGBそれぞれチャンネルごとに分解して、Falloff Probeを使用してテクスチャの座標の色をパーティクルに設定します。

     

     

    Raycastを使用した方法も試してみました。

    ■サンプルファイル

     

    スケマティックはこんな感じです。

    パーティクルオペレータの「タイプ」で「新規」を使用すると、Raycastを使用した場合もパーティクルが発生時の色を設定できます。しかし、パーティクルが移動してると、パーティクル発生位置に移動したReplicatorにレイがヒットしてしまい色が変化してチラツキが発生します。
    パーティクルを発生させた後に位置をオフセットしてあげれば、パーティクルにレイがあたらなくなり上手くいきそうですが、Raycastを使用する場合は注意する必要がありそうです。

     

    modoは701でパーティクルシミュレーションが搭載されましたが、パーティクル発生時にテクスチャーの色を設定して維持する方法が長い間わからないままでした。

    これまではReplicatorで複製するメッシュのマテリアルに、「ワールド座標系」を使用してテクスチャを貼る方法。「Raycast」を使用する方法の2つがよく紹介されてきました。

    しかし、「ワールド座標系」と「Raycast」は静止画では問題ないのですが、アニメーションするとテクスチャがワールド座標に貼りついたように見えるため、望ましい方法ではありませんでした。
    また「ワールド座標系」を使用すると、テクスチャの1ピクセルの色をメッシュの色として継承したいのに、テクスチャの模様がそのままメッシュに投影されてしまうという問題もありました。

    長い間謎でしたが、言われてみると単純でしたね。

     

    参考

    Tips

    MayaでFBXファイルのコンストレイントを読み込む方法

    MayaでFBXファイルのコンストレイントを読み込む方法について書いてみたいと思います。
    Mayaのファイル読み込みの動作が気になったのでメモです。

     

    FBXファイルのコンストレイント

    FBXファイルにはコンストレイントを保存することができます。FBXが対応しているコンストレイントは以下の5種類です。

    • ポイント
    • エイム
    • 方向
    • ペアレント
    • IK ハンドル(極ベクトルを含む)

    FBXのコンストレイント保存に対応してるソフトは多くありませんが、MayaやMotion Builderは入出力に対応しています。Unityなどのゲームエンジンでもコンストレイントを読み込むことができます。

     

    Mayaのコンストレイント。

     

    FBXのコンストレイント書き出しオプション。

     

    MayaでFBXファイル読み込み

    MayaでFBXファイルを読み込む場合、ファイルメニューの「読み込み」から行います。

     

    このとき読み込みダイアログのファイルの種類が「すべてのファイル」の状態でFBXを読み込むと、コンストレイントが正しく読み込めません。

     

    コンストレイントが読み込まれない。

     

    コンストレイントを読み込みたい場合は、ファイルの種類を「FBX」にしてから読み込む必要があります。

     

    コンストレイントが適用されている。

     

    ファイルの種類を「FBX」にしてFBXを読み込んだ後は、「すべてのファイル」に変更してもFBXのコンストレイントが正常に読み込むことができる状態になります。

    FBXの読み込みオプションではコンストレイントの読み込みはデフォルトでONなので「すべてのファイル」でも正しく読み込んでくれてよさそうなのですが、Mayaはファイルの種類を指定しないと正しくファイルをロードできない場合があるようです。ファイル読み込み動作に一貫性がないのは困りものですね。

    Tips

    Microsoft Excelの機能メモ

    Excelでアンケート等を集計する場合に知っておくと便利な基本機能や関数のメモです。

     

    計算関連

    セルの参照

    セルには「相対」と「絶対」2種類の参照方法があります。

    相対参照

    「B2」「C2」のようにセルを指定する方法です。Σボタンで「合計」を求める場合は、相対参照でセルが指定されます。

    =SUM(B2:C2)

     

    絶対参照

    行や列の前に「$」をつけると絶対参照になります。行と列のそれぞれで絶対参照できます。
    絶対参照は後述の「オートフィル」と組み合わせて使用する場合に便利です。

    =SUM($B$2:$C2)
    =SUM($B$2:C$2)

     

    数式バーでF4キーを押すと絶対参照をトグル切り替えできます。

     

    シートの参照

    別のシートのセルを参照する場合は「シート名!」を使用します。
    Excelデフォルトの「Sheet1」を参照する場合は「Sheet1!」になります。

    =SUM(Sheet1!B2:C2)

     

    オートフィル

    セルを選択して右下の■をドラッグすると、セルの数式をコピーできます。

     

    特定のセルを参照したオートフィル

    計算では「税率」のように適当な値を計算に含めたい場合があります。

    =SUM(B2:C2)*D2

    この計算をオートフィルすると「D2」の部分が自動的に連番に変わってしまい計算に失敗します。

     

    絶対参照「$D$2」を使用すると、特定のセルを参照した状態でオートフィルできます。

    =SUM(B2:C2)*$D$2

     

    文字列を集計

    文字列を集計したい場合は「=COUNTIF(A2:A9,"文字列")」を使用します。
    例えば「バター」の数が知りたい場合は以下の通りです。

    =COUNTIF(A2:A9,"バター")

     

    文字列のフィルター

    文字列を含む

    「Aバター」「BバターB」「バターC」のように「バター」の前後に別の文字が追加されている文字列を集計したい場合は、ワイルドカードを使用します。

    =COUNTIF(A2:A9,"*バター*")

     

    ワイルドカードの検索条件は以下のように変更できます。

    • *バター* 「~を含む」
    • バター*「~ではじまる」
    • *バター「~で終わる」

     

    文字列を含まない

    文字列を含まない数を集計したい場合は、「=COUNTIF(A2:A9,"<>文字列")」を使用します。
    例えば「バター」以外の数が知りたい場合は以下の通りです。

    =COUNTIF(A2:A9,"<>*バター*")

     

    文字列の代わりにセルを参照する

    文字列を集計する場合に、毎回数式バーに文字列を入力するのは面倒です。
    「名前」のセルを参照する場合は以下の通りです。

    =COUNTIF(A2:A9,"*"&C2&"*")

     

    空白を詰めて表示

    行の空白を詰めて、入力された文字列だけまとめたい場合があります。
    例えばA列から文字列だけ取り出す場合は、数式バーに以下の通り入力して Ctrl+Shift+Enterで確定します。

    Ctrl+Shift+Enterで確定すると配列数式という高度な計算ができる物になるらしいです。配列数式は数式が{}で囲まれます。

    =IFERROR(INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A)),ROW())),"")

     

    グラフ関連

    グラフの軸を反転する

    Excelで横棒のグラフを作成すると、行の順番が上下反転したグラフが作成されます。
    グラフの軸を反転したい場合は、グラフをダブルクリックして「軸のオプション」から「軸を反転する」をONにします。

     

    表示関連

    列のソート

    列を値でソートしたい場合は「並べ替えとフィルター」を使用します。
    「昇順」「降順」でセルの並び替えです。「フィルター」を使用すると、セルのボタンを使用して並べ替えが行えるようになります。

    ホーム / 並べ替えとフィルター / フィルター

     

    1行目をスクロールに追従

    表をスクロールした場合に、見出しを常に表示したい場合があります。
    「先頭行の固定」を使用すると表をスクロールしても1行目を常に表示することができます。

    表示 / ウィンドウ枠の固定 / 先頭行の固定

     

    線を消す

    デフォルトで表示されるセルのグレーの線を消したい場合は、「目盛線」をOFFにします。

    表示 / 目盛線

     

    重複表示

    データを整理する場合に同名の入力がないか確認したい場合があります。
    「重複する値」を使用すると、同じ値が入ったセルの背景色を変えることができます。

    ホーム / 条件付き書式 / セル強調表示ルール / 重複する値

     


     

    Excelに不慣れながらデータを集計しようと思ったのですが、Excel難しすぎて挫折しそうになりました。

    Google スプレッドシートでは入力された文字列を何も考えずに集計してグラフ化することができたのですが、Excelでは文字列を直接集計できないようです。Excelで文字列を集計する場合は一度文字列を数えてから、その値をグラフ化する必要がありました。

    Excelは世界的に普及してるはずなのにどうしてこんな不便なんだと思いつつ、せっかく色々調べたのでExcelの機能をまとめてメモしておきます。

    Tips

    modoのFBX出力の文字化けを回避する方法

    modoのFBX出力の文字化け回避方法について書いてみたいと思います。

     

    modoはレンダリング画像の出力先やFBX出力先のファイルパスに日本語文字を含む場合、文字化けが発生したり、ファイルの出力に失敗することがあります。

    先日、FoundryのサポートにFBXのファイルパスが文字化けするので改善して欲しいとバグを報告したのですが、日本語版WindowsではUnicodeに対応していないプログラムの言語にShift-JISが使用されてるのが原因だと教えていただきました。

    Windowsの非Unicodeプログラムのデフォルトの言語設定をUnicode UTF-8に変更すると、ファイルパスの文字化けを回避できます。

    Modo for WindowsはUnicodeアプリケーションではありませんが、レガシーマルチバイトエンコーディングに対応しており、日本語版WindowsではデフォルトでShift-JISエンコーディングが使用されています。
    Unicodeでないアプリケーションの言語は、コントロールパネルの「地域と言語」セクションの設定内で定義されます。この場所で言語を英語に切り替えると、問題が改善される場合があります。

     

    Windowsの非Unicodeアプリケーションのデフォルト設定をUnicode UTF-8に変更する方法

    Windows 10 の文字コードはUnicode UTF-16を使用しているようですが、非Unicodeアプリケーションでは互換性を維持するため、デフォルトでShift-JISが使用されます。

    非Unicodeアプリケーションのデフォルトの言語設定をUnicode UTF-8に変更するには、Windowsの「地域の設定」から「ベータ:ワールドワイド言語サポートで Unicode UTF-8 を使用」をONに変更します。

    コントロール パネル\時計と地域\日付、時刻、数値形式の変更\管理\システムロケールの変更

     

    この設定はUnicodeに対応していない全てのアプリケーションに影響します。古いアプリケーションを使用している場合は、今まで問題のなかったアプリケーションで逆に文字化けする場合があります。
    私の環境では圧縮解凍ソフトや一太郎2021など、グラフィック以外のソフトが文字化けするのでこの設定を使うわけにはきませんでした。

    以前はMicrosoftが「Microsoft AppLocale」という、非Unicodeアプリケーションをユーザーが選択した設定で実行できるようにするプログラムを公開していたようですが、現在のOSでは動作しなくなったため公開が終了してしまったようです。

     

    FBXファイルの文字化け

    「新しいフォルダー」にASCII形式でFBXを出力します。FBXファイルをテキストエディタで開くと「新しいフォルダー」が文字化けしているのが確認できます。

     

    「ベータ:ワールドワイド言語サポートで Unicode UTF-8 を使用」OFF

    FBXの出力先のパスが文字化け。

     

    テクスチャーパスが文字化け。

     

    「ベータ:ワールドワイド言語サポートで Unicode UTF-8 を使用」ON

    FBXファイルをテキストエディタで開くと「新しいフォルダー」が文字化けしていないことが確認できます。

    FBXの出力先のパスが正しく保存されるようになった。

     

    テクスチャーパスが正しく保存されるようになった。

     

    3dsMaxやMayaのFBX出力では文字化けが発生しないので、Modoを使う場合だけファイルパスに気を配る必要があるのが不便です。「FileName:」は文字化けしてないので同じようにファイルパスを保存してくれればいいと思うのですが、他のアプリケーションで実際に使用される方のパスが文字化けしてしまってます。ModoをUnicode対応にして文字化けを改善していただきたいですね。

    Tips

    Windowsで使用されるアプリケーションアイコンの画像サイズ

    Windowsで使用されるアプリケーションアイコンの画像サイズに関するメモです。

    Windowsではデスクトップやエクスプローラーなどでアイコン画像が表示されます。アイコン画像に使用される「.ico」ファイルには解像度の異なる複数の画像が格納されていて、エクスプローラーの表示設定によって適切なサイズの画像を表示します。

     

    Windowsで必要なアイコンの画像サイズ

    .icoファイル作成時に必要な画像サイズは以下の14枚です。
    * マークの5枚は最低限あった方がよいサイズで、それ以外のサイズはディスプレイの表示スケールとの組み合わせで使われる。

    • 16 x 16 *
    • 24 x 24 *
    • 32 x 32 *
    • 48 x 48 *
    • 256 x 256 *
    • 20 x 20
    • 30 x 30
    • 36 x 36
    • 40 x 40
    • 60 x 60
    • 64 x 64
    • 72 x 72
    • 80 x 80
    • 96 x 96

     

    ■サンプルアイコン

    このアイコンファイルには以下の14枚の画像が含まれています。

     

    表示スケールによって使用されるアイコンサイズが変わります。ただし、表示スケールの変更が即時適応されるわけでなく、Windows ログイン時の表示スケールが使用されるようでした。

     

    エクスプローラーでアイコンサイズの切り替え確認

    エクスプローラーの表示を切り替えて.icoファイルの表示画像が変わるのを確認した。

    表示スケール100%

    16、32、48、256の画像が使用される。

     

    表示スケール 125%

    20、40、60、256の画像が使用される。

     

    表示スケール 150%

    24、48、72、256の画像が使用される。

     

     

    いまどきのソフトならサイズの異なる画像を一括出力するのはそんなに手間ではないので、とりあえず全サイズを.icoファイルに入れておけば様々なディスプレイ環境に対応できるのでよさそうです。

     

     

    参考「Windows アプリの開発に関するドキュメント」

    https://docs.microsoft.com/ja-jp/windows/apps/design/style/app-icons-and-logos#target-size-app-icon-assets

    Tips

    MayaのRender Setupでマテリアルを置き換える方法

    MayaのRender Setupで、フェースアサインした特定のマテリアルをShader Overrideで置き換える方法の覚え書きです。

    Render Setupはアトリビュートの値をレイヤーのように上書きして、色のバリエーションやカスタムAOVをレンダリングする機能です。Render SetupのShader Overrideを使用すると、特定のマテリアルを異なるマテリアルに置き換えてレンダリングすることができます。

     

    Collectionを作成して右クリックからCreate Shader Overrideを実行、Shading EngineのCollectionを作成します。
    IncludeにデフォルトでExpressionの*が入ってるので削除します。Addボタンで置き換え元のShading Engineを追加します。

     

    Shader Overrideで置き換え先のマテリアルを接続すれば設定完了です。

     

    画像ではPhongをRamp Shaderに切り替えてレンダリングしてます。

     

     

    マテリアル全体の置き換え、例えばAmbient Occlusion専用の画像を作成したい場合はMaterial Overrideを使用します。

     

     

    Render Setupで色など一部アトリビュートのオーバーライドの記事は多く見かけるのですが、フェースアサインしたマテリアルの切り替えについて書かれてる記事が見つけにくかったので、メモ的に残しておきます。

    Tips

    modoのEscキーによる選択解除の動作

    modoのEsc キーによる選択解除の動作について書いてみます。

    modoはEsc キーを押すとアクティブなツールを解除することができますが、続けてEsc キーを押すとアクションセンターやフォールオフ、選択コンポーネントを解除することができます。

    • ツール解除 → アクションセンター+フォールオフ+メッシュコンストレイント解除 → 選択解除

     

    modoの質問に回答してるのを見かけて知りました。これは便利なので積極的に使って行きたいですね。

    Tips

    modoでリプリケータをポイントクラウドに変換する方法

    modoでReplicatorの「ポイントソース」をポイントクラウドに変換する方法について書いてみます。

     

    Replicatorはメッシュの頂点にアイテムを複製する便利な機能ですが、Surface Particle Generatorを使用してランダムに複製している場合、特定のアイテムを削除したり位置を微調整することが難しい場合があります。

     

    modo 15.2で追加された「インスタンスをリプリケータへ」コマンドを使用すると、インスタンスの位置を元にポイントクラウド(トランスフォームマップを持った頂点)を作成することができるようになりました。

     

    Replicatorをポイントクラウドに変換する手順は以下の通りです。

    [変換手順]
    1. Replicatorを選択して「リプリケータのフリーズ」実行
    2. インンスタンスを選択して「インスタンスをリプリケータへ」実行

     

    Replicatorを選択して「リプリケータのフリーズ」を使用すると、インンスタンスが作成されます。

     

    インンスタンスを選択して「インスタンスをリプリケータへ」を使用すると、Point CloudとReplicatorにすることができるようになりました。プロシージャル的に頂点を作成するSurface Particle Generatorと異なり、Point Cloudは普通の頂点データなのでモデリングツールで頂点の位置等を編集することができるようになります。

     

    「リプリケータのフリーズ」するのが面倒なので、Replicatorをポイントクラウドに一発変換できるようにバッチコマンドを作ってみました。Replicatorを選択してからコマンドを実行してください。

    cmds.batch {Temp} {replicator.freeze} {select.itemType meshInst} {replicator.instanceToRep useItemMap:true onlySelectedInstances:false}

     

    select.itemTypeを使ってインスタンスを選択してるので、もしもシーンに複数のインスタンスがある場合は全部ポイントクラウドに変換します。
    トランスフォームマップを選択して頂点を編集すると、Replicatorで複製されたアイテムの位置回転スケールを編集することができます。

     

    「インスタンスをリプリケータへ」は便利に使えそうでいいですね。

     

    参考

    「インスタンスをリプリケータへ」コマンドは元々15.1の静的解析ツールに実験的に搭載されました。15.2では正式なコマンドとして追加されました。

    Tips

    modoのFBXのメディア埋を込み

    modoのFBXのメディア埋め込みについて書いてみます。

    modo 15.1v2から「初期設定」のFBX入出力に「メディアを埋め込み」が追加されました。これはシェーダーツリーで使用しているテクスチャ画像をFBX内に保存するためのオプションです。

     

    .lxo内に保存される画像パスに絶対パスや相対パスが混在してしまい、他の人にデータを渡したときにリンク切れが発生することがあります。「メディアを埋め込み」を使用するとFBXファイル内に画像を保存しているので、他の環境でファイルを開いても画像のリンク切れを気にしなくてよくなります。

    「メディアを埋め込み」を使用する場合は、画像パスに日本語文字が含まれていると正しく出力できないので注意が必要です。

    メディアの埋め込みした場合は、画像が含まれているためFBXファイルの容量が大きくなります。

    メディアを含むFBXファイルを開くと、.lxoファイルと同じディレクトリに「FBXファイル名.fbm」フォルダが作成されて画像が保存されます。

     

    画像を編集する場合はメディアの埋め込みしない方がFBXファイルの容量が小さく取り回しが便利なのですが、とりあえずFBXファイル単体でデータを完結したい場合には便利なオプションです。