Last active
June 21, 2022 09:39
-
-
Save kudorgyozo/9e210518ac7cc9938ee96edd15578c7e to your computer and use it in GitHub Desktop.
unity surface shader that draws a transparent circle around the mouse (use case: to show what is behind a wall in an isometric game)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void Start() | |
{ | |
theRenderer = GetComponent<MeshRenderer>(); | |
theRenderer.material.SetVector("_Resolution", new Vector4((float)Screen.width, (float)Screen.height, 0, 0)); | |
} | |
void OnMouseEnter() | |
{ | |
theRenderer.material = hoverMaterial; | |
theRenderer.material.SetVector("_Resolution", new Vector4((float)Screen.width, (float)Screen.height, 0, 0)); | |
} | |
void OnMouseExit() | |
{ | |
theRenderer.material = normalMaterial; | |
} | |
void OnMouseOver() | |
{ | |
//Debug.Log(Screen.width); | |
theRenderer.material.SetVector("_MousePos", new Vector4((float)Input.mousePosition.x, (float)Input.mousePosition.y, 0, 0)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Shader "Custom/transparentcircle" | |
{ | |
Properties | |
{ | |
_Color ("Color", Color) = (1,1,1,1) | |
_MainTex ("Albedo (RGB)", 2D) = "white" {} | |
_Glossiness ("Smoothness", Range(0,1)) = 0.5 | |
_Metallic ("Metallic", Range(0,1)) = 0.0 | |
//_MousePos ("MousePos", Vector) = (0,0,0,0) | |
_Resolution ("Resolution", Vector) = (800,600,0,0) | |
} | |
SubShader | |
{ | |
Tags { "Queue" = "Transparent" "RenderType"="Opaque" } | |
LOD 200 | |
CGPROGRAM | |
// Physically based Standard lighting model, and enable shadows on all light types | |
#pragma surface surf Standard fullforwardshadows alpha:fade //finalcolor:mycolor | |
// Use shader model 3.0 target, to get nicer looking lighting | |
#pragma target 3.0 | |
sampler2D _MainTex; | |
struct Input | |
{ | |
float2 uv_MainTex; | |
float4 screenPos; | |
}; | |
half _Glossiness; | |
half _Metallic; | |
fixed4 _Color; | |
float2 _MousePos; | |
float2 _Resolution; | |
bool _enabled; | |
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. | |
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. | |
// #pragma instancing_options assumeuniformscaling | |
UNITY_INSTANCING_BUFFER_START(Props) | |
// put more per-instance properties here | |
UNITY_INSTANCING_BUFFER_END(Props) | |
void surf (Input IN, inout SurfaceOutputStandard o) | |
{ | |
// Albedo comes from a texture tinted by color | |
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; | |
o.Albedo = c.rgb; | |
float2 screenUV = IN.screenPos.xy / IN.screenPos.w; | |
screenUV.xy *= _Resolution; | |
float2 MousePos = float2(_MousePos.x, _MousePos.y); | |
float d = distance(MousePos, screenUV); // [0 .. 99999] | |
float maxd = _Resolution.x / 14; // 100 | |
float feather = maxd / 6; // 10 | |
d = smoothstep(maxd-feather, maxd, d); // [0 0 0 0 0 90, / / / 100 1 1 1 1 1 1] | |
// Metallic and smoothness come from slider variables | |
o.Metallic = _Metallic; | |
o.Smoothness = _Glossiness; | |
o.Alpha = d; | |
} | |
ENDCG | |
} | |
FallBack "Diffuse" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment