Red de conocimiento informático - Material del sitio web - Cómo lograr el efecto lupa en unity3d

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 ;

}

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: