- Home /
Intersection Shader from Final Fantasy Crystal Chronicles
Hi :),
I've been learning unity shaders a few days ago to make something like the crystal aura from the game FFCC. For now only a simple sphere with a shader that glows on the objects it intersects (the red & blue circle).
I got some ideas from this tutorial : Shaders Case Study - Overwatch: Winston's Barrier Projector from Makin' Stuff Look Good in Unity
and this is the code I detracted from the tutorial:
Shader "CloverSwatch/BinstonBarrier"
{
Properties
{
_Color("Color", Color) = (0,0,0,0)
}
SubShader
{
Blend One One
ZWrite Off
Cull Off
Tags
{
"RenderType" = "Transparent"
"Queue" = "Transparent"
}
Pass
{
CGPROGRAM
#pragma target 3.0
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float2 screenuv : TEXCOORD1;
float4 vertex : SV_POSITION;
float depth : DEPTH;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.screenuv = ((o.vertex.xy / o.vertex.w) + 1) / 2;
o.screenuv.y = 1 - o.screenuv.y;
o.depth = -mul(UNITY_MATRIX_MV, v.vertex).z *_ProjectionParams.w;
return o;
}
uniform sampler2D _CameraDepthNormalsTexture;
fixed4 _Color;
fixed4 frag (v2f i) : SV_Target
{
float screenDepth = DecodeFloatRG(tex2D(_CameraDepthNormalsTexture, i.screenuv).zw);
float diff = screenDepth - i.depth;
float intersect = 0;
if (diff > 0)
intersect = 1 - smoothstep(0, _ProjectionParams.w * 0.5, diff);
fixed4 col = _Color * _Color.a + intersect;
return col;
}
ENDCG
}
}
}
Sadly he doesn't show all the steps for the shader which leaves me cutting parts of the code out. Now my problem with is that the sphere's intersection glow is relative to the cameras's position & rotation, as seen here on the video.
I cant wrap my head around to get a simple shader looking like the pictures shown above... tried many other tutorials like this too. And yes I read many docs on unity and elsewhere and did the basics for shaders for hours and hours already :)
I would be so happy to see some new approaches or even solutions.
Thanks for reading :)!
Your answer
Follow this Question
Related Questions
Test If Two Colliders Overlap 0 Answers
Draw intersection between two transparency plane 0 Answers
Problem with getting colliding objects 3 Answers
How do I paint the part of a model that is embedded in another model?, 0 Answers
How to highlight intersection of two meshes with a texture as the highlighting 0 Answers