NVIDIA Omniverse與GPT-4結合生成3D內容

全球各行業對 3D 世界和虛擬環境的需求呈指數級增長。3D 工作流程是工業數字化的核心,開發實時模擬來測試和驗證自動駕駛車輛和機器人,操作數字孿生來優化工業制造,并為科學發現鋪平新的道路。

如今,3D 設計和世界構建仍然是高度手動的。雖然 2D 藝術家和設計師已經擁有了輔助工具,但 3D 工作流程仍然充滿了重復、乏味的任務。

為場景創建或查找對象是一個耗時的過程,需要長期磨練的專業 3D 技能,例如建模和紋理化。正確放置對象以及將 3D 環境藝術引導至完美需要數小時的微調。

為了減少手動、重復性任務并幫助創作者和設計師專注于工作中富有創意和樂趣的方面,NVIDIA 推出了眾多 AI 項目,例如用于生成式AI/

人工智能的 變革

借助 ChatGPT,我們現在正在體驗變革,各種技術水平的個人都可以使用日常語言與高級計算平臺進行交互。大模型(LLM) 變得越來越復雜,當像 ChatGPT 這樣的用戶友好界面讓每個人都可以使用它們時,它成為歷史上增長最快的應用,推出后僅兩個月就超過了 1 億用戶。現在,每個行業都計劃利用人工智能的力量進行廣泛的應用,例如藥物發現、自主機器和虛擬助手。

最近,我們嘗試了 OpenAI 的病毒式 ChatGPT 和新的 GPT-4 大型多模態模型,以展示開發可為NVIDIA Omniverse中的虛擬世界快速生成 3D 對象的自定義工具是多么容易。OpenAI 聯合創始人 Ilya Sutskever 在GTC 2023上與 NVIDIA 創始人兼首席執行官黃仁勛的爐邊聊天中表示,與 ChatGPT 相比,GPT-4 標志著“在許多方面都有相當大的改進” 。

通過將 GPT-4 與Omniverse DeepSearch(一種智能 AI應用,能夠搜索未標記 3D 資產的海量數據庫)相結合,我們能夠快速開發一個自定義擴展,通過簡單的基于文本的提示檢索 3D 對象,并將它們自動添加到3D 場景。

AI生成3D內容

NVIDIA Omniverse(3D 應用程序開發平臺)中的這一有趣實驗向開發人員和技術美術人員展示了快速開發利用生成式 AI 來填充現實環境的自定義工具是多么容易。最終用戶只需輸入基于文本的提示即可自動生成和放置高保真對象,從而節省創建復雜場景通常所需的數小時時間。

從擴展生成的對象基于通用場景描述(USD)?SimReady 資產。SimReady 資產是物理上精確的 3D 對象,可以在任何模擬中使用,并且其行為就像在現實世界中一樣。

獲取有關 3D 場景的信息

一切都從 Omniverse 中的場景開始。用戶可以使用 Omniverse 中的鉛筆工具輕松圈出一個區域,輸入他們想要生成的房間/環境類型(例如倉庫或接待室),然后單擊一下即可創建該區域

?

創建 ChatGPT 提示

? ChatGPT提示由四部分組成:系統輸入、用戶輸入示例、助手輸出示例和用戶提示。

讓我們從適合用戶場景的提示的各個方面開始。這包括用戶輸入的文本以及場景中的數據。

例如,如果用戶想要創建一個接待室,他們會指定類似“這是我們會見客戶的房間。確保有一套舒適的扶手椅、沙發和咖啡桌。”?或者,如果他們想要添加一定數量的項目,他們可以添加“確保至少包含 10 個項目”。

該文本與場景信息相結合,例如我們將在其中放置項目作為用戶提示的區域的大小和名稱

“接待室,7 x10 米,原點為( 0.0 , 0.0 , 0.0 )。這是我們會見客戶
的房間。確保有一套舒適的扶手椅、沙發和咖啡桌”

將用戶的文本與場景細節相結合的想法非常強大。在場景中選擇一個對象并以編程方式訪問其詳細信息比要求用戶編寫提示來描述所有這些詳細信息要簡單得多。我懷疑我們會看到很多利用這種文本+場景到場景模式的 Omniverse 擴展。

除了用戶提示之外,我們還需要使用系統提示和一兩次訓練來啟動 ChatGPT。

為了創建可預測的、確定性的結果,人工智能根據系統提示和示例專門返回一個 JSON,其中所有信息都以明確定義的方式格式化,以便可以在 Omniverse 中使用。

以下是我們將發送的四部分提示。

系統提示

這為人工智能設置了約束和指令

您是一個區域生成專家。在給定一定大小的區域后,您可以生成適合該區域的物品列表,并將它們放置在正確的位置。

您在一個三維空間中操作,使用 X、Y、Z 坐標系。其中,X 代表寬度,Y 代表高度,Z 代表深度。坐標 (0.0, 0.0, 0.0) 表示默認的空間原點。

您從用戶那里接收到區域的名稱、X 和 Z 軸上的尺寸(以厘米為單位)、區域的原點(即區域中心點)。

您的回答只需生成包含以下信息的 JSON 文件:

  • area_name:區域名稱
  • X:區域在 X 軸上的坐標
  • Y:區域在 Y 軸上的坐標
  • Z:區域在 Z 軸上的坐標
  • area_size_X:區域在 X 軸上的尺寸(厘米)
  • area_size_Z:區域在 Z 軸上的尺寸(厘米)
  • area_objects_list:區域中所有物品的列表

對于每個物品,您需要存儲以下信息:

  • object_name:物品名稱
  • X:物品在 X 軸上的坐標
  • Y:物品在 Y 軸上的坐標
  • Z:物品在 Z 軸上的坐標

每個物品的名稱應包含適當的形容詞。

請記住,物品應該放置在區域內,以創建最有意義的布局,并且它們不應重疊。所有物品必須位于區域尺寸的邊界內;永遠不要將物品放置在距離原點超過區域長度或深度的一半的位置。還要注意,物品應根據區域的原點分布在整個區域內,您也可以使用負值來正確顯示物品,因為區域的原點始終位于區域的中心。

請記住,您只需生成 JSON 代碼,不需要其他內容。這非常重要。

?用戶輸入示例

? 這是用戶可能提交的內容的示例。請注意,它是場景數據和文本提示的組合。

“接待室,7 x10m,原點為 ( 0.0 , 0.0 , 0.0 )。這是我們會見客戶的房間
。確保有一套舒適的扶手椅、沙發和咖啡 桌”

輔助輸出示例

這提供了人工智能必須使用的模板。請注意我們如何描述我們期望的JSON。

{"area_name": "Reception","X": 0.0,"Y": 0.0,"Z": 0.0,"area_size_X": 700,"area_size_Z": 1000,"area_objects_list": [{"object_name": "White_Round_Coffee_Table","X": -120,"Y": 0.0,"Z": 130},{"object_name": "Leather_Sofa","X": 250,"Y": 0.0,"Z": -90},{"object_name": "Comfortable_Armchair_1","X": -150,"Y": 0.0,"Z": 50},{"object_name": "Comfortable_Armchair_2","X": -150,"Y": 0.0,"Z": -50}  ]
}

連接到 OpenAI

該提示通過 Python 代碼從擴展發送到 AI。這在 Omniverse Kit 中非常簡單,只需使用最新的O?penAI Python 庫的幾個命令即可完成。請注意,我們正在將系統輸入、示例用戶輸入和我們剛剛概述的示例預期助理輸出傳遞給 OpenAI API。變量“response”將包含來自 ChatGPT 的預期響應。

# Create a completion using the chatGPT model   response = openai.ChatCompletion.create(model="gpt-3.5-turbo",# if you have access, you can swap to model="gpt-4",messages=[{"role": "system", "content": system_input},{"role": "user", "content": user_input},{"role": "assistant", "content": assistant_input},{"role": "user", "content": my_prompt},])# parse response and extract texttext = response["choices"][0]["message"]['content']

將 ChatGPT 的結果傳遞到 Omniverse DeepSearch API 并生成場景

?

然后,擴展程序會解析 ChatGPT JSON 響應中的項目,并將其傳遞到 Omnivere DeepSearch API。DeepSearch 允許用戶使用自然語言查詢搜索存儲在 Omniverse Nucleus 服務器中的 3D 模型。

這意味著,例如,即使我們不知道沙發模型的確切文件名,我們也可以通過搜索“Comfortable Sofa”來檢索它,這正是我們從 ChatGPT 中獲得的。

DeepSearch 能夠理解自然語言,通過向其詢問“舒適的沙發”,我們會得到一份項目列表,我們樂于助人的人工智能圖書館員從我們當前資產庫中選擇的資產中確定了最適合的項目。它在這方面出奇地好,所以我們經常可以使用它返回的第一個項目,但當然,我們建立了選擇,以防用戶想要從列表中選擇某些內容。

從那里,我們只需將對象添加到舞臺即可。

將 DeepSearch 中的項目添加到 Omniverse 階段

?

現在 DeepSearch 已返回結果,我們只需要將對象放入 Omniverse 中即可。在我們的擴展中,我們創建了一個名為 place_deepsearch_results() 的函數,它處理所有項目并將它們放置在場景中。

def place_deepsearch_results(gpt_results, query_result, root_prim_path):index = 0for item in query_result:# Define Prim          stage = omni.usd.get_context().get_stage()prim_parent_path = root_prim_path + item[‘object_name’].replace(" ", "_")parent_xForm = UsdGeom.Xform.Define(stage, prim_parent_path)prim_path = prim_parent_path + "/" + item[‘object_name’].replace(" ", "_")next_prim = stage.DefinePrim(prim_path, 'Xform')# Add reference to USD Assetreferences: Usd.references = next_prim.GetReferences()references.AddReference(assetPath="your_server://your_asset_folder" + item[‘asset_path’])# Add reference for future search refinement config = next_prim.CreateAttribute("DeepSearch:Query", Sdf.ValueTypeNames.String)config.Set(item[‘object_name’])# translate primnext_object = gpt_results[index]index = index + 1x = next_object['X']y = next_object['Y']z = next_object['Z']

此方法用于放置項目,迭代我們從 GPT 獲得的 query_result 項目,使用 USD API 創建和定義新原語,根據 gpt_results 中的數據設置其轉換和屬性。我們還將 DeepSearch 查詢保存在美元的屬性中,以便以后我們想再次運行 DeepSearch 時可以使用它。請注意,assetPath“your_server//your_asset_folder”是一個占位符,應替換為執行 DeepSearch 的文件夾的真實路徑。

使用 DeepSearch 交換項目

然而,我們可能不喜歡第一次檢索到的所有項目。因此,我們構建了一個小型配套擴展程序,允許用戶瀏覽類似的對象并只需單擊即可交換它們。借助 Omniverse,可以非常輕松地以模塊化方式構建,因此您可以通過其他擴展輕松擴展您的工作流程。

?

這個配套擴展非常簡單。它采用通過 DeepSearch 生成的對象作為參數,并提供兩個按鈕來從相關 DeepSearch 查詢中獲取下一個或上一個對象。例如,如果 USD 文件包含屬性“DeepSearch:Query = Modern Sofa”,它將通過 DeepSearch 再次運行此搜索并獲得下一個最佳結果。當然,您可以將其擴展為包含所有搜索結果圖片的可視化 UI,類似于我們用于一般 DeepSearch 查詢的窗口。為了使這個示例簡單,我們只選擇了兩個簡單的按鈕。

請參閱下面的代碼,其中顯示了增加索引的函數,以及實際根據索引操作對象交換的函數replace_reference(self) 。

def increment_prim_index():if self._query_results is None:return self._index = self._index + 1if self._index >= len(self._query_results.paths):self._index = 0self.replace_reference()def replace_reference(self):references: Usd.references = self._selected_prim.GetReferences()references.ClearReferences()references.AddReference(assetPath="your_server://your_asset_folder" + self._query_results.paths[self._index].uri)

請注意,如上所述,路徑“your_server://your_asset_folder”只是一個占位符,您應該將其替換為執行 DeepSearch 查詢的 Nucleus 文件夾。

?

使用 DeepSearch 將灰色沙發替換為棕色沙發

這展示了如何通過結合 LLM 和 Omniverse API 的力量,可以創建增強創造力和加快流程的工具。

從 ChatGPT 到 GPT-4

OpenAI 的新 GPT-4 的主要進步之一是其在大型語言模型中增強的空間意識。

我們最初使用ChatGPT API,它基于GPT-3.5-turbo。雖然 GPT-4 提供了良好的空間感知,但它提供了更好的結果。您在上面視頻中看到的版本使用的是 GPT-4。

GPT-4 相對于 GPT-3.5 在解決復雜任務和理解復雜指令方面有了很大的改進。因此,在設計文本提示“指導人工智能”時,我們可以更具描述性并使用自然語言

我們可以給人工智能非常明確的指令,例如:

  • “每個對象名稱都應該包含一個適當的形容詞。”
  • “請記住,對象應該放置在該區域中以創建盡可能最有意義的布局,并且它們不應該重疊。”
  • “所有物體都必須在區域大小的范圍內;切勿將物體放置在距原點超過該區域長度 1/2 或深度 1/2 的位置。”
  • “還要記住,對象應該放置在相對于區域原點的整個區域上,并且您也可以使用負值來正確顯示項目,因為區域的原點始終位于區域的中心。該地區。”

人工智能在生成響應時正確遵循這些系統提示的事實尤其令人印象深刻,因為人工智能表明對空間意識以及如何正確放置物品有很好的理解。使用 GPT-3.5 執行此任務的挑戰之一是有時對象會在房間外或奇怪的位置生成。

GPT-4 不僅將物體放置在房間的正確邊界內,而且還邏輯地放置物體:床頭柜實際上會出現在床的一側,咖啡桌將放置在兩個沙發之間,等等。

構建您自己的 ChatGPT 支持的擴展

雖然這只是人工智能連接到 3D 空間后可以做什么的一個小演示,但我們相信它將為場景構建之外的各種工具打開大門。開發人員可以在 Omniverse 中構建人工智能驅動的擴展,用于照明、相機、動畫、角色對話和其他優化創作者工作流程的元素。他們甚至可以開發工具將物理附加到場景并運行整個模擬。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#的 Settings.Settings配置文件的使用方法

1、定義 在Settings.settings文件中定義配置字段。把作用范圍定義為:User則運行時可更改(用戶范圍的字段數據更改存儲在用戶信息中,不在該程序文件中),Applicatiion則運行時不可更改。可以使用數據網格視圖(VS軟件的Properties 下面的Setting…

常見的Redux問題

在React中使用Redux的面試題目通常涵蓋了Redux的基本概念、工作原理、如何在React應用中集成Redux等方面。以下是一些常見的Redux問題: Redux的核心概念: 1、什么是Redux?它解決了什么問題? 它是一個狀態管理庫,解決…

2023國賽數學建模思路 - 復盤:校園消費行為分析

文章目錄 0 賽題思路1 賽題背景2 分析目標3 數據說明4 數據預處理5 數據分析5.1 食堂就餐行為分析5.2 學生消費行為分析 建模資料 0 賽題思路 (賽題出來以后第一時間在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 賽題背景 校園一卡通是集…

個保新標 | 《信息安全技術 敏感個人信息處理安全要求》(征求意見稿)發布

8 月 9 日,全國信息安全標準化技術委員會公開發布關于國家標準《信息安全技術 敏感個人信息處理安全要求》(征求意見稿)(以下簡稱《標準》)的通知,面向社會廣泛征求意見。 《標準》的制定背景是為支撐《個人…

《Go 語言第一課》課程學習筆記(一)

配好環境:選擇一種最適合你的 Go 安裝方法 選擇 Go 版本 一般情況下,建議采用最新版本。因為 Go 團隊發布的 Go 語言穩定版本的平均質量一直是很高的,少有影響使用的重大 bug。可以根據不同實際項目需要或開源社區的情況使用不同的版本。 有…

攻擊LNMP架構Web應用

環境配置(centos7) 1.php56 php56-fpm //配置epel yum install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm//安裝php56,php56-fpm及其依賴 yum --enablereporemi install php56-php yum --enablereporemi install php…

常見的字符編碼有哪些?有什么區別?

目錄 面試回答 知識擴展 Unicode 和 UTF-8 有啥關系? 有了 UTF-8,為什么要出現 GBK 為什么會出現亂碼 面試回答 就像電報只能發出“滴”和“答”聲一樣,計算機只認為 0 和1 兩種字符,但是,人類的文字是多種多樣的&…

B樹和B+樹區別

B樹和B樹的區別 B樹 B樹被稱為平衡樹,在B樹中,一個節點可以有兩個以上的子節點。B樹的高度為log M N。在B樹中,數據按照特定的順序排序,最小值在左側,最大值在右側。 B樹是一種平衡的多分樹,通常我們說m階…

什么是網絡地址轉換 (NAT)

網絡地址轉換(NAT)是更改源和目標 IP 地址和端口的過程,地址轉換減少了對 IPv4 公共地址的需求,并隱藏了專用網絡地址范圍,該過程通常由路由器或防火墻完成。 NAT是如何工作的 NAT 允許單個設備(如路由器…

rhel 8.7 部署 keepalived+haproxy 實現 mysql 雙主高可用場景

文章目錄 [toc]部署 mysql關閉防火墻關閉 selinux創建相關目錄創建 mysql 用戶配置 PATH 變量驗證 mysql 命令切換到 mysql 用戶在 172.72.0.116 生成配置文件在 172.72.0.137 生成配置文件mysql 初始化啟動 mysql 服務修改 mysql 的 root 用戶密碼配置主從關系172.72.0.137 配…

數字化格局下的引領者:百望云通過強制性國家標準GB18030-2022最高級別認證

8月1日,強制性國家標準GB 18030-2022《信息技術 中文編碼字符集》實施。8月15日,百望云“綠頁閱讀器”正式通過中國電子技術標準化研究院強制性國家標準GB18030-2022《信息技術 中文編碼字符集》最高級(實現級別3)認證,彰顯了百望云在數字化信息處理領域對標國家標準的卓越技術…

Android CameraX適配Android13的踩坑之路

AndroidCameraX適配Android13的踩坑之路 前言: 最近把AGP插件升級到8.1.0,新建項目的時候目標版本和編譯版本都是33,發現之前的demo使用Camerax拍照和錄像都失敗了,于是查看了一下官網和各種資料,找到了Android13的適…

網絡編程(12): TCP重傳、滑動窗口、流量控制、擁塞控制

1、TCP重傳機制 通過序列號和確認號確保可靠傳輸,當發送端發送數據給接收到,接收端會返回一個確認號,表示收到消息了 超時重傳:沒有在指定時間內收到ACK報文 超時重傳的兩種可能:數據包丟失、確認包丟失超時重傳時間RT…

第十三課:QtCmd 命令行終端應用程序開發

功能描述:開發一個類似于 Windows 命令行提示符或 Linux 命令行終端的應用程序 一、最終演示效果 QtCmd 不是因為它是 Qt 的組件,而是采用 Qt 開發了一個類似 Windows 命令提示符或者 Linux 命令行終端的應用程序,故取名為 QtCmd。 上述演示…

FreeMarker系列--list的用法(長度,遍歷,下標,嵌套,排序)

原文網址&#xff1a;FreeMarker系列--list的用法&#xff08;長度,遍歷,下標,嵌套,排序&#xff09;_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹FreeMarker的list的用法。 大小 Java ArrayList<String> list new ArrayList<String>(); Freemaker ${list?s…

W5500-EVB-PICO 做UDP Server進行數據回環測試(七)

前言 前面我們用W5500-EVB-PICO 開發板在TCP Client和TCP Server模式下&#xff0c;分別進行數據回環測試&#xff0c;本章我們將用開發板在UDP Server模式下進行數據回環測試。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…

圖數據庫_Neo4j學習cypher語言_使用CQL命令002_刪除節點_刪除屬性_結果排序Order By---Neo4j圖數據庫工作筆記0006

然后我們再來看如何刪除節點 可以看到首先 我們這里 比如我要刪除張三 可以看到 match (n:student) where n.name = "張三" delete n 這樣就是刪除了student集合中,name是張三的節點 然后我們再來看 如何來刪除關系 match (n:student)-[r]->(m:student) where…

機器學習、cv、nlp的一些前置知識

為節省篇幅&#xff0c;不標注文章來源和文章的問題場景。大部分是我的通俗理解。 文章目錄 向量關于向量的偏導數&#xff1a;雅可比矩陣二階導數矩陣&#xff1a;海森矩陣隨機變量隨機場伽馬函數beta分布數學術語坐標上升法協方差訓練集&#xff0c;驗證集&#xff0c;測試集…

Nginx的安裝及負載均衡搭建

一.Nginx的安裝 1&#xff09;準備安裝環境 yum install -y make gcc gcc-c pcre-devel pcre zlib zlib-devel openssl openssl-develPERE PCRE(Perl Compatible Regular Expressions)是一個Perl庫&#xff0c;包括 perl 兼容的正則表達式庫。 nginx的http模塊使用pcre來解…

前端jd要求:了解一門后端開發語言優先 解決方案之Node.js

前端jd要求&#xff1a;了解一門后端開發語言優先 解決方案之Node.js 前言常見的后端開發語言一、什么是 Node.js二、學習 Node.js 的前置知識三、學習 Node.js 的步驟1、Node.js 的安裝2、Node.js 的基本語法和 API模塊導入和導出文件讀寫操作HTTP 服務器命令行參數 3、Node.j…