我的专栏目录:
小IVan:专题概述及目录前面我们使用自己的程序化模型做了一些效果。但是我们发现,程序化的模型无法做出特别复杂或者可控的效果,于是我们需要一种手段从给我们的资源里加载我们在max或者maya里生产的资源,下面我们就来从StaticMesh中读取我们需要的资源然后我们把这些数据组织成buffer然后我们来自己控制上传和绘制。
先上效果吧:
看上去好像没什么特别的,但是这个模型是我们自己控制顶点缓冲,索引缓冲,uv等信息绘制出来的!!!这意味着我们能自己控制模型资源的数据格式,UV通道的多少,怎么合并渲染,怎么优化数据!
这一节将为我们后续做一些效果作铺垫。
虚幻4的静态模型资源储存在UStaticMesh中。
我们通过UStaticMesh来指认模型资源
我们有了模型资源之后,下一步就是把资源中的数据抠出来用来给我们渲染。
为了寻找虚幻4模型资源数据到底存在哪里的,我们做如下尝试:
可以看到我们拿到了一些数据,但是这些数据是顶点数据吗,我去做了下验证
把资源从max中导出然后把捕获的数据和max中的作比较
然后把
可以看到我们的确拿到了顶点数据(Y值的误差是模型中心和原点没重合造成的)
下一步我们就开始扣数据啦
数据抠出来之后我们把数据拷贝进缓冲区中
void BuildMesh()
{
//Vertices.SetNumUninitialized(GetRequiredVertexCount());
for (int i = 0; i < CopyVertexPositionBuffer.Num(); i++)
{
const FDynamicMeshVertex& Vertex = Vertices[i];
VertexBuffers.PositionVertexBuffer.VertexPosition(i) = Vertex.Position;
VertexBuffers.StaticMeshVertexBuffer.SetVertexTangents(i, Vertex.TangentX, Vertex.GetTangentY(), Vertex.TangentZ);
VertexBuffers.StaticMeshVertexBuffer.SetVertexUV(i, 0, Vertex.TextureCoordinate[0]);
VertexBuffers.ColorVertexBuffer.VertexColor(i) = Vertex.Color;
}
{
auto& VertexBuffer = VertexBuffers.PositionVertexBuffer;
void* VertexBufferData = RHILockVertexBuffer(