Unity implementa el efecto CutIn de pantallas multicámara en el juego

Mostrar resultados

La siguiente imagen es el efecto de empalmar los cortes de dos objetos diferentes que se muestran en la ventana del Juego. Por supuesto, puedes ajustar libremente el ángulo del bisel y el contenido de la toma.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Descripción del principio

El principio básico es usar RenderTexture para unir el contenido iluminado por la cámara. Creo que debería ser relativamente simple usar RenderTexture para mostrar contenido diferente en las pantallas divididas izquierda y derecha; sin embargo, para lograr el corte de pantalla irregular anterior, Relativamente Hablando, es más difícil.
El llamado splicing significa esencialmente que solo queremos mostrar una determinada parte del contenido iluminado por una cámara y no queremos mostrar las otras partes, siguiendo esta idea, podemos intentar usar varios parches para cubrir todo el contenido. pantalla, y luego simplemente deje la parte que no queremos bloquear, luego copie algunos conjuntos más de parches, abra cada parte por separado y finalmente junte el contenido que se ve en todas las partes para formar una pantalla completa.
Insertar descripción de la imagen aquí
Por ejemplo, en el efecto anterior, utilicé dos parches inclinados para bloquear la lente. Si quisiera mostrar el lado izquierdo, ocultaría el parche izquierdo. Lo mismo ocurre con el lado derecho.
Sin embargo, esto no se puede hacer usando el material predeterminado. La cámara solo verá blanco en un lado y contenido en el otro (la cámara usa Clear Depth, que superpondrá el contenido iluminado por las capas superior y siguiente de la cámara).
Insertar descripción de la imagen aquí

Lo que esperamos es que la parte blanca sea "transparente", es decir, podamos ver el contenido capturado por la cámara en la siguiente capa a través de esta parte.
Esto solo requiere que habilitemos la escritura profunda en el Shader y luego eliminemos parte de la información de profundidad. El Shader específico es el siguiente

Shader "Custom/CutInMask"
{
    
    
    Properties
    {
    
    
        _Stencial ("Stencial ID", Float) = 100
        _StencialComp ("Stencial Compression", Float) = 8
        _StencialOp ("Stencial Operation", Float) = 2
    }

    SubShader
    {
    
    
        Tags{
    
    
            "RenderType" = "Opaque"
            "Queue" = "Geometry-500"
        }

        Lighting Off
        ZWrite On
        ColorMask 0

        Stencil
        {
    
    
            Ref[_Stencil]
            Comp[_StencilComp]
            Pass[_StencilOp]
        }

        Pass
        {
    
    
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag

            fixed4 vert(float4 v : POSITION) : SV_POSITION
            {
    
    
                return UnityObjectToClipPos(v);
            }

            fixed4 frag() : SV_TARGET
            {
    
    
                return float4(0,0,0,0);
            }

            ENDCG   
        }
        
    }
}

Los sombreadores de vértices y fragmentos en este Shader no son importantes, son la conversión de coordenadas y el color de salida más básicos (no importa cuál sea el color, porque se eliminará), y luego coloque este Shader en un material. El efecto se ve en la escena. La escena de prueba es la siguiente: dos objetos de máscara idénticos, luego abre uno y usa la cámara para tomar fotografías del objeto que deseas ver (ambas cámaras deben ser solo de profundidad)
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_37421018/article/details/124594830
Recomendado
Clasificación