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.
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.
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).
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)