Je travaille sur un jeu 2D assez graphique basé sur des tuiles de haut en bas inspiré de Dwarf Fortress. Je suis sur le point d'implémenter une rivière dans le monde du jeu, qui couvre un certain nombre de tuiles, et j'ai calculé la direction du flux pour chaque tuile, comme indiqué ci-dessous par la ligne rouge dans chaque tuile.
Pour référence du style graphique, voici à quoi ressemble actuellement mon jeu:
Ce dont j'ai besoin, c'est d'une technique pour animer l'eau qui coule dans chacune des tuiles de la rivière, de sorte que le flux se fond dans les tuiles environnantes afin que les bords des tuiles ne soient pas apparents.
L'exemple le plus proche que j'ai trouvé de ce que je cherche est décrit sur http://www.rug.nl/society-business/centre-for-information-technology/research/hpcv/publications/watershader/ mais je ne suis pas tout à fait au point de pouvoir comprendre ce qui s'y passe? J'ai suffisamment de compréhension de la programmation des shaders pour avoir implémenté mon propre éclairage dynamique, mais je ne peux pas vraiment comprendre l'approche adoptée dans l'article lié.
Quelqu'un pourrait-il expliquer comment l'effet ci-dessus est obtenu ou suggérer une autre approche pour obtenir le résultat souhaité? Je pense qu'une partie de la solution ci-dessus consiste à chevaucher les tuiles (bien que je ne sois pas sûr dans quelles combinaisons) et à faire tourner la carte normale utilisée pour la distorsion (encore une fois aucune idée sur les détails) et au-delà, je suis un peu perdu, merci pour de l'aide!
Réponses:
Je n'avais pas de tuiles à portée de main qui avaient l'air bien avec la distorsion, alors voici une version de l'effet que j'ai simulé avec ces tuiles Kenney à la place:
J'utilise un organigramme comme celui-ci, où rouge = flux vers la droite et vert = vers le haut, le jaune étant les deux. Chaque pixel correspond à une tuile, le pixel en bas à gauche étant la tuile à (0, 0) dans mon système de coordonnées universelles.
Et une texture de motif de vagues comme celle-ci:
Je connais très bien la syntaxe de style hlsl / CG d'Unity, vous devrez donc adapter ce shader un peu pour votre contexte glsl, mais cela devrait être simple à faire.
la source