Forums Développement Multimédia

Aller au contenu

Molehill pour les nuls

CODE Actionscript

9 réponses à ce sujet

#1 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 15:29 PM

Bonjour à tous.

Je commence tout doucement à me mettre à molehill "from scratch", et c'est loin d'être facile... J'étais habitué à utiliser des trucs tout faits comme Away3d, mais en mode from scratch c'est une autre paire de manches il faut mettre le nez dans le hardware et les shaders et créer des formats binaires que flash lit vite, je vais galérer quelques jours avant de réussir à faire ce que je cherche.

Je souhaite faire les trois trucs basiques de la 3d retro d'il y'a 10 ans, sans chercher à rentrer dans les effets spéciaux modernes:

1 - afficher un mesh statique avec deux calques de texture (lightmap et texture de base)
2 - accéder au framebuffer, nécessaire pour tracer correctement les lumières et les ombres douces avec les effets additive et multiplicative blending, et pour faire le texture splatting pour afficher les extérieurs
3 - afficher un mesh avec des bones et une texture

Une fois que j'arrive à faire ces trois trucs de base ça suffit pour ce que je veux faire (pour ce qui est création de formats et calculs 3d ça ira j'ai l'habitude)


Pour le moment j'ai fait les tutoriels basiques avec les vertexColor, j'ai compris le fonctionnement des vertexBuffer et des matrices de model... par contre pour l'instant j'ai pas trouvé comment faire des textures et je comprends rien au niveau du shader qui gère la matrice de caméra


J'ai donc besoin de comprendre

- comment écrire les shaders de base avec un ou deux calque de texture
- comment accéder au framebuffer


Je cherche donc:

pour commencer:

- un tutoriel qui explique comment afficher un carré mappé avec une texture, et une perspective propre

ça sera déjà pas mal
et ensuite:

- un tuto qui explique comment rajouter des couches de polys locales via le framebuffer
- un tuto qui explique comment afficher un model avec des bones


Merci de me proposer vos liens :)

#2 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 17:30 PM

Bon, j'ai déjà trouvé comment afficher un calque de texture

http://pixelante.com...xtures-tutorial

c'est facile y'a juste une petite ligne d'assembleur

maintenant, trouver comment superposer deux textures en mode multiply

#3 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 19:33 PM

Bon... j'ai pas trouvé de source pour le multi texture alors je me suis bricolé intuitivement un fragment shader qui superpose bien mes deux textures:

tex ft0, v0, fs0 <2d,repeat,linear>
tex ft1, v1, fs1 <2d,repeat,linear>
mul oc, ft0, ft1

Mais je ne sais pas du tout si c'est la bonne manière de faire, si c'est bien portable, ou si y'en a une technique plus propre

#4 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 331 messages

Posté 29 December 2011 - 19:37 PM

Ben en fait pour la superposition de textures tu as le choix entre:

- Te créer une texture en as3 ( un mix de bitmapdata ) qui correspond à la superposition de tes calques de textures.

- Faire une passe multiple sur un même objet et dans ce cas tu écris un shader spécifique qui gère cela ( comme tu as fais ) seulement tout les objets n'auront pas deux couches de textures si ?

Modifié par Thoutmosis, 29 December 2011 - 19:37 PM.


#5 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 19:46 PM

Pour les persos avec bones je sais pas je vais peut-être me contenter d'un seul calque de texture.

Par contre pour les environnements ça serait bien qu'il y'ait au moins la lightmap, donc au moins deux calques. Ca serait du gâchis de cpu et de ram de précalculer les images light-mappées car les cartes vidéos savent rendre directement deux textures superposées (pour les plus anciennes, les modernes gèrent 8 calques)

Bref ça se règle en hardware. Je sais pas quelle est la manière propre et officielle pour écrire le shader, pour qu'il soit bien portable, et qu'il n'y ait pas besoin des cartes pixelshader, je veux juste faire les vieux trucs basiques de la 3d à l'ancienne.


Concernant les différents objets, effectivement ils n'auront pas tous 2 couches de texture, ils seront rendus avec d'autres shaders. Là pour le moment je me concentre sur un shader de lightmaping statique.

#6 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 331 messages

Posté 29 December 2011 - 19:51 PM

tu peux faire comme dans minko, implémenter une solution de multipasse ( je te laisse regarder ) ou alors aller sur le site de NeHe ( c'est du C mais ça devrait pas poser de problèmes ) et regarder du côté du multitexturing =)

#7 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 20:01 PM

Le multi-passe il me semble que c'est pour d'autres effets, genre le bloom ou le motion blur.

La technique utilisée pour le lightmapping est beaucoup plus simple, c'est le multi-texturing: on fait passer deux textures au même shader et on opère un mélange simple (+ - * /). J'aimerais savoir si le code de mon shader est propre ou s'il en existe un mieux.

Le générateur de shaders en c+ de NeHe il est cross-platform ? J'aimerais bien comprendre comment flash gère la portabilité des shaders... il compile un code standard reconnaissable par toutes les cartes vidéos ou alors ça encode différemment selon la machine ?

Modifié par henri4, 29 December 2011 - 20:02 PM.


#8 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 331 messages

Posté 29 December 2011 - 20:18 PM

oui le multi passe c'est pour d'autres effets mais si tu veux un truc simple qui combine des textures soit tu fais un shader comme celui que tu as fais ( qui combine deux textures ) soit tu fais deux passes en changeant la texture à chacune des passes, soit tu te crées une texture côté software :), je ne fais que te donner des solutions =).

Quand à ton shader il est propre ( je pense ), quand aux shaders flash, le bytecode généré c'est de l'AGAL qui lui est traité par la virtual machine.

Je ne sais pas s'il y a un moyen d'utiliser en flash des shaders glsl ou autres ( mais j'en doute fort car sinon tout le monde se ruerait dessus ).

EDIT:
En revanche, il existe apparemment des projets d'outils capables de convertir un shader glsl en AGAL.

Modifié par Thoutmosis, 29 December 2011 - 20:19 PM.


#9 henri4

    Ceinture Blanche

  • Members
  • Pip
  • 14 messages

Posté 29 December 2011 - 21:11 PM

Je préfère faire de l'agal propre et simple au lieu d'utiliser une usine à gaz en script supplémentaire. Je n'ai pas pour le moment l'ambition de faire de la 3d next-gen, je vais me contenter de 3d à l'ancienne simple, donc je cherche des shaders tout simples et qui se passent des cartes pixelshader

Je ferai un petit swf pour tester mon shader sur vos cartes vidéos, je peaufine mon test d'abord.

#10 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 29 June 2012 - 21:57 PM

Plutôt que de te compliquer la vie avec de l'assembleur, pourquoi ne pas programmer le GPU avec de l'AS3 ?

http://blogs.aerys.i...d-with-minko-2/


Tu trouveras plein d'exemples de code qui correspondent à tes besoins dans les exemples de minko :

https://github.com/a...ko/example/core



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)