UE4中如何对Movie Render Queue进行渲染设置

Posted 赞奇超高清设计师云工作站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4中如何对Movie Render Queue进行渲染设置相关的知识,希望对你有一定的参考价值。

Movie Render Queue 的渲染设置用于控制序列的渲染方式。它们包括抗锯齿、自定义控制台命令、输出格式、渲染模式和其他功能。本指南将介绍设置界面、可用设置列表以及将设置保存为预设的能力。

1.学习Movie Render Queue的渲染设置

先决条件:

首先在 Unreal Engine 中启用 Movie Render Queue 插件。在 Unreal Engine 菜单中,转到Edit > Plugins ,在Rendering部分,找到并启用Movie Render Queue > 然后重新启动编辑器。创建了一个带有要渲染的关卡序列的项目。

1.1 打开渲染设置

您可以通过单击作业的“设置”条目来打开“渲染设置”窗口。

1.2 界面概述

渲染设置窗口分为三个主要部分:

工具栏:包括用于添加新设置以及将当前设置列表加载或保存到预设的菜单。设置列表:显示当前作业设置并包含启用或禁用它们的切换。每个设置都分为Exports RenderingSettings 。设置详细信息:显示所选设置列表中设置的属性。

1.3 设置列表

当您单击+ 设置按钮时,将显示您可以添加到作业中的不同设置列表。它们分为三组:设置导出渲染,如下图所示。在以下部分中探索这些组中的每一个。

设置

设置组包括渲染质量、控制台变量和其他渲染功能的选项。

输出:输出设置设置输出文件的目录、文件名、帧速率和输出分辨率。令牌格式字符串可用于个性化您的文件名和目录路径。输出是强制设置,不能从设置窗口中删除。

抗锯齿:抗锯齿管理生成最终渲染所需的样本数。渲染由两种类型的采样产生:空间时间

Burn In :Burn In 允许您将自定义水印应用于渲染,其中包括有关渲染和镜头的信息。您可以选择将 Burn In 添加到最终图像或将其渲染到单独的层。

相机:相机设置控制快门时间并允许您指定过扫描百分比以在图像边缘周围添加额外像素。

颜色输出:使用自定义OpenColorIO (OCIO)配置,颜色输出设置会覆盖 Unreal 的默认颜色空间设置。即使您没有使用基于 OCIO 的工作流程,您也可以使用它来禁用后处理的色调曲线部分。

控制台变量:控制台变量允许您指定在渲染开始时运行哪些控制台命令。当尝试在编辑器中设置对于实时预览来说计算成本太高的质量设置时,这会很方便。渲染完成后,变量将被重置。

调试选项:这些选项允许您调试某些渲染行为。在大多数情况下,如果您不解决渲染问题,则不需要使用这些选项。

游戏覆盖:游戏覆盖修改各种常见的游戏相关设置,包括游戏模式和电影质量。如果游戏的典型模式显示您不想捕获的 UI 元素或加载屏幕,这会派上用场。

高分辨率:高分辨率选项允许您利用平铺渲染来创建更大的图像,而不受最大纹理大小或 GPU 内存限制的限制。

输出

导出类别控制哪些图像、音频和视频格式将用于输出您的序列。

命令行编码器:您可以使用命令行编码器从第三方软件(如 FFmpeg)生成您自己的输出格式。此设置需要使用编码器可执行文件并激活项目设置中的参数。

Final Cut Pro XML :Final Cut Pro XML 格式生成一个 XML 文件,Final Cut Pro 和其他支持此格式的视频编辑软件可以读取该文件。这在运输构建中不受支持。

.bmp Sequence [8bit] :此选项将电影输出为 .bmp 图像序列。像素值限制在 [0-1] 范围内,这意味着不保留任何 HDR 值。这使用 sRGB 编码曲线。

EXR 序列:此选项将电影保存为一系列 .exr 图像。如果激活色调曲线,线性值将缩放到接近 [0-1] 范围,只有最高的高光会超过 1。禁用色调曲线会写入 [0-100] 范围或更大范围内的线性值,具体取决于灯光和其他明亮事物的强度。在 .exr 目标上,不应用 sRGB 编码曲线。

.jpg Sequence [8bit] :此选项将视频输出为 .jpg 图像序列。使用 sRGB 编码曲线。

.png Sequence [8bit] :将视频保存为 .png 图像序列。使用 sRGB 编码曲线。在 Post Processing 项目设置中启用 Enable Alpha Channel Support 支持透明度。

WAV 音频:除了您选择的任何其他输出格式之外,还创建一个 .wav 音频文件。

Apple ProRes 视频编解码器:使用 Apple ProRes(Apple 的有损视频压缩编解码器)生成 .mov 文件。这需要激活 Apple ProRes Media 插件。

Avid DNx 视频编解码器:使用高清有损视频编解码器 Avid DNx 生成电影文件。必须启用 Avid DNxHR/DNxMXF 媒体插件才能使其工作。

预流式记录器:预流式记录器用于为使用虚拟纹理Nanite的电影制作渲染缓存

对于每个特定序列,可以指定多个导出项。例如,您可以将序列导出为 .jpg 图像序列和 .wav 音频文件,以便在您的视频编辑软件中混合。

渲染

渲染类别包括用于创建不同视图模式图像和渲染过程的选项。

延迟渲染:生成序列的最终图像,它对应于您在视口中看到的内容。

延迟渲染(细节光照):使用一种独特的着色器变体,只显示与法线贴图配对的光照。演示关卡的几何形状可能很有用。

Deferred Rendering (Lighting Only) : 类似于Detail Lighting,但是没有使用法线贴图来影响光照。

Path Tracer :显示每帧计算的路径跟踪数据。目前,Path Tracer 不支持完整的渲染功能。

延迟渲染(仅限反射):使用特定的着色器变体使整个世界反射。

Deferred Rendering (Unlit) :使用特定的着色器变体,仅显示基色而不显示照明信息。

UI 渲染器:包括在最终渲染中引入视口的任何 UMG 小部件。这是一项实验性功能

对象 ID(有限):对象 ID 渲染过程生成一个图像,其中场景中的每个组件都被赋予一个 ID。ID 可以单独分类,也可以根据其他标准(例如材料、文件夹或演员姓名)进行分类。这需要安装 Movie Render Queue Additional Passes 插件。在发布版本中,不支持对象 ID。

1.4 预设

默认情况下,渲染设置是为您的编辑器会话临时设置的,并在会话关闭时丢失。您可以将您的设置保存为预设,以便在项目之间共享它们或为不同的序列使用不同的参数。可以保存和重复使用两种类型的预设:MasterShot

第一类:Master

主预设旨在应用于顶级任务,以便将它们的设置传播到它们下面的摄像机镜头。要将当前设置保存为主配置,请选择加载/保存预设,然后选择另存为预设。之后,系统会提示您保存Movie Pipeline Master Config Asset

然后,您可以通过从设置下拉菜单中选择已保存的 Movie Pipeline Master Config Asset,将此预设应用于队列中的作业。

类型 2:Shot

镜头预设使您能够覆盖渲染中每个相机的渲染设置。如果您的电影序列中的特定镜头需要与 Master 使用的设置不同,它们可能会有用。

要保存和使用镜头预设,请展开渲染队列中的作业以查看其子摄像机。每个摄像机都有自己的设置字段,可以对其进行修改。要打开该摄像机的设置窗口,请单击编辑字段之一。

您可以通过单击+ 设置按钮并从列表中选择设置来添加设置。单击加载/保存预设,然后单击另存为预设以将当前设置保存为拍摄预设。之后,您将需要保存Movie Pipeline Shot Config Asset

通过单击设置字段中的下拉菜单并选择存储的Movie Pipeline Shot Config Asset ,您可以将此预设应用到队列中的特定镜头,就像应用主预设一样。

编辑预设

当您在“设置”列中分配预设时,该预设的名称将被更改。单击预设时,您将被定向到配置编辑器,您可以在其中修改配置。这些修改不会改变预设资产;它们只影响它的临时副本。

如果您想直接编辑预设,您有两种选择:

您可以通过 Movie Render Queue UI 访问编辑器并选择“另存为预设”以覆盖现有预设。通过在内容浏览器中双击它们,您可以直接打开和编辑它们。这将打开一个编辑器,您可以在其中添加设置、修改它们的值并使用资产的“保存”按钮保存更改。

想要高效运行虚幻引擎,试试渲云和赞奇云工作站

渲染慢,想要快速渲染,可以试试渲云,云端渲染快人一步。支持多角度任务同时渲染,渲染高效便捷,渲云采用高性能服务器,稳定可靠,可满足用户大批量紧急渲染需求。

想要将虚幻引擎制作加渲染全流程一站式高效创作的可以试试赞奇云工作站。赞奇云工作站拥有专业级显卡、超大内存等多种机器配置。机器显卡更新及时,提供高配机型,海量资源可按需选择,内置软件中心提供最新软件安装包,一键下载,省去搜索时间,提高工作效率。

