バージョン

menu_open
Wwise Unreal Integration Documentation
Spatial Audioのブループリントコンポーネント

これまで、ビルド済みのアクターを使ったり、個別のアクターインスタンスにコンポーネントを追加したりして、全てのものをレベルに直接つくり込んできました。スペーシャルオーディオの各種コンポーネントを使ってブループリントアクターをつくり、レベルのいたるところで複製することも可能です。このセクションでは、 Wwiseプロジェクトの準備 セクションのストラクチャの複製を、ブループリントクラスを使ってビルドし、ワールドのどこにでも簡単に追加したりスポーンしたりできるようにします。

注記: このチュートリアルを始める前に、 Spatial Audioチュートリアルの事前準備 を完了させておいてください。

ブループリントクラスを設定する

AkLateReverbComponentAkRoomComponent は、あるゲームオブジェクトのポジションが親の PrimitiveComponent の中にあるのかどうかを確認するときに、コンテインメントテストを行います。確認にはSimpleコリジョンを使います。そこで、Simpleコリジョンのある親 PrimitiveComponent を使ってください。例えば、Boxコリジョン、Sphereコリジョン、Capsuleコリジョンなどのコンポーネントが使えます。 PrimitiveComponent にSimpleコリジョンがなければ、Component boundsをコンテインメントテストに使うだけですが、正確性は劣るかもしれません。

It is also possible to add simple collision to a mesh asset in Unreal (see Setting Up Collisions With Static Meshes). However, for complex meshes, such as those with doorways and openings, it is sometimes necessary to 'use complex collision as simple' in the collision settings for the mesh (see Simple versus Complex Collision). 例えば、キャラクターがドアを通過してルームに入れても、そのルームの壁には衝突してしまうようにするには、この設定が必要かもしれません。この設定を使うと、Simpleコリジョンは無視され、メッシュの三角メッシュ全体が使われるので、 AkLateReverbComponentAkRoomComponent のコンテインメントテストは、失敗します。 AkLateReverbComponentAkRoomComponent が使うSimpleコリジョンテストは、三角メッシュに対応していません。そこでブループリントクラスの推奨設定として、 AkLateReverbComponent コンポーネントや、 AkRoomComponent を使うときは、Simpleコリジョンコンポーネントを親にします。Simpleコリジョンコンポーネントとは、Box、Sphere、Capsuleなどです。具体的なメッシュを部屋や建物に設定した場合は、Simpleコリジョンコンポーネントをこのメッシュの子コンポーネントとして追加できます。

注記:
  • It is possible to combine complex collision with simple collision by using two versions of the mesh. See Combining Simple and Complex Collision for an explanation on how this can be achieved.
  • We will use assets from the Unreal Demo Game available from the Wwise Launcher. To use these assets in your project, download the Unreal Demo Game and locate the wanted assets in the explorer under $<YourWwiseProjectsFolder>/WwiseDemoGame/Content. Then copy and paste the desired assets to the Content folder of your working project.
  1. コンテンツブラウザを右クリックし、 Blueprint Class を選択します。
  2. ベースクラスに Actor を選択し、この新しいクラスの名前を 'SpatialAudioBP' とします。
  3. SpatialAudioBP をダブルクリックしてこのクラスを開き、Viewportタブをクリックします。
  4. ルートコンポーネントが選択されていることを確認し、 Add Component > Static Mesh をクリックします。
  5. 新しいスタティックメッシュコンポーネントをクリックし、このメッシュをDetailsパネルで選択します。

    • この例では、 Wwiseプロジェクトの準備 セクションで使ったSpatialAudioDemoMeshを選択しました。
    • SpatialAudioDemoMeshを使う場合は、必ずMaterialsセクションで SpatialAudioDemoMeshMaterial を選択します。
    スタティックメッシュコンポーネントのMeshとMaterialsを設定する
    注記: ポータルに対するルームの自動アサインは、凸型メッシュでしか機能しません。Concave meshes (for example, L-shaped rooms) do not produce accurate portal room intersection.
  6. Add a Box Collision component for each of the individual rooms and doorways in the mesh. Name them BoxRoomLarge, BoxRoomSmall, BoxPortalInner, and BoxPortalOuter.

Boxコリジョンコンポーネントを移動する

この時点では、全てのBoxコリジョンコンポーネントが同じ場所に重ねて置いてあります。これから、ポジションを変え、拡大縮小し、回転することで、ルームやドアに揃えていきます。一番簡単な方法は、正投影のビューを使うことです。(以下の手順はSpatialAudioDemoMeshのためですが、ほかのメッシュでも同じような手順が使えます。)

注記: チュートリアルでルームやポータルと、メッシュの位置を揃えるときに、ぴったりと揃わなかったり中心が合わなかったりしても、構いません。だいたい同じ場所をカバーするようにします。本物の環境を設計する際は、DetailsパネルのTransformセクションで、正確な数値を入力できます。
  1. Viewportタブで Perspective をクリックし、ビューを Top に変えます。

    • 上からシーンを見下ろしたビューとなり、ワイヤーフレームのレンダリングが表示されます。
    Orthographic Top View
  2. BoxRoomLarge を選択し、Y軸に沿って下に動かし、メッシュの大きいルームの中央にもってきます。
  3. BoxRoomLarge の縮尺をXY軸に沿って調整し、大きさが大きいルームの寸法に合うようにします。(スケール機能に切り替えるには、Rを押すか、Viewportタブのスケールウィジェットを選択します。)

    Position and Scale Large Room on X and Y Axes
  4. BoxRoomSmall を選択し、XY軸に沿って縮尺を調整し、大きさが、小さいルームの寸法に合うようにします。

    Position and Scale Rooms on X and Y Axes
  5. BoxPortalInner を選択し、ワイヤーフレームにズームインし、メッシュに内側の戸口の範囲が見えるようにします。

    ワイヤーフレームメッシュで、戸口の両端を確認する
  6. BoxPortalInner を戸口の中央まで動かし、X軸に沿って縮尺を調整して戸口の両端をカバーするようにします。

    Position and Scale Inner Portal Box to Cover the Doorway
  7. BoxPortalOuter を選択し、ローカルのY方向が戸口の外を指すように回転させます。

    注記: 理由は、ポータルに対する「フロント」ルームと「バック」ルームが、ポータルのY方向と交差する一番近いルームを検知することで自動的に決まるからです。BoxPortalOuterの例では、「バック」側(ローカル座標空間において)が、メッシュの小ルームに接続し、「フロント」側は、接続するルームがありません。
  8. BoxPortalOuter をZ軸を中心に90度、回転させます。これは、DetailsパネルのTransformセクションにある Rotation の、Z軸のテキストボックスに'90'と入力すればできます。

    ローカルY軸がドアの外を指すように、Outer Portal Boxを回転させる
  9. BoxPortalOuter が外側のドアの上にくるように動かし、戸口の両端をカバーするように縮尺を調整します。
  10. Topビューで、下図のように全てのルームやポータルが、メッシュと揃っていることを確認します:

    Rooms and Portals Correctly Aligned in Top View
  11. 次に、BoxコリジョンコンポーネントをZ軸に沿って動かし、ポジションと縮尺を調整します。Viewportタブの Top をクリックし、ビューを Back に変更します。
  12. BoxRoomLargeBoxRoomSmall を選択し、どちらもルームの大きさに合うように、Z軸方向にスケールを調整します。

    Scale Room Boxes on Z-Axis
  13. BoxPortalOuterBoxPortalInner を選択し、それぞれの戸口の中まで下に動かし、Z軸方向に縮尺を調整し、それぞれのドアの大きさに合わせます。

    Position and Scale Portal Boxes on Z-Axis

ルームとポータルを設定する

次に、AkRoomコンポーネントをルームに追加し、AkPortalコンポーネントをポータルに追加します。

  1. Boxコリジョンコンポーネントを1つ1つ選択して Add Component を選択します。
  2. それぞれのBoxコリジョンコンポーネントに対し、適宜、ルームコンポーネントまたはポータルコンポーネントを作成し、親と似た名前を付けます。以下のような結果になるはずです:

    Add AkRoom Components to the Room Boxes and AkPortal Components to the Portal Boxes

    注記: 各コンポーネントを正しい親に追加するように、注意してください。例えば、大きいルームにAkRoomLargeを追加するときは、必ず BoxRoomLarge が選択されていることを確認してから、 Add Component をクリックしてください。

    AkRoomComponentやAkPortalComponentは、どのようなPrimitiveコンポーネントにも追加できる汎用コンポーネントです。詳細は、 AkRoomComponent や、 AkPortalComponent を参照してください。

  3. To confirm that the portals have valid placement, select the Visualize Rooms and Portals option in the Wwise User Settings.

    Visualize Rooms and Portals option in the Wwise User Settings
  4. 接続しているルームとポータルの間に、線が表示されます。ポータルの配置が無効であれば、赤色で表示されます。

    Portal Room Connections Visualized in the Viewport
    注記: ポータルに接続するルームがなかったり、同じルームがポータルの内外両側に接続していたりすると、このポータルの設定は無効です。詳細は AkPortalComponent を参照してください。
  5. Clear Visualize Rooms and Portals in the Wwise User Settings.

ジオメトリとレイトリバーブを追加する

最後に、ブループリントクラスにAkGeometryとAkLateReverbの2つのコンポーネントを追加します。

  1. スタティックメッシュコンポーネントに、AkGeometryコンポーネントを追加します。
  2. Select the AkGeometry component and in the Details panel, under Geometry, set the Mesh Type to Static Mesh.
  3. BoxコリジョンコンポーネントのBoxRoomLargeに、AkLateReverbコンポーネントを追加します。

    AkGeometry and AkLateReverb Added to the Blueprint Class
  4. Select the AkLateReverb component.
  5. In the Details panel, set the Aux Bus to LargeRoom.

設定内容を確認する

これで、ブループリントクラスを使う準備が整いました。このクラスのインスタンスを、ワールドにドラッグして入れることができます。

  1. SpatialAudioBP のインスタンスをコンテンツブラウザからスペーシャルオーディオのデモマップにドラッグします。
  2. すでにある建物の横に置きます。

    An instance of the Blueprint Class Added to the World
  3. Wwiseにリモート接続してEditorでプレイします。
  4. マウスをクリックし、屋外サウンドを再生します。
  5. WwiseのGame Object Profilerレイアウトで、新しいブループリントクラスのジオメトリが正しく登録されていて、このジオメトリでレイ(ray)が正しく反射されていることを確認します。
  6. レイが、新しいブループリントのストラクチャの中で、ポータルを通り抜けていることを確認します。

    Spatial Audio Paths Correctly Interacting with the New Blueprint Class Instance
  7. レイトリバーブコンポーネントをテストするには、このSpatialAudioBPインスタンスの中の大きいルームに、サウンドを追加して配置する必要があります。ワールドにすでにある Play_Outside というAkAmbientSoundアクターを右クリックし、Duplicate(複製)します。
  8. 複製の名前を 'Play_LargeRoom_BP' に変更します。(別の方法として、 Play_LargeRoom_BP をドラッグして Button_Outside の上にもっていけば、World Outliner階層にあるButton_OutsideのPlay_LargeRoom_BPを分離できます。)
  9. Move Play_LargeRoom_BP inside the large room of the SpatialAudioBP instance.
  10. Open the Level Blueprint and add logic to play the Play_LargeRoom_BP sound when the B key is pressed (see Wwiseプロジェクトの準備).

    Logic in the Level Blueprint to Play the New Sound Using the B Key
  11. Level Blueprintをコンパイルして保存します。
  12. Play the level in the editor.
  13. Press B to play the new sound.
  14. SpatialAudioBPの建物の大きいルームに、歩いて入ります。You can hear the reverb applied to the sound.

Combining Simple and Complex Collision

This section shows how simple collision and complex collision can be combined for the same mesh, such that Spatial Audio containment tests are performed using the simple collision, and Unreal queries make use of the complex collision.

注記: This section is based on the 'SpatialAudioTutorialMap' and the assets found in the ComplexRoomDemo directory in the WwiseDemoGame project, which is available from the Audiokinetic Launcher. The pre-made mesh assets and a custom Blueprint class are used to combine simple collision and complex collision.

For complex meshes, such as those with doorways and openings, it is sometimes necessary to 'use complex collision as simple' in the collision settings for the mesh (refer to Simple versus Complex Collision). 例えば、キャラクターがドアを通過してルームに入れても、そのルームの壁には衝突してしまうようにするには、この設定が必要かもしれません。When this setting is used, the containment tests for AkLateReverbComponent and AkRoomComponent fail because the simple collision is ignored and the mesh's full trimesh is used. AkLateReverbComponentAkRoomComponent が使うSimpleコリジョンテストは、三角メッシュに対応していません。

