Domanda

Sto lavorando su un'applicazione che deve eseguire rapidamente il rendering di semplici scene 3D sul server e quindi restituirle come JPEG tramite HTTP.Fondamentalmente, voglio essere in grado di includere semplicemente una scena 3D dinamica in una pagina HTML, facendo qualcosa del tipo:

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

La mia domanda riguarda quali tecnologie utilizzare per eseguire il rendering.In un'applicazione desktop utilizzerei in modo del tutto naturale DirectX, ma temo che potrebbe non essere l'ideale per un'applicazione lato server che creerebbe immagini per dozzine o addirittura centinaia di utenti in tandem.Qualcuno ha qualche esperienza con questo?Esiste un'API 3D (preferibilmente disponibile gratuitamente) che sarebbe l'ideale per questa applicazione?È meglio scrivere un renderer software da zero?

La mia principale preoccupazione sull'utilizzo di DirectX o OpenGL è se funzionerà bene in un ambiente server virtualizzato e se abbia senso con l'hardware tipico del server (sul quale ho poco controllo).

È stato utile?

Soluzione

RealityServer di mental images è progettato per fare esattamente ciò che viene descritto qui.Maggiori dettagli sono disponibili sulla pagina del prodotto (inclusa una Developer Edition scaricabile).

Documenti di RealityServer

Altri suggerimenti

Direi che la soluzione migliore è avere un'app Direct3D/OpenGL in esecuzione sul server (senza interruzioni).Quindi, fai in modo che la pagina del server invii una richiesta all'app di rendering e chiedi all'app di rendering di inviare un jpg/png/qualunque cosa indietro.

  • Se Direct3D/OpenGL rallenta troppo il rendering della scena nell'hardware, qualsiasi soluzione software sarà peggiore
  • Mantenendo in esecuzione l'app di rendering, eviti il ​​sovraccarico derivante dalla creazione/distruzione di texture, backbuffer, vertex buffer, ecc.Potresti potenzialmente riprodurre una scena semplice centinaia di volte al secondo.

Tuttavia molti server non dispongono di schede grafiche.Direct3D è in gran parte inutile nel software (esiste un dispositivo emulato da Ms, ma è utile solo per testare gli effetti), non ho mai provato OpenGL nel software.

Potresti racchiudere Pov-ray (qui usando POSIX e la build di Windows).Esempio 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 disponibile Qui.

Potresti utilizzare un linguaggio di modelli come Jinja2 per inserire le coordinate della tua fotocamera.

Non tanto un'API ma piuttosto un renderer; Povray?Sembra che esista anche a http interfaccia...

Potresti anche guardare Java3D (https://java3d.dev.java.net/), che sarebbe una soluzione elegante se l'architettura del tuo server fosse già basata su Java.

Consiglierei anche di provare a farla franca con una soluzione di rendering solo software, se possibile: provare a gestire un sacco di processi server che fanno tutti richieste simultanee sull'hardware di rendering 3D sembra un sacco di lavoro.

Yafaray (http://www.yafaray.org/) potrebbe essere una buona prima scelta da considerare per il rendering 3D generale.È ragionevolmente veloce e i risultati sembrano ottimi.Può essere utilizzato all'interno di altri software, ad es.il modellatore 3D di Blender.La licenza è LPGL.

Se il software lato server è scritto in Python e la scena 3D desiderata è una visualizzazione di dati scientifici, esamina MayaVi2 http://mayavi.sourceforge.net/, o, in caso contrario, dai un'occhiata a http://www.vrplumber.com/py3d.py

Coloro che suggeriscono il popolarissimo POV-Ray devono rendersi conto che non è una libreria o qualsiasi tipo di entità che offre un'API.Il processo lato server dovrebbe scrivere un file di scena di testo, eseguire un nuovo processo per eseguire POV-Ray con le giuste opzioni e prendere il file immagine risultante.Se è facile da configurare per una particolare applicazione e se hai più esperienza con POV-Ray che con altri renderer, beh, provalo!

Il rendering lato server ha senso solo se la scena è costituita da un numero enorme di oggetti tale che il download del set di dati sul client per il rendering client sarebbe troppo lento e non si prevede che il rendering avvenga in tempo reale.Il rendering lato client non è troppo difficile se usi qualcosa di simile jogl abbinato al download progressivo della scena (ad es.scaricare gli oggetti in primo piano ed eseguire il rendering, quindi scaricare in modo incrementale gli oggetti in base alla distanza dal punto di vista ed eseguire nuovamente il rendering).

Se vuoi davvero eseguire il rendering lato server, potresti voler separare la parte del server web e la parte di rendering su due computer, ciascuno configurato in modo ottimale per il proprio compito (il renderer ha una scheda OpenGL, HD minimo e RAM appena sufficiente, il server ha un sacco di dischi veloci, molta RAM, backup e niente OpenGL).Dubito fortemente che sarai in grado di eseguire il rendering hardware su un server virtualizzato poiché probabilmente il server non ha una GPU.

Guardare wgpu.net.

Penso che sia molto utile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top