ビュー依存のパーティクル解像度の例
 
 
 
 

   

パーティクル フロー クイック ナビゲーション

説明:

カメラからの距離に基づいてパーティクル解像度を制御する方法の例を示します。

用途:

Script_Operator オペレータで使用する必要があります。

効果:

スクリプトは、シーンの Sphere プリミティブを各パーティクルのシェイプとして使用し、ハードコードされたカメラ $Camera01 までの距離に基づいてセグメントを設定します。パーティクルとカメラ間の距離が長いほど、取得ポリゴン数が少なくなります。

例:

--ChannelsUsed ハンドラは、スクリプトに提供される
--チャンネルを定義します。
--すべてのチャンネルのリストについては、
--インタフェース: MaxscriptParticleContainer を参照してください。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
on ChannelsUsed pCont do
(
pCont.useShape = true --シェープ チャンネルを有効にします。
pCont.usePosition = true --位置チャンネルを有効にします。
pCont.useScale = true --スケール チャンネルを有効にします。
)
--初期化時には Init ハンドラが呼び出されます。
--この場合、パーティクル シェイプのソースの定義に使用されます。
--必要に応じて、パーティクル シェイプのソースを作成することもできます。
on Init pCont do
(
-- 名前を指定してシェイプ ソース プリミティブを取得します。
-- シーン内のその他のオブジェクトとの競合を回避するため、ランダムな名前を使用します。
global sph = $SphereDynamic2468975
 
-- オブジェクトが存在しない場合は作成します。
if sph == undefined then
(
sph = Sphere()
-- オブジェクトに一意の名前を付与します。
sph.name ="SphereDynamic2468975"
-- 半径を 1 に設定します。
sph.radius = 1.0
-- 球を隠します。
hide sph
)
)
 
--Proceed ハンドラには、パーティクルに割り当てる
--メイン スクリプトが含まれています。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
on Proceed pCont do
(
--シーン内に Camera01 いう名前のカメラがある場合
if $Camera01 != undefined then
(
--現在の合計パーティクル数を取得します。
count = pCont.NumParticles()
 
--すべてのパーティクルをループ処理します。
for i in 1 to count do 
(
 
--現在のパーティクル インデックスを設定します。
pCont.particleIndex = i 
 
--事前に作成された球の半径を
--パーティクル サイズに基づいて変更します。
sph.radius = pCont.particleScale 
 
--カメラ $Camera01 までの距離に基づいて
--セグメントを変更します。
--距離が 500.0 単位のとき、セグメントは 2 に設定されます。
--距離が 250.0 単位のときセグメントは 4、距離が 100 単位のときセグメントは 10 に設定されます。
--必要なフォールオフを取得するように関数を変更します。
sph.segs = 1000.0/(length (pCont.particlePosition - $Camera01.pos))
 
--パーティクルのシェイプを Sphere の TriMesh に設定します。
pCont.particleShape = sph.mesh
)--i ループを終了
)--if 終了
)--Proceed を終了します。
 
--Release ハンドラを使ってクリーンアップを行います。
--この例では使用しません。
onRelease pContdo
(
)
関連事項