Il était extrêmement important
d'avoir une texture de trottoir très réaliste, car l'effet de pluie était déterminant
dans la qualité atmosphérique de l'image. En particulier, il fallait des zones de bitume
sombre capables de refléter la lumière de façon non uniforme. Comme je n'imaginai pas
pouvoir y arriver de façon procédurale, je me tournai vers mon programme de dessin
favori. D'abord, je dessinai un ensemble de rectangles ayant des intensités variables de gris. Cette image fut utilisée comme base pour deux autres : (1) l'application d'un filtre de recherche de contours fournit un height field correspondant à l'objet trottoir (les craquelures suivant les bords des rectangles) ; (2) l'application d'un flou et d'une distortion donna un motif (image pattern) pour la texture. Ces images sont montrées sur la droite à 20% de leur taille originale : La texture elle-même est une texture map mélangeant, à travers le motif image_pattern (disponible dans Megapov et peut-être dans POV 3.5), deux textures avec des "finish" différents (notamment le taux de réflexion). L'effet "mouillé" fut obtenu en faisant la moyenne de plusieurs "normales" (bump_map) de différentes tailles. L'utilisation de plusieurs couches de normales (dont une avec une échelle très petite) a pour but de simuler une réflexion brouillée. Cette fonctionalité (reflection_blur) existe en fait dans Megapov, mais les temps de calculs étaient tellement longs que j'ai préféré utiliser la technique traditionnelle. Voici le code : |
#declare c10=color
rgb<0.95,0.86,0.5>;
#declare bsize=0.3;
#declare N1=normal{bump_map{png "bitmaps\normalsw"} bump_size bsize
turbulence 0.3 scale 10000}
#declare N2=normal{bozo bsize turbulence 1 scale 0.001}
#declare N3=normal{bozo bsize turbulence 1 scale 0.01}
#declare N4=normal{bozo bsize turbulence 1 scale 0.1}
#declare N5=normal{bozo bsize turbulence 1 scale 1}
#declare txtSW1=texture{
pigment{c10*0.1}
normal{average normal_map {[2.0 N1][1 N2][1 N3][1 N4][1 N5]}}
finish{ambient 0 diffuse 0.02 specular 0.002 roughness 0.1
metallic 2 reflect_metallic reflection_type 1 reflection_min 0.0
reflection_max 1 reflection_falloff 6 conserve_energy
}
}
#declare txtSW2=texture{
pigment{c10*0.1}
normal{average normal_map {[1 N2][1 N3][0.4 N4][0.2 N5]} scale 3}
finish{ambient 0 diffuse 0.02 specular 0.002 roughness 0.1
reflection 0.1 reflect_metallic
}
}
#declare txtStr1=texture{
pigment{c10*0.01}
normal{average normal_map {[2.0 N1][1 N2][1 N3][1 N4][2 N5]}}
finish{ambient 0 diffuse 0 specular 0.002 roughness 0.1
reflect_metallic reflection_type 1 reflection_min 0.0
reflection_max 0.7 reflection_falloff 6 conserve_energy
}
}
#declare txtStr2=texture{
pigment{c10*0.01}
normal{average normal_map {[1 N2][1 N3][0.4 N4][0.2 N5]} scale 3}
finish{ambient 0 diffuse 0 specular 0.002 roughness 0.1
reflection 0.1 reflect_metallic
}
}
#declare matSW=material{
texture {
image_pattern { png "bitmaps\swmap" }
turbulence 0.01
texture_map {[0 txtSW1 scale <1/xSW,1/zSW,1>][1 txtSW2 scale
<1/xSW,1/zSW,1>]}
scale <xSW,zSW,1> rotate x*90
}
interior{ior 1.33}
}
Ce "material" a été appliqué au height field du trottoir, et cet élement a été répliqué plusieurs fois jusqu'à obtenir le trottoir entier.
Plus tard, je dessinai quelques papiers gras dans sPatch qui furent disposés aléatoirement avec une boucle sur le trottoir.
La rue est une isosurface plane avec un bruit 3D. Sa texture est similaire à celle du trottoir. Les marquages au sol sont des height fields et des isosurfaces.