2008-09-15 2 views
7

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

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

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

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

ответ

5

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

RealityServer docs

+1

Ссылка мертва. – Soviut 2013-01-31 22:23:31

4

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

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

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

0

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

0

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

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

+1

Причина, по которой OP может захотеть отобразить на сервере, будет похожа на причину, по которой я нашел этот вопрос; Они хотят отображать эскизы или кадры из сцены, загруженной на сервер. – Soviut 2013-01-31 22:25:11

+0

Еще одна причина для рендеринга на стороне сервера - безопасность (рендеринг на стороне клиента может привести к тому, что данные остаются в памяти). Если вы не хотите передавать конфиденциальные данные на устройство, рендеринг на стороне сервера - это путь. – CantrianBear 2016-04-26 17:47:20

0

Yafaray (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, чем с другими рендерингами, хорошо пойдите на это!

0

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

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

1

Вы можете обернуть 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 доступны here.

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

Смежные вопросы