CG 日記

Tips

modoでポリゴンが消える表現

modoでポリゴンが消える表現について書いてみます。

TwitterでBlenderのジオメトリノードを使った作例が流れてきたので、同じような表現がmodoで作れるか軽くテストしてみました。
ちょっと無理やりな方法なので汎用性は低いのですが、興味がある人向けに公開していきます。

サンプルファイル

 

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

1つの平面のように見えるポリゴンは、グリッド状にパーティクルを発生させた小さな平面の集合体です。
フォールオフプローブを使用して、フォールオフ内に入ったパーティクルを消滅させています。 これで平面が消えてるように見せてます。

同様にフォールオフプローブを使用して、フォールオフ内に入ったパーティクルからパーティクルを発生させ、さらに Source Emitter を使用して黄色い三角のパーティクルを発生させています。これは Particle Sieve Modifier を使用しても似たようなことができる気がします。

 

今回は頭の体操的に作った物で、ポリゴンを消す最初に思いついた方法を試しましたが、プロシージャル頂点マップを使用した方法でも似たような表現ができる気がします。

 

参考

参考にしたBlenderでジオメトリノードでは三角ポリの発生位置がまばらなので、パーティクルではなくポリゴンが剥がれて飛んでるのかも知れません。

Tips

ロックされてるフォルダやファイルを解除するソフト「File Locksmith」

フォルダやファイルのロックを解除するソフト「File Locksmith」を紹介します。

Windowsでファイルを削除する場合に「別のプログラムがこのファイルを開いているので、操作を完了できません。」とメッセージが出てファイルを削除出来ない場合があります。

「File Locksmith」を使用するとフォルダやファイルをロックしているタスクを検索して終了することができます。

 

File Locksmith

「File Locksmith」はMicrosoftが開発しているオープンソースのユーティリティ集「PowerToys」 に含まれているツールです。「PowerToys」は Windows Store からインストールすることができます。

https://apps.microsoft.com/store/detail/microsoft-powertoys/XP89DCGQ3K6VLD

ドキュメント
https://docs.microsoft.com/ja-jp/windows/powertoys/

 

使用方法

ロックされているフォルダやファイルを右クリックして、コンテキストメニューから「このファイルは何で使用していますか?」をクリックします。

 

File Locksmith ウィンドウが開いてファイルをロックしているタスクの検索が開始します。検索に少し時間がかかります。
「タスクを終了する」をクリックすると、ファイルをロックしているソフトを強制的に終了することもできます。

 

File Locksmithを使用すると、簡単にファイルをロックしているソフトを調べることができるので便利です。「PowerToys」 には他にも Windows 標準で入れて欲しい便利なツールが入ってるのでお勧めです。下の記事では「PowerToys」の便利な機能を紹介しています。

Tips

Windows 10 でコンテキストメニューを編集する方法

Windows 10 でコンテキストメニューを編集する方法について書いてみます。

Windowsではアプリケーションをインストールすると、コンテキストメニュー(右クリックメニュー)にアプリケーションのコマンドが勝手に追加されることがあります。この邪魔な項目を「レジストリ エディター」を使用して削除します。

 

 

ファイルのコンテキストメニューを編集する

ファイルを右クリックした場合に表示されるコンテキストメニューは、「レジストリ エディター」の以下のディレクトリに保存されています。

\HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\

 

コンテキストメニューの編集手順

例えば「共有」を削除したい場合の手順を紹介します。

 

「ModernSharing」を削除、または「データ」の先頭に適当な文字を追加してコマンドを実行できないようにします。

 

ファイルを右クリックすると、コンテキストメニュー「共有」が消えています。

 

 

フォルダのコンテキストメニューを編集する

フォルダのコンテキストメニューは、フォルダを直接右クリックした場合と、デスクトップなどフォルダ以外の部分を右クリックした場合の2通りのメニューがあります。

 

フォルダ

フォルダを右クリックした場合のコンテキストメニューは、以下のディレクトリに保存されています。

\HKEY_CLASSES_ROOT\Directory\shell

 

フォルダの背景

デスクトップや、エクスプローラーのファイル以外の部分を右クリックしたコンテキストメニューは、以下のディレクトリに保存されています。

\HKEY_CLASSES_ROOT\Directory\Background

 

フォルダメニューの場合、私の環境では .exe に引数を渡す形でコマンドを実行してるソフトが多いようです。このような場合「データ」の換えではなく、キーを削除する必要があります。

 

コンテキストメニューに勝手に追加されるコマンドを便利に感じたことは、ほぼありません。レジストリ エディターで編集するのは面倒なので、Windowsが進化して簡単にメニューを編集出来るようになって欲しいですね。

 

広告枠

Google 広告がどんなシステムかテスト中です。
広告をクリックすると収益が発生する仕組みなのですが、Googleが自動的に表示する広告はユーザーの誤タップを誘発する動作に見えて印象悪いですね。


Tips

サブディビジョンサーフェスのスムージングアーティファクト

サブディビジョンサーフェスを使用したエッジの処理によってスムージングにアーティファクトが出るという話を見かけたので、modoで検証してみました。三角ポリゴンを使用するとスムージングアーティファクトが目立たなくなるようです。

サンプルファイル

サブディビジョンサーフェスを使用してハードサーフェスモデルを作成するとき、モデルにRをつける場合があります。このときRのエッジをどのように処理するかによって、スムージングアーティファクトの発生のしかたが異なります。

 

多角形ポリゴン

多角形はレンダリング時に自動的に3角ポリに分割されるので、スムージングアーティファクトが発生します。

 

四角ポリゴン

サブディビジョンを使用する場合、四角ポリゴンを使用すると曲面が綺麗に細分割されます。ハードサーフェスでも四角ポリゴンにした方がいいと思ってましたが、スムージングアーティファクトが発生するようです。

三角ポリゴン

サブディビジョンを使用する場合は三角ポリゴンは使用を避けがちですが、このようなRを処理する場合には三角ポリゴンを使用するのがよさそうです。スムージングアーティファクトがもっとも目立ちにくくなります。

 

「サブディビジョンレベル」を上げるとポリゴンが分割され相対的にスムージングアーティファクトが目立たなくなりますが、「サブディビジョンレベル」を低い値で使用する場合はR部分のエッジの処理を注意した方がよさそうです

Tips

modoのアイテム数が多い場合のパフォーマンス

modoはアイテム数が多い場合にパフォーマンスが低下するという話題をよく見かけます。
ビューポートの表示を「デフォルト」以外に変更すると、速度が少し改善することに気がついたので記事に残しておきます。

サンプルファイル

  • デフォルト : 0.5 FPS
  • アドバンスト : 3.3 FPS
  • シェードテクスチャ : 8.5 FPS

アイテム数が1万くらいになると、ビューポートのパフォーマンスが低下しフレームレートが出なくなります。テクスチャやシェーダーなどシーンの要素によると思いますが、3D ビューポートの表示スタイルは「デフォルト」が一番遅くなるようです。

「アドバンスト」は遅いイメージがありましたが、FBXインポート直後のような単純なマテリアルでは「デフォルト」より表示が速いのが意外でした。「シェードテクスチャ」等を使用するのが最も速度が上がるようです。

ビューポートのパフォーマンス設定で「スムージング」「シェーダーツリー」をOFFにすると1~2 FPS変化する程度で、大きな違いはありませんでした。

 

ちなみに他の3Dソフトではそれほど速度低下しません。
3dsMaxでは60FPS、アイテム選択すると10FPSと遅くなります。

 

Mayaでは120FPS、アイテムを選択しても60FPSと高速です。

 

普段はそれほど多くのアイテムを扱うことはないのですが、ある程度大きなデータを扱う場合は表示速度が問題になりそうですね。

CG 日記

3dsMax 2017 が起動しない問題の解決方法

Windows 10に3dsMax 2017を新規にインストールしたところ起動しないことに気づきました。
症状は3dsmax.exeを起動すると、スプラッシュ画面表示後にMaxのウィンドウが一瞬だけ表示されて、アプリケーションが強制終了するという物です。

解決方法

3ds Max 2017.2 Update (SP2)をインストールしたら、Max 2017が起動できるようになりました。

 

最初はAutodeskのライセンスサーバー側で過去バージョンのライセンスが使用できなくなったのかと思いましたが、2022/09/15の時点では Maya 2016 Extension2が使用できます。
ライセンス以外の問題かと思いアップデータを適用したところ無事に起動できるようになりました。.NET Framework 4.7の問題だったようですね。

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

    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