删除旧的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