1. UI 버튼 작업 했음 2. 칼, 방패 따로 붙이는 작업 헀음 3. 공격 모션에 이제 버튼 연동함 Todo 1. 공격시 화면 이상하게 흔들리는거 수정할 차례 2. 히트 박스 해서 몬스터 공격하는거 연동하기
100 lines
3.4 KiB
HLSL
Executable File
100 lines
3.4 KiB
HLSL
Executable File
void VertShader(inout appdata_full v, out Input data)
|
|
{
|
|
v.vertex.x += _VertexOffsetX;
|
|
v.vertex.y += _VertexOffsetY;
|
|
|
|
UNITY_INITIALIZE_OUTPUT(Input, data);
|
|
|
|
float bold = step(v.texcoord.w, 0);
|
|
|
|
// Generate normal for backface
|
|
float3 view = ObjSpaceViewDir(v.vertex);
|
|
v.normal *= sign(dot(v.normal, view));
|
|
|
|
#if USE_DERIVATIVE
|
|
data.param.y = 1;
|
|
#else
|
|
float4 vert = v.vertex;
|
|
float4 vPosition = UnityObjectToClipPos(vert);
|
|
float2 pixelSize = vPosition.w;
|
|
|
|
pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy);
|
|
float scale = rsqrt(dot(pixelSize, pixelSize));
|
|
scale *= abs(v.texcoord.w) * _GradientScale * (_Sharpness + 1);
|
|
scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
|
|
data.param.y = scale;
|
|
#endif
|
|
|
|
data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; //
|
|
data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex));
|
|
}
|
|
|
|
void PixShader(Input input, inout SurfaceOutput o)
|
|
{
|
|
|
|
#if USE_DERIVATIVE
|
|
float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y));
|
|
pixelSize *= _TextureWidth * .75;
|
|
float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1);
|
|
#else
|
|
float scale = input.param.y;
|
|
#endif
|
|
|
|
// Signed distance
|
|
float c = tex2D(_MainTex, input.uv_MainTex).a;
|
|
float sd = (.5 - c - input.param.x) * scale + .5;
|
|
float outline = _OutlineWidth*_ScaleRatioA * scale;
|
|
float softness = _OutlineSoftness*_ScaleRatioA * scale;
|
|
|
|
// Color & Alpha
|
|
float4 faceColor = _FaceColor;
|
|
float4 outlineColor = _OutlineColor;
|
|
faceColor *= input.color;
|
|
outlineColor.a *= input.color.a;
|
|
faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y));
|
|
outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y));
|
|
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
|
|
faceColor.rgb /= max(faceColor.a, 0.0001);
|
|
|
|
#if BEVEL_ON
|
|
float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0);
|
|
|
|
float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a,
|
|
tex2D(_MainTex, input.uv_MainTex + delta.xz).a,
|
|
tex2D(_MainTex, input.uv_MainTex - delta.zy).a,
|
|
tex2D(_MainTex, input.uv_MainTex + delta.zy).a };
|
|
|
|
// Face Normal
|
|
float3 n = GetSurfaceNormal(smp4x, input.param.x);
|
|
|
|
// Bumpmap
|
|
float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz;
|
|
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5));
|
|
bump = lerp(float3(0, 0, 1), bump, faceColor.a);
|
|
n = normalize(n - bump);
|
|
|
|
// Cubemap reflection
|
|
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n)));
|
|
float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a;
|
|
#else
|
|
float3 n = float3(0, 0, -1);
|
|
float3 emission = float3(0, 0, 0);
|
|
#endif
|
|
|
|
#if GLOW_ON
|
|
float4 glowColor = GetGlowColor(sd, scale);
|
|
glowColor.a *= input.color.a;
|
|
emission += glowColor.rgb*glowColor.a;
|
|
faceColor = BlendARGB(glowColor, faceColor);
|
|
faceColor.rgb /= max(faceColor.a, 0.0001);
|
|
#endif
|
|
|
|
// Set Standard output structure
|
|
o.Albedo = faceColor.rgb;
|
|
o.Normal = -n;
|
|
o.Emission = emission;
|
|
o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5));
|
|
o.Gloss = 1;
|
|
o.Alpha = faceColor.a;
|
|
}
|