首页 > 其他分享 >【UnrealEngine4图形】——创建绘制结构体

【UnrealEngine4图形】——创建绘制结构体

时间:2023-01-15 15:23:11浏览次数:42  
标签:const 函数 创建 RESTRICT UnrealEngine4 图形 绘制 MeshDrawCommand

绘制结构的作用

在UnrealEngine4中,对于一个绘制Mesh的drawcall需要的所有信息(VertexBuffer,IndicesBuffer,Shaders,PipelineState等)用一个MeshDrawCommand结构体打包,然后添加到List中依次执行MeshDrawCommand进行drawcall调用,因此,本质上对于绘制一个Mesh来说,就是在创建一系列MeshDrawCommand,你可能会好奇,为何是一系列,而不是一个?因为MeshA可能需要创建一个MeshDrawCommand用于BasePass阶段(这个MeshDrawCommand可能就包含了BasePass阶段需要的Shaders和对应参数),然后这个MeshA可能还需要创建一个MeshDrawCommand用于ShadowMapPass阶段(这个MeshDrawCommand包含的Shaders和对应参数显然与BasePass又不一样,但是VertexBuffer和IndicesBuffer可能是一样的,你很好奇,为何VB和IB不一定是一样的呢?因为生成ShadowMap可能使用一个代理简化网格体数据,同时PipelineState与BasePass可能也不一样),总之,一个MeshA可以为好几种Pass阶段生成对应需要的MeshDrawCommand。

生成绘制结构体的内置工具函数

我们可以直接手动获取shaders,设置参数,绑定管线状态这样手动要创建一个MeshDrawCommand,但是通常我们使用FMeshPassProcessor::BuildMeshDrawCommands()函数来生成一个mesh的MeshDrawCommands(这里加了s,也就是说,一个Mesh实际上可能包含多个section,section的意思简单来说,比如一个obj模型文件,整个obj表示一个Geometry,在ue4这里就是整个obj模型表示一个mesh,然后这个mesh里面显然可能会包含使用不同材质或分组的块数据),这个函数的原型如下:

 1 template<typename PassShadersType, typename ShaderElementDataType>
 2     void BuildMeshDrawCommands(
 3         const FMeshBatch& RESTRICT MeshBatch,
 4         uint64 BatchElementMask,
 5         const FPrimitiveSceneProxy* RESTRICT PrimitiveSceneProxy,
 6         const FMaterialRenderProxy& RESTRICT MaterialRenderProxy,
 7         const FMaterial& RESTRICT MaterialResource,
 8         const FMeshPassProcessorRenderState& RESTRICT DrawRenderState,
 9         PassShadersType PassShaders,
10         ERasterizerFillMode MeshFillMode,
11         ERasterizerCullMode MeshCullMode,
12         FMeshDrawCommandSortKey SortKey,
13         EMeshPassFeatures MeshPassFeatures,
14         const ShaderElementDataType& ShaderElementData);

这里,可以看到函数参数就包含了可以创建一个MeshDrawCommand的所有信息(shaders,pipelineState,shaderParamters(也就是shaderElementData),mesh本身数据)。

生成MeshDrawCommand的一般形式

按UE4的架构封装,我们需要继承FMeshPassProcessor类,重载AddMeshBatch函数,这个函数会在对应实际被调用,然后可以在这个函数中调用BuildMeshDrawCommands函数来生成MeshDrawCommands。

可以参考HairStrandsVisibility.cpp的AddMeshBatch函数,来快速copy到自己新创建的函数中,进行修改以便快速开发。

标签:const,函数,创建,RESTRICT,UnrealEngine4,图形,绘制,MeshDrawCommand
From: https://www.cnblogs.com/JhonKkk/p/17053509.html

相关文章

  • Canvas 图形-01:Canvas介绍、Canvas API
    Canvas介绍、CanvasAPICanvas介绍Canavs是HTML5规范的一部分,需要使用<canvas></canvas>在HTML中标注使用。实际操作的是canvas的context。Context2D是基于状态的,拥有......
  • postgis:通过命令创建几何图形-geometry
    postgis:通过命令创建几何图形-geometry已被阅读1516次 | 文章分类:geoserver | 2019-12-2322:32可以利用数据库的查询工具创建空间数据表一:执行查看结......
  • 【Python基础学习】2.基本图形绘制
    主要参考来源:慕课嵩天老师的“Python语言程序设计”[https://www.icourse163.org/course/BIT-268001?tid=1468130447]2.1深入理解Python语言计算机技术的演进:1946-19......
  • scratch图形化编程教程
    1.scratch软件市面上类似于scratch这种图形化编程的软件非常多,各个品牌的都有,而且每个品牌之后的风格、界面布局也是不同的,所以我会简单的列举一些对应软件。scratch3.0......
  • C# winform 推荐五款图形库
    推荐五款图形库http://netcontrols.org/nplot/wiki/index.phphttps://scottplot.net/https://gitee.com/electronic-diy-studio/OxyPlotWinformhttps://sourceforge.ne......
  • 在vue中使用Echarts绘制叠堆折线面积图(可切换叠堆柱状图)
    (文章目录)效果我这里用的框架是Element+vue,将可视化图表用card卡片包起来,这个叠堆折线面积图主要实现的功能有:1.默认进入时看到的是叠堆折线面积图,在点击对应的元素切......
  • 【798】Python中通过seaborn绘制violin plot
    参考:python怎么绘制小提琴图?|seabornviolinplot参考:seaborn学习笔记(四):箱型图、小提琴图参考:01,seaborn基本设置:5种风格,外边框,图位置,子图风格,文字大小,线宽参考:matpl......
  • C++利用easyX实现一个简单图形化窗口
    在实现这个图形化窗口过程中遇到了一些琐碎的问题,不过还是解决了首先easyX下载地址https://easyx.cn/download下载之后安装到VS上或者自己想使用的软件上就行1#incl......
  • CAD动态块操作实例:绘制剖面符号
    CAD动态块与普通的CAD图块相比,其图形夹点更多,设计师可以利用动态块的夹点对图形进行快速调整,自由拉伸长度、随心切换隐藏形态等。本节,给大家分享一下浩辰CAD软件中利用CAD......
  • 迷宫机器人最短路径使用tkinter绘制
    起因我想要写一个玩家和机器对战的迷宫游戏。这个项目我没有写完,我实现了最短机器人路径并绘制在tkinter上,以及玩家移动的功能。更多的关于GUI的设计太花时间了我没有写完......