Unity GPU网格渲染模板
思路
由于性能原因,需要在将部分静态模型进行GPU绘制,以节省性能。
RenderingTag
挂载到需要渲染的物体上
判断当前是否需要渲染
渲染数据标记
RenderingController
全局单例,渲染管理
RenderingData
模型网格数据,以及分组的处理
代码实现
RenderingData
想要实现的就是自动将模型的网格进行拆分,再通过手动的方式进行整合。
/// <summary>
/// 网格及它对应的材质
/// </summary>
[System.Serializable]
public struct MeshInfo
{
public Mesh mesh;
public Material[] materials;
}
/// <summary>
/// 模型的整体信息
/// </summary>
[System.Serializable]
public struct ModelInfo
{
public string name;
public MeshInfo[] meshes;
}
/// <summary>
/// 渲染模型结构类型
/// </summary>
[System.Serializable]
public struct RenderingInfo
{
public string name;
public int modelIndex;
public int[] meshIndexes;
public Vector3 pos;
public Vector3 angle;
public List<Transform> targets;
}
public class RenderingData : MonoBehaviour
{
private static RenderingData instance;
public static RenderingData Instance {
get {
return instance; } }
private void Awake()
{
instance = this;
}
public ModelInfo[] modelInfos;
public RenderingInfo[] renderingInfos;
public ModelInfo GetModelInfo(int index)
{
return modelInfos[index];
}
public RenderingInfo GetRenderingInfo(int index)
{
return renderingInfos[index];
}
public int GetRenderingNum()
{
return renderingInfos.Length;
}
public void AddRenderingInfoTarget(int index, Transform trans)
{
renderingInfos[index].target