Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - Elrick

Pages: [1] 2 3 ... 20
2
Code / Re : La toolbox du codeur de demos
« le: 24 Novembre 2013 à 11:24:11  »
pour éviter de se faire chier à faire le tri:

https://github.com/github/gitignore

3
Code / V8 - Google's javascript engine
« le: 22 Novembre 2013 à 14:45:57  »
Bonjour,

à toutes fins utiles (ex: moteur de scripts ds une demo/tool): https://developers.google.com/v8/get_started

a+

4
Code / Re : Physically Based Shading
« le: 11 Novembre 2013 à 14:04:18  »
nice

5
on veut une pompe a bière !!!

6
Code / Re : Recalcul de normales dans le vertex shader
« le: 18 Juin 2013 à 08:28:49  »
20k vertex c'est rien du tout !

7
Productions / Re : Dancing feuille...
« le: 29 Mai 2013 à 08:54:56  »
je te somme d'aller foutre des culs et des nichons sur shadertoy !!!

et non t'as pas le choix

8
Productions / Re : Dancing feuille...
« le: 28 Mai 2013 à 12:45:44  »

9
Productions / Re : Dancing feuille...
« le: 27 Mai 2013 à 09:02:21  »
nice !!!

10
Code / Re : Raymarching - besoin d'explications
« le: 24 Mai 2013 à 11:32:40  »
ha houais non mais j'ai pas ça du tout moi :/
c'est quoi encore ce bordel, ou j'ai merdé ....

ho put* je viens de me rendre compte que le tableau déclaré hors de la fonction faisait tt foiré, si je le déclare dans la fonction spikeball, ca "marche" mieux, quelqu'un peut m'expliquer ?

---
ha bah voila si je mets "static float3 c[19]={..." ca marche bcp mieux !!

on peut m'expliquer pkoi si je le mets pas le compilo gueule pas et le shader "utilise" je sais pas quelle valeurs ? (je suppose)

11
Code / Re : Raymarching - besoin d'explications
« le: 22 Mai 2013 à 11:10:40  »
Need help !!
la j'ai vraiment l'impression d'être un singe en train d'essayer de comprendre pourquoi la forme carrée entre pas dans le trou triangulaire ...

en gros je tests un peu tout les bouts de codes qu'il y a sur pouet (le thread raymarching beginners) et la plupart du temps ... ca marche pas :/

un exemple en particulier, la spikeball, la fonction proposée sur pouet est la suivante:
float2 res; // Widht/Height
float t; // Time

float3 c[19]={
{1,0,0},{0,1,0},{0,0,1},
{.577,.577,.577},{-.577,.577,.577},
{.577,-.577,.577},{.577,.577,-.577},{0,.357,.934},
{0,-.357,.934},{.934,0,.357},{-.934,0,.357},
{.357,.934,0},{-.357,.934,0},{0,.851,.526},
{0,-.851,.526},{.526,0,.851},{-.526,0,.851},
{.851,.526,0},{-.851,.526,0}};

float spikeball(float3 p){
  float l = length(p);
  p = normalize(p);
  float b=0;
  for (int i=3;i<19;i++)
    b=max(abs(dot(p,c[i])),b);
  b=1-acos(b-.01)/(acos(-1)/2); 
  b=smoothstep(.78,1,b);
  return l-2.2*pow(1.5,b*(1.-lerp(.1,2,sin(t+t)*.5+.5)*b));
}

// Rotation
#define R(p, a) p=cos(a)*p+sin(a)*float2(p.y,-p.x)

float f(float3 p){
  p.z+=10.;
  p.y+=.5;
  float3 q=p;
  R(p.yz,t);
  R(p.xz,t+t+p.x*sin(t)*0.2);
  float d = spikeball(p);
  float nd = dot(q+float3(0.,3., 0.), float3(0., 1.,0.));
  return min(nd,d)*0.8;
}

float as(float3 p, float3 n, float d, float i){
  float s=sign(d);
  float o=s*.5+.5;
  for(;i>0;--i)
    o-=(i*d - f(p+n*i*d*s))/exp2(i);
  return saturate(o);
}

float4 main(float2 v:TEXCOORD):COLOR{
  // p: Position / d: Direction
  float3 p=float3(0,0,3);
  float3 d=float3(v*float2(res.x/res.y,1), 0) - p;
  d=normalize(d);
 
  // Raymarching loop
  float i, r, l, a, s, ml=.001;
  for (i=0; i<1; i+=1/64.){
    l = f(p);
    p += l*d;
    l = abs(l);
    r += l;
    if (l < ml*r) break;
  }   

  // Compute normal
  float2 epsilon = {.01,0};
  float3 n=normalize(
    float3(
      f(p+epsilon.xyy) - f(p-epsilon.xyy),
      f(p+epsilon.yxy) - f(p-epsilon.yxy),
      f(p+epsilon.yyx) - f(p-epsilon.yyx)
      )
    );

  return max(1+dot(n,d),0);
}

ma version
#define MAX_DISTANCE 200.0f
#define MAX_ITERATIONS 64.0f
#define EPSILON 0.0002f

cbuffer cbRender : register( b0 )
{
float4 _params; //W,H,_near,_far
matrix _camera2World;
matrix _world2Camera;
matrix _camera2Proj;
matrix _proj2Camera;
matrix _world2Proj;
matrix _proj2World;
};

