API для серверного 3D-рендеринга

Я работаю над приложением, которое должно быстро визуализировать простые 3D-сцены на сервере, а затем возвращать их в формате JPEG через HTTP. По сути, я хочу иметь возможность просто включить динамическую 3D-сцену в HTML-страницу, выполнив что-то вроде:

<img src = "http://www.myserver.com/renderimage?scene=1&x=123&y=123&z=123">

У меня вопрос о том, какие технологии использовать для рендеринга. В настольном приложении я бы вполне естественно использовал DirectX, но боюсь, он может быть не идеальным для серверного приложения, которое будет создавать изображения для десятков или даже сотен пользователей в тандеме. У кого-нибудь есть опыт с этим? Есть ли 3D API (желательно в свободном доступе), который идеально подошел бы для этого приложения? Лучше написать программный рендерер с нуля?

Меня больше всего беспокоит использование DirectX или OpenGL: будет ли он хорошо работать в виртуализированной серверной среде и будет ли это иметь смысл с типичным серверным оборудованием (над которым у меня мало контроля).

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
9
0
11 548
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Я бы сказал, что лучше всего иметь приложение Direct3D / OpenGL, работающее на сервере (без остановки). ЗАТЕМ заставляем серверную страницу отправлять запрос в приложение для рендеринга, а приложение для рендеринга возвращает jpg / png / что угодно обратно.

  • Если Direct3D / OpenGL медленно рендерит сцену на оборудовании, то любое программное решение будет хуже.
  • Сохраняя работающее приложение для рендеринга, вы избегаете накладных расходов на создание / уничтожение текстур, обратных буферов, буферов вершин и т. д. Вы могли бы визуализировать простую сцену 100 раз в секунду.

Однако на многих серверах нет видеокарт. Direct3D практически бесполезен в программном обеспечении (есть эмулируемое устройство от Ms, но оно годится только для тестирования эффектов), никогда не пробовал OpenGL в программном обеспечении.

Не столько API, сколько средство визуализации; Поврай? Кажется, также существует интерфейс http ...

Рендеринг на стороне сервера имеет смысл только в том случае, если сцена состоит из огромного количества объектов, так что загрузка набора данных клиенту для клиентского рендеринга будет слишком медленной, и рендеринг не ожидается в реальном времени. Рендеринг на стороне клиента не слишком сложен, если вы используете что-то вроде бегать трусцой в сочетании с прогрессивной загрузкой сцены (т.е. загружаете объекты переднего плана и визуализируете, а затем постепенно загружаете объекты в зависимости от расстояния от точки обзора и повторно визуализируете).

Если вы действительно хотите выполнить рендеринг на стороне сервера, вы можете разделить часть веб-сервера и часть рендеринга на два компьютера, каждый из которых настроен оптимально для своей задачи (рендерер имеет карту OpenGL, минимальный HD и достаточно ОЗУ, на сервере много быстрые диски, много оперативной памяти, резервные копии и без OpenGL). Я очень сомневаюсь, что вы сможете выполнять аппаратный рендеринг на виртуализированном сервере, поскольку на сервере, вероятно, нет графического процессора.

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

Soviut 01.02.2013 02:25

Другой причиной рендеринга на стороне сервера является безопасность (рендеринг на стороне клиента может привести к тому, что данные останутся в памяти). Если вы не хотите, чтобы конфиденциальные данные передавались на устройство, можно использовать рендеринг на стороне сервера.

CantrianBear 26.04.2016 20:47

Яфарай (http://www.yafaray.org/) может быть хорошим первым выбором для общего 3D-рендеринга. Это достаточно быстро, и результаты выглядят великолепно. Его можно использовать в другом программном обеспечении, например 3D-модельер Blender. Лицензия LPGL.

Если программное обеспечение на стороне сервера написано на Python, а желаемая 3D-сцена представляет собой визуализацию научных данных, посмотрите MayaVi2 http://mayavi.sourceforge.net/, а если нет, перейдите на http://www.vrplumber.com/py3d.py

Те, кто предлагает широко популярный POV-Ray, должны понимать, что это не библиотека или какой-либо объект, предлагающий API. Серверный процесс должен был бы написать файл текстовой сцены, выполнить новый процесс для запуска POV-Ray с правильными параметрами и взять полученный файл изображения. Если это легко настроить для конкретного приложения, и если у вас больше опыта работы с POV-Ray, чем с другими модулями визуализации, то сделайте это!

Вы также можете посмотреть на Java3D (https://java3d.dev.java.net/), который был бы элегантным решением, если бы ваша серверная архитектура уже была основана на Java.

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

Ответ принят как подходящий

RealityServer с помощью мысленных образов предназначен для выполнения именно того, что здесь описано. Более подробная информация доступна на странице продукта (включая загружаемую версию для разработчиков).

Документы RealityServer

Похоже, сейчас RealityServer.com - правильная ссылка.

John Fisher 16.07.2013 21:20

авторизация требуется для этого сайта

Atrahasis 19.07.2015 13:38

Поменял ссылку на migenius.com/doc/realityserver/latest

katspaugh 06.08.2015 19:37

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

Avius 02.09.2019 13:20

Вы можете обернуть Pov-ray (здесь используется POSIX и сборка Windows). Пример PHP:

<?php
chdir("/tmp");
@unlink("demo.png");
system("~janus/.wine/drive_c/POV-Ray-v3.7-RC6/bin/pvengine-sse2.exe /render demo.pov /exit");
header("Content-type: image/png");
fpassthru($f = fopen("demo.png","r"));
fclose($f);
?>

demo.pov доступен здесь.

Вы можете использовать язык шаблонов, такой как Jinja2, для вставки собственных координат камеры.

у вас есть демо-версия pov ray, работающая на php?

ina 05.09.2019 04:16

Проверьте wgpu.net.

Я считаю это очень полезным.

Эта услуга, похоже, еще не запущена. Никакой документации или API, только техническая демонстрация. В чем вы нашли это полезным?

Jeremy 05.11.2013 19:14

Я ищу решение разместить 3D-модели в сети и позволить пользователям просматривать их и, например, покупать :). Главное требование к моей компании - это безопасные модели. Я написал им несколько вопросов, и похоже, что это будет лучший выбор. Я ищу решение, которое можно использовать или даже купить и разместить на своем сервере. Интересно по поводу цен.

Magdalena 05.11.2013 23:51

Эта страница больше не работает.

crthompson 15.01.2015 01:41

Другие вопросы по теме

Есть ли секретный трюк для принудительного сглаживания внутри Viewport3D в Windows XP?
Отображение 100 плавающих кубов с использованием DirectX ИЛИ OpenGL
Вычисление угла между тремя точками дает странный результат в зависимости от угла рисунка
Фоновое изображение обычной карты для веб-сайта с фиксированным источником света
Выровняйте символовBody3D в Godot 4 по поверхности цилиндра или других сеток (аналогично движению F-ноль X)
Как я могу создать трехмерную гистограмму и построить ее в Excel, используя данные, где отрицательные значения на графике также будут окрашены?
3D CSS3 меняет обработку преобразований с помощью проблемы DOMMatrix
Как получить трехмерные координаты точки щелчка и фрагментного шейдера в WebGL?
Сделайте так, чтобы цвета плавно менялись на быстро меняющемся трехмерном графике с неструктурированной сеткой
Как крен влияет на тангаж и рыскание?