mirror of
https://github.com/GTA-ASM/SanAndreasUnity
synced 2024-11-25 21:40:19 +00:00
fix FPS drop on Android
This commit is contained in:
parent
9f1b01296d
commit
2232f4327f
4 changed files with 51 additions and 57 deletions
|
@ -6,15 +6,8 @@ fixed4 _Color;
|
||||||
#ifdef VEHICLE
|
#ifdef VEHICLE
|
||||||
int _CarColorIndex;
|
int _CarColorIndex;
|
||||||
|
|
||||||
fixed3 _CarColor1;
|
fixed3 _CarColor;
|
||||||
fixed3 _CarColor2;
|
fixed _CarEmission;
|
||||||
fixed3 _CarColor3;
|
|
||||||
fixed3 _CarColor4;
|
|
||||||
|
|
||||||
fixed3 _HeadLightColor;
|
|
||||||
fixed3 _TailLightColor;
|
|
||||||
|
|
||||||
fixed4 _Lights;
|
|
||||||
|
|
||||||
float _Metallic;
|
float _Metallic;
|
||||||
float _Smoothness;
|
float _Smoothness;
|
||||||
|
@ -45,35 +38,11 @@ void surf(Input IN, inout SurfaceOutputStandard o)
|
||||||
fixed3 clr = tex2D(_MainTex, IN.uv_MainTex).rgb;
|
fixed3 clr = tex2D(_MainTex, IN.uv_MainTex).rgb;
|
||||||
fixed mask = tex2D(_MaskTex, IN.uv_MainTex).a;
|
fixed mask = tex2D(_MaskTex, IN.uv_MainTex).a;
|
||||||
|
|
||||||
#ifdef VEHICLE
|
|
||||||
fixed3 carColors[9] = {
|
|
||||||
fixed3(1, 1, 1),
|
|
||||||
_CarColor1,
|
|
||||||
_CarColor2,
|
|
||||||
_CarColor3,
|
|
||||||
_CarColor4,
|
|
||||||
_HeadLightColor,
|
|
||||||
_HeadLightColor,
|
|
||||||
_TailLightColor,
|
|
||||||
_TailLightColor
|
|
||||||
};
|
|
||||||
|
|
||||||
fixed carEmission[9] = {
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
exp(_Lights.x * 2) - 1,
|
|
||||||
exp(_Lights.y * 2) - 1,
|
|
||||||
exp(_Lights.z * 2) - 1,
|
|
||||||
exp(_Lights.w * 2) - 1
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
o.Albedo = clr
|
o.Albedo = clr
|
||||||
#ifdef VEHICLE
|
#ifdef VEHICLE
|
||||||
* carColors[_CarColorIndex]
|
* _CarColor
|
||||||
#endif
|
#endif
|
||||||
* IN.color.rgb * _Color.rgb;
|
* IN.color.rgb * _Color.rgb;
|
||||||
|
|
||||||
|
@ -82,7 +51,7 @@ void surf(Input IN, inout SurfaceOutputStandard o)
|
||||||
#ifdef VEHICLE
|
#ifdef VEHICLE
|
||||||
o.Metallic = _Metallic * o.Alpha;
|
o.Metallic = _Metallic * o.Alpha;
|
||||||
o.Smoothness = _Smoothness;
|
o.Smoothness = _Smoothness;
|
||||||
o.Emission = carEmission[_CarColorIndex] * o.Albedo;
|
o.Emission = _CarEmission * o.Albedo;
|
||||||
#else
|
#else
|
||||||
o.Metallic = 0;
|
o.Metallic = 0;
|
||||||
o.Smoothness = 0;
|
o.Smoothness = 0;
|
||||||
|
|
|
@ -11,16 +11,9 @@
|
||||||
_Color ("Color", Color) = (1, 1, 1, 1)
|
_Color ("Color", Color) = (1, 1, 1, 1)
|
||||||
|
|
||||||
_CarColorIndex ("Car Color Index", Range(0, 8)) = 0
|
_CarColorIndex ("Car Color Index", Range(0, 8)) = 0
|
||||||
|
|
||||||
_CarColor1 ("Car Color 1", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor2 ("Car Color 2", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor3 ("Car Color 3", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor4 ("Car Color 4", Color) = (1, 1, 1, 1)
|
|
||||||
|
|
||||||
_HeadLightColor ("Head Light Color", Color) = (1, 1, 1, 1)
|
_CarColor ("Car Color", Color) = (1, 1, 1, 1)
|
||||||
_TailLightColor ("Tail Light Color", Color) = (1, 1, 1, 1)
|
_CarEmission ("Car Emission", Range(0, 10)) = 0
|
||||||
|
|
||||||
_Lights ("Light Brightnesses", Vector) = (1, 1, 1, 1)
|
|
||||||
|
|
||||||
_AlphaCutoff ("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
|
_AlphaCutoff ("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,16 +11,9 @@
|
||||||
_Color ("Color", Color) = (1, 1, 1, 1)
|
_Color ("Color", Color) = (1, 1, 1, 1)
|
||||||
|
|
||||||
_CarColorIndex ("Car Color Index", Range(0, 8)) = 0
|
_CarColorIndex ("Car Color Index", Range(0, 8)) = 0
|
||||||
|
|
||||||
_CarColor1 ("Car Color 1", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor2 ("Car Color 2", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor3 ("Car Color 3", Color) = (1, 1, 1, 1)
|
|
||||||
_CarColor4 ("Car Color 4", Color) = (1, 1, 1, 1)
|
|
||||||
|
|
||||||
_HeadLightColor ("Head Light Color", Color) = (1, 1, 1, 1)
|
|
||||||
_TailLightColor ("Tail Light Color", Color) = (1, 1, 1, 1)
|
|
||||||
|
|
||||||
_Lights ("Light Brightnesses", Vector) = (1, 1, 1, 1)
|
_CarColor ("Car Color", Color) = (1, 1, 1, 1)
|
||||||
|
_CarEmission ("Car Emission", Range(0, 10)) = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
SubShader
|
SubShader
|
||||||
|
|
|
@ -453,16 +453,55 @@ namespace SanAndreasUnity.Behaviours.Vehicles
|
||||||
_colorsChanged = false;
|
_colorsChanged = false;
|
||||||
|
|
||||||
var indices = CarColors.FromIndices(_colors);
|
var indices = CarColors.FromIndices(_colors);
|
||||||
for (var i = 0; i < 4; ++i)
|
|
||||||
_props.SetColor(CarColorIds[i], indices[i]);
|
|
||||||
|
|
||||||
_props.SetVector(LightsId, new Vector4(_lights[0], _lights[1], _lights[2], _lights[3]));
|
Color32 headLightColor = new Color32(255, 255, 255, 255);
|
||||||
|
Color32 tailLightColor = new Color32(255, 255, 255, 255);
|
||||||
|
|
||||||
|
// compute car colors
|
||||||
|
Color32[] carColors = new []
|
||||||
|
{
|
||||||
|
new Color32(255, 255, 255, 255),
|
||||||
|
indices[0],
|
||||||
|
indices[1],
|
||||||
|
indices[2],
|
||||||
|
indices[3],
|
||||||
|
headLightColor,
|
||||||
|
headLightColor,
|
||||||
|
tailLightColor,
|
||||||
|
tailLightColor,
|
||||||
|
};
|
||||||
|
|
||||||
|
// compute car emissions
|
||||||
|
float[] carEmissions = new[]
|
||||||
|
{
|
||||||
|
0f,
|
||||||
|
0f,
|
||||||
|
0f,
|
||||||
|
0f,
|
||||||
|
0f,
|
||||||
|
Mathf.Exp(_lights[0] * 2) - 1,
|
||||||
|
Mathf.Exp(_lights[1] * 2) - 1,
|
||||||
|
Mathf.Exp(_lights[2] * 2) - 1,
|
||||||
|
Mathf.Exp(_lights[3] * 2) - 1,
|
||||||
|
};
|
||||||
|
|
||||||
foreach (var frame in _frames)
|
foreach (var frame in _frames)
|
||||||
{
|
{
|
||||||
var mr = frame.GetComponent<MeshRenderer>();
|
var mr = frame.GetComponent<MeshRenderer>();
|
||||||
if (mr == null) continue;
|
if (mr == null) continue;
|
||||||
mr.SetPropertyBlock(_props);
|
|
||||||
|
// get color index from each material, and assign properties accordingly
|
||||||
|
|
||||||
|
var materials = mr.sharedMaterials;
|
||||||
|
|
||||||
|
for (int i = 0; i < materials.Length; i++)
|
||||||
|
{
|
||||||
|
int carColorIndex = materials[i].GetInt("_CarColorIndex");
|
||||||
|
_props.SetColor("_CarColor", carColors[carColorIndex]);
|
||||||
|
_props.SetFloat("_CarEmission", carEmissions[carColorIndex]);
|
||||||
|
mr.SetPropertyBlock(_props, i);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue