Skip to content

改訂前の参考解説

このページは改訂前の教材です。現在の授業の回番号・内容は、後期の授業計画で確認してください。

第01回 GPU粒子の配置と群れの変形

4 / 4 群れの読みやすさと重なりの比較 ​

このステップの目的

このステップでは、粒子群の配置を読める表示へ整え、粒子数と画面上の重なりが与える影響を分けて確認します。

粒子を小さく表示して形を確認する ​

Output Particle Quadで輪郭が柔らかい粒子用画像を使い、Alphaによる半透明の表示を選んでください。Initializeでは、Sizeを0.03、Alphaを0.25程度にして比較を始めます。これらの値は、今回の座標の大きさに対する開始値です。

最初から大きな粒子や強い加算合成を使うと、重なった部分が明るい塊になり、粒子の位置が分かりにくくなります。Bloomを加える前に、Blendを動かした際の配置の変化を確認してください。

また、カメラを斜めに置いて奥行きを確認してください。正面からの一枚だけでは、立体的な分布と平面上の重なりを区別しにくい場合があります。

保存した位置で色を変える ​

位置だけでは変形を追いにくい場合には、homeの高さに応じて色を変えてください。最初のY座標は−3〜3の範囲なので、色を選ぶ割合は次のように求められます。

text
色の割合 = Saturate((home.y + 3) ÷ 6)
粒子の色 = Lerp(低い位置の色, 高い位置の色, 色の割合)

SplitでhomeのY成分を取り出し、Add、Divide、Saturate、Lerpを接続してください。最後のLerpには、例えば青系と橙系の二つの色を設定し、その結果をOutput内のSet Colorへ接続します。Set Colorは、粒子を描画するときに使用するRGBを設定します。

この色は、現在の高さではなく最初の高さから決まります。変形しても粒子の色が変わらないため、元の配置と変形先の対応を追いやすくなります。色は位置の理解を助けるために使い、発光の強さとは分けて調整します。

比較条件を一つずつ変える ​

粒子数を変える ​

Countを3000、10000、30000へ変更して比較してください。各比較では、同じカメラ、Blend、粒子の大きさ、経過時間を使い、Countを変更するたびに再初期化します。

見え方をそろえたい場合には、Visual Effectコンポーネントのランダムシードを固定します。粒子数の違いに加えて乱数の並びまで変わると、何が見た目を変えたのか判断しにくくなるためです。

粒子の大きさを変える ​

Countを固定したままSizeだけを変更してください。大きな半透明粒子が画面上で重なると、同じ画素を何度も描く量が増えます。この重複描画をOverdrawと呼びます。

粒子数が同じでも、カメラへ近づいた場合や、粒子を大きくした場合には負荷が変わることがあります。したがって、粒子数だけを見て軽さを判断することはできません。

今回記録する比較 ​

この回では、粒子数・Size・Blendを一つずつ変え、配置が読みやすいかを記録します。Countを変えると粒子の処理数、Sizeを変えると画面を覆う面積、Blendを変えると重なる位置が変わります。見た目の変化から処理時間を推測するだけでは、速さの比較にはなりません。

CPU・GPU時間の取得方法と原因の切り分けは第11回の計測条件で扱います。今回の完成条件にProfilerによる詳細計測は含めません。

比較後の復元 ​

Count 10000、Spread 1、Radius 4、Blend 0、Size 0.03、Alpha 0.25へ戻します。Sizeの比較は0.03 → 0.06 → 0.03とし、Countは固定します。変更後はSceneのPlayを終了して再びPlayし、同じ時点から観察します。Countの変更は既存粒子の数を変えないため、発生し直しが必要です。

Seedを固定した場合は、値と固定の有無を記録します。比較を始める前のカメラ位置も復元してから、採用したGraphとSceneを保存します。

条件を変えた確認 ​

homeが(0,3,0)、Spreadが0.5、Radiusが4、Blendが0.5の粒子について、二つの配置と補間後の位置を求めてください。Blendを0に戻すと、どの位置へ戻りますか。

考え方の確認

広げた配置は(0,1.5,0)、球殻上の配置は(0,4,0)、中間は(0,2.75,0)です。Blendを0へ戻すとSpreadを掛けた(0,1.5,0)へ戻ります。home自体は書き換えません。

全体の設定を確認する ​

場所この回の構成
SpawnSingle Burstが、Countで指定した数を発生させます。
Initialize各成分の乱数で位置を決めた後、homeへ保存します。寿命、大きさ、Alphaも設定します。
Updatehomeから二つの配置を計算し、Lerpの結果をSet Positionへ書き込みます。Update Positionによる速度の自動積分は無効にします。
Output小さな半透明の粒子として描画します。
Spaceと範囲シミュレーションはLocal空間を使います。Boundsは、元の箱形の範囲とRadiusで指定する球殻の両方を含むようにします。

Boundsが狭いと、粒子が画面に入る位置にあっても、システム全体が描画対象から外れる場合があります。手動のBoundsを使う場合には、Centerを原点、Sizeを(12, 12, 12)程度から確認してください。Radiusを大きくした場合には、Boundsも見直します。

チェックリスト
  • 粒子の重なりで変形の形が読めなくなっていないか確認できます。
  • CountとSizeを別々に変更して結果を比較できます。
  • GPUを使っても描画の負荷がなくなるわけではないことを説明できます。
  • 元の配置へ戻る変形と、必要な範囲を含むBoundsを確認できます。