Simuler des éclairages intérieurs

This topic has been viewed 6590 times and has 6 replies
Thread status: Active
Vos suggestions et questions en français [img]http://www.sweethome3d.com/images/flags/fr_small.gif[/img]
Post Reply New Topic
fma
Posts: 62
Joined: Mon Mar 15, 2010 8:14 am

Simuler des éclairages intérieurs

Post by fma »

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 :

Code: Select all

    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
fma
Posts: 62
Joined: Mon Mar 15, 2010 8:14 am

Re: Simuler des éclairages intérieurs

Post by fma »

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 ?
Attachments
test-light.jpg
test-light.jpg (112.89 KiB) Viewed 3463675 times
Frédéric
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Simuler des éclairages intérieurs

Post by Puybaret »

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 :

Image

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 :

Code: Select all

for (HomePieceOfFurniture piece : home.getFurniture()) {
  if (piece instanceof HomeLight) {
    for (LightSource lightSource : ((HomeLight)piece).getLightSources()) {
      int lightColor = lightSource.getColor();
      this.sunflow.parameter("radiance", null, 
          (lightColor >> 16) * 100, 
          ((lightColor >> 8) & 0xFF) * 100, 
          (lightColor & 0xFF) * 100);
      this.sunflow.parameter("center", 
          new Point3(piece.getX() - piece.getWidth() / 2 
                         + (lightSource.getX() * piece.getWidth()),
                     piece.getElevation() 
                         + (lightSource.getZ() * piece.getHeight()),
                     piece.getY() + piece.getDepth() / 2 
                         - (lightSource.getY() * piece.getDepth())));                    
      this.sunflow.parameter("radius", 0.5f);
      this.sunflow.parameter("samples", samples);
      this.sunflow.light(UUID.randomUUID().toString(), "sphere");
    }
  }
}
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
fma
Posts: 62
Joined: Mon Mar 15, 2010 8:14 am

Re: Simuler des éclairages intérieurs

Post by fma »

C'est déjà super, ça ! Je vais tester...

Dans la bibliothèque, comment associes-tu un meuble à la classe utilisée en interne ?
Frédéric
fma
Posts: 62
Joined: Mon Mar 15, 2010 8:14 am

Re: Simuler des éclairages intérieurs

Post by fma »

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
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Simuler des éclairages intérieurs

Post by Puybaret »

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
fma
Posts: 62
Joined: Mon Mar 15, 2010 8:14 am

Re: Simuler des éclairages intérieurs

Post by fma »

Merci pour toutes ces précieuses infos ; je vais regarder tout ça de plus près...
Frédéric
Post Reply New Topic

Who is online

Users browsing this forum: No registered users and 1 guest