Auteur Sujet: Effets Tunnels  (Lu 18122 fois)

0 Membres et 1 Invité sur ce sujet

Ben en fait pour mon tunnel j'ai pas fait une lookup plus grande comme tu le préconises, j'ai fait un tunnel raytracé... Et j'ai ni eu besoin de le faire par cases de 8x8 ni eu le problème de la barre de atan...

Han mais oui mais si tu le fais en shader c'est clair que t'auras pas le problème puisque tu calcules tes UV au pixel. Là le problème survient uniquement parce que tu interpoles des UVs qui peuvent potentiellement reboucler. Si tu interpoles sur des carrés de 4x4 le problème se voit moins, des carrés de 2x2 faut être un aigle pour le remarquer et des carrés de 1x1 (donc à chaque pixel) bah le problème disparaît.

Bon par contre sur ma vielle cg pourrie j'ai péniblement 70fps en 640x480...
On fait comment pour faire ça dans des cases et interpoler ? Je suis obligé d'appliquer mon shader à un quad subdivisé en plein de petits, ou bien il y a une autre manière avec un seul quad ? mmmmh peut-être en passant le code principal dans le vertex shader j'imagine...
Bah heu, là ta carte fait tout pour toi : tu rends simplement dans une render target 8x plus petite et puis tu l'affiches en bilinear sur tout l'écran...

Citer
Bah heu, là ta carte fait tout pour toi : tu rends simplement dans une render target 8x plus petite et puis tu l'affiches en bilinear sur tout l'écran...
Ah zut chuis trop con ;)

Bon par contre ça fait un truc de plus que je vais devoir apprendre, j'ai encore jamais fait ça... Bon allez zou au boulot...

J'en avait fait un a l'époque sur une demo calodox, raytrace based (et pas bien précis).
-> Calcul des coords de texture sur une grille qui fait tout l'écran, et je laisse la carte interpoler. Le truc basique quoi...

Ca se passe a 0:40, vous pouvez jumper directement à la scene avec >>> CE LIEN <<<

Ou vous la tapper en entier...


Oui, j'ai honte, mais c'est BON la honte !

ahahaha alkama fais pas ton ptit con, cette prod tabasse.
Que ça soit pas parfait, pas clean et tout ce que tu veux, c'est juste le petit détail énervant qui veut dire que ta prod tabasse sans avoir besoin d'être parfaite, c'est ça le STAILE et le STAILE, c'est bon.

OMG ça claque, même si la zik rippée hum hum :p.

j'aime bien moi comme tite demo  8)

shader de tunnel pour unity3D..ca tourne bien sur un galaxyS (et surement Ifoune et Iped)
c'est pas de moi :)

Shader "tunnel" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0.5)
    _MainTex ("Texture", 2D) = "white" { }
}
SubShader {
Pass {
//Cull Off // Double Sided
CGPROGRAM
#include "UnityCG.cginc"
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0

float4 _Color;
uniform sampler2D _MainTex;
uniform float4 _MainTex_TexelSize;
uniform float4 _MainTex_ST;

struct v2f {
   float4 pos : POSITION;
   float2 uv: TEXCOORD0;
};

v2f vert (appdata_base v) {
    v2f o;
    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
    o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
    return o;
}
float4 frag (v2f i):COLOR {
float2 p = -1.0 + 2.0 * i.uv.xy;
    float a = atan2(p.x,p.y);
    float r = sqrt(dot(p,p));
    float x = .3*_Time.w+.1/r;
    float y = a/3.1416;
    float3 col =  tex2D(_MainTex,float2(x,y)).xyz;
    return float4(col*r,1.0);
}
ENDCG
}
}
FallBack Off
}

Sinon, tout dépend de ce qu'on entend par "tunnel" : sur ST on mettait des points sur des cercles en perspective, on faisait bouger les cercles et on était content. ;D

ah bin tiens, justement :)

sans parler ogl, shader,  mais oldschool : j'essai justement de refaire cet effet, version 1 cercle couleur, 1 cercle fond, ...
me rappel plus comment faire cet effet (je voudrais tester en purebasic ou blitz)
les effets des demos etaient souvent "precalculés" avec un prog en basic et enregistré sous forme de frames : voir anim tunnel.gif

j'ai bien réussi à afficher les cercles, mais la perspective n'est pas bonne : soit tous les cercles ont la meme largeur, soit c'est pas assez visible par rapport au nombre de cercle que j'aimerai afficher et faire un effet boucle.
je pars sur 30 cercles, du plus grand au plus petit, 1 couleur blanc, le suivant couleur fond, etc...
j'ai l'impression que j'y suis presque, mais il me manque un truc... je me gourre quelque part

merci

rapidement: Rproj = D*R/Z soit D la distance en pixels à l'écran, Z la profondeur, R est fixe dans ton cas et correspond au rayon.
ces effets étaient basés sur une table d'offsets de la taille de l'écran et les coordonnées mapping étaient calculées de la sorte car :
Z=D*R/Rproj (1) et où il ne reste plus qu'à calculer Rproj = sqrt((X-Xc)*(X-Xc) + (Y-Yc)*(Y-Yc)) avec Xc,Yc le centre de l'écran et
X,Y les coordonnées du pixel en cours. tu peux si tu tiens à tracer des cercles, calculer un mappage de 0 à 1 te donnant les rayons
des cercles à afficher car Uproj=D*U/Z. (R est le rayon de ton tunnel qui est sensé être constant et Z calculé avec (1))

rapidement: Rproj = D*R/Z soit D la distance en pixels à l'écran, Z la profondeur, R est fixe dans ton cas et correspond au rayon.
ces effets étaient basés sur une table d'offsets de la taille de l'écran et les coordonnées mapping étaient calculées de la sorte car :
Z=D*R/Rproj (1) et où il ne reste plus qu'à calculer Rproj = sqrt((X-Xc)*(X-Xc) + (Y-Yc)*(Y-Yc)) avec Xc,Yc le centre de l'écran et
X,Y les coordonnées du pixel en cours. tu peux si tu tiens à tracer des cercles, calculer un mappage de 0 à 1 te donnant les rayons
des cercles à afficher car Uproj=D*U/Z. (R est le rayon de ton tunnel qui est sensé être constant et Z calculé avec (1))

ok, merci
je vais essayer. c'est plus proche que ce que j'avais pondu

Tu n'as peut-être pas besoin de faire de vrais calculs de perspective pour ce genre de tunnel.
Je m'explique :
Si tes cercles blancs sont (virtuellement) également espacés sur l'axe de la profondeur (Z), alors le ratio entre les rayons des cercles successifs est constant (d'après le théorème de Thalès si je ne m'abuse).
Bref si je ne me trompe pas, tu choisis un ratio, tu traces tes cercles successivement en modifiant le rayon à chaque fois suivant ce ratio, et ça devrait rouler.
Et après tu tweakes ton ratio jusqu'à ce que l'effet de profondeur te convienne.
Perso, je commencerais avec un ratio aux alentours de 0.8, ça devrait le faire...

c'est ce que j'avais fait, en fait. mais mon ratio doit pas etre bon.
vais voir ça