虚幻4渲染编程(图元汇编篇)【第四卷:自定义模型资源管线】

本文介绍如何从虚幻4的UStaticMesh中提取数据,控制顶点缓冲、索引缓冲和UV信息,实现自定义渲染。通过验证和数据抠取,将资源数据放入缓冲区并由Drawing Policy绘制,从而掌握模型渲染资源的控制权。
摘要由CSDN通过智能技术生成

我的专栏目录:

小IVan:专题概述及目录

前面我们使用自己的程序化模型做了一些效果。但是我们发现,程序化的模型无法做出特别复杂或者可控的效果,于是我们需要一种手段从给我们的资源里加载我们在max或者maya里生产的资源,下面我们就来从StaticMesh中读取我们需要的资源然后我们把这些数据组织成buffer然后我们来自己控制上传和绘制。

先上效果吧:

v2-0b3688817529329fff4ad6dfb9d47fa3_b.jpg

看上去好像没什么特别的,但是这个模型是我们自己控制顶点缓冲,索引缓冲,uv等信息绘制出来的!!!这意味着我们能自己控制模型资源的数据格式,UV通道的多少,怎么合并渲染,怎么优化数据!

这一节将为我们后续做一些效果作铺垫。

虚幻4的静态模型资源储存在UStaticMesh中。

v2-5a2fc73daa817eaae05f41e443ea1b48_b.jpg

我们通过UStaticMesh来指认模型资源

v2-cc376f74b6307bd5be0417beb87c1ae4_b.jpg

我们有了模型资源之后,下一步就是把资源中的数据抠出来用来给我们渲染。

为了寻找虚幻4模型资源数据到底存在哪里的,我们做如下尝试:

v2-209aafcaf03ddf0b15dbd6ea41f56f4c_b.jpg

可以看到我们拿到了一些数据,但是这些数据是顶点数据吗,我去做了下验证

把资源从max中导出然后把捕获的数据和max中的作比较

v2-4fb3bc2ebd5a8472c621f032b1be73fd_b.jpg

然后把

v2-6e1a155160357a5b1f539b24fff746ea_b.jpg
v2-06140ea12d348e0ed725ac3fdc9d3aeb_b.jpg

可以看到我们的确拿到了顶点数据(Y值的误差是模型中心和原点没重合造成的)

下一步我们就开始扣数据啦

v2-93b221cd3e5e1307314ab54aefe65924_b.jpg

数据抠出来之后我们把数据拷贝进缓冲区中

        	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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值