Tableau de variables

Questions à propos du scripting Shader.
Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Tableau de variables

Message par ZJP » 08 Jan 2014 15:09

eyrollz a écrit :- Au lieu de "démasquer" mes 100 unités d'un coup, de les faire progressivement ? En gros, je ne crée qu'une seule variable ( dnas le shader hein, pas dans le script C#) et je lui assigne la 1ère fois la position de mon 1 er GameObject, la deuxième fois celle de mon 2e GameObject etc ? Est-ce que c'est possible ?
C'est bien entendu possible, mais pour une centaines d'unités il te faudra un cycle de 100 updates sans parler du souci de mémorisation des positions précédentes.

Cela dit, c'est une question d'échelle et de distance entre le champs de bataille et le brouillard : tes 100 unités ne représentent par forcement 100 trouées dans ton brouillard. Tu peux donc regrouper tes trouées.

Edit :

Je viens de découvrir une fonction très intéressante : Texture.GetNativeTexturePtr. Si j'ai le temps, je mettrais (un jour) à jour ceci pour Unity. :mrgreen:

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Tableau de variables

Message par Titan » 10 Jan 2014 09:18

Salut, un peut à la bourre sur ce topic.
Déjà di toi que même si tu avais assez de registre, il te faudrait un rack de 20 cartes graphiques en SLI pour espérer faire tourner ton shader en 1080p, rappelle toi que ton code doit être exécuté pour chaque pixel de ton écran!
maintenant pour le problème j'avais pas mal galéré à l'époque où je bossais sur un prototype de RTS, ma connerie à été de prendre le problème à l'envers, j'ai voulu mettre un mesh au dessus de mon terrain alors qu'il faut placer un mesh devant la camera, si tu saisi la nuance.
Concrètement tu a 2 possibilité, travailler avec les vertex color ou travailler avec une texture, les rendu sont légèrement différent, (Starcraft 2 utilise visiblement une texture tandis que League of legend utilise les vertex, si tu veux voir la différence), la texture est évidement plus gourmande.

pour résumé, tu stock un tableau 2D de 64x64 qui va représenter l'état de tes vertices, pour éviter d'avoir à décaler toute tes variable quand tu bouge la camera, tu fait un tableau circulaire et tu encapsule sont accès avec un mask binaire et un offset, tu n'a plus qu'a refresh l'état de tes vertices occasionnellement, par exemple 2 ou 3 lignes par frame, en testant uniquement la position des unités proches grâce à un quadtree (ou un truc plus crade^^). ensuite tu n'a qu'a reconstruire ton mesh à chaque frame à partir de ton tableau.
Ensuite le shader a juste besoin d'une ligne qui affiche le vertex color.

Je te conseil d'essayer ça déjà, avec une texture tu peut très facilement ruiner tes perfs si c'est mal codé imo, et il faudrait absolument une itération sur les unités plutôt que sur les pixels de la texture.
____________________________________________
Hop Boy

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Tableau de variables

Message par Alesk » 10 Jan 2014 11:21

+1 pour la solution de Titan

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Tableau de variables

Message par axel » 10 Jan 2014 11:28

Très intéressant ta réponse Titan. Du coup j'ai regardé la différence entre starcarft et League of legend, et c'est vrai qu'on voit bien la différence.

On ne pourrait pas rendre la solution des vertex color plus fluide avec une grille en 96X96 ou 128X128?

En tout cas je n'imaginais pas cette solution pour faire un fog war, merci ;)

Avatar de l’utilisateur
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: Tableau de variables

Message par spedy » 10 Jan 2014 11:35

Hum la solution de titan m'intéresse beaucoup !
Par contre je ne comprend pas encore exactement comment la mettre en place !
C'est cool je vais potasser ça personnellement :p

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Tableau de variables

Message par axel » 10 Jan 2014 11:42

Je n'ai pas compris non plus comment la mettre en place, mais le jour où j'aurais besoin d'un truc comme ça, j'aurais déjà une piste.
Sans compter qu'on peut sans doute l'appliquer pour faire d'autres choses

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Tableau de variables

Message par Titan » 10 Jan 2014 12:45

axel a écrit :On ne pourrait pas rendre la solution des vertex color plus fluide avec une grille en 96X96 ou 128X128?
96x96, non. Ce n'est pas une puissance de 2 donc tu ne peut pas créer un tableau circulaire. 128x128 C'est possible, mais 4 fois plus cher, il faut juste trouver le bon rapport qualité/perf.

en gros le principe c'est juste ça, après on peut l'encapsuler de manière plus pratique en fonction de ce qu'on veut faire:

Code : Tout sélectionner

int[128,128] tab;
int getTabValue(int x, int y)
{
   return tab[x & 127, y & 127]; //ou 0x7F si vous trouvez ça plus propre. ;)
}
si tu met 96, ça marche pas. Tu peut faire un modulo à la place, mais l’accès au tableau devient tout de suite beaucoup plus lent et t'es emmerdé avec les négatifs.
____________________________________________
Hop Boy

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Tableau de variables

Message par axel » 10 Jan 2014 15:09

d'accord, merci

Répondre

Revenir vers « les Shaders »