Question

Je travaille sur une application qui doit rendre rapidement des scènes 3D simples sur le serveur, puis les renvoyer au format JPEG via HTTP. En gros, je veux pouvoir inclure simplement une scène 3D dynamique dans une page HTML, en effectuant quelque chose comme:

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

Ma question concerne les technologies à utiliser pour effectuer le rendu. Dans une application de bureau, j'utiliserais tout naturellement DirectX, mais je crains que cela ne soit pas idéal pour une application côté serveur qui créerait des images pour des dizaines voire des centaines d'utilisateurs en tandem. Est-ce que quelqu'un a de l'expérience avec ça? Existe-t-il une API 3D (de préférence librement disponible) idéale pour cette application? Est-il préférable d'écrire un moteur de rendu logiciel à partir de zéro?

Mes principales préoccupations concernant l’utilisation de DirectX ou d’OpenGL sont de savoir s’il fonctionnera correctement dans un environnement de serveur virtualisé et si cela a du sens avec un matériel de serveur typique (sur lequel j’ai peu de contrôle).

Était-ce utile?

La solution

RealityServer par images mentales est conçu pour faire exactement ce qui est décrit ici. Plus de détails sont disponibles sur la page du produit (y compris une édition pour développeur téléchargeable).

Documents de RealityServer

Autres conseils

Je dirais que votre meilleur choix est d’appliquer une application Direct3D / OpenGL sur le serveur (sans vous arrêter). Ensuite, la page du serveur envoie une requête à l’application de rendu et demande à celle-ci d’ajouter un fichier jpg / png / que ce soit de retour.

  • Si Direct3D / OpenGL doit ralentir le rendu de la scène en matériel, toute solution logicielle sera pire
  • En maintenant l'application de rendu en cours d'exécution, vous évitez la surcharge liée à la création / destruction de textures, de mémoires tampon (backbuffers), de vertex buffers, etc. Vous pouvez potentiellement convertir une scène 100 fois par seconde.

Cependant, de nombreux serveurs n’ont pas de carte graphique. Direct3D est pratiquement inutile dans les logiciels (il existe un périphérique émulé par Ms, mais ce n’est utile que pour tester les effets), n’a jamais essayé d’utiliser OpenGL dans les logiciels.

Vous pouvez envelopper Pov-ray (ici en utilisant POSIX et la version Windows). Exemple 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 disponible ici .

Vous pouvez utiliser un langage de gabarit tel que Jinja2 pour insérer vos propres coordonnées de caméra.

Pas tellement une API, mais plutôt un moteur de rendu; Povray ? Il semble également exister une interface http ...

Vous pouvez également consulter Java3D ( https://java3d.dev.java.net/), ce qui constituerait une solution élégante si votre architecture de serveur reposait déjà sur Java.

Je vous recommanderais également d'essayer de vous échapper avec une solution de rendu uniquement logiciel, si vous le pouvez - d'essayer de démêler un grand nombre de processus serveur qui imposent simultanément des demandes simultanées au matériel de rendu 3D.

Yafaray ( http://www.yafaray.org/ ) pourrait être un bon premier choix pour considérer pour le rendu 3D général. C'est assez rapide et les résultats sont excellents. Il peut être utilisé avec d’autres logiciels, par exemple. le modeleur 3D Blender. La licence est LPGL.

Si le logiciel côté serveur est écrit en Python et que la scène 3D souhaitée est une visualisation de données scientifiques, examinez MayaVi2 http://mayavi.sourceforge.net/ , ou si ce n’est pas le cas, lancez une recherche à http://www.vrplumber.com/py3d.py

Ceux qui suggèrent le très populaire POV-Ray doivent comprendre que ce n’est pas une bibliothèque ni aucun type d’entité offrant une API. Le processus côté serveur aurait besoin d'écrire un fichier de scène de texte, d'exécuter un nouveau processus pour exécuter POV-Ray avec les bonnes options et de récupérer le fichier image obtenu. Si cela est facile à configurer pour une application particulière et si vous avez plus de connaissances en POV-Ray qu'avec d’autres moteurs de rendu, allez-y!

Le rendu côté serveur n'a de sens que si la scène comprend un grand nombre d'objets, de sorte que le téléchargement du jeu de données sur le client pour le rendu du client sera beaucoup trop lent et que le rendu ne devrait pas être en temps réel. Le rendu côté client n’est pas trop difficile si vous utilisez quelque chose comme jogl associé au téléchargement progressif de scènes (c'est-à-dire téléchargez les objets de premier plan et effectuez le rendu, puis téléchargez progressivement les objets en fonction de la distance du point de vue et effectuez un nouveau rendu).

Si vous voulez vraiment faire un rendu côté serveur, vous pouvez séparer la partie serveur Web et la partie rendu sur deux ordinateurs, chacun étant configuré de manière optimale pour leur tâche (le rendu a une carte OpenGL, une HD minimale et juste assez de RAM, un serveur). a beaucoup de disques rapides, beaucoup de RAM, des sauvegardes et pas de OpenGL). Je doute fort que vous puissiez effectuer un rendu matériel sur un serveur virtualisé, car le serveur n’a probablement pas de processeur graphique.

Découvrez wgpu.net .

Je pense que c'est très utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top