Unity : Fotografías esféricas

En el motor de videojuegos multiplataforma Unity es de desarrollo para Microsoft Windows, Mac OS, Linux. Siendo una herramienta compuesta por un editor visual y de programación vía  scripting. Este permite un desarrollo muy profesional que lo ha llevado a lograr una comunidad que cuenta con una cantidad bastante numerosa la cual cuenta con foros y documentación donde podemos obtener cualquier tipo de información para la creación de videojuegos. Además podemos observar como prueba de ello estos juegos famosos que se crearon en esta plataforma  como lo es “Monument Valley”, “Gris” o “Cuphead”. Finalmente  una cantidad numerosa  de juegos que son desarrollados para móviles.

Renderizar 

Este proceso es muy importante ya que se realiza para obtener la fotografía o imagen, tomadas de modelos equirectangulares. Esto se realiza a partir de software dedicados a este tipo de procesos. Ya que la finalidad de esas fotografías o imágenes tiene como finalidad ser puestas en marcha en proyectos de foto realismo, materiales luces objetos en un proyecto o en modelos 3D.

Por eso debemos realizar una renderización estereoscópica que nos ayudara a observar en la API (interfaz de programación de aplicaciones), si hay algunas opciones en Camera:steroEnabled, stereoSeparation, stereoConvergence. Para que sean utilizados en la modificación de efecto. Por esto solo debemos tener una cámara en la escena, que será la representación de los dos ojos que se manejaran mediante esos factores.

Fotografía esférica en Unity

Para agregar una fotografía esférica en Unity debemos primero que todo tener una fotografía equirectangular. Luego debe ser renderizada para que no se distorsione dentro de una esfera donde será puesta dicha imagen. El siguiente paso es darle un sombreado de forma personalizada que nos permita una perspectiva para dentro de la esfera o el objeto donde se ponga la imagen. Seguidamente crearemos la esfera y pondremos la cámara dentro de este objeto, siendo la cámara el hijo del objeto de juego cameraContainer, éste deberá ser puesto en medio de la esfera.

Después tendremos que crear nuestro material con el sombreado que se utilizó antes y aplicarlo dentro de la esfera para que se vea la imagen. Finalmente podemos agregar el control del mouse para poder observar la imagen dentro de la esfera y para esto se creará un script donde se gire la cámara para poder tener el dominio de cada posición con el mouse.

Códigos

Por último se tienen los siguientes códigos para lograr agregar la fotografía esférica dentro de Unity.

El primer código que tenemos es para el sombreado que se debe realizar sobre la fotografía o imagen:

  • Shader “Apagado / Pano360Shader”
  • {
  •    Propiedades
  •    {
  •     _MainTex (“Base (RGB)”, 2D) = “blanco” {}
  •     _Color (“Color principal”, Color) = (1,1,1,0.5)
  •    }   SubShader
  •    {
  •    Tags {“RenderType” = “Opaque”}  // Esto se usa para imprimir la textura dentro de la esfera
  •    Cull Front  CGPROGRAM
  •    #pragma surface surf SimpleLambert
  •    half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten)
  •    {
  •       half4 c;
  •          c.rgb = s.Albedo;
  •       return c;
  •    }
  •    sampler2D _MainTex;
  •    struct Input
  •    {
  •       float2 uv_MainTex;
  •       float4 myColor: COLOR;
  •    };
  •    Fixed3 _Color;
  •    void surf (Input IN, inout SurfaceOutput o)
  •    {
  •       // Esto se usa para reflejar la imagen correctamente al imprimirla dentro de la esfera
  •       IN.uv_MainTex.x = 1 – IN.uv_MainTex.x;
  •       resultado fijo3 = tex2D (_MainTex, IN.uv_MainTex) * _ Color;
  •       o.Albedo = result.rgb;
  •       o.Alpha = 1;
  •    }
  •    ENDCG
  •    }
  •    emergencia “difusa”
  • }

Luego para poder tener la visualización por medio del mouse tenemos el siguiente código que  le debe adjuntar a la cámara:

  • flotar horizontalmente;
  • flotar vertical;
  • Transformar contenedor;void LateUpdate ()
  • {
  •     // Usando el mouse
  •   horizontal = Input.GetAxis (“Mouse X”);
  • vertical = Input.GetAxis (“Mouse Y”);     // Esto se hace para evitar la rotación en Z, con solo escribir 0 en Zcoord no es suficiente    // por lo que el contenedor gira alrededor de Y y la cámara alrededor de X contenedor por separado Rotar (new Vector3 (0, horizontal * ( -1), 0f) * Time.deltaTime * turnSpeedMouse);     transform.Rotate (nuevo Vector3 (vertical, 0, 0) * Time.deltaTime * turnSpeedMouse);
  • }
Autor: Alfredo Rubiano Granada
Editor: Carlos Pinzón
Código: UCRV-6
Universidad: Universidad Central
Fuentes:

Rebollo P. (2018). Juegos hechos con Unity. Akademus. https://www.akademus.es/blog/tecnologia/desarrollo-programacion/juegos-hechos-con-unity/#:~:text=Los%20ejemplos%20m%C3%A1s%20populares%20son,Seasons%20after%20Fall%20y%20Firewatch.

admin. (2014). Reproducción completa de video estereoscópico 360 en Unity. bernieroehl. http://bernieroehl.com/360stereoinunity/


Unity Technologies. (2020). Descripción general de video. docs.unyty3d.com [imagen] https://docs.unity3d.com/es/2019.4/Manual/VideoPlayer.html

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *