Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Спрос на 3D-миры и виртуальные среды растёт в геометрической прогрессии во всех отраслях промышленности. 3D-рабочие процессы являются основой промышленной цифровизации, разработки симуляций в реальном времени для тестирования и валидации автономных транспортных средств и роботов, эксплуатации цифровых двойников для оптимизации промышленного производства и прокладывания новых путей для научных открытий.

Сегодня 3D-дизайн и построение мира по-прежнему в значительной степени выполняются вручную. В то время как 2D-художники и дизайнеры получили в своё распоряжение вспомогательные инструменты, 3D-рабочие процессы по-прежнему заполнены повторяющимися, утомительными задачами.

Создание или поиск объектов – это трудоёмкий процесс, требующий специальных навыков 3D, оттачиваемых с течением времени, таких как моделирование и текстурирование. Правильное размещение объектов и доведение 3D-среды до совершенства требует нескольких часов тонкой настройки.

Чтобы сократить количество ручных, повторяющихся задач и помочь создателям и дизайнерам сосредоточиться на творческих, приятных аспектах своей работы, NVIDIA запустила множество проектов в области искусственного интеллекта, таких как generative AI tools для виртуальных миров.

Эпоха искусственного интеллекта для iPhone

С ChatGPT мы переживаем эпоху искусственного интеллекта для iPhone, когда люди любого технического уровня могут взаимодействовать с передовой вычислительной платформой, используя повседневный язык. Большие языковые модели (LLM) становились всё более сложными, и когда такой удобный интерфейс, как ChatGPT, сделал их доступными для всех, это стало самым быстрорастущим потребительским приложением в истории, превысив 100 миллионов пользователей всего через два месяца после запуска. Сейчас каждая отрасль планирует использовать возможности искусственного интеллекта для широкого спектра приложений, таких как поиск лекарств, автономные машины и виртуальные помощники-аватары.

Недавно мы поэкспериментировали с вирусным ChatGPT от OpenAI и новой большой мультимодальной моделью GPT-4, чтобы показать, насколько просто разрабатывать пользовательские инструменты, которые могут быстро генерировать 3D-объекты для виртуальных миров в NVIDIA Omniverse. По сравнению с ChatGPT, GPT-4 знаменует собой “довольно существенное улучшение во многих аспектах”, – сказал соучредитель OpenAI Илья Суцкевер в беседе у камина с основателем и генеральным директором NVIDIA Дженсеном Хуангом на GTC 2023.

Объединив GPT-4 с Omniverse DeepSearch, интеллектуальным библиотекарем искусственного интеллекта, который способен выполнять поиск в массивных базах данных по немаркированным 3D-ресурсам, мы смогли быстро разработать пользовательское расширение, которое извлекает 3D-объекты с помощью простых текстовых подсказок и автоматически добавляет их в 3D-сцену.

Расширение генератора комнаты искусственного интеллекта

Этот забавный эксперимент в NVIDIA Omniverse, платформе разработки 3D-приложений, показывает разработчикам и техническим специалистам, как легко и быстро создавать пользовательские инструменты, использующие генеративный искусственный интеллект для создания реалистичных сред. Конечные пользователи могут просто вводить текстовые подсказки для автоматического создания и размещения объектов высокой точности, экономя часы времени, которые обычно требуются для создания сложной сцены.

Объекты, созданные с помощью расширения, основаны на ресурсах Universal Scene Description (USD) SimReady assets. Ресурсы Sim Ready – это физически точные 3D-объекты, которые можно использовать в любой симуляции и ведут себя так, как они вели бы себя в реальном мире.

Получение информации о 3D-сцене

Всё начинается со сцены с долларами США в Omniverse. Пользователи могут легко обвести область с помощью инструмента “Pencil” в Omniverse, ввести тип помещения / среды, которую они хотят создать — например, склад или приёмную — и одним щелчком мыши эта область будет создана.

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Создание подсказки для ChatGPT

Подсказка ChatGPT состоит из четырёх частей: системный ввод, пример пользовательского ввода, пример вывода помощника и подсказка пользователя.

Давайте начнём с аспектов подсказки, которые адаптируются к сценарию пользователя. Они включают в себя текст, который вводит пользователь, плюс данные из сцены.

Например, если пользователь хочет создать приёмную, он указывает что-то вроде “Это комната, где мы встречаемся с нашими клиентами. Убедитесь, что здесь есть набор удобных кресел, диван и журнальный столик.” Или, если они хотят добавить определённое количество элементов, они могут добавить “обязательно включите минимум 10 элементов”.

Этот текст объединяется с информацией о сцене, такой как размер и название области, где мы будем размещать элементы, в качестве подсказки пользователя.

“Reception room, 7x10m, origin at (0.0,0.0,0.0). This is the room where we meet 
our customers. Make sure there is a set of comfortable armchairs, a sofa and a 
coffee table”

Идея объединения текста пользователя с деталями сцены очень эффективна. Гораздо проще выбрать объект в сцене и получить программный доступ к его деталям, чем требовать от пользователя написания запроса для описания всех этих деталей. Я подозреваю, что мы увидим множество расширений Omniverse, которые используют этот шаблон Text + Scene to Scene.

Помимо пользовательской подсказки, нам также нужно дополнить ChatGPT системной подсказкой и одним-двумя кадрами для обучения.

Чтобы создать предсказуемые, детерминированные результаты, системная подсказка и примеры инструктируют искусственный интеллект специально возвращать JSON со всей информацией, отформатированной чётко определённым образом, чтобы затем её можно было использовать в Omniverse.

Вот четыре части подсказки, которые мы отправим:

Системная подсказка

Она устанавливает ограничения и инструкции для искусственного интеллекта:

You are an area generator expert. Given an area of a certain size, you can generate a list of items that are appropriate to that area, in the right place.


You operate in a 3D Space. You work in a X,Y,Z coordinate system. X denotes width, Y denotes height, Z denotes depth. 0.0,0.0,0.0 is the default space origin.


You receive from the user the name of the area, the size of the area on X and Z axis in centimeters, the origin point of the area (which is at the center of the area).


You answer by only generating JSON files that contain the following information:


- area_name: name of the area
- X: coordinate of the area on X axis
- Y: coordinate of the area on Y axis
- Z: coordinate of the area on Z axis
- area_size_X: dimension in cm of the area on X axis
- area_size_Z: dimension in cm of the area on Z axis
- area_objects_list: list of all the objects in the area

For each object you need to store:
- object_name: name of the object
- X: coordinate of the object on X axis
- Y: coordinate of the object on Y axis
- Z: coordinate of the object on Z axis


Each object name should include an appropriate adjective.


Keep in mind, objects should be placed in the area to create the most meaningful layout possible, and they shouldn't overlap.
All objects must be within the bounds of the area size; Never place objects further than 1/2 the length or 1/2 the depth of the area from the origin.
Also keep in mind that the objects should be disposed all over the area in respect to the origin point of the area, and you can use negative values as well to display items correctly, since the origin of the area is always at the center of the area.


Remember, you only generate JSON code, nothing else. It's very important.

Пример пользовательского ввода

Это пример того, что может отправить пользователь. Обратите внимание, что это комбинация данных из сцены и текстовой подсказки.

"Reception room, 7x10m, origin at (0.0,0.0,0.0). This is the room where we meet 
our customers. Make sure there is a set of comfortable armchairs, a sofa and a 
coffee table"

Пример вывода помощника

Он обеспечивает шаблон, который должен использовать искусственный интеллект. Обратите внимание, как мы описываем именно тот 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. Это довольно просто в Omniverse Kit и может быть сделано всего парой команд с использованием новейшей библиотеки OpenAI Python Library. Обратите внимание, что мы передаём в 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 text
    text = response["choices"][0]["message"]['content']

Передача результата из ChatGPT в Omniverse DeepSearch API и генерация сцены

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Элементы из JSON-ответа ChatGPT затем анализируются расширением и передаются в Omnivere DeepSearch API. DeepSearch позволяет пользователям выполнять поиск по 3D-моделям, хранящимся на сервере Omniverse Nucleus, используя запросы на естественном языке.

Это означает, что даже если мы не знаем точного имени файла модели дивана, например, мы можем получить его, просто выполнив поиск по запросу “Удобный диван”, который является именно тем, что мы получили от ChatGPT.

DeepSearch понимает естественный язык, и, попросив его предоставить “Удобный диван”, мы получаем список предметов, которые, по мнению нашего услужливого библиотекаря с искусственным интеллектом, лучше всего подходят из набора ресурсов, имеющихся в нашей текущей библиотеке ресурсов. Он удивительно хорош в этом, и поэтому мы часто можем использовать первый элемент, который он возвращает, но, конечно, мы создаём выбор на случай, если пользователь захочет выбрать что-то из списка.

Оттуда мы просто добавляем объект на сцену.

Добавление элементов из DeepSearch в Omniverse stage

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Теперь, когда DeepSearch вернул результаты, нам просто нужно поместить объекты в Omniverse. В нашем расширении мы создали функцию под названием place_deepsearch_results(), которая обрабатывает все элементы и размещает их в сцене.

def place_deepsearch_results(gpt_results, query_result, root_prim_path):
        index = 0
        for 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 Asset
            references: 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 prim
            next_object = gpt_results[index]
            index = index + 1
            x = next_object['X']
            y = next_object['Y']
            z = next_object['Z']

Этот метод для размещения элементов выполняет итерацию по элементам query_result, которые мы получили из GPT, создавая и определяя новые примитивы с помощью API USD, устанавливая их преобразования и атрибуты на основе данных в gpt_results. Мы также сохраняем запрос DeepSearch в атрибуте базы данных, чтобы его можно было использовать впоследствии, если мы захотим снова запустить DeepSearch. Обратите внимание, что путь к ресурсам “your_server//your_asset_folder” является заполнителем и должен быть заменён реальным путем к папке, в которой выполняется DeepSearch.

И вуаля! У нас есть наша сцена, сгенерированная искусственным интеллектом, в Omniverse!

Замена элементов с помощью DeepSeach

Однако нам могут понравиться не все элементы, которые извлекаются с первого раза. Итак, мы создали небольшое сопутствующее расширение, позволяющее пользователям просматривать похожие объекты и менять их местами одним щелчком мыши. С Omniverse очень легко создавать модульные приложения, так что вы можете легко расширять свои рабочие процессы с помощью дополнительных расширений.

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Это сопутствующее расширение довольно простое. Оно принимает в качестве аргумента объект, сгенерированный с помощью DeepSearch, и предлагает две кнопки для получения следующего или предыдущего объекта из соответствующего запроса DeepSearch. Например, если бы файл USD содержал атрибут “DeepSearch:Query = Modern Sofa”, он бы снова запустил этот поиск через DeepSearch и получил следующий наилучший результат. Вы, конечно, могли бы расширить его до визуального пользовательского интерфейса с изображениями всех результатов поиска, аналогичного окну, которое мы используем для общих запросов DeepSearch. Чтобы упростить этот пример, мы просто выбрали две простые кнопки.

Смотрите приведённый ниже код, который показывает функции для увеличения индекса и функцию replace_reference(self), которая фактически выполняет замену объекта на основе индекса.

def increment_prim_index():
            if self._query_results is None:
                return 


            self._index = self._index + 1


            if self._index >= len(self._query_results.paths):
                self._index = 0


            self.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” является просто заполнителем,. Вы должны заменить его папкой Nucleus, в которой выполняется ваш запрос DeepSearch.

Как ChatGPT и GPT-4 можно использовать для создания 3D-контента

Это показывает, как, объединяя возможности LLMS и Omniverse API, можно создавать инструменты, стимулирующие творческий подход и ускоряющие процессы.

Из ChatGPT в GPT-4

Одним из главных достижений нового GPT-4 OpenAI является повышенная пространственная осведомлённость в больших языковых моделях.

Изначально мы использовали ChatGPT API, который основан на GPT-3.5-turbo. Несмотря на хорошую пространственную ориентированность, GPT-4 обеспечивает гораздо лучшие результаты. Версия, которую вы видели на видео выше, использует GPT-4.

GPT-4 значительно улучшен по сравнению с GPT-3.5 при решении сложных задач и понимании сложных инструкций. Поэтому мы могли бы быть гораздо более описательными и использовать естественный язык при разработке текстового запроса для “инструктирования искусственного интеллекта”.

Мы могли бы дать ИИ очень чёткие инструкции, такие как:

  • “Название каждого объекта должно включать соответствующее прилагательное”.
  • “Имейте в виду, объекты должны быть размещены в определённой области, чтобы создать максимально осмысленный макет, и они не должны перекрываться”.
  • “Все объекты должны находиться в пределах размера области; Никогда не размещайте объекты дальше, чем на 1/2 длины или 1/2 глубины области от начала координат”.
  • “Также имейте в виду, что объекты должны располагаться по всей области относительно начальной точки области, и вы также можете использовать отрицательные значения для правильного отображения элементов, поскольку начало области всегда находится в центре области”.

Тот факт, что ИИ надлежащим образом следует этим системным подсказкам при генерации ответа, особенно впечатляет, поскольку ИИ демонстрирует хорошее понимание пространственной ориентации и того, как правильно размещать предметы. Одна из проблем, связанных с использованием GPT-3.5 для этой задачи, заключается в том, что иногда объекты создавались за пределами комнаты.

GPT-4 не только размещает объекты в правильных границах комнаты, но и логично расставляет объекты: прикроватная тумбочка фактически окажется сбоку от кровати, журнальный столик будет размещен между двумя диванами и так далее.

Этим мы, скорее всего, лишь прикидываем, что LLM могут делать в 3D-пространствах!

Создание собственного расширения на базе ChatGPT

Хотя это всего лишь небольшая демонстрация того, что может делать искусственный интеллект, подключённый к 3D-пространству, мы считаем, что это откроет двери для широкого спектра инструментов, выходящих за рамки создания сцен. Разработчики могут создавать в Omniverse расширения на базе искусственного интеллекта для освещения, камер, анимации, диалогов персонажей и других элементов, оптимизирующих рабочие процессы создателей. Они даже могут разрабатывать инструменты для придания физики сценам и запуска целых симуляций.

Мы работаем над тем, чтобы в ближайшее время сделать этот и другие экспериментальные примеры генеративного искусственного интеллекта доступными для создателей и разработчиков Omniverse. Вы можете ознакомиться с некоторыми из наших первоначальных исследовательских проектов в области искусственного интеллекта в  Omniverse AI ToyBox.

Вы можете начать интегрировать искусственный интеллект в свои расширения уже сегодня, используя Omniverse Kit и Python. Скачайте Omniverse, чтобы начать работу.

Мы рекомендуем другим разработчикам попробовать использовать расширение или создать свои собственные генеративные расширения искусственного интеллекта для Omniverse!

+1
0
+1
2
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *