AI 기반의 상세한 3D 아바타와 대화하세요. LLM(대형 언어 모델), TTS(텍스트 음성 변환), Unity 게임 엔진 및 립싱크를 사용하여 캐릭터에 생기를 불어넣습니다.
영상에서 우리는 "마이클 조던은 누구인가?"라는 캐릭터에게 질문을 던지고 있습니다. 아바타는 잠시 후 질문에 '답변'합니다. 이전 메시지를 컨텍스트로 사용하여 전체 대화를 나눌 수 있습니다. 머리카락의 물리학과 깜박임에 주목하세요!
웹 브라우저에서 트리거된 원격 이벤트 쇼케이스입니다. 각 VFX를 선택한 후 해당 입자 시스템이 재생됩니다. 인기 있는 사용법은 누군가가 Twitch 등에서 $5를 기부할 때 불꽃놀이 입자 효과입니다. 비 VFX 중에 물방울이 캐릭터(머리카락 꼭대기)와 상호 작용할 때 튀거나 튀어오르는 것을 볼 수도 있습니다.
핵심 기능은 '말하는' 맞춤형 3D 모델입니다. 음성을 내고 Oculus의 립싱크 라이브러리를 사용하여 (설득력 있는) 인상을 줍니다. 기능 세트는 다음과 같습니다.
흐름은 특정 구현에 의존하지 않습니다. LLM, TTS 또는 적합한 3D 모델을 자유롭게 혼합하고 일치시키십시오(특정 모양 키 필요). 아시다시피 이 아키텍처는 우리에게 최고의 유연성을 제공합니다. 짐작할 수 있듯이 이전 문장은 절제된 표현입니다.
음성 인식이 없으며 프롬프트는 텍스트로만 제공됩니다. Whisper Fast를 사용하여 이 기능을 추가하는 것은 쉽지 않습니다. 자세한 내용은 아래를 참조하세요. TL;DR은 GET 또는 POST를
/prompt
엔드포인트로 보냅니다.
스트리밍 및 DeepSpeed와 함께 TTS를 사용하면 일반적으로 프롬프트 전송부터 첫 번째 사운드까지 4초 미만의 응답을 얻습니다. 그 대화는 실시간으로 느껴질 정도로 작습니다. 이 시점에서 병목 현상은 LLM입니다. 단일 GPU에서는 LLM과 TTS를 동시에 실행할 수 없습니다(시도해 보았습니다. tts.chunk_size
구성 옵션에 대한 FAQ를 확인하세요). 먼저 모든 텍스트 토큰을 생성한 다음 소리를 생성해야 합니다. TTS를 CPU로 오프로드하려고 시도했지만 이 역시 어려움을 겪습니다.
스트리밍 이란 생성된 텍스트를 더 작은 덩어리로 분할하는 것을 의미합니다. 청크 전환을 마스크하기 위한 작은 크로스페이드가 있습니다. 첫 번째 청크가 작다는 것은 첫 번째 소리를 내는 데 걸리는 시간이 빠르다는 것을 의미합니다. DeepSpeed 는 GPT 추론 속도를 높이는 Microsoft 라이브러리입니다. 스트리밍과 DeepSpeed는 모두 선택 사항이지만 권장됩니다.
서버가 시작된 후 첫 번째 질문은 서버가 AI 모델을 로드해야 하기 때문에 항상 가장 오래(~10초) 걸립니다. Unity 편집기에서 사용하면 가비지 수집 일시 중지가 거의 발생하지 않습니다(오디오에서 눈에 띄게 나타남). 하지만 실제로 프로덕션 빌드에서 GC 문제가 발생하면 놀랄 것입니다.
나는 재미있다고 말하고 싶습니다. Unity 렌더링과 AI 모두에 동일한 GPU를 사용할 때 몇 가지 문제가 발생할 것으로 예상했습니다. 저는 Android/iOS 앱이 Unity 비용을 별도의 기기에 부담할 수 있는 쉬운 대안이라는 것을 알고 있었습니다. 하지만 내 하드웨어에서는 필요하지 않습니다. 원활하게 작동한다는 것은 예상치 못한 일입니다. 불평하지 않을 거예요. 또한 만일을 대비해 Unity를 30FPS로 제한했습니다.
제어판으로 이동하면 각 응답 단계의 타이밍을 볼 수 있습니다. Unity의 경우 내장 프로파일러를 사용하세요.
INSTALL_AND_USAGE.md를 참조하세요. 또한 현재 기능을 사용/확장하는 방법에 대한 지침도 포함되어 있습니다.
아래 질문은 이 앱의 철학에 대한 일반적인 질문입니다. 보다 사용 지향적인 FAQ를 보려면 INSTALL_AND_USAGE.md를 참조하세요.
이 앱은 우리가 이미 상세한 3D 아바타를 렌더링하고 단일 소비자급 GPU에서 실시간으로 몇 개의 중립 넷을 실행할 수 있는 기술을 보유하고 있음을 보여줍니다. 사용자 정의가 가능하며 인터넷 연결이 필요하지 않습니다. 또한 모바일 장치에서의 렌더링 등을 용이하게 하기 위해 클라이언트-서버 아키텍처에서 작동할 수도 있습니다.
표준 Sintel 모델을 사용할 수도 있었습니다. 나는 할 수 있기 때문에 나만의 캐릭터를 만들었습니다. 정점 드래그, 텍스처 페인팅, 입 애니메이션화, 헤어 물리 조정부터 '말하는' 3D 아바타까지. 나 자신이 그렇게 말한다면 꽤 즐거운 오락이 될 것이다.
또한 안정적인 확산 생성 이미지에서 텍스처 재투영을 테스트하고 싶었습니다. 예를 들어 긍정적 프롬프트에 '대머리'를 추가하고 부정적인 프롬프트에 '머리카락'을 추가할 수 있습니다. 작업 흐름 속도가 크게 향상됩니다. 아쉽게도 재투영에는 반사광 하이라이트 등이 있어서 수동으로 제거해야 합니다.
저는 기본 모양 키가 이미 있는 Sintel을 기본 메시로 사용했습니다. 특히 입의 각 부분을 제어하려면 Blender 4.0 호환 드라이버를 추가하기만 하면 됩니다. 이로 인해 비짐 모양 키를 만드는 것이 쉬워졌습니다. 나는 과거에 이미 Sintel의 모델을 여러 번 사용해 본 적이 있었기 때문에 이 프로젝트에서는 당연한 일이었습니다.
추신. 나는 조작을 싫어합니다.
실시간으로 안정적인 확산을 통해 생성된 가상 캐릭터를 '말하는' 모습을 본 적이 있을 것입니다. 소리를 기반으로 매 프레임마다 입 영역이 재생성된 정적 이미지입니다. 불안정하다는 것을 알 수 있습니다. 매 프레임마다 치아를 확산시키면 지속적으로 이동하게 됩니다. 저는 안정적인 확산을 많이 사용해왔습니다. 나는 망가진 신체 부위(손!)를 본 적이 있습니다. 이빨이... 눈에 띄네요. 널리 사용되는 구현은 SadTalker입니다. Stable Diffusion 웹 UI 확장 기능도 있습니다.
대신 내 앱은 수년간 비디오 게임에 사용되어 온 지루하고 오래된 기술을 사용합니다. 수백 시간의 대화(Baldur's Gate 3, Cyberpunk 2077 등)가 있다면 모든 것을 손으로 애니메이션화할 수는 없습니다. JALI와 같은 시스템은 모든 주요 타이틀에 사용됩니다.
실시간 애니메이션 캐릭터를 원한다면 왜 AI만을 사용합니까? 세계 최대 규모의 엔터테인먼트 부문에서 사용되는 솔루션을 찾아보세요. 최소한 img2img의 기반으로 사용할 수 있습니다. 최근에는 매일 한계를 뛰어 넘는 VTuber도 있었습니다. 이런 것 중 상당수는 하츠네 미쿠 팬이 개발한 기술을 기반으로 합니다.
Neuro-sama는 인기 있는 가상 스트리머입니다. 비디오 게임을 플레이하고 제작자 Vedal과 대화하는 AI 기반 캐릭터입니다. 내 앱이 이에 대해 스택되는 방식은 다음과 같습니다.
이 앱에는 다른 사람이 만든 소스 코드/자산이 포함되어 있습니다. 이러한 각 인스턴스에는 라이선스를 설명하는 전용 README.md가 하위 폴더에 있습니다. 예를 들어 저는 자체 라이선스가 있는 "Oculus Lipsync" 라이브러리에 대한 이 저장소 소스 코드를 커밋했습니다(사용하기 전에 동의하세요!). XTTS v2.0은 비상업적 용도로만 사용됩니다. 아래 단락은 내가 만든 항목에만 영향을 미칩니다.
GPLv3입니다. 카피레프트 라이센스 중 하나입니다. GPL/카피레프트 라이센스는 Blender 또는 Linux 커널을 사용하는 대부분의 프로그래머에게 친숙할 것입니다. 상당히 극단적이지만 앱의 특성에 따라 결정됩니다. 그리고 특히 가능한 용도 중 하나입니다.
최근에 나는 Eddy Burback의 "Apple's $3500 Nightmare"를 보았습니다. 3,500달러(!)짜리 Apple Vision Pro에 대한 리뷰입니다. 제시된 앱 중 하나를 사용하면 사용자가 AI "여자 친구"와 데이트할 수 있습니다. 인터페이스의 왼쪽에는 안정적인 확산 생성 이미지가 있습니다(Seraphine LoRA가 포함된 PastelDiffusedMix 냄새가 나나요?). 오른쪽에 문자 채팅이 있습니다. 이것이 이런 종류의 소프트웨어에 대한 최신 기술입니까? 게으르다.
사무실 모바일 데이트 앱은 처음부터 논란으로 가득 차 있었습니다. Tinder and Co.는 단골 고객을 잃고 싶지 않습니다. 기계 학습을 시작하기도 전에 사기가 넘쳐납니다. Tinder에는 수백만 개의 AI 프로필이 있습니다. 그리고 직접적인 AI 데이트에서는 완전히 다른 문제입니다.
원하는 모델을 사용할 수 있습니다. 립싱크는 ovrlipsync의 비짐에 해당하는 모양 키를 사용합니다. Unity는 "Enemies" 기술 데모를 통해 사실적인 인간을 렌더링할 수 있음을 입증했습니다.
개인적으로 저는 언리얼 엔진의 메타휴먼을 사용하고 싶습니다. 내 Unity 코드를 다시 작성해야 합니다. 이러한 노력의 대가로 최첨단 장비와 무료 고품질 자산을 얻을 수 있습니다. 메타휴먼을 Unity로 가져올 수도 있습니다.
어떤 이유에서인지 Unity에는 인간 캐릭터를 위한 내장 파이프라인이 없습니다. 위에 링크된 "적" 시네마틱을 제작할 때에도 그들은 커뮤니티에서 실행 가능하게 만드는 데 신경을 쓰지 않았습니다. Autodesk Maya에 맞춰진 맞춤형 도구 세트입니다. 그리고 4D 클립 파일 형식에 대해서는 들어본 적이 없습니다. 프로젝트 리더를 축하합니다! 당황스러운 결정이네요. 예를 들어 헤어 렌더링 및 시뮬레이션을 위한 HairFX가 있습니다. TressFX를 기반으로 합니다. TressFX를 OpenGL, WebGL 및 Vulkan으로 포팅했습니다. 나는 그것을 아주 잘 이해합니다. 그런데 이 앱은 헤어 카드를 사용합니다! Original Sintel에는 스플라인 기반 헤어가 있는데, 이는 간단한 내보내기 작업이었을 것입니다. 이러한 시스템에는 적절한 문서가 필요합니다.
결국 도구는 도구일 뿐이다. Unity가 우선 순위를 정했으면 좋겠습니다. 오늘날의 시장에서는 사람을 렌더링하는 것이 매우 중요하다고 말하고 싶습니다.
예, 하지만 2D 렌더링 기술에 3D 엔진을 사용하려는 이유를 이해했는지 확인하세요. Guilty Gear Xrd의 경우 작성자는 프레임별로 법선을 조정해야 했습니다. 오늘날에도 3D는 애니메이션 팬들의 눈살을 찌푸리게 합니다. (내가 아는 한) 유일한 예외는 Lustrous의 땅입니다. 그리고 이는 놀라운 샷 구성 덕분에 가능해졌습니다.
서부 실시간 애니메이션을 살펴보면 Borderlands 등이 있습니다. 평면 조명, 차분한 색상, 두꺼운 잉크 선을 사용하여 만화책 스타일을 재현합니다. YouTube에는 플랫 셰이딩에 대한 수많은 튜토리얼이 있지만 텍스처 페인팅에 능숙하지 않으면 가까운 결과를 얻을 수 없습니다.
낙담하게 들릴 수도 있지만 목표를 고려해 보시기 바랍니다. 모두가 VTubeStudio와 Live2D를 사용하는 데에는 이유가 있습니다. 2D 및 3D용 모델을 만드는 것은 복잡성 측면에서 비교할 수 없으며 동일한 예술 형식도 아닙니다.
Riot Games, Fortiche, Disney/Pixar DreamWorks 또는 Sony Pictures Animation에서 일하는 경우 위에서 말한 모든 내용을 무시하십시오.
Unity 설치 크기가 더 작습니다. 취미생활자를 대상으로 합니다. C# 스크립트를 작성하고 이를 개체에 놓아 새 동작을 추가할 수 있습니다. UX는 어디에나 있을 수 있지만 핵심 측면에서는 마찰이 없습니다.
Unity는 사용 편의성과 반복 시간 측면에서 UE5를 능가합니다. UE5로 전환하는 주된 이유는 메타휴먼(!), 가상 프로덕션 또는 업계 표준 모캡일 것입니다.
LLM 모델에 따라 다릅니다. 기본 gemma:2b-instruct
매우 작습니다(매개변수 30억 개). 일관된 문장을 만들 수는 있지만 대부분 그 정도까지 갈 수 있습니다. 최첨단 7B 모델(양자화 포함)이나 더 큰 모델을 사용할 수 있다면 그것을 선택하십시오. 언제든지 ChatGPT로 교체할 수도 있습니다. 또는 다중 GPU 설정을 사용하십시오. 또는 휴대폰에서 Unity를 실행하고 Raspberry PI에서 TTS를 실행하며 LLM용 전체 VRAM을 확보하세요.
나는 이것을 추가하지 않았습니다. 3D 모델에 특별한 경우를 추가해야 합니다. 예를 들어 립싱크 중에 입에 애니메이션을 적용하는 것이 어려울 수 있습니다. 3D 아바타의 블러싱은 일반적으로 셰이더 그래프에 특수 텍스처를 혼합하여 수행됩니다.
그러나 기본 기술은 이미 존재합니다. 텍스트에서 감정을 감지하려면 감정 분석에 LLM을 사용할 수 있습니다. 또한 WebSocket을 사용하여 이벤트를 트리거하는 기술도 추가했습니다. ATM 입자 효과가 시작됩니다. C# 코드의 절반은 모양 키 트리거를 처리합니다. 깜박임은 몇 초마다 호출되는 기능입니다. 3D 모델에 상호 작용을 생성하면 언제든지 시작할 수 있습니다. 만드는데 시간이 많이 걸릴 뿐입니다.
예, 시도해 보았습니다(이 저장소에 추가되지 않음). 원래 계획은 렌더링된 프레임을 안정적인 확산 생성 이미지로 스타일 전송하는 것이었습니다. 내 빠른 실험에 따르면 성능 문제 외에도 가장 간단한 솔루션에는 필요한 품질이나 시간적 안정성이 없습니다.
VGG16/19를 실행하기 위한 성능 예산이 없습니다. 여기에는 "예술적 스타일의 신경 알고리즘"[Gatys2015] 또는 "실시간 스타일 전송 및 초해상도를 위한 지각 손실"[Johnson2016]과 같은 '원래' 기술이 제외됩니다. 그들 중 누구도 깜박이는 것을 보지 못했습니다. 이는 비디오가 아닌 정적 이미지용으로만 설계되었습니다. 해당 문제를 조사한 추가 작업이 있었습니다: [Jamriska2019], [Texler2020].
Unity도 2020년에 실시간 스타일 전송을 시도한 것으로 알고 있습니다. "심층 신경망을 사용한 Unity의 실시간 스타일 전송"입니다.
그 후, 우리는 트랜스포머 영역에 있습니다(놀랐어요!). 작년에 "DATUM(확산 모델을 사용한 데이터 증강)"[CVPR-W 2023]에서는 확산을 사용했습니다(역시 놀랍습니다!). 최신 기술을 추적하려면 합성-실제 번역이라는 논문 코드 카테고리가 있습니다.
이 시점에서 나는 이것을 앱에 맞추려고 노력하는 것이 기능상의 문제라고 결정했습니다.
유사한 기술을 조사한 Two Minute Papers 에피소드가 있었습니다: "인텔의 비디오 게임은 현실처럼 보입니다!". Intel의 "Enhancing Photorealism Enhancement"[Richter2021]를 기반으로 합니다.
예, unity-project/Assets/Sintel에서 .fbx를 확인하세요.
내 모든 프로젝트에는 실용적인 이름이 있습니다. 이번에는 좀 더 뚜렷한 것을 원했습니다. 아이리스는 보라색-파란색 꽃입니다. 홍채는 눈의 일부입니다. 딱 맞는 것 같았나요? 특히 CG 캐릭터에서는 눈과 머리카락이 문제 이기 때문이죠.