J'ai un sol hexagonal infini, généré en tessellant une grille de points dans une paire de shaders de tessellation:
Notez qu'il s'agit d'un filaire plat - les "ombres" sont un truc d'éclairage:
Maintenant, je voudrais que ce soit un verre épais et réfringent, mais je ne sais pas comment procéder.
La première chose qui m'est venue à l’esprit est de
- définir un uniforme contenant "l'épaisseur" demandée des blocs
- Lors du calcul de l'éclairage, utilisez la loi de Snell pour calculer la longueur du chemin optique qu'un rayon prendrait à travers le bloc hexadécimal, s'il était réellement aussi épais que le dit l '"épaisseur" uniforme, et additionnez l'alpha sur cette longueur. Cela donnerait la transparence, mais ne gère pas des choses comme la réflexion interne / TIR, etc.
Je n'ai pas encore essayé cela, donc je ne suis pas sûr du résultat visuel.
En fin de compte, pour ce niveau particulier, j'essaie d'obtenir ce look de sol hexagonal en verre utilisé dans Tron: Legacy pendant la bataille de disques. ( Voir cette image pour un exemple .)
Suggestions?
Réponses:
Cet article dans GPU Gems approfondit la réfraction, ce qui peut donner de très bons résultats
Au sens le plus élémentaire
La liste suivante montre un shader qui illustre cette approche
Les images suivantes illustrent ces trois étapes
Il y a des techniques plus avancées dans le même article qui peuvent obtenir un look beaucoup plus attrayant
Pour un effet similaire dans Unity, vous voudrez peut-être consulter la page wiki de The Refraction Shader
la source
Je vais prendre l' image que vous avez montrée comme référence pour la façon dont j'imagine l'effet. L'algorithme auquel je pense est simple:
En ce qui concerne le shader de réfraction, afin de simuler le verre que vous pouvez faire
J'ai juste pensé à l'idée, donc je ne l'ai pas testée. Je suis sûr qu'il a besoin de plus de travail, peut-être que je le ferai à mon retour du travail.
la source