Ejercicio 1: Ejemplo basico en Unity 3D


  • El ejemplo

El ejemplo que utilice es una escena simple creada en el motor de videojuegos Unity. En esta se puede ver la interacción de una esfera con un bloque y el suelo, producido por las simulaciones de interacción física de Unity. En la escena se puede ver el movimiento de la esfera, además de los distintos materiales que toma tanto la esfera como el cubo y el suelo.

  • Ejecución

Para la ejecución del ejemplo se requieren una serie de archivos.

  • El archivo de la escena
  • Los archivos de materiales
  • El codigo del shader

Unity guarda la información de los objetos 3D, sus posiciones y sus componentes en un archivo de Escena. Este se carga en el editor de Unity y podemos visualizar toda el sistema creado, incluyendo la iluminación y la cámara. Además de este, se requiere tener los materiales que toman cada objeto. En este ejemplo se tienen tres materiales: el de la esfera, el del cubo y el del suelo. Cada material tiene unos parámetros modificables como el color, la suavidad y el valor que indica si el material es un metal o no. En este ejemplo, el material del cubo y la esfera son no metales con suavidad media, mientras que el suelo es un metal.

Cabe mencionar que para que la simulación funcione apropiadamente, la esfera tiene un componente especial de Unity llamado "Rigidbody". Este componente es el encarga de tratar el elemento como un cuerpo sólido para realizar las simulaciones físicas. El cubo y el suelo por otro lado están marcados como objetos estáticos.

Para ejecutar la animación, se oprime el botón de reproducción en el editor. El motor de Unity se encarga de simular y desplegar la animación según la configuración de la cámara.

  • Salida Grafica

Como se menciono anteriormente, muchos aspectos de la salida grafica del ejemplo es realizada por el motor de Unity "under the hood". Sin embargo, a través del editor se puede modificar cualquier objeto de la escena y por lo tanto la salida. Por ejemplo, adicionando un comportamiento a la cámara podemos hacer que esta gira alrededor de la escena:

El codigo del comportamiento de la camara se puede ver a continuación:

public class SimpleCamera : MonoBehaviour {

    public float endAngle;
    public float duration;

    private float t = 0;

    // Update es llamado por cada fotograma
    void Update ()
    {
        t += Time.deltaTime;
        float interpolation = Mathf.Clamp(t / duration,0,1);

        transform.eulerAngles = Vector3.up * Mathf.Lerp(0, endAngle, interpolation);
    }
}

Por otro lado, Unity nos permite escribir Shaders propios para ser utilizados en el despliegue. Para esto Unity hace uso de una variante del lenguaje HLSL. En este ejemplo, los materiales están usando el shader de superficie por defecto de Unity. El código de este shader se puede ver a continuación:

Shader "Custom/Shader" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard fullforwardshadows

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutputStandard o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

Podemos ver que en el Shader se pueden modificar parámetros como el color, suavidad y el factor de metal del material. El lenguaje también nos ofrece diversas opciones para modificar propiedades mas avanzadas de la iluminación y la textura del material.

Tiempo dedicado

Para este ejercicio, habia planeado un tiempo de 2 horas.

Sin embargo me tomo alrededor de una hora completar la explicación.

results matching ""

    No results matching ""