赞奇云工作站适用于多行业多领域,以公有云为基座,面向各行业丰富业务场景的全栈解决方案,涵盖工业设计仿真、建筑设计、游戏设计、影视特效、动画电影、实景三维建模、院校培训、政企办公、3D(UE)数字人等领域。

注:去赞奇云工作站官网地址zanqicloud.com/找在线客服有优惠价,可免费试用云电脑,还有学生优惠

UE4 RHI与Render模块简解

  UE4中的RHI指的是Render hardware interface,作用像Ogre里的RenderSystem,针对Dx11,Dx12,Opengl等等平台抽象出相同的接口,我们能方便能使用相同接口对应不同渲染平台.

  和以前一样,先简单介绍一些类与文件的作用,我们有个抽象的了解.

  RHI.h :主要定义一些硬件平台的公共变量.

  一是 硬件支持项,如是否支持PF_FloatRGBA格式渲染目标,手机平台是否支持FrameBuffer拾取,支持体纹理,支持硬件合并渲染等等.

  二是 硬件变量,如最大Cube纹理数,阴影贴图长宽最大值等等.

  三是 常见渲染定义,如FSamplerStateInitializerRHI纹理采样,FRasterizerStateInitializerRHI栅栏化(填充格式,正方向定义,MSAA),FDepthStencilStateInitializerRHI逐片断处理中的模板与深度,FBlendStateInitializerRHI逐片断处理中的混合.FRHIDrawIndirectParameters/FRHIDrawIndexedIndirectParameters DrawCall中相关参数.

  DynamicRHI.h :包含FDynamicRHI接口定义,渲染所需求所有接口,创建buffer,创建纹理,设置着色器参数,UAV等,简单来说,对应opengl,dx提供的渲染API,其DynamicRHI.cpp文件会根据平台(Windows,apple,android等等)来选择加载合适的渲染平台(如Opengl,Dx,Vulkan等),在RHI模块的private文件夹下,可能看到各个系统会如何选择相应的渲染平台.  

  FRenderResource:定义接口如InitDynamicRHI /ReleaseDynamicRHI /InitRHI /ReleaseRHI /InitResource /ReleaseResource /UpdateRHI等渲染资源选择实现函数.

  RHICommandList相关文件是我们讲RHI主要需要讲的,在这我们先来分析出现的各个类.

  FRHICommandBase: 主要定义一个函数指针,一个执行方法调用函数指针指向的函数。

  函数指针:二个参数(FRHICommandListBase,FRHICommandBase)CallExecuteAndDestruct:传入自己FRHICommandBase到时函数指针指向的方向.

  FRHICommand: FRHICommandBase的一个模板子类,模板需要定义Execute方法,其方法只需要FRHICommandListBase,其会退化上面CallExecuteAndDestruct的FRHICommandBase参数,默认为自己.

  FRHICommand的模板具体化,对应SetRasterizerState/SetDepthStencilState/SetShaderParameter等等,几乎所有渲染API都有对应的FRHICommand的模板具体化实现.

  FRHICommandListBase: 相应FRHICommandBase的链表实现,以及定义一些上下文如IRHICommandContext ,IRHIComputeContext ,并且有相关和RHI线程交互的API,RHI本身相应的FRHICommandBase与List都是存放在渲染线程中,RHI线程可以用于在渲染线程中同步执行异步的复杂操作,如压入很多FRHICommandBase到渲染线程中执行,有些操作可以放入RHI线程中与渲染线程一起执行,在某段FRHICommandBase前,调用WaitForTasks等同步渲染线程与RHI线程,大家可以这么理解,RHI线程对于渲染线程就相当于渲染线程与游戏线程的关系,大家可以看我上篇UE4里的 渲染线程 ,看到如何在渲染线程里压入RHI线程,如何用WaitForTasks与渲染线程同步等.

  FRHICommandList: 简单来说,所有用于渲染API几乎都有二种方法,一种是插入FRHICommandListBase链表,一种是直接调用相应渲染平台对应FDynamicRHI的实现,在这说下,我看了下OpenGLDrv相应的FDynamicRHI实现,相应API如SetShaderParameter, SetDepthStencilState等等,并没有直接调用相应的OpenGL的API,而是把相关改动放入一个FOpenGLRHIState的结构中保存起来,等到DrawCall(如RHIDrawPrimitiveIndirect等)相关命令调用后,才把各个改动对应opengl的API调用起来,如上的glProgramUniform等.

  FRHIAsyncComputeCommandList: 多GPU的FRHICommandList实现。

  FRHICommandListImmediate: 直接调用相应渲染平台对应FDynamicRHI的实现,对比FRHICommandList,主要是创建资源这一块的FDynamicRHI封装,可以看到它的一些函数都是以Create开头的。

  FRHICommandListExecutor: 简单来说,管理FRHICommandListBase的几个子类单例实现,方便查找到如上的FRHICommandListImmediate 与FRHIAsyncComputeCommandListImmediate 单例实现,一般我们看到渲染代码里常见的如FRHICommandList/RHICmdList就是指的是FRHICommandListExecutor::GetImmediateCommandList().

  在这,关于RHI的就先简单了解下,RHI主要调用都在渲染线程中,不过也可以使用FRHICommandListBase链表与RHI线程来实现一些同步异步操作。其中渲染模块中FRHICommandList/RHICmdList一般是FRHICommandListExecutor::GetImmediateCommandList(),这个是直接调用相关FDynamicRHI实现,一般并不与RHI线程交互。

  介绍RHI模块后,我们来看下渲染模块的相关实现,在说下渲染模块的实现前,简单说下,UE4中大量用到C++ 的模版,除开自动生成各个分支代码,还有二点,一是代替部分接口类,减少如虚函数表的性能,二是减少一些分支判断,还是提高性能。但是会造成阅读代码比C#等语言验证,主要在于有些模板你都不知道是那些类可以用等,还好,UE4里一般这种模板使用类都有相同的前缀或是后缀,我们可以记一些相同的前缀或后缀转化成自己认为的接口实现。

  我们先看一段代码,是OpenGLDrv实现的FDynamicRHI子类FOpenGLDynamicRHI的RHIDrawPrimitiveIndirect,简接绘制多组图元集。 

void FOpenGLDynamicRHI::RHIDrawPrimitiveIndirect(uint32 PrimitiveType,FVertexBufferRHIParamRef ArgumentBufferRHI,uint32 ArgumentOffset)
{
    if (FOpenGL::SupportsDrawIndirect())
    {
        VERIFY_GL_SCOPE();

        check(ArgumentBufferRHI);
    GPUProfilingData.RegisterGPUWork(0);

        FOpenGLContextState& ContextState = GetContextStateForCurrentContext();
        BindPendingFramebuffer(ContextState);
        SetPendingBlendStateForActiveRenderTargets(ContextState);
        UpdateViewportInOpenGLContext(ContextState);
        UpdateScissorRectInOpenGLContext(ContextState);
        UpdateRasterizerStateInOpenGLContext(ContextState);
        UpdateDepthStencilStateInOpenGLContext(ContextState);
        BindPendingShaderState(ContextState);
        SetupTexturesForDraw(ContextState);
        CommitNonComputeShaderConstants();
        CachedBindElementArrayBuffer(ContextState,0);

        // Zero-stride buffer emulation won\'t work here, need to use VAB with proper zero strides
        SetupVertexArrays(ContextState, 0, PendingState.Streams, NUM_OPENGL_VERTEX_STREAMS, 1);

        GLenum DrawMode = GL_TRIANGLES;
        GLsizei NumElements = 0;
        GLint PatchSize = 0;
        FindPrimitiveType(PrimitiveType, ContextState.bUsingTessellation, 0, DrawMode, NumElements, PatchSize);

        if (FOpenGL::SupportsTessellation() && DrawMode == GL_PATCHES )
        {
            FOpenGL::PatchParameteri(GL_PATCH_VERTICES, PatchSize);
        } 

        FOpenGLVertexBuffer* ArgumentBuffer = ResourceCast(ArgumentBufferRHI);


        glBindBuffer( GL_DRAW_INDIRECT_BUFFER, ArgumentBuffer->Resource);
        {
            CONDITIONAL_SCOPE_CYCLE_COUNTER(STAT_OpenGLShaderFirstDrawTime, PendingState.BoundShaderState->RequiresDriverInstantiation());
            FOpenGL::DrawArraysIndirect( DrawMode, INDEX_TO_VOID(ArgumentOffset));
        }
        glBindBuffer( GL_DRAW_INDIRECT_BUFFER, 0);
        
        FShaderCache::LogDraw(0);
    }
    else
    {
        UE_LOG(LogRHI, Fatal,TEXT("OpenGL RHI does not yet support indirect draw calls."));
    }

}
FOpenGLDynamicRHI::RHIDrawPrimitiveIndirect

  前面说过,FOpenGLDynamicRHI是在DrawCall时,才把各个改动对应opengl的API调用起来,所以在这,我们可以看到一个渲染的完整过程,当然大家使用过Opengl或是DX直接写过程序也是一样,首先设定渲染目标,混合,设定viewport,设定栅栏化,设定逐片断处理(深度,模板),绑定Shader程序,设定shader纹理,设置shader参数,绑定VAO,设定VAO,DrawCall,嗯,就是这么个过程,无论UE4如何包装,每次DrawCall就是如上顺序处理。

  先说一下在渲染模块里比较常见的类:

  后缀Parameters: 二个主要方法,一是Bind,简单来说,对应一个或多个参数Parameter与Shader代码里参数绑定,对应opengl里的API就是如glGetUniformLocation。二是Set,简单来说,上面绑定后,我们就可以传入参数的值到GPU里,对应opengl里的API就是如glUniform等等。

  模板类里的模板如果是后缀ParametersType,一般主要是指各个后缀为Parameters的类。

  如下一些类写了些自己了解,后查找资料时发现UE4官方文档里 着色器开发 有说,比我说的清楚。

  FVertexFactory: 用来表示顶点数据格式,顶点分布结构,顶点元素Buffer,DeclarationElementList数组,相关opengl的API如glVertexAttribPointer.从opengl3+来说,一般虽然可能有多个buffer,但是应该是在一个glgenbuffer中对应不同的区段而已。

  方法Set: 只是告诉对应opengl里各个buffer的起点与终点,相应的如OffsetInstanceStreams/SetPositionStream都是类似。

  FVertexFactoryType:表示网格类型,如 Local/Particle(三种sprite/beamtrail,mesh)/Landscape/GPUSkin等,

  FMeshBatch: 一般来说,是一组相同顶点格式,相同材质的模型,一般可以使用GPU的实例渲染,减少DrawCall.

  FShaderType: Global/Material/MeshMaterial (vertex/hull/demain/geomerty/pixel 一种)

  FGlobalShader: 全局shader,简单来说,不和mesh与Material关联,一般用于后处理,固定画个方块啥的,如处理特效这种。

  方法SetParameters: 设定Shader里的FViewUniformShaderParameters /FFrameUniformShaderParameters /FBuiltinSamplersParameters 参数。

  FMaterialShader: 特定于过程的着色器,它们需要访问材质的某些属性,因此必须针对每个材质进行编译,但不需要访问任何网格属性。如FLightFunctionVS,FLightFunctionPS等。  

  对比FGlobalShader,增加一个重载的SetParameters,包含材质对Shader的设置。

  FMeshMaterialShader: 着色器是特定于过程的着色器,它们依赖于材质的属性和网格类型,因此必须针对每个材质/FVertexFactory组合进行编译。例如,TBasePassVS / TBasePassPS 需要对前向渲染过程中的所有材质输入进行评估。

  对比FMaterialShader,增加一个方法SetMesh,添加FMeshBatchElement,FVertexFactory对shader的设置,对应VertexFactory的Parameters针对Mesh填充不同的顶点信息。 如GPUSkin,填充骨骼信息到相应的shader参数中, 如MeshParticle,填充动画加速度 ,时间等。以及填充模型本身的FPrimitiveUniformShaderParameters等共有信息,如FPrimitiveUniformShaderParameters:localToworld ,worldTolocal ,objectBounds, LOD,FadeTimeScaleBias等。

  如下这些类表示渲染主要思路,预先一些相同的渲染方式,可以先缓存起来。

  FMeshDrawingPolicy: 整合渲染模型过程,从绑定Shader到调用DrawCall,各个子类对应不同的独立着色器程序。

  1 初始化,根据需要生成或绑定各个对应的Shader.

  2 SetSharedState,设定和Mesh无关的Shader变量。

  3 SetMeshRenderState,设定和Mesh相关的Shader变量。

  4 DrawMesh 调用DrawCall.

  模板类里的模板如果是DrawingPolicyType,一般主要是指FMeshDrawingPolicy的各个子类。

  FUniformLightMapPolicy: 封装和光照有关渲染的Shader参数设置。  

  方法SetMesh:绑定相应光照计算上Shader的参数,如使用GI预计算产生的间接光照图信息,直接光照图信息,天空图AO等。

  TUniformLightMapPolicy: FUniformLightMapPolicy的模版子类,模版为ELightMapPolicyType,表示各种和光照有关,模版预生成多份代码对应不同光照计算表示是否缓存,Shader预编译指令。

enum ELightMapPolicyType
{
    LMP_NO_LIGHTMAP,
    LMP_CACHED_VOLUME_INDIRECT_LIGHTING,
    LMP_CACHED_POINT_INDIRECT_LIGHTING,
    LMP_SIMPLE_DYNAMIC_LIGHTING,
    LMP_LQ_LIGHTMAP,
    LMP_HQ_LIGHTMAP,
    LMP_DISTANCE_FIELD_SHADOWS_AND_HQ_LIGHTMAP,
    // Forward shading specific
    LMP_DISTANCE_FIELD_SHADOWS_AND_LQ_LIGHTMAP,
    LMP_SIMPLE_DIRECTIONAL_LIGHT_AND_SH_INDIRECT,
    LMP_SIMPLE_DIRECTIONAL_LIGHT_AND_SH_DIRECTIONAL_INDIRECT,
    LMP_SIMPLE_DIRECTIONAL_LIGHT_AND_SH_DIRECTIONAL_CSM_INDIRECT,
    LMP_MOVABLE_DIRECTIONAL_LIGHT,
    LMP_MOVABLE_DIRECTIONAL_LIGHT_CSM,
    LMP_MOVABLE_DIRECTIONAL_LIGHT_WITH_LIGHTMAP,
    LMP_MOVABLE_DIRECTIONAL_LIGHT_CSM_WITH_LIGHTMAP,
    // LightMapDensity
    LMP_DUMMY
};
ELightMapPolicyType

  TLightMapPolicy: Shader对应预编译指令,是否缓存,模板为ELightmapQuality,有二个值,分别是LQ_LIGHTMAP,HQ_LIGHTMAP。

  模板类里的模板如果是LightMapPolicyType,一般主要是指TUniformLightMapPolicy/TLightMapPolicy的各个子类。

  如上一些基本比较重要的类就到此,在这我们重点说下FMeshDrawingPolicy这个类,从上面各个类的说明来看,可以看到把所有渲染基本类组合在一起,他的子类简单说几个,BasePassRendering ,CapsuleShadowing ,DepthRendering ,ForwardBasePassRendering ,VelocityRendering等等,还有别的带Rendering的渲染,如DistortionRendering ,DeferredShading ,DecalRendering,ShadowRendering等等虽然和FMeshDrawingPolicy不同,但是过程其实真差不了多少。 在每个Rendering中,都有对应的VS,PS,HS等,这些根据需要分别从上面所说的FGlobalShader /FMaterialShader /FMeshMaterialShader继承,简单来说,后处理特效针对渲染目标的一般从FGlobalShader继承,只针对Material不和具体Mesh有关的用FMaterialShader,最后针对模型渲染的从FMeshMaterialShader继承。

  按BasePassRendering说下,只简单渲染emissive color与light map,对应的FMeshDrawingPolicy子类为TBasePassDrawingPolicy ,如上所说,针对Mesh产生的都继承与FMeshMaterialShader生成的VS,PS等,因为光照有影响,我们看到相应的Shader都对应模版LightMapPolicyType,用于生成正确的Shader对应预编译指令,如有无光照,光照质量,静态或动态,阴影类型等。下面还定义一些与BasePassRendering相关的parameters,如天空盒相关参数,如上TBasePassDrawingPolicy在构造函数中得到或是生成上面的VS,PS,然后在SetSharedState时针对VS,PS设定参数,然后调用SetMeshRenderState针对每个FMeshBatch设定和Mesh有关的参数,然后提交DrawCall.

  每个DrawingPolicy中,对应VS,PS等对应文件可以通过宏IMPLEMENT_SHADER_TYPE查看。

  本文本来还准备更详细讲述一个基本的Rendering的过程,但是新项目时间紧,只是暂停查看,后面会仔细介绍一个完整流程,从阴影渲染,前向或是后向渲染选择一部分来详细介绍,包含大部分参数的含义与作用,不过大家熟悉如上的渲染线程再加个RHI与渲染模块如上这些基本类,应该就能把UE4的源码都联系起来了。

以上是关于UE4中如何对Movie Render Queue进行渲染设置的主要内容,如果未能解决你的问题,请参考以下文章

UE4 RHI与Render模块简解

(原)UE4 制作执行队列(Action Queue)

UE4之RenderDoc

(转载)(官方)UE4--图像编程----图形编程总览

unity, 在材质上指定render queue

[ue4] 几何体绘制管线