cbuffer cbRender : register( b1 )
{
float4 _time;
float4 _resolution;
};

cbuffer cbTweaks : register( b2 )
{
float4 _a; //x = aofactor
float4 _lightColor;
float3 _pos;
};


float3 c[19]=
{
{1,0,0},{0,1,0},{0,0,1},
{.577,.577,.577},{-.577,.577,.577},{.577,-.577,.577},
{.577,.577,-.577},{0,.357,.934},{0,-.357,.934},
{.934,0,.357},{-.934,0,.357},{.357,.934,0},
{-.357,.934,0},{0,.851,.526},{0,-.851,.526},
{.526,0,.851},{-.526,0,.851},{.851,.526,0},
{-.851,.526,0}
};

float spikeball(float3 p)
{
float l = length(p);
p = normalize(p);
float b = 0;
for (int i=3; i<19; i++)
b=max(abs(dot(p, c[i])), b);
b=1 - acos(b - .01)/(acos(-1) * .5);
b=smoothstep(.78, 1, b);
return l-2.2*pow(1.5,b*(1.-lerp(.1,2,sin(_time.x*2)*.5+.5)*b));
}

float DistanceToScene(float3 _position)
{
return spikeball(_position);
}

float3 NormalAtPoint(float3 _position)
{
float3 normal = (float3)0;
float3 offset = float3 ( EPSILON, 0, 0 );
normal.x = DistanceToScene(_position+ offset.xyz) - DistanceToScene(_position-offset.xyz);
normal.y = DistanceToScene(_position+ offset.yxz) - DistanceToScene(_position-offset.yxz);
normal.z = DistanceToScene(_position+ offset.zxy) - DistanceToScene(_position-offset.yzx);

return normalize(normal);
}

float AoAtPoint( float3 _position, float3 _normal)
{

float total = .0f;
float weight = .5f;

[unroll]
for(int i=0;i<5;i++)
{
float delta = (i+1) * (i+1) * EPSILON * 12.0f;
total += weight * (delta - DistanceToScene( _position + _normal * delta));
weight *= .5f;
}

return 1.0f - saturate (total);
}

struct VS_IN
{
float4 _position : SV_POSITION;
};

struct PS_IN
{
float4 _position : SV_POSITION;

};

PS_IN VS(VS_IN VsIn)
{
PS_IN psin = (PS_IN)0;
psin._position = VsIn._position;
return psin;
}

float4 PS(PS_IN _in): SV_TARGET0
{
float2 p = -1.0f + 2.0f * _in._position.xy / _resolution.xy;
p.x *= _resolution.x/_resolution.y;
float3 camPos = _pos;
float3 rayPos = camPos;
float3 rayDir = normalize(float3(p,1.0f)); //TODO recalculer correctement le FOV focé a 90°

float3 lightDir = float3(cos(_time.x),-1.0f,0.0f);
float3 lightColor = float3 ( 1.0f, 0.9f, 0.7f );

float totalDistance = 0.0f;
int totalIterations = 0;

float3 color = float3(.6f,.6f,.6f);

for(float iter=0; iter<MAX_ITERATIONS && totalDistance < MAX_DISTANCE; iter++)
{
float distance = DistanceToScene(rayPos);

if (distance < EPSILON)
{
break;
}
rayPos += rayDir * distance;
totalDistance += distance;
}

if (totalDistance >= MAX_DISTANCE)
{
return float4(.0f,.0f,.0f,1.0f);
}
color= float3(1.0f,.7f,.4f);
float3 normal = NormalAtPoint(rayPos);
float3 light = lightDir;
float3 V = normalize ( camPos - rayPos );
float3 H = normalize ( V + light );

float diffuse = saturate( dot( normal,light));
color = lerp(color,lightColor,diffuse);

float ao = AoAtPoint(rayPos, normal);
color = lerp(float3(.0f,.0f,.0f),color,ao);

float specularTerm = saturate ( pow ( saturate ( dot ( normal, H ) ), 512 ) );
color += lightColor * specularTerm * ao;

return float4(color,1.0f);
}

et ce que j'ai a l'écran est une belle sphere bien ronde !!! (en pièce jointe).

qu'est ce que je fais pas correctement ?


12
Code / Re : Atelier Code
« le: 17 Mai 2013 à 08:39:25  »
ok pour samedi.

qui apporte l'alcool et les putes pour aller avec les cookies ?

13
Code / Re : Atelier Code
« le: 16 Mai 2013 à 08:34:44  »
possible de décaler a vendredi 17 soir ? ils ont prévu un grand soleil samedi, on va avoir trop de jupes devant la boutique on va pas pouvoir se concentrer ?

sinon tjrs ok pour moi, flure tu apportes les cookies hein !!

14
Code / Re : Atelier Code
« le: 23 Avril 2013 à 09:06:47  »
et je suis pas obliger d'être la a chaque fois sinon hein :)

après on peut en recaser un en semaine maintenant qu'il fait nuit qu'a minuit, on risque de moins s'endormir.

15
Code / Re : Atelier Code
« le: 22 Avril 2013 à 17:59:00  »
fait

Pages: [1] 2 3 ... 20