커뮤니티 Q&A

Audiokinetic의 커뮤니티 Q&A 포럼에 오신 것을 환영합니다. 이 포럼은 Wwise와 Strata 사용자들이 서로 도움을 주는 곳입니다. Audiokinetic의 직접적인 도움을 얻으려면 지원 티켓 페이지를 사용하세요. 버그를 보고하려면 Audiokinetic 런처에서 Bug Report 옵션을 사용하세요. (Q&A 포럼에 제출된 버그 보고는 거절됩니다. 전용 Bug Report 시스템을 사용하면 보고 내용이 담당자에게 정확히 전달되어 문제 해결 가능성이 크게 높아집니다.)<segment 6493>

빠르고 정확한 답변을 얻으려면 질문을 올릴 때 다음 팁을 참고하세요.

  • 구체적인 내용을 적어주세요: 무엇을 하려는지, 혹은 어떤 특정 문제에 부딪혔는지 설명하세요.
  • 핵심 정보를 포함하세요: Wwise와 게임 엔진 버전, 운영체제 등 관련 정보를 함께 제공하세요.
  • 시도한 방법들을 알려주세요: 문제 해결을 위해 이미 어떤 단계를 시도해봤는지 설명해주세요.
  • 객관적인 사실에 초점을 맞추세요: 문제의 기술적 사실을 중심으로 설명하세요. 문제에 집중할수록 다른 사람들이 더 빠르게 해결책을 찾을 수 있습니다.

0 투표

Hello,
I would like to raise two related issues with the current occlusion API in the Wwise Unreal Engine integration, and propose a possible improvement.

 

1) Player Pawn is always ignored for occlusion

In the current implementation, the Player Pawn Actor is always ignored when calculating occlusion.
This becomes a problem when parts of the player actor should actually occlude sound.

A common example is a VR game where the player has objects attached to their body (umbrella, shield, large accessories, etc.) that should occlude sounds realistically.
At the moment, this is not possible because the Player Pawn is unconditionally ignored by the occlusion trace.

 

2) No way to define custom ignore actors per sound source

There is also no way to define custom actors to ignore for occlusion.

A simple example is a large door:

  • The door emits sound while opening and closing
  • The door should occlude sounds coming from the other side
  • But the door should not occlude its own sound


Since the sound source is inside the door’s own collision volume, the door ends up occluding itself, which produces incorrect results.

 

Technical details

In the Wwise Unreal Engine plugin source code, inside AkObstructionAndOcclusionService.cpp, we can find the following:

void AkObstructionAndOcclusionService::CalculateObstructionAndOcclusionValues(const UAkComponentSet& in_Listeners, const FVector& SourcePosition, const AActor* Actor, AkRoomID RoomID, ECollisionChannel in_collisionChannel, bool bAsync /* = true */)

{

    auto CurrentWorld = Actor->GetWorld();

    if (!CurrentWorld)

        return;


 

    static const FName NAME_SoundOcclusion = TEXT("SoundOcclusion");

    FCollisionQueryParams CollisionParams(NAME_SoundOcclusion, true, Actor);

    auto PlayerController = GEngine->GetFirstLocalPlayerController(CurrentWorld);

    if (PlayerController)

        CollisionParams.AddIgnoredActor(PlayerController->GetPawn());


 

    // Rest of the function...

}

 

This is the function used to calculate occlusion values with ray traces.
As we can see, AddIgnoredActor is called with the Player Pawn Actor to set up the collision parameters. and there is no way to extend or override the ignore list.


The function AkObstructionAndOcclusionService::CalculateObstructionAndOcclusionValues() is called by

AkObstructionAndOcclusionService::UpdateObstructionAndOcclusion(), which is in turn called directly by

AkComponent::UpdateObstructionAndOcclusion().

 

Proposed improvement

 

It would be extremely useful to expose custom occlusion ignore actors, for example by adding parameters such as:
bool bIgnorePlayerPawnActor and const TArray<const AActor*>& InIgnoreActors

 

This would allow:

  • Choosing whether the Player Pawn Actor should be ignored or not
  • Explicitly defining which actors are ignored during occlusion traces
  • Solving many practical cases without forking the plugin

Ideally:

  • The ignore list could be defined per AkComponent
  • The default behavior (ignoring the Player Pawn) could be configurable in the Wwise Unreal integration settings

We currently use a fork of the Wwise Unreal plugin to add this functionality, but this is not ideal for team workflows or long-term maintenance.

 

We hope you will consider this request, as it would significantly improve flexibility and control over occlusion behavior in Unreal Engine projects using Wwise.

Best regards,

Feature Requests Xavier Loux (170 포인트) 로 부터

Please sign-in or register to answer this question.

...