EDIT: J'ai donc obtenu l'effet visuel du portail sans aucun impact sur les performances, et j'ai mis en place la physique des objets avec des corps rigides se déplaçant à travers les portails de manière transparente, et des objets avec des contrôleurs de caractères se déplaçant à travers de manière transparente. La seule chose que j'essaie de comprendre maintenant est de mélanger deux vues de caméra pour obtenir le bon effet de transition à la première personne. Des idées sur la façon dont je mélangerais ces deux? Je pense à quelque chose qui utilise un shader de profondeur uniquement, ou le rectangle de visualisation normalisé. Mon principal problème est de calculer cela en temps réel et avec des angles.
J'ai donc travaillé sur la création d'un effet de portail dans Unity3D. Évidemment, j'ai pris le portail de Valve comme une grande influence sur la programmation de cela. Actuellement, j'utilise simplement le rendu d'une caméra pour obtenir l'effet graphique, puis du code pour faire le reste. Le problème est à 2048x2048, il semble aussi de haute qualité que Portal, mais provoque une forte perte de FPS. Pour résoudre ce problème, je devrais soit réduire la qualité de la texture, soit le nombre de fois que je mets à jour la texture.
Valve a accompli un effet de portail de haute qualité sans provoquer de perte de fréquence d'images élevée. Comment puis-je faire de même? Quelqu'un a-t-il de bonnes idées pour rendre une texture haute résolution sans provoquer de perte de trame?
J'envisage de créer mon propre code pour le rendu dans les textures plutôt que d'utiliser le système intégré d'Unity, c'est faisable mais serait certainement un problème. Ainsi, toutes les pensées, idées ou suggestions sont très appréciées.
Réponses:
Après des heures de recherche et de programmation, j'ai compris comment obtenir correctement l'effet visuel pour cela. Si vous souhaitez simplement acheter un système de portail qui fonctionne pour les visuels et presque tout ce dont vous avez besoin, consultez le package Portalizer Unity.
Je programme en C # et ce paquet est en JS, mais la logique derrière cela est incroyablement utile et bien pensée. En général, j'ai suivi sa pensée logique, avec quelques ajustements pour mon jeu et un contrôleur à la première personne.
Essentiellement, vous utilisez une version modifiée de ce shader / script d'eau. Ayez deux miroirs dans la scène et demandez à une caméra de restituer ce qu'elle voit dans chaque reflet à l'autre miroir. Vous devrez créer une matrice de transformation modifiée pour tenir compte des relations entre les deux portails. Pour aider à réduire les performances, lisez cet article sur l'écrêtage près du plan. Cela vous aidera à afficher uniquement ce qui doit être vu à travers le portail.
Je peux créer un tutoriel plus détaillé avec des images et une source une fois que j'ai compris comment mélanger correctement les caméras pour un téléport FPS. En ce moment, je suis trop épuisé et occupé pour écrire un tutoriel complet et cela devrait suffire car il vous donne la plupart du code nécessaire.
la source