與人工智慧驅動的詳細 3D 頭像交談。使用大型語言模型 (LLM)、文字轉語音 (TTS)、Unity 遊戲引擎和口型同步使角色栩栩如生。
在影片中,我們詢問角色「誰是麥可喬丹?」。短暫延遲後,化身「回答」了問題。使用先前的消息作為上下文,我們可以進行完整的對話。注意頭髮的物理特性和眨眼!
展示從網頁瀏覽器觸發的遠端事件。選擇每個 VFX 後,就會播放對應的粒子系統。流行的用法是當有人在 Twitch 等上捐贈 5 美元時產生煙火粒子效果。
核心功能是會「說話」的客製化 3D 模型。它會發出聲音並使用 Oculus 的唇形同步庫來給人留下(希望是令人信服的)印象。這是一個功能集:
該流程不依賴任何特定的實作。隨意混合和匹配 LLM、TTS 或任何合適的 3D 模型(需要特定的形狀鍵)。您可能會注意到,這種架構為我們提供了極大的靈活性。正如您可能想像的那樣,前一句話是輕描淡寫的。
沒有語音識別,提示僅為文字。使用 Whisper Fast 新增此功能非常簡單。請參閱下面的說明。 TL;DR 將 GET 或 POST 傳送到
/prompt
端點。
使用帶有串流媒體和 DeepSpeed 的 TTS,我通常會得到 <4 秒的回應(從發送提示到第一個聲音)。它足夠小,對話感覺是即時的。此時,瓶頸就是LLM。在單一 GPU 上,您無法同時執行 LLM 和 TTS(我已經嘗試過,請查看有關tts.chunk_size
配置選項的常見問題解答)。我們必須先產生所有文字標記,然後才產生聲音。我嘗試將 TTS 卸載到 CPU,但這也很困難。
串流意味著我們將產生的文字分割成更小的區塊。有一個小的交叉淡入淡出來掩蓋塊的過渡。第一個塊較小意味著首個聲音的時間較快。 DeepSpeed是一個用於加速 GPT 推理的 Microsoft 函式庫。串流和 DeepSpeed 都是可選的,但建議使用。
伺服器啟動後的第一個問題總是花費最長的時間(約 10 秒),因為伺服器必須載入 AI 模型。在 Unity 編輯器中使用時,您很少會出現垃圾收集暫停(對於音訊來說有點明顯)。但如果您在生產版本中確實遇到了 GC 問題,我會感到驚訝。
我不得不說,我很有趣。我預計在使用相同的 GPU 進行 Unity 渲染和 AI 時會出現一些問題。我知道 Android/iOS 應用程式是一個簡單的後備方案,可以將 Unity 成本轉移到單獨的裝置上。但在我的硬體上沒有必要。有點出乎意料的是,竟然運作順利。不會抱怨。我還將 Unity 限制為 30FPS(以防萬一)。
如果您轉到控制面板,您將看到每個回應階段的時間。對於 Unity,請使用內建分析器。
請參閱 INSTALL_AND_USAGE.md。它還包括有關如何使用/擴展當前功能的說明。
以下問題是關於此應用程式的一般理念。有關更多面向使用的常見問題解答,請參閱 INSTALL_AND_USAGE.md。
這個應用程式表明我們已經擁有渲染詳細 3D 頭像並在單一消費級 GPU 上即時運行一些中性網路的技術。它是可自訂的,不需要網路連線。它還可以在客戶端-伺服器架構中工作,以方便在行動裝置上進行渲染等。
我本來可以使用標準 Sintel 模型。我創造了自己的角色,因為我可以。從拖曳頂點、繪製紋理、設定嘴巴動畫、調整頭髮物理到「會說話」的 3D 頭像。如果我自己這麼說的話,那真是一種愉快的消遣。
我還想測試穩定的擴散生成影像的紋理重投影。例如,您可以在積極提示中添加“禿頭”,在消極提示中添加“頭髮”。它確實大大加快了工作流程。唉,重投影會有鏡面高光等需要手動刪除。
我使用 Sintel 作為基礎網格,因為它已經有了基本的形狀鍵。特別是要控制嘴的每個部分 - 只需添加 Blender 4.0 相容的驅動程式即可。這使得創建視位形狀鍵變得微不足道。我過去已經多次使用 Sintel 的模型,所以對於這個項目來說這是理所當然的。
附言。我討厭操縱。
您可能看過「會說話」的即時穩定擴散產生的虛擬角色。它是一張靜態影像,每個畫面都會根據聲音重新產生嘴部區域。您會注意到它不穩定。如果你每一幀都擴散牙齒,它們就會不斷移動。我經常使用穩定擴散。我看到了我那部分被毀壞的身體部位(手!)。牙齒……很明顯。一個流行的實作是 SadTalker。它甚至還有穩定擴散 Web UI 擴充功能。
相反,我的應用程式使用了視頻遊戲中多年來一直存在的無聊舊技術。如果您有數百小時的對話(《博德之門 3》、《Cyberpunk 2077》等),您無法手動製作所有內容的動畫。每個主要遊戲都使用 JALI 等系統。
如果你想要即時動畫角色,為什麼只使用人工智慧?為什麼不尋找世界上最大的娛樂產業所使用的解決方案呢?至少你可以使用它作為 img2img 的基礎。近年來,我們也出現了 VTuber,他們每天都在挑戰極限。其中很多東西都是基於初音未來粉絲開發的技術。
Neuro-sama 是一位受歡迎的虛擬主播。它是一個由人工智慧驅動的角色,可以玩視頻遊戲並與其創造者 Vedal 交談。以下是我的應用程式與它的對比:
該應用程式包含其他人創建的源代碼/資產。每個此類實例的子資料夾中都有一個專用的 README.md 來解釋許可。例如,我已承諾“Oculus Lipsync”庫的此存儲庫原始程式碼,該庫有自己的許可證(使用前接受它!)。 XTTS v2.0 也僅供非商業用途。以下段落僅影響我創建的內容。
它是 GPLv3。這是 Copyleft 許可證之一。大多數來自 Blender 或 Linux 核心的程式設計師應該熟悉 GPL/copyleft 許可證。這是相當極端的,但它是由應用程式的性質決定的。特別是可能的用途之一。
最近我看了 Eddy Burback 的《Apple 的 3500 美元噩夢》。這是對 3500 美元(!)Apple Vision Pro 的評測。所展示的應用程式之一允許用戶與人工智慧「女朋友」約會。介面的左側有一個穩定的擴散生成影像(我聞到了 PastelDiffusedMix 與 Seraphine LoRA 的味道?)。右側文字聊天。這是此類軟體的最新技術嗎?它很懶。
辦公室。行動約會應用程式從一開始就充滿了爭議。 Tinder 和 Co. 不想失去回頭客。在我們開始學習機器學習之前,騙局就已經層出不窮。 Tinder 上有數百萬個 AI 個人檔案。而對於直接的人工智慧約會來說,這是一個完全不同的問題。
您可以使用任何您喜歡的模型。口型同步使用與 ovrlipsync 視位相對應的形狀鍵。透過「敵人」技術演示,Unity 已經證明它可以渲染逼真的人類。
就我個人而言,我會使用虛幻引擎的超人類。您將不得不重寫我的 Unity 程式碼。為此,您將獲得最先進的設備和免費的高保真資產。您也可以嘗試將超人類匯入到 Unity 中。
由於某種原因,Unity 沒有針對人類角色的內建管道。即使在製作上面鏈接的“敵人”電影時,他們也沒有費心使其在社區中可行。它是專為 Autodesk Maya 定制的一組自訂工具。我從未聽說過 4D 剪輯檔案格式。恭喜專案負責人!這是一個令人困惑的決定。例如,他們有用於頭髮渲染和模擬的 HairFX。它基於 TressFX。我已將 TressFX 移植到 OpenGL、WebGL 和 Vulkan。我很明白。然而這個應用程式使用發卡!原始 Sintel 具有基於樣條的頭髮,這應該是一個簡單的導出操作。這些系統需要適當的文件。
歸根究底,工具只是工具。我希望 Unity 能依序安排他們的優先事項。我想說,在當今的市場上,渲染人是非常重要的。
是的,但請確保您了解為什麼要使用 3D 引擎來實現 2D 渲染技術。對於 Guilty Gear Xrd,作者必須在每個幀的基礎上調整法線。即使在今天,3D 仍然受到動漫迷的反對。唯一的例外(據我所知)是光澤之地。這得歸功於其令人驚嘆的鏡頭構圖。
看看西方的即時動畫,例如《無主之地》。它使用平面照明、柔和的顏色和粗墨線複製了漫畫風格。 YouTube 上有大量有關平面著色的教學課程,但如果不擅長繪製紋理,就無法獲得接近的結果。
雖然這聽起來可能令人沮喪,但我希望您考慮一下您的目標。其他人都使用 VTubeStudio 和 Live2D 是有原因的。創建 2D 和 3D 模型在複雜性上沒有可比性,甚至不是同一種藝術形式。
如果您為 Riot Games、Fortiche、Disney/Pixar DreamWorks 或 Sony Pictures Animation 工作,請忽略我上面所說的一切。
Unity安裝尺寸較小。它針對的是愛好者。您只需編寫一個 C# 腳本並將其拖放到一個物件上即可新增行為。雖然使用者體驗可以無所不在,但在核心方面卻是毫無摩擦的。
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年也嘗試過即時風格傳輸:「Real-time style transfer in Unity using deep Neural Networks」。
之後,我們就進入了變形金剛領域(驚喜!)。去年,「使用擴散模型進行資料增強 (DATUM)」[CVPR-W 2023] 使用了擴散(再次令人驚訝!)。如果您想追蹤最新技術,有一個名為「合成到真實翻譯」的帶有程式碼的論文類別。
此時,我決定嘗試將其融入應用程式中,這是一種功能蠕變。
《兩分鐘論文》有一集研究了類似的技術:「英特爾的電玩遊戲看起來像現實!」。基於英特爾的「增強照片真實感增強」[Richter2021]。
是的,檢查 unity-project/Assets/Sintel 內的 .fbx。
我所有的項目都有實用的名字。這次,我想要一些更獨特的東西。鳶尾花是紫藍色的花。虹膜是眼睛的一部分。看起來合適嗎?尤其是眼睛和頭髮是CG角色的問題。