Inverser une caméra sur Unity 3D
Miroir horizontal de caméra sur Unity 3D
Pour pouvoir utiliser Unity3D sur les produits Holusion, la première étape est généralement d’inverser la caméra. Elle doit afficher l’image comme vue à travers un miroir.
Deux méthodes sont possibles: En utilisant le hook OnPreCull
de la caméra, ou via un Post Process Volume
(>5.6 uniquement).
Note : Sur certains produits, cette inversion peut aussi être réalisée directement via la configuration du serveur X dans le contrôleur.
Méthode PostProcessing
Depuis la version 5.6, Unity propose un module de post-processing. Il permet la mise en place d’effets visuels divers : flou de mouvement, color grading, etc… Il est possible de réaliser un shader d’inversion de l’image :
Dans un premier temps, installez le package Post Processing v2
via le Package Manager
d’Unity, puis téléchargez le package CameraFlop via Unity. Pour que le Shader aie un effet, il faut ajouter un composant Post Process Layer
et un composant Post Process Volume
et lui ajouter l’effet Camera Flop
.
De plus ajoutez le Shader dans Edit > Project settings > Gaphics > Always included Shaders
, augmentez l’option Size
si nécessaire.
Méthode sans PostProcessing
Pour ce faire, attachez le script suivant à chaque caméra de la scène : (Téléchargez le script ici)
using UnityEngine;
using System.Collections;
[RequireComponent (typeof (Camera))]
public class HSymmetry : MonoBehaviour {
void OnPreCull () {
Matrix4x4 scale;
if(camera.aspect >2){
scale = Matrix4x4.Scale (new Vector3 (-1, 1, 1));
}else{
scale = Matrix4x4.Scale (new Vector3 (1, -1, 1));
}
camera.ResetWorldToCameraMatrix ();
camera.ResetProjectionMatrix ();
camera.projectionMatrix = camera.projectionMatrix * scale;
}
void OnPreRender () {
GL.SetRevertBackfacing (true);
}
void OnPostRender () {
GL.SetRevertBackfacing (false);
}
}
Ce script inverse horizontalement les cameras. Attention, il n’est pas protégé contre les cameras aux aspects/ratio spéciaux et peut nécessiter quelques modifications.