#povray

tth@diaspora.psyco.fr

Savez-vous ce qu'est un #hexacone ? C'est un objet étrange sur lequel je bricole en ce moment avec le rendu de #povray. J e suis parti sans idée préconçue et je vais laisser dériver mon imagination...

zebulon_1er@diasp.org

#syntax_highlighting #xml #gtksourceview #povray
[fr] Depuis le passage à la version 2.0 des fichiers de définition d'un langage, la coloration syntaxique ne se fait plus avec les fichiers en version 1.0. Il faut tout réécrire -- voire ajouter un fichier pour le type mime. La conversion d'une V1 vers la V2 ne se fait pas en 2 coups de cuillère à pot, justement et ce n'est pas une mince affaire... Donc, je n'ai plus de coloration syntaxique pour POV-Ray, ce qui est fort dommage, car ça m'aidait bien à m'y retrouver.

Language Definition v2.0 Reference
Language Definition v2.0 Tutorial -- C language

J'essaie de mettre mon nez là-dedans depuis quelques jours, mais je me perds dans les définitions... D'autant que je ne maitrise pas déjà les expressions de type regex -- ce qui est nécessaire, pourtant. C'est vraiment pas simple...

zebulon_1er@diasp.org

#fr #en #tags #aide-demandée #help-wanted #diaspora #diasp #diasporg

Problem: when I go to #sundaypov page, I only see my own 2 posts if I'm connected to my account on diasp.org, and I see all 4 posts if I'm not connected to my account. Other tags -- eg #povray -- seems to work fine. This problem occurs on PC Debian running Firefox, or running Epiphany [aka Web]. It's also true on Android cellphone running Firefox or running FDroid/Dandelion.
The other #sundaypov user @tTh using another pod, can see everything fine.

Question: I'd like someone having a diasp.org account doing this test:
- create a post, containing "#sundaypov test"
- go to #sundaypov tag page (just click on tag to do so), and check if only your post is visible, or more. Please tell exactly what.

Other pods user is welcome to check this test, too.

At the moment, there exists only 4 posts: 2 from me, 2 from @tTh.

Thanks for helping. ;)

zebulon_1er@diasp.org

#cgi #povray
[fr] Chose promise, chose due.


...
==== [Parsing...] ==========================================================
datetime seconds = 1664614401
Environment map: "povray/Images/Maps/Environment/nature/glass_passage_4k.exr"
Radiosity_Final in use
----------------------------------------------------------------------------
Parser Statistics
----------------------------------------------------------------------------
Finite Objects:          122
Infinite Objects:          0
Light Sources:             2
Total:                   124
----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  1 minutes 17 seconds (77.196 seconds)
              using 1 thread(s) with 48.081 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.001 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........On  (Method 2, Threshold 0.012, Depth 3, Jitter 1.00, Gamma 2.50)

==== [Rendering...] ========================================================
----------------------------------------------------------------------------
Render Statistics
Image Resolution 1920 x 1080
----------------------------------------------------------------------------
Pixels:          2214937   Samples:        26749784   Smpls/Pxl: 12.08
Rays:         3340116737   Saved:         294197720   Max Level: 5/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Blob                       26438658124     10106821219     38.23
Blob Component            311082761349     81567902646     26.22
Blob Bound               3629569968762   1143450081922     31.50
Box                        57040815425      5625816864      9.86
Cone/Cylinder             159201252025     35930185139     22.57
CSG Intersection           94529078086      5762937110      6.10
CSG Merge                  35526930485       883451592      2.49
Isosurface                  9748725220      2588756394     26.55
Isosurface Container       13981715447      9748748487     69.72
Isosurface Cache             339834072        55907966     16.45
Plane                      34747526078     15454333049     44.48
Sphere                     32780040255     11868542227     36.21
Torus                        779404407         7706024      0.99
Torus Bound                  779404407         8728409      1.12
True Type Font                  193961           28005     14.44
Bounding Box              357570940119    179114851597     50.09
----------------------------------------------------------------------------
Isosurface roots:        9721850965
Function VM calls:     299090261476
----------------------------------------------------------------------------
Roots tested:           14495201962   eliminated:           2745152602
Shadow Ray Tests:       27188375636   Succeeded:           12303693126
Shadow Cache Hits:       3311733325
Reflected Rays:          1322488035   Total Internal:        205017101
Refracted Rays:          1631900360
Transmitted Rays:          14782021
----------------------------------------------------------------------------
Radiosity samples calculated:           427477 (0.34 %)
  discarded due to low quality:          14015
  retained for re-use:                  413462
Radiosity samples reused:            125272118
Radiosity sample rays shot:          341981600
Radiosity octree nodes:                  65102
Radiosity octree samples/node:            6.35
Radiosity blocks examined:        149468616451
Radiosity blocks passed test 0:   149468616451 (100.00 %)
Radiosity blocks passed test 1:    51645328591 (34.55 %)
Radiosity blocks passed test 2:    33436489295 (22.37 %)
Radiosity blocks passed test 3:     3244799462 (2.17 %)
Radiosity blocks passed test 4:     2189966892 (1.47 %)
Radiosity blocks passed test 5:     2079234507 (1.39 %)
Radiosity blocks rejected:        147389381944 (98.61 %)
----------------------------------------------------------------------------
Radiosity Depth 0 calculated:           427477 (0.34 %)
Radiosity Depth 0 reused:            125272118
Radiosity Depth 0 rays shot:         341981600
----------------------------------------------------------------------------
Radiosity (final) calculated:           350330 (0.28 %)
Radiosity (final) reused:            125164141
Radiosity (final) rays shot:         280264000
----------------------------------------------------------------------------
  Pass     Depth 0           Total
----------------------------------------------------------------------------
  1             82              82
  2            377             377
  3           2590            2590
  4           9815            9815
  5+         64283           64283
  Final     350330          350330
----------------------------------------------------------------------------
  Total     427477          427477
  Weight     0.115 
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   2 hours 12 minutes 24 seconds (7944.230 seconds)
              using 8 thread(s) with 53926.107 CPU-seconds total
  Trace Time:     186 hours 17 minutes 42 seconds (670662.832 seconds)
zebulon_1er@diasp.org

#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'une isosurface {} et une fonction f_granite comme générateur de forme, ce n'est pas le plus compliqué :
```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 "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 (de woods.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à.

zebulon_1er@diasp.org

#cgi #povray
[en] An include file to build a nice dice, using two material {} of your choice. One for the plain dice, another one for the numbers. Usage :
[fr] Un fichier include pour modéliser un joli dé, utilisant deux material {} de votre choix. Un pour le dé lui-même, un autre pour les nombres. Utilisation :

FTZ_Dice(Size, BaseMaterial, DotsMaterial)

include file download here

zebulon_1er@diasp.org

#cgi #povray #gimp
[fr] Modélisation et rendu : povray 3.7. Montage final : gimp.
J'ai volontairement fait de très courtes vis et mis un éclairage ponctuel simple, pour accélérer le temps de rendu.
La colonne de gauche représente des pas de vis à droite (sens par défaut). Les deux autres colonnes représentent des pas de vis à gauche. Au centre, marquage classique. À droite, marquage alternatif.

zebulon_1er@diasp.org

#fr #aide-demandée #gimp #scripting

Alors, voilà : j'ai plus de 300 images à modifier avec GIMP couleurs → auto → balance des blancs.

Et, bien évidemment, pas de bol ( - "cimetière indien" es-tu là ? - oui :P - grrr :S ), ce filtre n'est pas disponible dans filtres → filtrer tous les calques, ce qui m'aurait permis, sinon, de charger ces images ensemble sous forme de calques, filtrer tous ces calques en une fois et sortir le résultat sous forme de GIF animé. Le tout en 1 passe.

Je dois donc créer un script bash qui ferait le boulot pour chaque image : charger l'image crée par #povray (.exr), la filtrer avec couleurs → auto → balance des blancs, puis sauver l'image modifiée, sous le même nom mais vers un autre dossier pour ne pas écraser l'image source.
Ou, mieux, charger l'image (comme nouveau calque), la filtrer, puis passer à l'image suivante (comme nouveau calque par dessus), etc. Et enfin, quitte à finaliser ça à la main, sauver sous forme de GIF animé.

Je ne trouve pas de documentation détaillée pour savoir comment appeler ce filtre dans une commande (script-fu ? en notation polonaise inversée)... appel qui serait passé à GIMP via un script bash.

zebulon_1er@diasp.org

#povray #cgi
[fr] J'ai encore ajouté 2 types de têtes de vis : fendue fraisée plate et fendue fraisée bombée.
Une petite image qui va bien. Avec un mapping d'environnement, ça a tout de suite un peu plus de réalimse.
;)

Ça se devine pas sur l'image, mais les pas de vis sont de vrais pas de vis, réalisés avec la fonction f_helix1().

zebulon_1er@diasp.org

#povray #cgi
[fr] Petit ajout, une nouvelle tête : fraisée 6 pans creux.
Dans ce GIF, j'ai ajouté les conteneurs (clip, bound) en cyan, ainsi que les axes de référence en bleu.
On peut voir que la tête fraisée 6 pans creux est en dessous du plan de référence, du fait que cette tête est entièrement noyée lors de l'assemblage. Ce qui n'est pas du tout le cas des 5 autres types de tête de vis.