
任务:替换和实装美术素材 1.在教程场景布置图标和文字提示内容 DONE 2.制作GamePlay中背景元素的动画并实装 DONE 3.替换拆迁障碍物美术素材 DONE 任务:实装音乐和音效 1.为两个场景添加音乐,并且在GamePlay场景不重开音乐。 DONE 2.实装人摔地音效 DONE 3.实装人跑动音效 DONE 4.实装人马分离音效 DONE 5.实装创烂障碍物音效 DOING 6.实装圣火点燃音效 7.实装马磕磕碰碰音效 8.实装马似音效 9.实装马着地音效 10.实装马起跳音效 任务:实装特效 …… 任务:完善没写的零散逻辑 1.在教程场景,若人马分离障碍处没接到人,过一个转场然后复位人和马 **:仍然存在问题,当如此,人的动画失效。这个问题现在不好修,等待人的死亡动画实装后再修 WAIT 2.在教程场景,点燃圣火仅有进入触发器后加载转场然后转移场景的功能,没有点燃圣火的过程,现补充其逻辑 DONE 3.开发GamePlay距离记录和重开系统 …… 修复Bug 1.在教程场景,可破坏障碍物的碎片的层级不对,创烂瞬间会有层级突变的问题。在GamePlay层级,也出现了这个问题。 2.现在的高障碍实在太高了,基本有80%以上的概率导致马翻,应该调低障碍物、或者调大马的跳跃力度。
102 lines
3.5 KiB
HLSL
102 lines
3.5 KiB
HLSL
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.texcoord1.y, 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.texcoord1.y) * _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; //
|
|
|
|
v.texcoord1.xy = UnpackUV(v.texcoord1.x);
|
|
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;
|
|
}
|