OldBlueWater/BlueWater/Assets/10.Shaders/SpeedLines.shader
NTG 278868a690 #Closes #101 #102 #103 #111 #117 #118
+ 부스터 사용시 집중선(SpeedLines) 기능 추가
+ 부스터 사용시 카메라 흔들림 효과 기능 추가
+ 부스터 사용시 포스트프로세싱(Vignette) 기능 추가
+ 부스터 소진시 내부적인 추가 부스터 시간 추가
+ 추가 부스터까지 소진시 부스터 쿨타임 적용
  ㄴ 기존의 이동속도보다 2배 느려지는 기능 추가
+ ShipPlayer(배) 모델링 변경
  ㄴ Hand_Painted_Boats(에셋 이름)
+ 배 변경에 따른 대포(Cannon) 변경 및 로직 수정
  ㄴ 대포의 발사 각도 변경
  ㄴ 대포의 스피드 변경
+ 배의 움직임 로직 변경
  ㄴ 일정한 속도로 회전
  ㄴ Rigidbody Freeze Rotation
+ 중형 물고기 모델링 추가
  ㄴ HammerHeadShark(망치머리상어) 추가
  ㄴ Stingray(가오리) 추가

+ Layer(PostProcessing) 추가
+ VisualFeedbackManager에 포스트 프로세싱 기능 관련 추가
2024-01-15 02:24:48 +09:00

127 lines
3.3 KiB
Plaintext

Shader "liuyima/SpeedLines"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_FBM ("FBM Texture", 2D) = "white" {}
_Color ("_Color",COLOR) = (1,1,1,1)
_Width("_Width",Range(0,1)) = 0.5
_Length("Length",Range(0,1)) = 0.5
_LengthSpeed("Length speed",Range(0,100)) = 50
_Density("Density",Range(0,1)) = 0.5
}
SubShader
{
CGINCLUDE
#define PI 3.1415926
float SignedAngle(float3 from, float3 to)
{
float angle = acos(dot(normalize(from), normalize(to)));
if (cross(to, from).y < 0)
{
return PI * 2 - angle;
}
return angle;
}
//将uv映射到圆环上
float2 circleUV(float2 uv)
{
float2 nuv;
float3 h = float3(uv.x-0.5, 0, uv.y-0.5);
float3 f = float3(0, 0, 1);
nuv.x = SignedAngle(f, h) / 2 / PI;
nuv.y = length(uv - float2(0.5, 0.5))/0.5;
return nuv;
}
float random1(float x)
{
return frac(sin(x)*10007.024);
}
float random(float2 st) {
return frac(sin(dot(st.xy,
float2(12.9898, 78.233)))*
43758.5453123);
}
ENDCG
//No culling or depth
Cull Off
ZWrite Off
ZTest Always
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
sampler2D _FBM;
float4 _Color;
float _Length;
float _Width;
float _LengthSpeed;
float _Density;
//采样FBM贴图
fixed samFBM(float2 st)
{
float2x2 rot = float2x2(cos(0.5), sin(0.5),
-sin(0.5), cos(0.50));
return tex2D(_FBM,mul(rot, st)).r;
}
fixed4 frag (v2f i) : SV_Target
{
float2 cuv = circleUV(i.uv);
cuv.x *= 80;
fixed index = ceil(cuv.x);
float lineDensity = 1-_Density;
fixed show = smoothstep(lineDensity-0.01,lineDensity+0.01,samFBM(index+ _Time.x*-10));
//x映射到0-1-0
fixed x = abs(cuv.x%1-0.5)*2;
//宽度收缩比例
float shrink =(_Width)* random1(index)+_Width;
//长度减小
float add = -samFBM(cuv.x+_Time.x*_LengthSpeed)-1+_Length;
float a = show*(1- smoothstep(0.01,0.01,x-(cuv.y+add)*shrink));
fixed4 col = _Color;
x = abs(i.uv.x-0.5)*2;
col.a *= a*abs(cuv.y-0.2);
return col;
}
ENDCG
}
}
}