Shader que puede detectar la intersección con otros objetos
– UnityAssets3Free
bienvenido , me llamo juansito y aqui os traigo
nueva pregunta curiosa
Soy un principiante en los mundos de shaders, es realmente difícil de aprender (lo intento varias veces de todos modos). Estoy buscando un sombreador que pueda detectar la colisión/intersección con otros objetos para poder detener su representación en ese punto de intersección. Actualmente obtengo este sombreador que me permite detectar la intersección (no sé cómo) pero su representación de malla no se detiene.
Shader "Custom/IntersectionHighlights"
{
Properties
_RegularColor("Main Color", Color) = (1, 1, 1, .5) //Color when not intersecting
_HighlightColor("Highlight Color", Color) = (1, 1, 1, .5) //Color when intersecting
_HighlightThresholdMax("Highlight Threshold Max", Float) = 1 //Max difference for intersections
SubShader
Tags "Queue" = "Transparent" "RenderType"="Transparent"
Pass
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off
CGPROGRAM
#pragma target 3.0
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform sampler2D _CameraDepthTexture; //Depth Texture
uniform float4 _RegularColor;
uniform float4 _HighlightColor;
uniform float _HighlightThresholdMax;
struct v2f
float4 pos : SV_POSITION;
float4 projPos : TEXCOORD1; //Screen position of pos
;
v2f vert(appdata_base v)
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.projPos = ComputeScreenPos(o.pos);
return o;
half4 frag(v2f i) : COLOR
float4 finalColor = _RegularColor;
//Get the distance to the camera from the depth buffer for this point
float sceneZ = LinearEyeDepth (tex2Dproj(_CameraDepthTexture,
UNITY_PROJ_COORD(i.projPos)).r);
//Actual distance to the camera
float partZ = i.projPos.z;
//If the two are similar, then there is an object intersecting with our object
float diff = (abs(sceneZ - partZ)) /
_HighlightThresholdMax;
if(diff <= 1)
finalColor = lerp(_HighlightColor,
_RegularColor,
float4(diff, diff, diff, diff));
half4 c;
c.r = finalColor.r;
c.g = finalColor.g;
c.b = finalColor.b;
c.a = finalColor.a;
return c;
ENDCG
FallBack "VertexLit"
}
0
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te funcione