2008-09-15 12 views
7

Estoy trabajando en una aplicación que necesita representar rápidamente escenas 3D simples en el servidor, y luego devolverlas como JPEG a través de HTTP. Básicamente, quiero ser capaz de simplemente incluir una escena 3D dinámico en una página HTML, haciendo algo como:API para representación 3D del lado del servidor

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

Mi pregunta es acerca de qué tecnologías usan para hacer el renderizado. En una aplicación de escritorio, naturalmente usaría DirectX, pero me temo que podría no ser ideal para una aplicación del lado del servidor que crearía imágenes para docenas o incluso cientos de usuarios en tándem. ¿Alguien tiene alguna experiencia con esto? ¿Hay una API 3D (preferiblemente disponible libremente) que sería ideal para esta aplicación? ¿Es mejor escribir un procesador de software desde cero?

Mi principal preocupación sobre el uso de DirectX u OpenGL es si funcionará bien en un entorno de servidor virtualizado y si tiene sentido con el hardware de servidor típico (sobre el cual tengo poco control).

Respuesta

5

RealityServer por imágenes mentales está diseñado para hacer precisamente lo que se describe aquí. Más detalles están disponibles en la página del producto (incluida una edición para desarrolladores descargable).

RealityServer docs

+1

El enlace está muerto. – Soviut

+0

Parece que http://RealityServer.com es el enlace correcto, ahora. –

+0

se requiere autorización para este sitio – Atrahasis

4

Id decir que su mejor opción es tener una aplicación Direct3D/OpenGL ejecutándose en el servidor (sin parar). Luego, hacer que la página del servidor envíe una solicitud a la aplicación de renderizado y hacer que la aplicación de renderizado vuelva a ser una jpg/png/lo que sea.

  • Si Direct3D/OpenGL es reducir la velocidad para hacer la escena en hardware, entonces cualquier solución de software será peor
  • Por mantener la aplicación de representación en funcionamiento, está evitando la sobrecarga de la creación/destrucción de texturas, backbuffers, búferes de vértice, etc. Podría renderizar una escena simple cientos de veces por segundo.

Sin embargo, muchos servidores no tienen tarjetas gráficas. Direct3D es extremadamente inútil en el software (hay un dispositivo emulado de Ms, pero solo sirve para probar efectos), nunca lo intenté con OpenGL en el software.

0

No tanto una API sino más bien un procesador; Povray? También parece existir una interfaz http ...

0

La representación del lado del servidor solo tiene sentido si la escena consiste en una gran cantidad de objetos como que la descarga del conjunto de datos al cliente para la representación del cliente sería demasiado lenta y no se espera que el renderizado sea en tiempo real. La representación del lado del cliente no es demasiado difícil si utiliza algo como jogl junto con la descarga de escena progresiva (es decir, descarga objetos en primer plano y renderiza, luego descarga incrementalmente objetos en función de la distancia desde el punto de vista y vuelve a renderizar).

Si realmente desea renderizar el lado del servidor, puede separar la parte del servidor web y la parte de renderizado en dos computadoras con cada una configurada óptimamente para su tarea (el renderizador tiene tarjeta OpenGL, HD mínima y suficiente RAM, el servidor tiene muchos discos rápidos, muchos ram, copias de seguridad y ningún OpenGL). Dudo mucho que pueda hacer renderizado de hardware en un servidor virtualizado ya que el servidor probablemente no tenga una GPU.

+1

La razón por la que OP podría representar en el servidor sería similar a la razón por la que encontré esta pregunta; Quieren renderizar miniaturas o fotogramas de una escena cargada en el servidor. – Soviut

+0

Otra razón para la representación del lado del servidor es la seguridad (la representación del lado del cliente puede provocar que los datos queden en la memoria). Si no desea que se transfieran datos confidenciales al dispositivo, la representación del lado del servidor es el camino a seguir – CantrianBear

0

Yafaray (http://www.yafaray.org/) puede ser una buena primera opción a considerar para la renderización 3D general. Es bastante rápido y los resultados se ven muy bien. Se puede usar con otro software, p. el modelador Blender 3D. La licencia es LPGL.

Si el software de servidor pasa a ser escrito en Python, y la escena 3D deseada es una visualización de datos científicos, mira en MayaVi2 http://mayavi.sourceforge.net/, o si no, ir a por un navegar en http://www.vrplumber.com/py3d.py

Quienes sugieren que la popularmente popular POV-Ray necesita darse cuenta de que no es una biblioteca o un tipo de entidad que ofrece una API. El proceso del lado del servidor necesitaría escribir un archivo de escena de texto, ejecutar un nuevo proceso para ejecutar POV-Ray con las opciones correctas, y tomar el archivo de imagen resultante. Si es fácil de configurar para una aplicación en particular, y si tiene más experiencia con POV-Ray que con otros renderizadores, ¡vaya!

0

También podría consultar Java3D (https://java3d.dev.java.net/), que sería una solución elegante si su arquitectura de servidor ya estaba basada en Java.

También recomendaría tratar de salirse con la única solución de procesamiento de software si es posible: tratar de manejar un montón de procesos de servidor que hacen demandas simultáneas en el hardware de renderizado 3D parece mucho trabajo .

1

Usted puede envolver POV-Ray (en este caso el uso de POSIX y la compilación de Windows). PHP ejemplo:

<?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 disponibles here.

Puede usar un lenguaje de plantillas como Jinja2 para insertar sus propias coordenadas de cámara.

-2

Consulte wgpu.net.

Creo que es muy útil.

+0

Este servicio no parece haberse iniciado todavía. Sin documentación o API, solo una demostración técnica. ¿De qué manera lo has encontrado útil? –

+0

Estoy buscando una solución para poner modelos 3D en la web y permitirles a los usuarios verlos y comprar, por ejemplo :). El requisito principal para mi empresa es asegurar modelos. Les escribí algunas preguntas y creo que será la mejor opción. Estoy buscando una solución para usar o incluso comprar algo y alojar en mi servidor. Me pregunto acerca de los precios. – Magdalena

+1

Esta página ya no funciona. – paqogomez

Cuestiones relacionadas