Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Simuler des éclairages intérieurs
Emmanuel, a ton avis, est-il possible de simuler des éclairages intérieurs ?
L'idée serait d'ajouter une sphère transparente, et de lui donner un nom spécial, genre 'light_xxx', puis, dans le code de PhotoRenderer, de rechercher tous les objets dont le nom commence par 'light_', de récupérer ses coordonnées, et de créer une lumière SunFlow de type 'sphere'...
Pour récupérer les objets, je pense à un truc genre :
for (HomePieceOfFurniture furniture : home.getFurniture()) { if (furniture.getName().startsWith("light_")) { float x = furniture.getX(); float y = furniture.getY(); ...
Après, on peut imaginer d'autres types (spots, plans lumineux...). L'idéal serait un vrai type dédié, avec possibilité d'éditer quelques paramètres (puissance, etc...).
----------------------------------------
Frédéric
----------------------------------------
[Edit 1 times,
last edit by fma at Mar 27, 2010, 12:00:44 PM]
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Simuler des éclairages intérieurs
Bon, ben ça marche !
Le seul truc, c'est que la lumière elle-même n'est pas visible...
J'imagine qu'il faut que l'objet soit transparent (ou du moins, translucide). Mais je crois qu'il y a une limitation avec Sunflow, c'est bien ça ?
---------------------------------------- test-light.jpg
(115602 bytes)
(Download count: 29218)
----------------------------------------
Frédéric
France
Joined: Nov 7, 2005
Post Count: 9426
Status:
Offline
Re: Simuler des éclairages intérieurs
Toi qui a déjà bidouillé le code de Sweet Home 3D, je suis étonné que tu n'aies pas vu passer des classes comme LightSource, HomeLight ou CatalogLight.
En fait, la gestion des lumières est partiellement programmée dans Sweet Home 3D. Dans les bibliothèques de meubles, tous les objets qui appartiennent à la catégorie Luminaires sont en fait mémorisés comme des objets de classe CatalogLight avec un ou plusieurs objets LightSource associés, et ce depuis mars 2009 (version 1.7 de Sweet Home 3D et version 1.0.3 des bibliothèques de meubles). Mais ça ne va pas plus loin pour l'instant.
J'ai fait quelques essais comme toi avec SunFlow, comme le montre l'image suivante :
où on voit que l'applique murale au fond à gauche et les bougies éclairent la scène.
Pour tous les programmeurs que ça tente de générer des images similaires, la modification à effectuer dans la classe PhotoRenderer n'est pas compliquée à reproduire. Pour remplacer les lumières calculées au plafond par les sources lumineuses du catalogues, il faut remplacer les lignes 179 à 218 par le code suivant :
Pourquoi ne pas aller plus loin alors ? Comme tu le pressens, je suis surtout gêné par la limitation de SunFlow qui ne traite pas la lumière à travers des surfaces transparentes. Pour les vitres, on peut les enlever, mais pour les ampoules il faudrait être capable de les retrouver pour les enlever et pour les abat-jours translucides, on est coincé. Au final, la plupart des lumières du catalogue n'ont aucun effet avec le code précédent à cause de cela...
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
----------------------------------------
[Edit 3 times,
last edit by Puybaret at Mar 28, 2010, 10:28:25 AM]
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Simuler des éclairages intérieurs
Quelle applique as-tu utilisé sur l'image ci-dessus ? Je n'en trouve pas beaucoup qui éclairent, et aucune avec une telle intensité, ni tout le tour... La lumière est toujours bloquée par un bout du luminaire.
Sinon, comment faire pour créer un objet qui sera instancié avec le type HomeLight/LighSource ?
----------------------------------------
Frédéric
France
Joined: Nov 7, 2005
Post Count: 9426
Status:
Offline
Re: Simuler des éclairages intérieurs
Les meubles du catalogue sont créés dans la classe DefaultFurnitureCatalog à partir de fichiers en ressource, ou de fichiers SH3F. A ceux-ci s'ajoutent les meublent importés dans le catalogue par l'utilisateur ; ils sont gérés par la classe FileUserPreferences mais ne peuvent pas être des lumières (ça n'est pas la peine puisque l'utilisateur n'a encore pas les moyens de paramétrer les lumières).
Les objets HomePieceOfFurniture, HomeDoorOrWindow et HomeLight affichés dans le plan sont créés à partir de ceux du catalogue dans la méthode addHomeFurniture de la classe HomeController.
Si tu veux créer des lumières toi-même, il te faut plutôt créer d'abord un objet CatalogLight que tu passes en paramètre au constructeur de HomeLight, puis tu ajoutes les instances de HomeLight à l'instance Home du logement édité. Le constructeur de la classe CatalogLight demandant plein de paramètres, tu vas peut-être coincer un peu sur les valeurs obligatoires comme icon ou model. Ils sont de type Content et je te conseille de leur passer des instances de URLContent qui désigneront l'URL d'une image pour l'icône et celle d'un fichier OBJ pour le modèle 3D. Pour que le modèle 3D soit complètement invisible dans SunFlow, nomme l'objet qui y est décrit avec un nom qui commence par la chaîne sweethome3d_window_pane.
J'espère que toutes ces informations te permettront de débuter.
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator