89 lines
2.8 KiB
Plaintext
89 lines
2.8 KiB
Plaintext
Shader "Custom/HitboxVisualizer"
|
|
{
|
|
Properties
|
|
{
|
|
[HDR] _BaseColor ("Color", Color) = (1, 0, 0, 0.7)
|
|
_BorderWidth ("Border Width", Range(0.005, 0.15)) = 0.035
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags
|
|
{
|
|
"RenderType" = "Transparent"
|
|
"Queue" = "Transparent+200"
|
|
"RenderPipeline" = "UniversalPipeline"
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "HitboxPass"
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
ZWrite Off
|
|
Cull Off
|
|
ZTest LEqual
|
|
|
|
HLSLPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma multi_compile_instancing
|
|
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float4 positionOS : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
CBUFFER_START(UnityPerMaterial)
|
|
float _BorderWidth;
|
|
CBUFFER_END
|
|
|
|
UNITY_INSTANCING_BUFFER_START(Props)
|
|
UNITY_DEFINE_INSTANCED_PROP(float4, _BaseColor)
|
|
UNITY_INSTANCING_BUFFER_END(Props)
|
|
|
|
Varyings vert(Attributes input)
|
|
{
|
|
Varyings output = (Varyings)0;
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
|
|
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
|
output.uv = input.uv;
|
|
return output;
|
|
}
|
|
|
|
half4 frag(Varyings input) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
|
half4 baseColor = UNITY_ACCESS_INSTANCED_PROP(Props, _BaseColor);
|
|
|
|
// Дистанция до края полигона (грани куба)
|
|
float2 dist = min(input.uv, 1.0 - input.uv);
|
|
float edgeDist = min(dist.x, dist.y);
|
|
|
|
// 1.0 если пиксель на краю грани, иначе 0.0
|
|
float isEdge = step(edgeDist, _BorderWidth);
|
|
|
|
half4 finalColor = baseColor;
|
|
// Внутри объема цвет прозрачный, на гранях — яркий и четкий
|
|
finalColor.a = lerp(baseColor.a * 0.25, saturate(baseColor.a * 1.5), isEdge);
|
|
finalColor.rgb = lerp(baseColor.rgb, baseColor.rgb * 1.3, isEdge);
|
|
|
|
return finalColor;
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
FallBack Off
|
|
} |