Files
UmaViewer/Assets/Scripts/UmaViewerGlobalShader.cs
T
CroakFang a1c0904ee2 bug fix
2022-11-13 23:43:39 +08:00

141 lines
5.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UmaViewerGlobalShader : MonoBehaviour
{
//仅用于设置游戏开局shader全局变量的初始值,若想即时调整请使用Editor内部工具
public float _Global_MaxDensity = 1.0f;
public float _Global_MaxHeight = 10.0f;
public float _GlobalOutlineOffset = 1f;
public float _GlobalOutlineWidth = 1.0f;
public float _GlobalCameraFov = 0.1f;
public float _CylinderBlend = 0.0f;
public Color _GlobalToonColor = new Color(1, 1, 1, 0);
public Color _Global_FogColor;
public Color _GlobalDirtRimSpecularColor;
public Color _GlobalDirtToonColor;
public Color _GlobalRimColor = new Color(1, 1, 1, 0);
public Color _GlobalDirtColor;
public Color _RimColor2;
List<Vector4> _MainParam = new List<Vector4>();
public Vector4 _MainParam_0;
public Vector4 _MainParam_1;
List<Vector4> _HighParam1 = new List<Vector4>();
public Vector4 _HighParam1_0 = new Vector4(0, 0, 0, 1);
public Vector4 _HighParam1_1 = new Vector4(0, 0, 0, 1);
public Vector4 _HighParam1_2;
List<Vector4> _HighParam2 = new List<Vector4>();
public Vector4 _HighParam2_0 = new Vector4(0, 0, 0, 1);
public Vector4 _HighParam2_1 = new Vector4(0, 0, 0, 1);
List<Vector4> _ColorArray = new List<Vector4>();
public Color _ColorArray_0;
public Color _ColorArray_1;
public Color _ColorArray_2;
public Color _ColorArray_3;
public Color _ColorArray_4;
public Color _ColorArray_5;
public Color _ColorArray_6;
public Color _ColorArray_7;
public Color _ColorArray_8;
public Color _ColorArray_9;
List<float> _DirtRate = new List<float>();
public float _DirtRate_0;
public float _DirtRate_1;
public float _DirtRate_2;
public Vector4 _Global_FogMinDistance;
public Vector4 _Global_FogLength;
public float _RimHorizonOffset;
public Color _AmbientColor;
public Vector2 scrollPosition = Vector2.zero;
void setGlobal()
{
//Color
Shader.SetGlobalColor("_GlobalToonColor", _GlobalToonColor);
Shader.SetGlobalColor("_Global_FogColor", _Global_FogColor);
Shader.SetGlobalColor("_GlobalDirtRimSpecularColor", _GlobalDirtRimSpecularColor);
Shader.SetGlobalColor("_GlobalDirtToonColor", _GlobalDirtToonColor);
Shader.SetGlobalColor("_GlobalRimColor", _GlobalRimColor);
Shader.SetGlobalColor("_GlobalDirtColor", _GlobalDirtColor);
Shader.SetGlobalColor("_RimColor2", _RimColor2);
//Float
Shader.SetGlobalFloat("_Global_MaxDensity", _Global_MaxDensity);
Shader.SetGlobalFloat("_Global_MaxHeight", _Global_MaxHeight);
Shader.SetGlobalFloat("_GlobalOutlineOffset", _GlobalOutlineOffset);
Shader.SetGlobalFloat("_GlobalOutlineWidth", _GlobalOutlineWidth);
Shader.SetGlobalFloat("_GlobalCameraFov", _GlobalCameraFov);
Shader.SetGlobalFloat("_CylinderBlend", _CylinderBlend);
Shader.SetGlobalFloat("_RimHorizonOffset", _RimHorizonOffset);
//Vector Array
_MainParam.Clear();
_MainParam.Add(_MainParam_0);
_MainParam.Add(_MainParam_1);
Shader.SetGlobalVectorArray("_MainParam", _MainParam);
_HighParam1.Clear();
_HighParam1.Add(_HighParam1_0);
_HighParam1.Add(_HighParam1_1);
_HighParam1.Add(_HighParam1_2);
Shader.SetGlobalVectorArray("_HighParam1", _HighParam1);
_HighParam2.Clear();
_HighParam2.Add(_HighParam2_0);
_HighParam2.Add(_HighParam2_1);
Shader.SetGlobalVectorArray("_HighParam2", _HighParam2);
_ColorArray.Clear();
_ColorArray.Add(_ColorArray_0);
_ColorArray.Add(_ColorArray_1);
_ColorArray.Add(_ColorArray_2);
_ColorArray.Add(_ColorArray_3);
_ColorArray.Add(_ColorArray_4);
_ColorArray.Add(_ColorArray_5);
_ColorArray.Add(_ColorArray_6);
_ColorArray.Add(_ColorArray_7);
_ColorArray.Add(_ColorArray_8);
_ColorArray.Add(_ColorArray_9);
Shader.SetGlobalVectorArray("_ColorArray", _ColorArray);
Shader.SetGlobalVector("_Global_FogMinDistance", _Global_FogMinDistance);
Shader.SetGlobalVector("_Global_FogLength", _Global_FogLength);
_DirtRate.Clear();
_DirtRate.Add(_DirtRate_0);
_DirtRate.Add(_DirtRate_1);
_DirtRate.Add(_DirtRate_2);
Shader.SetGlobalFloatArray("_DirtRate", _DirtRate);
Shader.SetGlobalColor("_AmbientColor", _AmbientColor);
}
// Start is called before the first frame update
void Start()
{
setGlobal();
}
private void FixedUpdate()
{
//Used to calculate the correct outline
if (UmaViewerBuilder.Instance.CurrentUMAContainer)
{
var aniCamera = UmaViewerBuilder.Instance.AnimationCamera;
var camera = aniCamera.enabled ? aniCamera: Camera.main;
var distance = Vector3.Distance(camera.transform.position, UmaViewerBuilder.Instance.CurrentUMAContainer.transform.position);
var outlineWidth = 40.0f * distance * Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);
Shader.SetGlobalFloat("_GlobalCameraFov", outlineWidth);
}
}
}