API для 3D-рендеринга на стороне сервера [закрыт]

StackOverflow https://stackoverflow.com/questions/64291

  •  09-06-2019
  •  | 
  •  

Вопрос

Я работаю над приложением, которому необходимо быстро отрисовывать простые 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 заключаются в том, будут ли они хорошо функционировать в виртуализированной серверной среде и имеет ли это смысл при использовании обычного серверного оборудования (которое я практически не контролирую).

Это было полезно?

Решение

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

Документы RealityServer

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

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

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

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

Вы могли бы обернуть 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, чтобы вставить свои собственные координаты камеры.

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

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

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

Яфарай (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, чем с другими средствами визуализации, что ж, дерзайте!

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

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

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

Я думаю, это очень полезно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top