UDN
Search public documentation:

DialogSystemKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 오디오 홈 > 대화 시스템

대화 시스템


오디오 스트리밍


언리얼 엔진의 오디오 시스템 은 오디오 콘텐츠 동시 스트리밍을 지원하지 않습니다만, 오디오가 들어있는 패키지를 스트림할 수는 있습니다. 언리얼 토너먼트 및 기어즈 오브 워 같은 빠른 액션 게임에 지체가 발생한다는 것은 있을 수 없는 일이며, 이 시점에서 FaceFX 애니메이션을 동기화한다는 것은 더욱 성가신 일이 되기에, 텍스처의 스트리밍에 되도록이면 많은 대역폭을 할애하기 위해 이런 방식이 선호됩니다. 이에 대한 대안으로서 Gears를 위한 특별한 대화 시스템이 만들어졌습니다.

Gears에는 또한 다수의 스크립트 되지 않은 대화가 있으므로, 이 접근 방식은 저희에게 투자에 대한 최대의 가치를 부여합니다.

Unscripted (스크립트 되지 않은) 대화


Gears 2의 대화 시스템은 스크립트 되지 않은 대화 시스템 또는 GUDS 이며, 이것은 Gears 1에서도 사용되었습니다.

이 시스템은 이벤트에 기반을 두는 것으로, Pawn들이 게임에 출현할 때, 예를 들어 적이 발견되었을 때 또는 팀중의 누가 쓰러졌을 때, 코멘트를 하도록 합니다. 해당 Pawn은 발생함직한 각각의 액션에 대해 재생할 대사를 선택할 수 있습니다 – 각 액션에 대해 선택할 수 있는 대사의 수에는 제한이 없으며, 전혀 선택하지 않아도 됩니다. 현재 Pawn이 말할 수 있는 대사들은 모두 게임이 각 Pawn(Pn)에 대해 완전히 맵을 로드하게 될 GUDBank에 있습니다. 이것은 어떤 일정 시간에 다량의 사운드가 생기는 결과로 이어집니다.

시스템의 메모리 부하를 줄이기 위해, 각 플레이어에 대한 GUDBank는 여러 개의 작은 뱅크로 나뉘어집니다. 어떤 특정 시간에든 pawn에게는 적어도 하나의 뱅크가 로드되어 있을 것이 보장됩니다. 이에 따라 그들은 어떤 설정 상황에도 응답할 수 있습니다.

이 과정은 콘텐츠 쿠킹 중에 이루어지므로, 콘텐츠 측면에서의 관리에는 부담이 없습니다. 이 시스템은 필요한 경우 게임이 쿠킹 과정을 제어하는 것을 허용하는, 게임 특정의 cooker helper(쿠커 도우미) 를 채택합니다. 쿠킹 파이프라인의 각 단계가 게임의 쿠커 도우미를 호출하여, 필요한 액션들을 수행하도록 합니다. 여기에는 쿡 되어야 할 패키지 목록의 생성, 각 개별 객체의 쿠킹, 도우미로 하여금 패키지를 로드하도록 하는(또는 GUDS 쿠킹의 경우 처럼 재빨리 하나를 새로 만들도록 하는) 함수, 그리고 쿠킹을 위해 패키지가 로드된 다음 그러나 어떠한 과정도 행해지기 전에 호출되는 함수 등이 포함됩니다.

GUDS 쿠킹이 시스템을 활용하는 방법은 다음과 같습니다:

  • 쿠커가 쿡 될 필요가 있다고 판단한 패키지의 목록을 생성합니다. 이 과정이 끝나면 쿠커는 쿠커 도우미를 호출하고, 이 도우미는 그 목록에 생성되어야 할 GUDBank들을 추가합니다. 이것들은 실제로 존재하지 않는 ‘가짜’ 패키지들입니다. 도우미는 단지 그 자신이 작성될 필요가 있다고 생각하는 패키지들의 이름을 삽입할 뿐입니다. 그동안에, 도우미는 소스 GUDBank들을 위에서 설명한 것처럼 여러 개의 작은 뱅크들로 나눕니다. 이 도우미는 또한 나중에 시스템에서 대화에 사용될 사운드 큐와 FaceFX 애니메이션의 목록을 생성합니다 (이 정보는 쿠커가 실행될 때마다 재생성하는 것을 피하기 위해 지속성 쿠커 데이터에 보존되게 됩니다). 또한 콘텐츠 패키지의 표가 '부모' GUDBank 클래스를 그것이 나뉘어 넣어질 GUDBank 패키지의 콜렉션으로 설정하는 목록에 넣어집니다.
  • 쿠커는 목록 내의 패키지들을 반복하면서 각 패키지를 로드하고 그 안의 객체들을 쿡합니다. 패키지를 로드할 때, 쿠커는 먼저 도우미를 호출하여 이로 하여금 패키지를 로드하도록 합니다. GUDS의 경우에는, 여기서 도우미가 패키지를 재빨리 작성하여 반환합니다. 이는 새 GUDBank를 만들고 그것을 적절한 대사로 채우는 일을 수반합니다. 또 FaceFX 애니메이션이 모두 Pawn에 뱅크가 설정되었을 때 그 Pawn에 적용될 새 AnimGroup에 삽입됩니다. 그 과정에서 나중에 사용되기 위한 GUD 패키지가 쿡 되고 있는지 아닌지를 나타내는 내부 플래그도 설정합니다. 주어진 패키지 파일에 대해 특별한 과정을 수행해야 할 필요가 없는 경우, 도우미는 NULL을 반환합니다. 그러면 쿠커는 보통 방법대로 패키지를 로드합니다. GUDS가 아닌 모든 패키지에 대해 이 과정이 행해집니다.
  • 패키지가 로드되고 나면, 도우미는 PostLoad 함수를 호출합니다. GUDS 시스템의 경우, 패키지가 GearGame이나 GearGameContent라면 도우미는 원래의 GUDBank들을 찾아내어 그것들의 콘텐츠를 지웁니다. 이는 대사들이 쿡 된 패키지 내로 당겨지는 것을 피하기 위해서입니다. (이 작업은 사실상의 GUDBank 객체가 쿠킹되는 동안에도 행해져야 하지만, 이는 쿠커 도우미의 PostLoad 함수에 대한 사용의 예를 보여줍니다).
  • 그 다음에 쿠커는 패키지 내의 각 객체들을 반복하면서 쿠킹합니다. 쿠커는 먼저 표준 쿠커가 그 객체를 계속해서 진행시켜야 할 것인지의 여부를 가리키는 Boolean 값을 반환하는, 도우미 함수 CookObject를 호출합니다. GUDS 도우미의 경우에서는, 객체가 참조된 목록에 있는 사운드 큐이고 패키지가 GUDS 패키지가 아니면, 그 사운드 큐를 =MarkedByCooker=로 설정하여 현재의 패키지 내로 쿡되는 것을 방지합니다. GUDS 패키지인 경우에는 익스포트를 강제하도록 설정되며, 또 필요한 경우에는 그것의 FaceFX 애니메이션 그룹의 이름이 수정됩니다. 객체가 FaceFX 자산이나 animset이고 GUDS 패키지가 아닌 경우에는, GUDS에 의해 사용된 참조 애니메이션이 모두 세트로부터 제거됩니다.

런타임에는 GUDS 매니저가 뱅크들의 로딩/언로딩을 처리합니다. pawn이 스폰되면 GUD 매니저에 등록됩니다. pawn이 GUDS 자산을 사용하는 경우, 매니저는 해당 콜렉션이 이미 로드되었는지 확인합니다. 아직 로드되지 않았으면, 매니저는 그 pawn에 해당되는 GUDBank 패키지 가운데 하나의 비동기 로드를 시작합니다. 로드된 패키지는그것을 사용하는 pawn들이 모두 사라졌을 때 뱅크 위에 머무는 것을 피하기 위해 참조로 계산되는, 알맞은 콜렉션 안에 넣어지게 됩니다. 응답이 반복되는 것을 줄이기 위해서 새로운 뱅크의 세트 내로 스트림해 들어가려는 요청이 이루어지는 경우가 많이 있습니다. 새 뱅크가 로드되면 이전의 것은 언로드됩니다.

이 특별한 시스템이 여러분의 게임에 사용할 수 있는 것이 아닐지라도, 이는 게임 특정의 필요에 따른 콘텐츠의 분할을 위한 모델을 제공할 것입니다.

이 시스템은 동적인 (스크립트 되지 않은) 대화를 위해 설계된 것이라는 점을 유념하십시오...

Scripted(스크립트된) 대화


이 방식은 확고하게 참조된(상황 특정의) 대화에는 도움이 되지 않을 것입니다. 그러나 대화를 간단히 훨씬 더 작은 일괄 작업으로 쪼개는, 수정된 GUDS 방식을 취할 수 있을 것입니다. 하나의 일괄 작업이 사용되는 동안에 매니저가 다음에 요구되는 일괄 작업을 비동기적으로 로드합니다. 일괄 작업이 완료되면, 이것은 언로드되어 주어진 시간에 메모리 내 대사의 양을 줄입니다. 이 경우에는 일괄 작업 크기의 균형을 맞추어 최소한의 메모리 부담을 보장하되 재생에 지장이 없게 하는 것이 열쇠가 될 것입니다.