同人サークルA-Nestの技術メモです。

翻訳元ページ

仕組み

Boing Kitには、オブジェクトにバウンス効果を追加するための様々なワークフローが用意されています。各ワークフローでは、オブジェクトに特定のコンポーネントを追加する必要があります(以下で説明します)。
Unity 2018.1以降のバージョンでは、Boing KitはUnityのジョブシステムを利用して、複数のCPUコアにまたがる並列処理を利用してパフォーマンスを向上させています(特定のコンポーネントについて)。
コンポーネントのパラメータにマウスオーバーすると、ツールチップが表示され、より詳細な説明が表示されます。

ワークフロー

Boing Behavior

オブジェクトのトランスフォーム(位置や回転)の変化に反応してバウンス効果を適用するために、オブジェクトに BoingBehavior コンポーネントを追加します。通常通りオブジェクトのトランスフォームを変更し、BoeingBehaviorコンポーネントを追加すると、オブジェクトのトランスフォームに弾む効果が適用されます。

Boing Effector & Boing Reactor

BoingEffectorとBoingReactorコンポーネントは、オブジェクト間の弾むようなインタラクションを作成するために使用されます。BoingEffectorコンポーネントを、他のオブジェクトをバウンシーな方法で"プッシュ"するオブジェクトに追加し、BoingReactorコンポーネントを、エフェクタによって"プッシュ"されるオブジェクトに追加します。

Boing Reactor Field

BoingReactorFieldコンポーネントは、通常のリアクターのようにエフェクターに反応するセルのグリッドを追加します。リアクターフィールドは、大量のリアクターが必要な状況を最適化するためのツールです。
各セルはエフェクターに反応し、サンプラーは各セルの結果を補間してオブジェクトに適用するために使用されます。リアクターフィールドがCPUまたはGPUハードウェアモードで動作しているかどうかに応じて、BoingReactorFieldCPUSamplerまたはBoingReactorFieldGPUSamplerを、リアクターフィールドからセルの結果を補間してエフェクターに反応するオブジェクトに追加します。

CPUサンプラーは、リアクターフィールドからの結果を反応するオブジェクトごとに一度だけ補間することで、オブジェクト全体の変換にバウンス効果を適用します。
一方、GPUサンプラーは、バーテックスシェーダを介して、各リアクタリングオブジェクトの各頂点にバウンシー効果を適用します。

GPUサンプラーを搭載したオブジェクトは、Boing Kitに対応した付属マテリアルも必要になります。Boing KitにはすでにUnityの標準シェーダーを改造したシェーダーが付属しており、Unityの標準レンダーパイプラインの下で動作します。

Boing Kitをカスタムシェーダーやスクリプト可能なレンダーパイプライン(LWRPやHDRPを含む)の下でシェーダーと同様に動作させるには、頂点シェーダーにBoingKit.cgincをインクルードし、リアクターフィールドからサンプルを得るためにApplyBoingReactorFieldPerVertexまたはApplyBoingReactorFieldPerObjectを呼び出します(実際にどのように行われているかは、Boing Kitに付属するカスタムシェーダーの例を参照してください)。

Boing Bones

BoingBonesコンポーネントは、ボーンや階層オブジェクトのトランスフォームにバウンシー効果を適用します。バウンス性のあるボーンは、ボーンチェーンを使用して指定します。各ボーンチェーンには、指定されたルートボーンから、子を持たないボーン、または除外フラグが立てられたボーンまでが含まれます。

各BoingBonesコンポーネントには、BoingBoneColliderコンポーネントのリストとUnityのコライダーのリストが格納されています。BoingBoneColliderコンポーネントは、Boeing Kitの軽量なコリダーの実装です。ユーザーは、各ボーンチェーンが衝突し、リストに含まれるBoingBoneColliderコンポーネントおよび/またはUnityのコライダーに反応するかどうかを決定することができます。

注意:技術的な制限のため、BoingBonesコンポーネントの効果は、1つのエディタタブでのみ適切に表示することができます。例えば、シーンビュータブとゲームビュータブの両方が表示されている場合、どちらか一方のタブでのみエフェクトが正しく表示されます。これはUnityエディタのみに影響し、ゲーム内カメラが複数ある場合は影響しません。メインカメラ以外に、オフスクリーンのレンダーターゲットにレンダリングするカメラがある場合は、エフェクトが正しくレンダリングされるはずです。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

編集にはIDが必要です