Search
Items tagged with: cgi
#cgi #povray
ping @tTh, @Nunuche Follette, @inco gnito, ... 😀Bois et Résine Epoxyde dans povray
Après avoir un peu fait joujou avec mon dé, à lui essayer tout plein de textures diverses et variées... j'ai repensé à ces vidéos, postées par @Nunuche Follette, sur des objets en bois flotté noyé dans de la résine époxyde.
J'ai donc tout naturellement voulu faire un dé de la sorte.
Créer un objet qui sera inséré, comme un bout de bois, à l'aide d'uneisosurface {}
et une fonctionf_granite
comme générateur de forme, ce n'est pas le plus compliqué :
/* ** Gros dé en bois et résine époxyde */ \#version 3.7; \#include "colors.inc" \#include "consts.inc" \#include "functions.inc" \#include "transforms.inc" \#include "isocsg/iso_csg.inc" // ISO_CSG, voir http://imagico.de/pov/ic/index.php \#declare EPSILON = 1e-4; // toute petite valeur, pour les marges \#ifndef (ASPECT_RATIO) #declare ASPECT_RATIO = image_width / image_height; \#end \#declare AMBIENT_LIGHT = rgb 1/3; \#default { finish { ambient AMBIENT_LIGHT } } global_settings { charset utf8 assumed_gamma srgb ambient_light AMBIENT_LIGHT } \#declare SEED = seed(639663322); \#macro V3Rand() < rand(SEED), rand(SEED), rand(SEED) > \#end \#macro V3SRand() (V3Rand() * 2 - 1) \#end \#declare Size = 5; // taille du dé : 5 cms \#declare Size2 = Size / 2; \#declare Size2E = Size2 + EPSILON; \#local f1 = IC_Transform(f_granite, transform { scale Size * pi translate V3SRand() * 100 rotate V3SRand() * 180 } ) isosurface { function { f1(x,y,z) * 0.4 - 0.075 } contained_by { box { -Size2E, Size2E } } accuracy 0.001 evaluate 1.1*0.6, sqrt(1/0.6), 0.7 pigment { White } translate y * Size2E } // ground plane { y, 0 pigment { Gray } } camera { location -z * 10 look_at o direction z * 10 sky y right x * ASPECT_RATIO up y translate -z * 100 rotate x * 30 rotate y * -60 translate y * Size2 } // light intensity factor // a: light distance (from object : light pos - object pos) // b: light fade distance // c: light fade power \#declare f_LightIntensityFactor = function(a,b,c) { pow(a/b + 1, c) / 2 } \#local Pos = vtransform(< -1, 2, -1 > * 100, transform { rotate y * -60 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 200, 1.5); light_source { Pos color White * 1/3 * Int fade_distance 200 fade_power 1.5 } \#local Pos = vtransform(< -1, 1, -1 > * 100, transform { rotate y * -150 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 100, 1.5); light_source { Pos color White * 2/3 * Int fade_distance 100 fade_power 1.5 }
Délimité par un cube.
Sauf que mon conteneur, ce n'est pas juste un simple cube (contained_by { box { -Size2E, Size2E } }
), mais un dé, fait de l'intersection d'une sphère et d'un cube à laquelle on a enlevé des sphères écrasées pour y numéroter les faces de 1 à 6.
On a alors simplement l'idée d'utiliser le dé, fait en CSG classique, que l'on va intersecter (je ne sais pas si ça se dit) avec le morceau de bois précédemment créé en isosurface :
/* ** Gros dé en bois et résine époxyde */ \#version 3.7; \#include "colors.inc" \#include "consts.inc" \#include "functions.inc" \#include "transforms.inc" \#include "isocsg/iso_csg.inc" // ISO_CSG, voir http://imagico.de/pov/ic/index.php \#include "ftz_dice.inc" \#declare EPSILON = 1e-4; // toute petite valeur, pour les marges \#ifndef (ASPECT_RATIO) #declare ASPECT_RATIO = image_width / image_height; \#end \#declare AMBIENT_LIGHT = rgb 1/3; \#default { finish { ambient AMBIENT_LIGHT } } global_settings { charset utf8 assumed_gamma srgb ambient_light AMBIENT_LIGHT } \#declare SEED = seed(639663322); \#macro V3Rand() < rand(SEED), rand(SEED), rand(SEED) > \#end \#macro V3SRand() (V3Rand() * 2 - 1) \#end \#declare Size = 5; // taille du dé : 5 cms \#declare Size2 = Size / 2; \#declare Size2E = Size2 + EPSILON; \#local f1 = IC_Transform(f_granite, transform { scale Size * pi translate V3SRand() * 100 rotate V3SRand() * 180 } ) intersection { isosurface { function { f1(x,y,z) * 0.4 - 0.075 } contained_by { box { -Size2E, Size2E } } accuracy 0.001 evaluate 1.1*0.6, sqrt(1/0.6), 0.7 } FTZ_Dice( Size, material {}, material {} ) pigment { White } translate y * Size2E } // ground plane { y, 0 pigment { Gray } } camera { location -z * 10 look_at o direction z * 10 sky y right x * ASPECT_RATIO up y translate -z * 100 rotate x * 30 rotate y * -60 translate y * Size2 } // light intensity factor // a: light distance (from object : light pos - object pos) // b: light fade distance // c: light fade power \#declare f_LightIntensityFactor = function(a,b,c) { pow(a/b + 1, c) / 2 } \#local Pos = vtransform(< -1, 2, -1 > * 100, transform { rotate y * -60 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 200, 1.5); light_source { Pos color White * 1/3 * Int fade_distance 200 fade_power 1.5 } \#local Pos = vtransform(< -1, 1, -1 > * 100, transform { rotate y * -150 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 100, 1.5); light_source { Pos color White * 2/3 * Int fade_distance 100 fade_power 1.5 }
Voilà, c'est déjà mieux. Mon morceau de bois ne dépassera pas du dé conteneur.
Reste plus qu'à utiliser une jolie texture bois pour cette partie... disons T_Wood13 (dewoods.inc
fourni avec povray) :
/* ** Gros dé en bois et résine époxyde */ \#version 3.7; \#include "colors.inc" \#include "consts.inc" \#include "functions.inc" \#include "transforms.inc" \#include "woods.inc" \#include "isocsg/iso_csg.inc" // ISO_CSG, voir http://imagico.de/pov/ic/index.php \#include "ftz_dice.inc" \#declare EPSILON = 1e-4; // toute petite valeur, pour les marges \#ifndef (ASPECT_RATIO) #declare ASPECT_RATIO = image_width / image_height; \#end \#declare AMBIENT_LIGHT = rgb 1/3; \#default { finish { ambient AMBIENT_LIGHT } } global_settings { charset utf8 assumed_gamma srgb ambient_light AMBIENT_LIGHT } \#declare SEED = seed(639663322); // changez ce nombre, et toute la chaîne de nombres aléatoires appelés sera différente \#macro V3Rand() < rand(SEED), rand(SEED), rand(SEED) > \#end \#macro V3SRand() (V3Rand() * 2 - 1) \#end \#declare Size = 5; // taille du dé : 5 cms \#declare Size2 = Size / 2; \#declare Size2E = Size2 + EPSILON; \#local f1 = IC_Transform(f_granite, transform { scale Size * pi translate V3SRand() * 100 rotate V3SRand() * 180 } ) intersection { isosurface { function { f1(x,y,z) * 0.4 - 0.075 } contained_by { box { -Size2E, Size2E } } accuracy 0.001 evaluate 1.1*0.6, sqrt(1/0.6), 0.7 } FTZ_Dice( Size, material {}, material {} ) texture { T_Wood13 translate V3SRand() * 1e4 rotate V3SRand() * 180 } translate y * Size2E } // ground plane { y, 0 pigment { Gray } } camera { location -z * 10 look_at o direction z * 10 sky y right x * ASPECT_RATIO up y translate -z * 100 rotate x * 30 rotate y * -60 translate y * Size2 } // light intensity factor // a: light distance (from object : light pos - object pos) // b: light fade distance // c: light fade power \#declare f_LightIntensityFactor = function(a,b,c) { pow(a/b + 1, c) / 2 } \#local Pos = vtransform(< -1, 2, -1 > * 100, transform { rotate y * -60 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 200, 1.5); light_source { Pos color White * 1/3 * Int fade_distance 200 fade_power 1.5 } \#local Pos = vtransform(< -1, 1, -1 > * 100, transform { rotate y * -150 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 100, 1.5); light_source { Pos color White * 2/3 * Int fade_distance 100 fade_power 1.5 }
Il ne reste plus qu'à ajouter le dé en résine époxyde :
/* ** Gros dé en bois et résine époxyde */ \#version 3.7; \#include "colors.inc" \#include "consts.inc" \#include "finish.inc" \#include "functions.inc" \#include "transforms.inc" \#include "woods.inc" \#include "isocsg/iso_csg.inc" // ISO_CSG, voir http://imagico.de/pov/ic/index.php \#include "ftz_dice.inc" \#declare EPSILON = 1e-4; // toute petite valeur, pour les marges \#ifndef (ASPECT_RATIO) #declare ASPECT_RATIO = image_width / image_height; \#end \#declare AMBIENT_LIGHT = rgb 1/3; \#default { finish { ambient AMBIENT_LIGHT } } global_settings { charset utf8 assumed_gamma srgb ambient_light AMBIENT_LIGHT } \#declare SEED = seed(639663322); \#macro V3Rand() < rand(SEED), rand(SEED), rand(SEED) > \#end \#macro V3SRand() (V3Rand() * 2 - 1) \#end \#declare Size = 5; // taille du dé : 5 cms \#declare Size2 = Size / 2; \#declare Size2E = Size2 + EPSILON; \#local f1 = IC_Transform(f_granite, transform { scale Size * pi translate V3SRand() * 100 rotate V3SRand() * 180 } ) \#local o_Wood = intersection { isosurface { function { f1(x,y,z) * 0.4 - 0.075 } contained_by { box { -Size2E, Size2E } } accuracy 0.001 evaluate 1.1*0.6, sqrt(1/0.6), 0.7 } FTZ_Dice( Size, material {}, material {} ) texture { T_Wood13 translate V3SRand() * 1e4 rotate V3SRand() * 180 } } \#local o_Dice = FTZ_Dice(Size, // résine époxyde légèrement bleue material { #local C1 = < 186, 229, 255 > / 255; #local C2 = < 117, 157, 181 > / 255; #local T = 0.995; // transparence totale (filtrage compris) #local F = 0.2; // filtrage seul texture { pigment { color C1 filter F transmit (T - F) } finish { diffuse 0.15 specular 0.8 roughness 0.001 reflection { C1/17 fresnel on } } } interior { ior 1.5 //dispersion 1.0125 // très long à rendre, avec de la dispersion fade_color C2 fade_distance Size * 0.85 fade_power 1001 } }, // matériau pour les nombres material { texture { pigment { color White * 0.995 } finish { Dull } } } ); union { object { o_Wood } object { o_Dice } translate y * Size2E } // ground plane { y, 0 pigment { Gray } } camera { location -z * 10 look_at o direction z * 10 sky y right x * ASPECT_RATIO up y translate -z * 100 rotate x * 30 rotate y * -60 translate y * Size2 } // light intensity factor // a: light distance (from object : light pos - object pos) // b: light fade distance // c: light fade power \#declare f_LightIntensityFactor = function(a,b,c) { pow(a/b + 1, c) / 2 } \#local Pos = vtransform(< -1, 2, -1 > * 100, transform { rotate y * -60 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 200, 1.5); light_source { Pos color White * 1/3 * Int fade_distance 200 fade_power 1.5 } \#local Pos = vtransform(< -1, 1, -1 > * 100, transform { rotate y * -150 }); \#local Int = f_LightIntensityFactor(vlength(Pos), 100, 1.5); light_source { Pos color White * 2/3 * Int fade_distance 100 fade_power 1.5 }
Et voilà.