버전
게임의 제한된 자원이나 게임 기획의 한계를 처리하기 위해서는 반드시 게임의 어느 시점에서 재생되는 오브젝트를 최적화해야 합니다. 프로젝트에서 동시에 재생되는 다양한 오브젝트를 관리하는 방법은 이렇습니다.
한 개 이상의 Actor-Mixer Hierarchy 또는 Interactive Music Hierarchy 오브젝트와 하위 오브젝트에 대해 게임 오브젝트마다 또는 전역적(global)으로 재생될 수 있는 인스턴스의 개수를 제한합니다.
버스를 통과할 수 있는 인스턴스의 전반적인 개수를 제한합니다.
전체 게임에서 인스턴스의 전반적인 개수를 제한합니다.
제한에 도달하면 Wwise는 오브젝트의 제한에 도달했을 때 적용하도록 선택한 작동 방식에 따라 우선 순위 설정을 사용하여 제거할 오브젝트를 선택합니다. 오브젝트가 동일한 우선 순위를 가질 경우, 재생 중인 가장 새롭거나 가장 오래된 인스턴스를 제거하도록 선택할 수 있습니다.
Actor-Mixer나 Interactive Music 계층에서 재생 제한을 설정할 경우 전역적으로 또는 게임 오브젝트마다 재생될 수 있는 동일한 구조 내에서의 인스턴스 개수를 제어하게 됩니다. 하위 오브젝트가 상위 계층에서 설정한 재생 제한을 무시할 경우 이 오브젝트는 더 이상 제한 계층 구조에 속하지 않게 됩니다. 대신 재생할 수 있는 인스턴스의 전체 개수는 총합이 됩니다. 다시 말해서, 예를 들어 제한이 20으로 설정된 상위 오브젝트의 제한이 10이며 Ignore parent가 설정된 하위 오브젝트가 있을 경우 재생 가능한 인스턴스의 총 합은 30이 됩니다. 하지만 하위 계층이 Ignore parent로 설정되지 않은 경우 재생 가능한 전체 인스턴스 개수는 상위 계층과 동일하게 20입니다. 아래 그림에서 볼 수 있듯이 재생 제한은 상위 오브젝트를 무시하는가의 여부와 상관 없이 하위 오브젝트에 지정될 수 있습니다. 이렇게 함으로써 특정 오브젝트와 이에 속한 모든 하위 오브젝트의 재생 가능한 최대 인스턴스의 개수를 자세하게 조정할 수 있습니다.
Master-Mixer 계층에서 Playback Limit을 설정할 경우 어떤 한 시점에 통과할 수 있는 사운드, 음악, 모션 인스턴스의 개수를 지정합니다. 각 오브젝트의 우선 순위가 이미 Actor-Mixer나 Interactive Music 계층에서 지정되었을 것이기 때문에 버스에는 재생 우선 순위 설정이 따로 없습니다.
프로젝트/게임 차원에서 Playback Limit을 설정할 경우에는 어떤 한 시점에서 활성화될 수 있는 인스턴스의 개수를 지정합니다. 각 사운드는 Advanced Settings에서 설정한 자체 Virtual Voice 작동 방식을 사용하게 됩니다.
Playback Limit을 정의하는 방법:
Property Editor에 오브젝트를 띄웁니다.
Switch to the Advanced category.
In the Playback Limit group, select the Limit sound instances to option.
Playback Limit 옵션이 활성화됩니다.
해당 텍스트 상자에서 각 게임 오브젝트당 동시에 재생될 수 있는 인스턴스의 최대 개수를 입력합니다.
Playback Limit의 범위를 정의하려면 다음 옵션 중 한 가지를 선택하세요.
Global: 재생 제한을 전역적으로 적용합니다.
Per game object: 게임 오브젝트마다 재생 제한을 적용합니다.
참고 | |
---|---|
버스의 재생 재한은 항상 전역적이기 때문에 이 옵션은 버스에서 사용할 수 없습니다. |
Playback Limit에 도달했을 때 적용할 상황을 결정하려면 다음 옵션 중 한 가지를 선택하세요.
Kill voice: 우선 순위가 가장 낮은 인스턴스부터 재생을 멈춥니다.
Use virtual settings: 사운드에 정의된 가상 보이스 작동 방식을 적용합니다. 사운드의 가상 보이스 작동 방식에는 Continue to play, Kill voice, Send to virtual voice, Kill if finite else virtual 이 네 가지가 있습니다.
Playback Limit에 도달했을 때 우선 순위가 가장 낮은 오브젝트가 여러 개일 경우 When priority is equal 목록에서 적용할 기준을 선택하세요.
Discard oldest instance: 우선 순위가 가장 낮은 인스턴스 중에서 가장 오래된 인스턴스를 멈춥니다.
Discard newest instance: 우선 순위가 가장 낮은 인스턴스 중에서 가장 새로운 인스턴스를 멈춥니다.
Project/Game 제한은 Wwise의 Project Settings에서 각 플랫폼별로 변경할 수 있습니다. 또한 사운드 엔진이 적절히 초기화된 후 Wwise SDK API를 사용하여 게임 내에서 변경을 할 수도 있습니다.
보이스 제한 시스템을 사용하여 작업할 때에는 다음 사항을 알아두는 것이 좋습니다.
가상 보이스는 유효한 보이스로 간주되지 않습니다.
가상 보이스 설정이 Continue to play로 설정된 사운드가 있을 경우 재생 제한이 초과될 수 있습니다.
가상 보이스로 전송된 사운드는 보통 Play from beginning(처음부터 재생), Play from elapsed time(경과한 시간에서부터 재생)로 설정하거나 또는 물리적 보이스로 돌아갈 경우 (더 이상 가상이 아닐 경우) Resume(재개)으로 설정할 수 있습니다. 하지만 Kill if finite else virtual(무한 반복이 아닐 경우 죽이고 무한 반복이라면 가상으로) 옵션으로 설정된 경우 가상 보이스로 갔던 사운드가 다시 물리적 보이스로 돌아가면 항상 Play from elapsed time으로 설정됩니다.
예를 들어 다음과 같이 재생 제한을 설정했다고 가정합시다.
버스의 동시 재생 가능 수 4개.
버스의 When limit is reached(제한에 도달하면) 작동 방식 Use virtual voice settings(가상 보이스 설정 사용)로 설정.
Volume Threshold는 -60dB.
현재 프레임에서 이 버스를 통해 8개의 보이스가 재생되고 있습니다.
사운드 이름 |
Priority |
Volume |
가상 작동 방식 |
---|---|---|---|
Sound_1 |
100 |
0 dB |
Go Virtual |
Sound_2 |
90 |
-90 dB |
Go Virtual |
Sound_3 |
80 |
-90 dB |
Continue to play(계속 재생) |
Sound_4 |
70 |
0 dB |
Go Virtual |
Sound_5 |
60 |
0 dB |
Kill voice |
Sound_6 |
50 |
0 dB |
Kill voice |
Sound_7 |
40 |
0 dB |
Go Virtual |
Sound_8 |
30 |
0 dB |
Continue to play(계속 재생) |
다음은 결과표입니다.
사운드 이름 |
결과 |
이유 |
---|---|---|
Sound_1 |
재생됨 (1/4) |
우선 순위가 가장 높으며 볼륨 한계점을 초과함. |
Sound_2 |
가상이 됨. |
볼륨 한계점 미만. |
Sound_3 |
재생됨 (2/4) |
볼륨 한계점 미만에서도 계속해서 재생하게 했음. |
Sound_4 |
재생됨 (3/4) |
- |
Sound_5 |
재생됨 (4/4) | - |
Sound_6 |
죽음 |
제한 초과. 우선 순위가 더 높은 4개의 사운드가 이미 재생중임. |
Sound_7 |
가상이 됨. |
제한 초과. 우선 순위가 더 높은 4개의 사운드가 이미 재생중임. |
Sound_8 |
재생됨 (5/4)* |
*재생 제한을 초과하더라도 계속해서 재생됨. 이 상황은 사운드가 가상이 되지도 않고 죽지도 않으며 우선 순위가 보다 높은 4개의 오브젝트를 대신하지도 않는 특수한 상황임. |
FAQ
Q: 재생 제한이 제대로 작동하지 않는 것 같아요. 왜죠?
A: 사운드의 가상 작동 방식이 Continue to play로 설정되었는지 확인하세요. 호환성 때문에 이 옵션이 기본으로 설정되어 있습니다. 이렇게 설정된 모든 사운드는 재생 제한을 넘어도 제거되거나 가상화되지 않습니다 (재생 제한 초과 작동 방식이 명시적으로 보이스를 죽이도록 설정된 경우 제외). 재생 제한을 초과하여 Use virtual voice settings를 사용하기 시작하면, CPU 절약을 위해 반드시 '제거 가능'하거나 '가상화 가능'한 모든 사운드에 이 설정을 적용해야 합니다.
또한 재생 제한은 선택한 오브젝트의 계층 구조에 속한 사운드 오브젝트에만 적용된다는 점을 주의하세요. 하위 오브젝트에 Ignore Parent 옵션이 활성화된 경우 이 오브젝트는 더 이상 제한 계층 구조에 속하지 않게 되어 상위 계층의 재생 제한에 의해 제어되지 않습니다.
Q: 재생 제한은 대부분 잘 작동하는 것 같은데, 가끔씩 프로파일러가 Continue to play로 설정된 사운드가 없음에도 불구하고 지정된 제한값을 초과하는 값을 보여주네요.
A: 사운드가 가상으로 전송될 때는 몇 밀리초(오디오 프레임 하나) 동안 활성 상태를 유지하며 페이드아웃을 하고 틱 하는 소리(클릭)가 나는 것을 방지합니다. 예를 들어 제한이 1로 설정되고 한 사운드가 이미 재생 중일 때 우선 순위가 보다 높은 사운드가 나타날 경우, 처음 사운드가 가상 보이스로 가기 위해 페이드아웃하는 동안은 일시적으로 활성화된 보이스가 2개가 됩니다.
Q: 제한값을 초과할 때 왜 가상 보이스로 전송되도록 기본 설정되지 않았나요? 왜 모든 사운드가 계속해서 재생되도록 기본 설정된거죠?
A: 몇몇 음원 코덱은 가상 모드에 있을 때 완벽하게 정확하지가 않습니다. 이런 음원이 가상 보이스로 있다가 Play from elapsed time 옵션을 사용해 물리적 보이스로 돌아가려면 빠른이동 테이블(seek table)이 음원에 추가되어야 합니다. 이러한 이유 때문에 기본적으로 모든 것이 정상적으로 실행되도록 하기 위해서 가상 보이스로 보내는 것을 기본으로 설정하지 않았습니다. 예를 들어 Vorbis에 Play from elapsed time옵션과 함께 가상 보이스로 보내기를 설정했다면 빠른이동 테이블이 필요합니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요