One solution to this problem is to create two duplicates of the same mesh asset, using simple collision for one, and complex collision for the other. In the SpatialAudioTutorialMap, there is a complex room structure that demonstrates this technique.

To begin, test the complex room structure by playing in editor and walking around the building:

  1. Open the SpatialAudioTutorialMap in Unreal.
  2. Click Play in Editor.
  3. Press C to trigger the sound in the non-box-shaped building.
    The Non-Box-Shaped Room in the SpatialAudioTutorialMap
    Walk around the exterior of the building. The sound is occluded.

The rest of this tutorial demonstrates how the building structure is configured to handle simple collision for Wwise Spatial Audio containment tests, as well as complex collision for Unreal physics containment tests.

  1. In the context browser, browse to WwiseAssets/SpatialAudioDemo/ComplexRoomDemo.

    The ComplexRoomDemo Assets in the SpatialAudioTutorialMap

    This folder contains two Static Mesh assets: Building_Complex and Building_Simple.

  2. Open each of these assets and scroll to the collision settings in the Details Panel.

    Notice that they have different values for their respective Collision Complexity properties.

The Building_Complex mesh asset
The Building_Simple mesh asset

Building_Complex has Collision Complexity set to 'Use Complex Collision As Simple' which means Unreal will not generate any simplified geometry for this mesh, and will instead use the entire trimesh. This is what allows the character to walk through the doorway opening. Building_Simple has Collision Complexity set to 'Use Simple Collision As Complex' which means Unreal will generate simplified geometry and ignore the trimesh. This is what allows Spatial Audio to perform containment tests for room containment.

注記: It is possible to set Collision Complexity to 'Simple And Complex'. However, this causes Unreal to use the simplified geometry for collision queries, which means the character cannot enter through the doorway opening. Instead, two identical meshes can be used - one with complex geometry and one with simple geometry.

The next step is to combine both meshes inside a custom Blueprint class.

  • Open the BuildingBP Blueprint.

This Blueprint uses two Static Mesh Components that are positioned right on top of one another.

Static Mesh Components in the BuildingBP Blueprint
For the StaticMesh_Complex component, the Building_Complex mesh is used
For the StaticMesh_Simple component, the Building_Simple mesh is used
StaticMesh_Simple Rendering Settings

For the StaticMesh_Simple component, 'Visible' is disabled and 'Hidden in Game' is enabled in the Rendering section. This is because this mesh is only used for its simplified geometry, so that containment tests can be made for Spatial Audio.

StaticMesh_Simple Collision Presets Settings

Also for the StaticMesh_Simple component, the Collision Presets property is set to 'Trigger'. The simplified geometry creates a barrier at the doorway opening. Using the 'Trigger' collision preset ensures the character and other game objects can freely move through the simplified geometry.

The StaticMesh_Simple Component has an AkRoom component and an AkLateReverb Component attached. This way, the simple collision of the Building_Simple mesh is used for room containment tests.

To allow for sounds to reflect and diffract on the BuildingBP's mesh, an AkGeometry Component needs to be added to one of the Static Mesh Components. In this solution, because we are also using Reverb Parameter Estimation, it is best to add it to the StaticMesh_Simple component. The AkLateReverb Component uses the Acoustic Textures of its sibling AkGeometry Component to calculate HF Damping. Setting the AkGeometry Component to Static Mesh sends the full complex geometry to Wwise Spatial Audio instead of its simple collision mesh.

Finally, a Box Collision Component with an AkPortal Component attached is used to add an acoustic portal to the doorway.

Portal in the BuildingBP Blueprint

A Point Light is also added to make the interior of the building visible.

注記:
  • When sending geometry to Wwise, there is a limitation that each edge can have no more than two triangles connected. Remember this when designing meshes to use with Spatial Audio.
  • When using the Game Object Profiler in Wwise, Room Extents will always be visualized as green cuboids, regardless of the geometry assigned to the room.
  • Adding simple collision to meshes in Unreal will only work correctly when the mesh is convex. For more complex mesh structures, it is best to try to approximate the mesh using simple collision geometry. Simple collision primitives can be added to the mesh from the Collision menu in the Static Mesh editor.
    Adding Collision Primitives to a Mesh Asset
    Refer to Setting Up Collisions With Static Meshes for further information.

このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう