(Loading...)

vendredi 6 février 2009

Eagle3D - Rendu photoréaliste

Rendu en image de synthèse généré par Eagle3D
Pour ceux qui réalisent leur montage sous Eagle, il existe un module permettant un rendu 3D du circuit imprimé, son nom Eagle3D.

Très pratique pour prévisualiser ce que donnera le montage, afin de se faire une idée concrète du design avant qu'il ne soit trop tard pour apporter des modifications.

De tous les rendus 3D générés par les différents logiciels de schéma et de routage, il reste le plus réussi,
bien que son utilisation demande parfois de mettre la main dans le "cambouis" afin d'obtenir une prévisualisation des plus fidèles.



Cependant le résultat peut-être encore amélioré.




Le script Eagle3D, s’appuie sur le très connu POVRay, aussi vieux que nos ordinateurs, ce logiciel de scriptage 3D est une référence en la matière, et pour ne rien gacher, il est gratuit.
La dernière version encore en Bêta, de POVRay permet l'utilisation de radiosité avec éclairage HDRI.

Sans entrer dans les détails, il suffit de savoir que cette technologie permet un rendu d'éclairage photo-réaliste, ce qui va permettre d'apporter au script généré par Eagle3D un véritable plus.

Quelques modifications permettront  de changer le fond de décors afin de personnaliser son image.

Rendu en image de synthèse généré par Eagle3D

 Ci-contre un rendu généré par Eagle3D sans décors de fond.
Le résultat est légèrement amélioré par rapport à la version de base car j'ai pris soin de re-modéliser certains composants pour leur apporter plus de réalisme.
Comme on peut le constater, ce n'est pas trop mal, mais on peut mieux faire encore.







Rendu en image de synthèse généré par Eagle3D

Idem que ci-dessus, avec l'option décors (l'unique) d'Eagle3D.













Rendu en image de synthèse généré par Eagle3D

Maintenant, le même fichier avec l'ajout des commandes d'éclairage HDRI et effet de radiosité.
Avec une image sur un plan 3D lui apportant une parfaite intégration et un rendu photo-réaliste.
Les réglages de qualité sont au minimum pour cette images, en effet en 800x600 plus de deux heures de calcul sont nécessaires en augmentant le nombre de photons.









Pour les besoin de la manipulation, évidemment,  Eagle3D est installé, ainsi que la dernière version de POVRay (voir le lien plus haut).

Pour que POVRay puisse reconnaitre les bibliothèques de Eagle3D ne pas oublier d'ajouter à la fin du fichier POVRay.ini le path adéquat.
Chez moi cela donne:
Library_Path="E:\Electronique\EAGLE-4.16\ulp\Eagle3d\povray" **

** à Adapter bien entendu selon votre configuration...


NOTE IMPORTANTE


PovRay 3.7 indiquera lors du premier rendu d'image, une erreur sur le fichier "Special.inc" due à un changement syntaxique de la nouvelle version.
La correction est simple 0.6.5 devient 0.65 et le bug disparait.
Vous n'aurez à faire cette modification qu'une seule fois bien entendu.



Ce qui donnera:
Version originale: disc {<9.45-2.5, H+0.05, 7.28-2> y,0.7,0.6.5 pigment{col}}
Version modifiée: disc {<9.45-2.5, H+0.05, 7.28-2> y,0.7,0.65 pigment{col}}

Ceci étant fait, (re)lançons le script Eagle3D...
 
Une fois le fichier .pov généré par Eagle3D, il suffit de l'ouvrir sous POVRay et d'apporter quelques ajouts et modifications.


AJOUTS ET MODIFICATIONS DU FICHIER POV   
1 - Au début du fichier changer la version par ceci:
#version 3.7;

2 -  Déclarer l'environnement en off:
#declare env = off;

3 - Ajouter le bloc suivant juste au-dessus de la ligne :  #include "tools.inc"

//______________________________________________________________
// Ajout pour le HDRI

//========================================================

// Controle de radiosité
#declare use_radiosity= 2; // 1=load, 2=save, 0=off
#declare rad_quality=   1; // 1-10 (1=very basic ... 10=very good)
#declare rad_bounces=   1; // >0 (more of 5 hardly makes a difference)
#declare rad_brightness=1; // increase if needed
global_settings {
 assumed_gamma 1.8
 #if (use_radiosity)
  radiosity {        // Ne rien modifier, régler les paramètres au dessus
   #declare rad_count=rad_quality;
   #if (use_radiosity=2)
    // Enregistrement du fichier de Radiosité
    pretrace_start 0.05
    pretrace_end 0.005
    count 160*rad_count
    nearest_count 10+rad_quality
    error_bound 0.5/rad_quality
    recursion_limit rad_bounces
    brightness rad_brightness
    save_file "saved.rad"
   #else               
    // Utilisation du fichier de Radiosité
    load_file "saved.rad"
    pretrace_start 1
    pretrace_end 1
    count 160*rad_count
    nearest_count 10+rad_quality
    error_bound 0.5/rad_quality
    recursion_limit rad_bounces
    always_sample off
    brightness rad_brightness
   #end
   gray_threshold .5
  
  }
 #end
}
// Finition pour toutes les Textures:
#default{texture{finish{ambient 0 diffuse 0.3 conserve_energy}}}
// HDRI environment
sphere{
 0,500
 texture{
  pigment{image_map{hdr "kitchen_probe" map_type 1 interpolate 2}}  //Image format HDRI
  finish{ambient .5 diffuse 0.7}
  rotate 90*y
 }
}
// Plan Support
plane{y,-3
 texture{
  pigment{image_map{jpeg "Deck_t.jpg"}} // Image format JPG
  normal{bump_map{jpeg "Deck_t.jpg"}}
  finish{reflection{0,.1}}
  translate -.5 rotate <90,45,0> scale <2,2,2>*30
 }
}
//========================================================


//______________________________________________________________

Ceci étant fait, pour adapter la qualité et les images à votre convenance,
dans le bloc ajouté il faut changer les paramètres suivants:

Qualité:

#declare rad_quality=   1; // 1-10 (1=very basic ... 10=very good)  <-- Comme indiqué de 1 à 10 (10 étant long à calculer)
#declare rad_bounces=   1; // >0 (more of 5 hardly makes a difference) <-- 1 à 5 (5 étant long à calculer)

Images:

 texture{
  pigment{image_map{hdr "kitchen_probe" map_type 1 interpolate 2}}  //Image format HDRI
  finish{ambient .5 diffuse 0.7}
  rotate 90*y
 }
}
// Plan Support
plane{y,-3
 texture{
  pigment{image_map{jpeg "Deck_t.jpg"}} // Image format JPG
  normal{bump_map{jpeg "Deck_t.jpg"}}
  finish{reflection{0,.1}}
  translate -.5 rotate <90,45,0> scale <2,2,2>*30  <-- 45 angle de rotation - 2,2,2 taille de l'image x,y,z
 }


(Click droit et enregistrer sous)
Les images sont à mettre dans le repertoire "votre dossier Eagle\ulp\Eagle3D\povray\" .


MODIFICATIONS POUR USAGE GÉNÉRAL   

Une autre façon de faire, qui permet d'avoir ces réglages en permanence
est d'ajouter les modifications dans le fichier user.inc

Voici un extrait de mon fichier user.inc avec réglage de la caméra, de la lumière et l'ajout de l'image de fond et HDRI.


// Ajout pour la position par défaut de la cam
#declare cam_x = 50;
#declare cam_y = 272;
#declare cam_z = -210;
#declare cam_a = 22;
#declare cam_look_x = 5;
#declare cam_look_y = -5;
#declare cam_look_z = 25; 
// fin de l'ajout cam


#version 3.7;     // <--- Ajout pour la nouvelle version de POVRay   




//Ajout des paramètre de lumière par defaut


#declare lgt1_pos_x = 31;
#declare lgt1_pos_y = 47;
#declare lgt1_pos_z = 28;
#declare lgt1_intense = 0.5;
#declare lgt2_pos_x = -31;
#declare lgt2_pos_y = 47;
#declare lgt2_pos_z = 28;
#declare lgt2_intense = 0.0;
#declare lgt3_pos_x = 31;
#declare lgt3_pos_y = 47;
#declare lgt3_pos_z = -19;
#declare lgt3_intense = 0.0;
#declare lgt4_pos_x = -31;
#declare lgt4_pos_y = 47;
#declare lgt4_pos_z = -19;
#declare lgt4_intense = 0.0;


// fin de l'ajout lumière





//______________________________________________________________ 


/**/
//                                                               <-----Ajout pour le HDRI


//========================================================


// Controle de radiosité
#declare use_radiosity= 2; // 1=load, 2=save, 0=off
#declare rad_quality=   1; // 1-10 (1=very basic ... 10=very good)
#declare rad_bounces=   1; // >0 (more of 5 hardly makes a difference)
#declare rad_brightness=8; // increase if needed
global_settings {
 assumed_gamma 1.8
 #if (use_radiosity)
  radiosity {        // Ne rien modifier, régler les paramètres au dessus
   #declare rad_count=rad_quality; 
   #if (use_radiosity=2) 
    // Enregistrement du fichier de Radiosité
    pretrace_start 0.05
    pretrace_end 0.005
    count 160*rad_count
    nearest_count 10+rad_quality
    error_bound 0.5/rad_quality
    recursion_limit rad_bounces
    brightness rad_brightness
    save_file "saved.rad"
   #else                
    // Utilisation du fichier de Radiosité
    load_file "saved.rad"
    pretrace_start 1
    pretrace_end 1
    count 160*rad_count
    nearest_count 10+rad_quality
    error_bound 0.5/rad_quality
    recursion_limit rad_bounces
    always_sample off
    brightness rad_brightness
   #end
   gray_threshold .5 
   
  }
 #end
}
// Finition pour toutes les Textures:
#default{texture{finish{ambient 0 diffuse 0.4 conserve_energy}}}
// HDRI environment
sphere{
 0,500
 texture{
  pigment{image_map{hdr "kitchen_probe" map_type 1 interpolate 2}}  //Image format HDRI
  finish{ambient .5 diffuse 0.8}
  rotate 90*y
 }
}  
// Plan Support
plane{y,-3
 texture{
  pigment{image_map{jpeg "Deck_t.jpg"}} // Image format JPG
  normal{bump_map{jpeg "Deck_t.jpg"}}
  finish{reflection{0,.5}}
  translate -.5 rotate <90,45,0> scale <2,2,2>*30
 }
}




//______________________________________________________________            fin de l'ajout


                                 


Remplacement des lumières classiques

Vous pouvez remplacer les lumières par défaut par un éclairage plus réaliste, donnant des ombres douces.

Tournez l'intensité des lampes par defaut à zero, et ajouter une lampe "Area":

//Ajout des paramètre de lumière par défaut

#declare lgt1_pos_x = 31;
#declare lgt1_pos_y = 47;
#declare lgt1_pos_z = 28;
#declare lgt1_intense = 0.0;     <----- zéro
#declare lgt2_pos_x = -31;
#declare lgt2_pos_y = 47;
#declare lgt2_pos_z = 28;
#declare lgt2_intense = 0.0;     <----- zéro
#declare lgt3_pos_x = 31;
#declare lgt3_pos_y = 47;
#declare lgt3_pos_z = -19;
#declare lgt3_intense = 0.0;     <----- zéro
#declare lgt4_pos_x = -31;
#declare lgt4_pos_y = 47;
#declare lgt4_pos_z = -19;
#declare lgt4_intense = 0.0;    <----- zéro

 //fin de l'ajout lumière



// remplacement des lumières par une "Area light" pour avoir des ombres douces.

light_source {     <0.0, 0.0, 0.0>
  color rgb <1.000, 1.000, 0.9>*1.2854
  area_light <2.000, 0.000, 0.000>, <0.000, 2.000, 0.000>, 3, 3
  adaptive 1
  orient
  jitter
  scale 21.241895
  //rotate <-131.296814, -38.562782, 0.0>
  translate  <6.410895, 80.312821, 15.339295>
}




De cette façon quelque soit le circuit que vous prévisualiserez vous aurez toujours les mêmes paramètres.
En cas de modifications, cam ou lumière, un seul fichier à modifier.

2 commentaires :

Anonyme a dit…

Merci pour les explications, pas facile quand on l'a jamais fait, mais on n'y arrive. Reste qu'au départ j'avais une image noir, mais il ne faut pas hésiter à modifier certains paramètres de "cam" et de lumière pour avoir une image digne de ce nom.
Merci beaucoup pour ton tutoriel.

HeartyGFX a dit…

Bonjour,

Je le concède bien volontiers.
Avant d'arriver à ces résultats j'ai du plancher pas mal de temps.
Une fois la procédure comprise et mise en place,
le résultat est à la hauteur.
Ensuite tout est question de positionnement de la figure de la caméra et des lumières
afin d'obtenir le rendu voulu.

Merci pour le commentaire.

A bientôt,

;)