Message #4157
Sujet: splatting shader
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Dernière modification | 02-06-2008 15:27:22 | Ikam |
Yop
Voila j'ai pas mal avancé mais j'arrive sur un point bloquant pour mon petit niveau en matière de programmation de shader. voila ce que ca donne pour l'instant : qui contient 7 textures differentes + 1 texture lightmap Je vous explique la méthode que j'utilise : Pour passer la limite d'irrlicht des 4 textures par material, j'ai combiné toutes mes textures en une seule grande. Par exemple dans une texture de 2048x2048 je peut mettre 16 texture de 512x512. ce qui représente une sorte de grande texture mosaique. Ensuite pour pouvoir peindre ses différentes textures aux endroits voulu, j'utilise une texture spéciale avec les 3 couleurs RGB où chaque canal R, G ou B représentera une texture. Donc 1 texture RGB pour 3 textures. Ma texture mosaïque est donc representée comme un tableau de texture a 2 dimensions avec la structure suivante : map1 RGB | Texture1 | Texture2 | Texture3 map2 RGB | Texture3 | Texture4 | Texture5 ... La texture1 sera associée au canal R de la map1 RGB La texture2 sera associée au canal G de la map1 RGB .. La texture3 sera associée au canal R de la map2 RGB .. exemple : ![]() Pour l'instant j'utilise que les 8 premiers slots de 512x512 dans cette mosaique. Le shader prends en entrée 3 images
Bon pour l'instant le code du shader n'est pas tres generique et ne prends que 8 sous-texture de la mosaique, donc 2 map RGB et 6 textures associées, mais on peut l'etendre autant qu'on veux, le principe reste le meme. Le probleme que je rencontre est pour le niveau de details des sous-textures. Avec une texture classique (1 seule par texture) dans le shader on fait generalement : float4 outputcolor = tex2D(image[2], Input.TexCoord0 * LOD); LOD etant le niveau de detail et plus on l'augmente plus l'image est repeté sur la surface, donnant un effet de rendu plus precis. En fait on étend les coordonnées de la texture et celle-ci se repete car elle est unique Seulement dans mon shader comme je recupere une texture depuis la mosaique, si j'utilise la methode precedente, on va etendre les coordonnées sur les textures voisines ce qui au final affichera aussi les autres textures et pas seulement la texture voulu. Il faudrait je pense que se repete la meme texture dans les dimensions de coordonnées étendu par le coeff de LOD. Mais je bloque un peu sur la facon de le coder j'ai essayé plein de truc sans succes. Quelqu'un pourrait il m'eclairer ? Je laisse les sources. ICI Pour l'instant c'est que sous directx et codé en HLSL, mais on peut facilement faire la conversion en GLSL Merci |
| Création du message | 02-06-2008 15:25:37 | Ikam |
Yop
Voila j'ai pas mal avancé mais j'arrive sur un point bloquant pour mon petit niveau en matière de programmation de shader. voila ce que ca donne pour l'instant : qui contient 7 textures differentes + 1 texture lightmap Je vous explique la méthode que j'utilise : Pour passer la limite d'irrlicht des 4 textures par material, j'ai combiné toutes mes textures en une seule grande. Par exemple dans une texture de 2048x2048 je peut mettre 16 texture de 512x512. ce qui représente une sorte de grande texture mosaique. Ensuite pour pouvoir peindre ses différentes textures aux endroits voulu, j'utilise une texture spéciale avec les 3 couleurs RGB où chaque canal R, G ou B représentera une texture. Donc 1 texture RGB pour 3 textures. Ma texture mosaïque est donc representée comme un tableau de texture a 2 dimensions avec la structure suivante : map1 RGB | Texture1 | Texture2 | Texture3 map2 RGB | Texture3 | Texture4 | Texture5 ... La texture1 sera associée au canal R de la map1 RGB La texture2 sera associée au canal G de la map1 RGB .. La texture3 sera associée au canal R de la map2 RGB .. exemple : ![]() Pour l'instant j'utilise que les 8 premiers slots de 512x512 dans cette mosaique. Le shader prends en entrée 3 images
Bon pour l'instant le code du shader n'est pas tres generique et ne prends que 8 sous-texture de la mosaique, donc 2 map RGB et 6 textures associées, mais on peut l'etendre autant qu'on veux, le principe reste le meme. Le probleme que je rencontre est pour le niveau de details des sous-textures. Avec une texture classique (1 seule par texture) dans le shader on fait generalement : float4 outputcolor = tex2D(image[2], Input.TexCoord0 * LOD); LOD etant le niveau de detail et plus on l'augmente plus l'image est repeté sur la surface, donnant un effet de rendu plus precis. En fait on étend les coordonnées de la texture et celle-ci se repete car elle est unique Seulement dans mon shader comme je recupere une texture depuis la mosaique, si j'utilise la methode precedente, on va etendre les coordonnées sur les textures voisines ce qui au final affichera aussi les autres textures et pas seulement la texture voulu. Il faudrait je pense que se repete la meme texture dans les dimensions de coordonnées étendu par le coeff de LOD. Mais je bloque un peu sur la facon de le coder j'ai essayé plein de truc sans succes. Quelqu'un pourrait il m'eclairer ? Je laisse les sources. ICI Pour l'instant c'est que sous directx et codé en HLSL, mais on peut facilement faire la conversion en GLSL Merci |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 144 invités en ligne membre en ligne: - RSS Feed |