03 - Raymarching: Implémenter votre Raymarcher (Camera)

  Рет қаралды 1,670

sociamix

sociamix

Күн бұрын

Dans cette vidéo nous allons continuer d'implémenter notre raymarcher en codant un meilleur model de caméra, ce qui nous permettra de naviguer plus aisément dans notre espace 3D.
Voici quelques liens utiles:
Site de Ignigo Quillez: www.iquilezles.org/
Sa chaîne KZfaq: www.youtube.com/watch?v=8--5L...
Explications par Jamie Wong: jamie-wong.com/2016/07/15/ray-...
Revisez vos maths:
Algèbre linéaire (vecteurs/matrices): kzfaq.info?list...
Calcul infinitésimale (dérivées, intégrales): kzfaq.info?list...

Пікірлер: 7
@antoinep9949
@antoinep9949 2 жыл бұрын
impressionnant
@leeroyd5982
@leeroyd5982 3 жыл бұрын
Super boulot
@paul-alexandreluck824
@paul-alexandreluck824 3 жыл бұрын
Hello, y-a-t-il le source de ce shader de base ?
@paul-alexandreluck824
@paul-alexandreluck824 3 жыл бұрын
Comment mettre un matériel sur une primitive : specular, diffuse, bump, normal ,* ?
@sociamix
@sociamix 3 жыл бұрын
On va y venir :)
@paul-alexandreluck824
@paul-alexandreluck824 3 жыл бұрын
@@sociamix OK Merci c'est super de voir les fondamentaux.. Bonne continuation...
@paul-alexandreluck824
@paul-alexandreluck824 3 жыл бұрын
J'ai réécrit ton script pour l'adapter à l'IDF isf.video/ afin de jouer avec les paramètres de la scéne. (les 2 objets 1 et 2 par défaut sont fusionnes, même taille et position) Mais je ne vois sur quel paramètre agir pour déterminer la focale (petit ou grand angle de ma caméra). /*{ "CREDIT": "by PALUCK", "CATEGORIES" : [ "rayMarching de SOCIAMIX" ], "DESCRIPTION" : "", "INPUTS" : [ { "NAME" : "rLigth", "TYPE" : "float", "DEFAULT" : 0.0, "MIN" : -2, "MAX" : 2 }, { "NAME" : "hLigth", "TYPE" : "float", "DEFAULT" : 2.0, "MIN" : 0, "MAX" : 10 }, { "NAME" : "rayon1", "TYPE" : "float", "DEFAULT" : 0.5, "MIN" : 0, "MAX" : 1 }, { "NAME" : "rayon2", "TYPE" : "float", "DEFAULT" : 0.5, "MIN" : 0, "MAX" : 1 }, { "NAME" : "x1", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -2, "MAX" : 2 }, { "NAME" : "y1", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -10, "MAX" : 10 }, { "NAME" : "z1", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -10, "MAX" : 10 }, { "NAME" : "x2", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -2, "MAX" : 2 }, { "NAME" : "y2", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -10, "MAX" : 10 }, { "NAME" : "z2", "TYPE" : "float", "DEFAULT" : 0, "MIN" : -10, "MAX" : 10 }, { "NAME" : "rCam", "TYPE" : "float", "DEFAULT" : 0.0, "MIN" : -2, "MAX" : 2 }, { "NAME" : "yCam", "TYPE" : "float", "DEFAULT" : 0, "MIN" : 0, "MAX" : 10 }, { "NAME" : "zCam", "TYPE" : "float", "DEFAULT" : -4.0, "MIN" : -10, "MAX" : 0 }, { "NAME" : "color1", "TYPE" : "color", "DEFAULT" : [ 0.0, 0.0, 1.0, 1.0 ] }, { "NAME" : "color2", "TYPE" : "color", "DEFAULT" : [ 1.0, 0.0, 0.0, 1.0 ] }, { "NAME" : "colorSol", "TYPE" : "color", "DEFAULT" : [ 0.0, 1.0, 0.0, 1.0 ] }, { "NAME" : "ambiance", "TYPE" : "color", "DEFAULT" : [ 0.0, 0.0, 0.0, 1.0 ] }, { "NAME" : "fond", "TYPE" : "color", "DEFAULT" : [ 0.5, 0.5, 0.5, 1.0 ] } ] } */ #define STEPS 100 #define PI 3.14159265 uniform vec2 resolution; //uniform vec2 mouse; uniform float time; vec2 dPlane(vec3 p, float h, float i) { return vec2(i, p.y - h); } vec2 dSphere (vec3 p, float r, float i) { return vec2(i,length(p) - r); } vec2 minVec2(vec2 a, vec2 b) { return a.y < b.y ? a : b; } vec2 scene (vec3 p) { vec2 dp = dPlane(p, -0.5, 0.0); vec2 ds1 = dSphere(p - vec3(x1,y1,z1) , rayon1, 1.0) ; vec2 ds2 = dSphere(p - vec3(x2,y2,z2) , rayon2, 2.0) ; return minVec2(dp, minVec2(ds1, ds2)); } vec2 march(vec3 rO, vec3 rD) { vec3 cP = rO; float d = 0.0; vec2 s = vec2(0.0); for (int i = 0; i < STEPS; i++) { cP = rO + rD * d; s = scene (cP); d += s.y; if(s.y < 0.001) { break; } if (d > 20.0) { return vec2(100.0,100.0); } } s.y = d; return s; } vec3 normal(vec3 p) { float dP =scene(p).y; float eps = 0.01; float dX = scene(p + vec3(eps,0.0,0.0)).y - dP; float dY = scene(p + vec3(0.0,eps,0.0)).y - dP; float dZ = scene(p + vec3(0.0,0.0,eps)).y - dP; return normalize(vec3(dX,dY,dZ)); } float lighting(vec3 p, vec3 n){ vec3 lP = vec3(cos((rLigth -0.5) * PI),hLigth,sin((rLigth + 0.5) * PI)); vec3 lD = lP - p; vec3 lN = normalize(lD); if(march(p + n * 0.01, lN).y < length(lD)) return 0.0; return max(0.0,dot(n,lN)); } vec4 material(float i){ if (i < 0.5){ return vec4(colorSol.rgba); } else if (i < 1.5){ return vec4(color1.rgba); } else if (i < 2.5){ return vec4(color2.rgba); } return vec4(fond.rgba); } void main() { vec2 uv = (vec2(isf_FragNormCoord.x,isf_FragNormCoord.y) - 0.5); // vec3 rO = vec3(0.0, mouse, 0.0); // vec3 rD = normalize(vec3(uv.x, uv.y, zCam) - rO); vec3 rO = vec3(cos((rCam - 0.5) * PI) * zCam,yCam,sin((rCam + 0.5) * PI) * zCam); // vec3 rO = vec3(xCam,yCam,zCam); vec3 target = vec3(0.0,0.0,0.0); vec3 fwd = normalize(target - rO); vec3 side = normalize(cross(vec3(0.0,1.0,0.0), fwd)); vec3 up = cross(fwd, side); vec3 rD = normalize(fwd + side * uv.x + up * uv.y); vec2 s = march(rO, rD); float d = s.y; vec4 col = material(s.x); if(d < 100.0) { vec3 p = rO + rD * d; vec3 nor = normal(p); float l = lighting(p, nor); vec4 a = vec4(ambiance.rgba); col = col * (a + l); col = pow(col,vec4(0.4545)); } gl_FragColor = vec4(col.rgba); /* gl_FragColor = vec4( uv.x,uv.y,0.0, 1.0); if(length(uv) < 0.2) {gl_FragColor = vec4( 1.0,1.0,0.0, 1.0 );} */ }
Do you have a friend like this? 🤣#shorts
00:12
dednahype
Рет қаралды 45 МЛН
1 класс vs 11 класс (неаккуратность)
01:00
БЕРТ
Рет қаралды 4,7 МЛН
Normal vs Smokers !! 😱😱😱
00:12
Tibo InShape
Рет қаралды 119 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 32 МЛН
01 - Raymarching: Implémenter votre Raymarcher
34:00
sociamix
Рет қаралды 4,5 М.
LookAt - Interactive 3D Graphics
2:46
Udacity
Рет қаралды 24 М.
Rotations in 3D Graphics With Quaternions
8:23
Manifolds in Maryland
Рет қаралды 5 М.
10 mins GameDev tips - Quaternions
10:12
sociamix
Рет қаралды 103 М.
MARBLE MARCHER: Real-Time Ray Tracing on Fractal Race Courses! (Experimental game)
11:48
Randomise User: The Best Indie Games
Рет қаралды 109 М.
😨 Innovation Peugeot : Encore une Cochonnerie qui Va Tomber en Panne! 😨
10:43
Lettonie : sous influence russe ? | ARTE Reportage
12:40
How Rendering Graphics Works in Games!
6:25
TheHappieCat
Рет қаралды 738 М.
Do you have a friend like this? 🤣#shorts
00:12
dednahype
Рет қаралды 45 МЛН