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





Я бы сказал, что лучше всего иметь приложение Direct3D / OpenGL, работающее на сервере (без остановки). ЗАТЕМ заставляем серверную страницу отправлять запрос в приложение для рендеринга, а приложение для рендеринга возвращает jpg / png / что угодно обратно.
Однако на многих серверах нет видеокарт. Direct3D практически бесполезен в программном обеспечении (есть эмулируемое устройство от Ms, но оно годится только для тестирования эффектов), никогда не пробовал OpenGL в программном обеспечении.
Рендеринг на стороне сервера имеет смысл только в том случае, если сцена состоит из огромного количества объектов, так что загрузка набора данных клиенту для клиентского рендеринга будет слишком медленной, и рендеринг не ожидается в реальном времени. Рендеринг на стороне клиента не слишком сложен, если вы используете что-то вроде бегать трусцой в сочетании с прогрессивной загрузкой сцены (т.е. загружаете объекты переднего плана и визуализируете, а затем постепенно загружаете объекты в зависимости от расстояния от точки обзора и повторно визуализируете).
Если вы действительно хотите выполнить рендеринг на стороне сервера, вы можете разделить часть веб-сервера и часть рендеринга на два компьютера, каждый из которых настроен оптимально для своей задачи (рендерер имеет карту OpenGL, минимальный HD и достаточно ОЗУ, на сервере много быстрые диски, много оперативной памяти, резервные копии и без OpenGL). Я очень сомневаюсь, что вы сможете выполнять аппаратный рендеринг на виртуализированном сервере, поскольку на сервере, вероятно, нет графического процессора.
Другой причиной рендеринга на стороне сервера является безопасность (рендеринг на стороне клиента может привести к тому, что данные останутся в памяти). Если вы не хотите, чтобы конфиденциальные данные передавались на устройство, можно использовать рендеринг на стороне сервера.
Яфарай (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.com - правильная ссылка.
авторизация требуется для этого сайта
Поменял ссылку на migenius.com/doc/realityserver/latest
Это кажется действительно мощным программным обеспечением, но оно достаточно тяжелое для использования и, возможно, было бы излишним в ситуации с OP.
Вы можете обернуть 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?
Проверьте wgpu.net.
Я считаю это очень полезным.
Эта услуга, похоже, еще не запущена. Никакой документации или API, только техническая демонстрация. В чем вы нашли это полезным?
Я ищу решение разместить 3D-модели в сети и позволить пользователям просматривать их и, например, покупать :). Главное требование к моей компании - это безопасные модели. Я написал им несколько вопросов, и похоже, что это будет лучший выбор. Я ищу решение, которое можно использовать или даже купить и разместить на своем сервере. Интересно по поводу цен.
Эта страница больше не работает.
Причина, по которой OP может захотеть отобразить на сервере, будет аналогична причине, по которой я нашел этот вопрос; Они хотят визуализировать эскизы или захватывать кадры из сцены, загруженной на сервер.