Cómo lograr el efecto lupa en unity3d
Pensé en usar un sombreador para implementarlo por el momento y lo probé yo mismo. Aunque tiene un efecto de lupa, la claridad se reduce porque es necesario ampliar la imagen de muestra.
El código es el siguiente, a ver si te resulta útil.
Sombreador "DEMO/BIG"
{
Propiedades
{
_Distortion ("Distorsión", Rango(0,1000)) = 10//Distorsión
_Larger ("Más grande", Rango(0.1,1.9)) = 1.0/ Efecto amplificador
}
SubShader
{
Etiqueta{"queue" = "transparente" "tipo de representación" = "opaco"}
GrabPass{"_RefractionTex" }/ Definir el canal para capturar imágenes de pantalla
Pass
{
CGPROGRAM
#pragma vertex vert
# fragmento de pragma
#include "UnityCG.cginc"
#include "Lighting.cginc"
float _Distortion;
sampler2D _RefractionTex; //caché utilizado para almacenar la imagen de la pantalla
float4 _RefractionTex_TexelSize;
fixed _Larger;
struct a2v?
{
vértice float4: POSICIÓN;
};
estructura v2f
{
pos.float4: SV_POSITION;
float4 scrPos: TEXCOORD0;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos( v.vertex);
o.scrPos = ComputeGrabScreenPos(o.pos);//Tomar las coordenadas de muestreo de la imagen de la pantalla
return o ; p>
}
fragmento fijo4 (v2f i): SV_Target
{
desplazamiento float2 = ?_Distortion*_RefractionTex_TexelSize.xy;
i.scrPos.xy = desplazamiento * i.scrPos.z + i.scrPos.xy? .rgb;//Color de refracción
Devolver fix4(refrCol,1);
}
ENDCG
}
}
}
Efecto: