删除旧的StaticMesh
This commit is contained in:
parent
f0512edb5a
commit
efed9ff0dd
@ -1,46 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include<hgl/graph/VKNamespace.h>
|
|
||||||
#include<hgl/graph/StaticMeshLODPolicy.h>
|
|
||||||
#include<hgl/graph/ShadowPolicy.h>
|
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
class SceneNode;
|
|
||||||
|
|
||||||
class StaticMesh
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
StaticMeshLODPolicy lod_policy; ///<LOD策略
|
|
||||||
|
|
||||||
SceneNode *root_node;
|
|
||||||
|
|
||||||
StaticMesh *shadow_proxy_static_mesh; ///<阴影代理静态网格
|
|
||||||
StaticMesh *physic_proxy_static_mesh; ///<物理代理静态网格
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
bool two_side; ///<双面渲染
|
|
||||||
|
|
||||||
ObjectDynamicShadowPolicy recommend_dynamic_shadow_policy; ///<动态阴影策略(推荐项,最终可被取代)
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
const StaticMeshLODPolicy GetLODPolicy()const { return lod_policy; } ///<取得LOD策略
|
|
||||||
const ObjectDynamicShadowPolicy GetRecommendDynamicShadowPolicy()const { return recommend_dynamic_shadow_policy; } ///<取得推荐的动态阴影策略
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
StaticMesh(SceneNode *);
|
|
||||||
virtual ~StaticMesh();
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
SceneNode *GetScene(){return root_node;}
|
|
||||||
|
|
||||||
SceneNode *GetShadowNode() { return shadow_proxy_static_mesh?shadow_proxy_static_mesh->GetScene():root_node; } ///<取得阴影渲染节点
|
|
||||||
SceneNode *GetPhysicNode() { return physic_proxy_static_mesh?physic_proxy_static_mesh->GetScene():root_node; } ///<取得物理渲染节点
|
|
||||||
|
|
||||||
};//class StaticMesh
|
|
||||||
VK_NAMESPACE_END
|
|
@ -1,30 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include<hgl/graph/VKNamespace.h>
|
|
||||||
#include<hgl/TypeFunc.h>
|
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 静态模型LOD策略
|
|
||||||
*/
|
|
||||||
enum class StaticMeshLODPolicy:uint8
|
|
||||||
{
|
|
||||||
None=0, ///<无LOD
|
|
||||||
|
|
||||||
DiscardDetail, ///<丢弃细节
|
|
||||||
|
|
||||||
AnotherMesh, ///<另一个模型
|
|
||||||
|
|
||||||
Billboard, ///<广告牌
|
|
||||||
|
|
||||||
//Voxel, ///<体素
|
|
||||||
|
|
||||||
//MeshSDF, ///<网格SDF
|
|
||||||
|
|
||||||
//MeshCard, ///<网格卡片
|
|
||||||
|
|
||||||
ENUM_CLASS_RANGE(None,Billboard)
|
|
||||||
};//enum class StaticMeshLODPolicy
|
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
|
@ -1,25 +0,0 @@
|
|||||||
#ifndef HGL_GRAPH_STATIC_RENDER_MANAGER_INCLUDE
|
|
||||||
#define HGL_GRAPH_STATIC_RENDER_MANAGER_INCLUDE
|
|
||||||
|
|
||||||
#include<hgl/graph/VK.h>
|
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
class RawMesh
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 静态渲染管理器<br>
|
|
||||||
* 静态渲染指的是不会产生资源变动的内容,而不是指不会动的内容。
|
|
||||||
*/
|
|
||||||
class StaticRenderManager
|
|
||||||
{
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual ~StaticRenderManager()=default;
|
|
||||||
|
|
||||||
};//class StaticRenderManager
|
|
||||||
VK_NAMESPACE_END
|
|
||||||
#endif//HGL_GRAPH_STATIC_RENDER_MANAGER_INCLUDE
|
|
@ -1,27 +0,0 @@
|
|||||||
#include<hgl/graph/StaticMesh.h>
|
|
||||||
#include<hgl/graph/VKRenderResource.h>
|
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
//StaticMesh *StaticMesh::CreateNewObject(RenderResource *rr,SceneNode *node)
|
|
||||||
//{
|
|
||||||
// if(!node)
|
|
||||||
// return(nullptr);
|
|
||||||
//
|
|
||||||
// if(node->IsEmpty())
|
|
||||||
// return(nullptr);
|
|
||||||
//
|
|
||||||
// return(new StaticMesh(rr,node));
|
|
||||||
//}
|
|
||||||
|
|
||||||
StaticMesh::StaticMesh(SceneNode *sn)
|
|
||||||
{
|
|
||||||
root_node=sn;
|
|
||||||
}
|
|
||||||
|
|
||||||
StaticMesh::~StaticMesh()
|
|
||||||
{
|
|
||||||
SAFE_CLEAR(root_node);
|
|
||||||
}
|
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
|
@ -1,58 +0,0 @@
|
|||||||
# 静态渲染管理
|
|
||||||
|
|
||||||
## 静态渲染的意义是什么?
|
|
||||||
|
|
||||||
静态渲染管理中的“静态”并不是指在场景中静止不动的所有物件,而是说大部分时间都会出现在场景中的物件。它包含地形、花草树木、房屋、常见人物,武器装备等等。如果归划好,可以将绝大部分的物件都划入静态渲染中。
|
|
||||||
|
|
||||||
它的意义为的是所有添加进管理器的模型原始资源,都会一直存在。与它们本身是否显示在画面中,并无关联。为的是避开对显存资源的动态调配。
|
|
||||||
|
|
||||||
在静态渲染管理器中的所有模型,会根据顶点数据格式(Vertex Input Format)分类。每种格式所有模型共用一套超大VBO(Vertex Buffer Object),以达到在渲染时渲染不同模型不会切换VBO的效果,并进一步达成“一个格式,一次Drawcall全部画完”的极致效果。
|
|
||||||
|
|
||||||
## 材质的定义
|
|
||||||
|
|
||||||
1.Material 材质可以简单理解为是Shader的包装。
|
|
||||||
|
|
||||||
2.Material Instance 材质实例是指同一材质下,不同的参数配置。
|
|
||||||
|
|
||||||
## 我们需要做什么?
|
|
||||||
|
|
||||||
1.在Shader中,建立两个UBO或SSBO
|
|
||||||
|
|
||||||
```glsl
|
|
||||||
//一个用于存所有Local to World矩阵的数组
|
|
||||||
|
|
||||||
#define MI_MAX_COUNT (UBORange/sizeof(mat4))
|
|
||||||
|
|
||||||
layout(set=?,binding=?) uniform LocalToWorldData
|
|
||||||
{
|
|
||||||
mat4 mats[L2W_MAX_COUNT];
|
|
||||||
}l2w;
|
|
||||||
```
|
|
||||||
|
|
||||||
```glsl
|
|
||||||
//一个用于存所有MaterialInstance数据的数组
|
|
||||||
|
|
||||||
#define MI_MAX_COUNT (UBORange/sizeof(MaterialInstance))
|
|
||||||
|
|
||||||
layout(set=?,binding=?) uniform MaterialInstanceData
|
|
||||||
{
|
|
||||||
MaterialInstance mi_array[MI_MAX_COUNT];
|
|
||||||
}mi;
|
|
||||||
```
|
|
||||||
|
|
||||||
2.建立一个RG8UI或RG16UI的Vertex Input Stream,用于保存访问LocalToWorld/MaterialInstance的索引
|
|
||||||
|
|
||||||
```glsl
|
|
||||||
layout(location=?) in uvec2 Assign; //Local To World矩阵ID与材质ID输入数据流
|
|
||||||
|
|
||||||
mat4 GetLocalToWorld()
|
|
||||||
{
|
|
||||||
return l2w.mats[Assign.x];
|
|
||||||
}
|
|
||||||
|
|
||||||
MaterialInstance GetMaterialInstance()
|
|
||||||
{
|
|
||||||
return mi.mi_array[Assign.y];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user