Print at Dec 19, 2025, 11:18:53 PM

Posted by Puybaret at Mar 28, 2010, 10:23:21 AM
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. wink

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. sad

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 :

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... sad
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator