comment ajouter de l'eau à l'unité


Réponse 1:

Faire de l'eau est assez difficile si vous voulez le faire à partir de zéro. Je vais vous expliquer comment, mais permettez-moi d'abord de suggérer soit d'utiliser les préfabriqués d'eau fournis dans les actifs standard d'Unity, soit de télécharger un actif à partir du magasin d'actifs. D'accord, les bonnes choses. Attention, il y aura beaucoup de jargon technique.

Pour fabriquer de l'eau, vous n'avez besoin que de 4 choses: un maillage, un shader, une carte normale et un script.

(1) Maillage Le maillage est l'eau elle-même, mais sans shader ni script, il ne ressemblera pas à de l'eau, il ressemblera à une feuille, en gros. C'est assez facile à faire, certainement le plus simple des quatre. Vous pouvez utiliser un programme de modélisation simple pour créer un maillage de la forme de votre choix.

(2) (3) Shader et Normal Map Le shader est l'endroit où la plupart de la magie se produit. Dans le shader, vous devez définir plusieurs propriétés pour que le maillage ressemble à de l'eau.

Les cartes normales jouent un rôle énorme dans les shaders, en particulier les shaders aquatiques. Une carte normale pour un shader d'eau définit la forme des vagues.

Exemple de carte normale de l'eau. Gracieuseté de FilterForge.

Dans de nombreux cas, pour les objets qui ne sont pas de l'eau, vous pouvez vous en tirer avec une carte normale. L'eau a besoin de deux. Les deux cartes normales se déplacent (via un script) dans des directions différentes. (Il existe trois modèles de direction canoniques). Les deux cartes ont également des échelles différentes et peuvent avoir des vitesses identiques ou différentes. L'échelle des vagues définit l'échelle de chaque vague dans la carte normale. L'échelle et la vitesse des vagues sont définies dans le shader.

Vous devez également faire réagir l'eau à la lumière, dont vous vous occupez dans le shader. L'eau réelle peut refléter ou réfracter la lumière, donc pour imiter cela, vous devrez calculer les indices de réflexion et de réfraction pour l'endroit où la lumière frappe par rapport aux normales de surface. Celles-ci sont parfois appelées conditions de Fresnel (prononcé «frennel»).

Exemple de réflexion de la lumière sur une carte normale (qui, pour le bien de cet article, est une implémentation du bump mapping). Courtest de OGLDev.

Cela devient plus compliqué, ne vous inquiétez pas. Lorsque la lumière traverse l'eau et est ainsi réfractée, l'eau plus profonde est teintée. Vous voudrez peut-être prendre cela en considération pour de meilleurs résultats.

De plus, selon l'endroit d'où vous regardez, les indices de réflexion et de réfraction peuvent changer. Un bon shader peut avoir des fonctions pour calculer les transformations matricielles du monde en espace caméra pour les angles de vision des conditions de fresnel

(4) Script Le script est la clé qui démarre la voiture. Il met le shader en mouvement, au sens figuré, et met les maps normales en mouvement littéralement. Dans le script, vous pouvez modifier certaines des valeurs de shader à la volée si nécessaire.

Le script gère également une grande partie de la caméra. D'une part, il devrait gérer le cas où l'appareil photo entre dans l'eau. Mais plus important encore, il peut invoquer les fonctions de transformation matricielle pour les angles de vision.

Exemple de produit fini. Avec l'aimable autorisation du blog Unity.


Vous devez importer les préfabriqués d'eau des actifs standard et parcourir le code du shader et le code C #.

PS Si vous voulez devenir vraiment technique, vous devez intégrer la flottabilité.