Dirt shader

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

Dirt shader

Message par cedric » 05 Mai 2014, 17:27

Post assez intéressant pour faire du dirt et du rounded edge sur un mesh !

http://www.blenderartists.org/forum/sho ... light=dirt

Le script de piotr sert à faire du rounded edge sur les arrêtes des mesh.
J'ai testé, ça marche impec avec ce script.

Code : Tout sélectionner
void rng_seed(output int rng, int seed)
{
  int chash = seed;
  if (chash == 0) chash = 1;
  rng = chash * 30391861;
}

float rng_uniform(output int rng)
{
  float res = rng / float(2137483647) * 0.5 + 0.5;
  rng *= 30391861;
  return res;
}

void to_unit_disk(float x, float y, output float x_out, output float y_out)
{
  float r, phi;
  float a = 2.0 * x - 1.0;
  float b = 2.0 * y - 1.0;
   
  if(a > -b)
  { if(a > b)
    { r = a;
      phi = M_PI_4 *(b/a);
    }
    else
    { r = b;
      phi = M_PI_4 *(2.0 - a/b);
  } }
  else
  { if(a < b)
    { r = -a;
      phi = M_PI_4 *(4.0 + b/a);
    }
    else
    { r = -b;
      if(b != 0.0) phi = M_PI_4 *(6.0 - a/b);
      else phi = 0.0;
  } }
  x_out = r * cos(phi);
  y_out = r * sin(phi);
}

void make_orthonormals(vector N, output vector a, output vector b)
{
  if(N[0] != N[1] || N[0] != N[2]) a = cross(vector(1, 1, 1), N);
  else a = cross(vector(-1, 1, 1), N);
 
  a = normalize(a);
  b = cross(N, a);
}

vector sample_cos_hemisphere(vector N, float randu, float randv)
{
  vector T, B;
   
  make_orthonormals(N, T, B);
  to_unit_disk(randu, randv, randu, randv);
  float costheta = sqrt(max(1.0 - randu * randu - randv * randv, 0.0));

  return randu * T + randv * B + costheta * N;
}

shader edge_smooth(
  int Concave = 1,
  int Convex = 1,
  int Samples = 4,
  float Mask = 1,
  float Distance = 0.1,
  normal Normal = N,
  output normal outNormal = 0
)
{
  int i, rng;
  float f, randu, randv, ray_t, hits = 0;
 // int Samples = 2;
  vector ray_P, ray_R;
  normal hit_normal = N;
  outNormal = Normal;
  float hit_dist;
  float normal_blend;
  float s_weight = 1/Samples;

  f = fmod(cellnoise(P*123456.0), 1.0);
  rng_seed(rng, int(f * 21374647));

    if (Mask > 0.5) {
      for(i = 0; i < Samples; i++) {
            randu = rng_uniform(rng);
            randv = rng_uniform(rng);
           
            ray_P = P;
            ray_R = sample_cos_hemisphere(-N, randu, randv);
            ray_t = Distance;

               
            if (Concave == 1)
            { if(trace(ray_P, -ray_R, "maxdist", ray_t)) {
                    getmessage ("trace", "N", hit_normal);
                    getmessage ("trace", "hitdist", hit_dist);
                    normal_blend = 1-(hit_dist/Distance);
                    outNormal = Normal + (hit_normal*normal_blend);
                    break;
                }
            }
            if (Convex == 1) {
                if(trace(ray_P, ray_R, "maxdist", ray_t)) {
                    getmessage ("trace", "N", hit_normal);
                    getmessage ("trace", "hitdist", hit_dist);
                    normal_blend = 1-(hit_dist/Distance);
                    if (dot(I, -hit_normal) > 0.0) {
                        outNormal = Normal - (hit_normal*normal_blend);
                    }
                    break;
                }
            }
      }
    }
  outNormal = normalize(outNormal);
}


Image
Image

Me suis fais une scène de test > https://www.dropbox.com/s/h16byu2bnxow9 ... only.blend

Pensez à changer l'ibl ;)

Pour le dirt, bobizib a fait ce setup de node, mais je n'arrive pas du tout au même résultat, je n'ai rien en fait, space.

Image
Image

Il utilise cette image pour le dirt.

Image

A savoir que ça ne fonctionne qu'en CPU et qu'il faut cocher Open Shading Language.

Si vous réussissez à le faire fonctionner, dites le moi plz ;) Je continue de chercher pourquoi je n'ai rien.
Cédric Lepiller, Freelance 3D Pitiwazou.com, Mes Addons, Asset Management, Speedflow
Avatar de l’utilisateur
cedric
Administrateur
 
Message(s) : 7057
Inscription : 03 Août 2013, 21:36

Re: Dirt shader

Message par cgranjon » 05 Mai 2014, 17:36

Ce dirt shader paraît vraiment vraiment intéressant, faut que Brecht intègre ça ! Blender aura un sacré atout de plus !
Avatar de l’utilisateur
cgranjon
 
Message(s) : 285
Inscription : 07 Août 2013, 16:19
Localisation : Londres

Re: Dirt shader

Message par cedric » 05 Mai 2014, 17:51

Grave !
Ça a déjà été demandé, mais je ne sais pas si ça a été pris en compte.

Sur cette page il y a un shader de rouille ! #173

http://www.blenderartists.org/forum/sho ... light=dirt

Image
Cédric Lepiller, Freelance 3D Pitiwazou.com, Mes Addons, Asset Management, Speedflow
Avatar de l’utilisateur
cedric
Administrateur
 
Message(s) : 7057
Inscription : 03 Août 2013, 21:36

Re: Dirt shader

Message par stilobique » 05 Mai 2014, 18:03

Pas mal ; t'a testé avec le Dirt Vertex Color ? On peut arriver à un résultat en quelques clics c'est bon ça.
Avatar de l’utilisateur
stilobique
 
Message(s) : 1368
Inscription : 07 Sep 2013, 09:26
Localisation : France

Re: Dirt shader

Message par 3dSaM » 07 Mai 2014, 10:06

Il a l'air bien en effet ce shader, quelqu'un l'a-t-il testé? J'ai essayé de mon côté, le script réagit très bien, on a bien le menu dans l'onglet material/surface pour jouer sur les différent paramètres, par contre ma Suzanne reste toute noire? une idée?
Avatar de l’utilisateur
3dSaM
 
Message(s) : 301
Inscription : 27 Sep 2013, 09:42

Re: Dirt shader

Message par cedric » 07 Mai 2014, 10:12

tu as bien coché Open shading language et CPU dans les prefs de rendu ?
Cédric Lepiller, Freelance 3D Pitiwazou.com, Mes Addons, Asset Management, Speedflow
Avatar de l’utilisateur
cedric
Administrateur
 
Message(s) : 7057
Inscription : 03 Août 2013, 21:36

Re: Dirt shader

Message par 3dSaM » 07 Mai 2014, 10:37

ha j'étais en GPU quel nul!
Merci, je vais regarder ça ;-)
Avatar de l’utilisateur
3dSaM
 
Message(s) : 301
Inscription : 27 Sep 2013, 09:42

Re: Dirt shader

Message par Yadoob » 10 Mai 2014, 13:04

Vraiment cool ces shaders ! Je sais pas si t'as régler ton pb depuis le temps Cédric; perso le dirt marche bien :
Image
Le .blend pour ceux qui veulent (par contre mon build ne veut pas packer les textures :( , il faut les remettre dans le material):
http://www.pasteall.org/blend/29078
Avatar de l’utilisateur
Yadoob
 
Message(s) : 224
Inscription : 15 Sep 2013, 12:57
Localisation : Lille

Re: Dirt shader

Message par cedric » 10 Mai 2014, 13:43

Ha oui en effet ça marche bien, mais en y pensant, on doit pouvoir le faire en node sur cycle tout simplement, je vais essayer 2-3 trucs !
Cédric Lepiller, Freelance 3D Pitiwazou.com, Mes Addons, Asset Management, Speedflow
Avatar de l’utilisateur
cedric
Administrateur
 
Message(s) : 7057
Inscription : 03 Août 2013, 21:36

Re: Dirt shader

Message par boby » 02 Juin 2014, 13:52

Hello Cedric. C'est moi bobizib sur BA ^^, donc hésite pas si tu galère encore !

Le truc que j'ai oublié d'indiquer qu'il te fait absolument des Uvs, pour plaquer ta drit map de référence, ça devrait marcher avec :).

J'ai fait quelques test que je n'ai pas poster sur BA, et il est possible de baker le tout !! Ducoup tu peux sortir plein de Dirt mask à utiliser pour mixer des ground texture (de quoi agrémenter largement les dirt de CG texture !).

cedric a écrit :Ha oui en effet ça marche bien, mais en y pensant, on doit pouvoir le faire en node sur cycle tout simplement, je vais essayer 2-3 trucs !


Ca me parait compliqué mais ça serait cool ! Le truc c'est qu'il devraient bientôt ajouter une texture "AO" qui permettrait la même chose (enfin j'espère, à voir comment il font ça).

boby
boby
 
Message(s) : 6
Inscription : 22 Jan 2014, 13:45

Re: Dirt shader

Message par cedric » 02 Juin 2014, 14:12

Yep, je vais tester avec les uv's, ça devrait mieux fonctionner logiquement ^^

Pour cycles, je n'ai réussit à rien pour le moment :D
Cédric Lepiller, Freelance 3D Pitiwazou.com, Mes Addons, Asset Management, Speedflow
Avatar de l’utilisateur
cedric
Administrateur
 
Message(s) : 7057
Inscription : 03 Août 2013, 21:36


Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité