Officiellement POVRay devrait dans sa version 3.7 gérer le rendu sur plusieurs coeurs simultanément. La béta le fait déjà officiellement mais elle plante chez moi. De plus megapov étant un must, il faudra aussi attendre que cette version soit mis à jour. Entre temps, voici donc une astuce pour profiter de tout ces processeurs qui roupillent.
POVRay permet depuis toujours d'illuminer une zone seulement de l'image finale. Cette zone peut être définie d'une ligne à une autre et/ou d'une colonne à une autre. L'avantage de cette possibilité est que le temps pour illuminer une zone seulement de l'image finale est évidemment moins important qu'illuminer la scène complète, et c'est bien cela qui va nous aider.
Imaginons que nous ayons deux coeurs à disposition pour une image de 800 lignes, l'astuce consiste donc simplement à lancer deux sessions de povray en parallèle, l'une illuminant les lignes de 1 à 400, l'autre de 401 à 800. C'est aussi bête que cela :
Alors pour être honnête, ce n'est pas aussi bien que lorsque povray supportera réellement le multi-coeurs car les deux sessions sont obligées de perdre le même temps à analyser la scène. Du coup dans notre cas, plus l'image finale est grande, plus le gain est important.
Une fois le rendu terminé, nous avons deux images au format PPM qui chacune comporte une tranche de l'image finale. Le format PPM est ici choisi pour la simplicité car le jeu va maintenant consister à faire coïncider ces deux tranches pour former l'image finale. C'est ce que fait le code java suivant (codé très rapidement, donc soyez indulgent
)
Maintenant pour l'utiliser sur notre précédent résultat :
Et voilà, le tout collé dans un petit script et vous divisez le temps de rendu par autant de coeurs disponibles. Maintenant il est possible par ssh de faire la même chose mais à distance cette fois :
Voilà, l'avantage est que cela fonctionne tout de suite et avec toutes les versions dérivées de povray. Pour ceux que cela intéresse, j'ai une version plus complète du code java sous la forme d'un petit visualisateur de vue qui découpe et parallélise le rendu et reconstruit l'image finale tout seul en fonction du nombre de coeurs disponible.
- répondre
malic , le 4 April, 2008 - 09:35hmmm... Povray, des souvenirs... des casse-tête à l'époque de mon premier PC, où le rendu d'une scène "designed by vi" prenait 1 semaine au grand dame de ma mère qui voyait l'ordi allumé 24h/24.
Merci à un ami photographe de m'avoir récupéré un coprocesseur arithmétique
ça a changé ma vie... (pas vraiment celle de ma mère car les scènes ont fait un bond en complexité pour rester à 1 semaine de rendu)
Pour en revenir au multi-coeur, j'avais bidouillé un programme avec PVM à la fac pour faire le rendu d'une scène sur un parc de machines en divisant la scène sur le même principe.
Ca fait longtemps que je n'ai pas regarder POV mais avec la prise en main des modeleurs surfaciques (3DS Max et consors), j'ai perdu l'habitude de concevoir une scène sur un mode volumique et POV était très mal adapté au modèle à base de surfaces. Tiens, je vais installer Blender histoire de me faire la main dessus pour voir où on en est, pour le modelage et le reste.
- répondre
Ulhume, le 4 April, 2008 - 17:57@malic
Je sais bien, je crois que les premiers souvenirs et que j'ai de Linux et de PovRay, viennent de toi
Pour le rendu surfacique et POV, ça a le mérite d'être clair. En revanche pour faire de l'architectural, la raison pour laquelle je l'utilise en ce moment, cela reste à mon sens beaucoup plus pratique que Blender. Ne serais-ce que par l'approche script qui permet de monter rapidement des murs, portes, fenêtres, etc avec des dimensions réelles. Peut-être la même chose est-elle faisable avec Blender via python mais je n'ai pas eu le temps/courage de me pencher là dessus.
Maintenant POV me semble aller doucement vers sa belle mort, le gens semble avoir désertés et les sites qui en parlent font très web 1.0
Poster un nouveau commentaire