Unreal Engine 4 渲染 (2) 着色器与顶点数据 Shaders and Vertex Data

https://medium.com/@lordned/unreal-engine-4-rendering-part-2-shaders-and-vertex-data-80317e1ae5f3

翻译:yarswang 转载请保留

 

着色器与顶点工厂

 

    本章我们来关注着色器与顶点工厂。Unreal使用一些魔法来绑定C++的着色器表现与等价HLSL类,使用顶点工厂(Vertex Factory)来将顶点着色器的控制数据上传到GPU。从本章起,我们将使用Unreal的类名来讨论问题,让它们更容易被你自己查找。

    我们将专注于核心的着色器/顶点工厂涉及类。有很多处理内务的结构/方法如胶水一般地黏合了整个系统。我们不太可能去修改这些胶水,所以我们不会去谈他们来让事情变得更复杂。

 

FLocalVertexFactory的顶点输出

 

着色器

    Unreal中所有着色器都派生自一个基类 FShader.  Unreal有两个主要的着色器分类,FGlobalShader用于在只应存在一个实例的情况,以及FMaterialShader使用在关联材质的着色器上。FShader和FShaderResouce配对,后者跟踪与特定着色器相关联的GPU上的资源。如果FShader的已编译输出与已存在的输出相匹配,则可以在多个FShaders之间共享FShaderResource。

FGlobalShader

    这是个很简单,并且有限(但是有效!)的用法。 当着色器类从FGlobalShader派生时,它将它们标记为Global重新编译组的一部分(这似乎意味着它们在引擎打开时不会重新编译!)。 只有一个全局着色器实例存在,这意味着你不能拥有每个实例的参数。 但是,您可以拥有全局参数。 示例:FLensDistortionUVGenerationShader,FBaseGPUSkinCacheCS(用于计算网格蒙皮的计算着色器)和FSimpleElementVS/ FSimpleElementPS。

  

FMaterialShader和FMeshMaterialShader

    FMaterialShader和FMeshMaterialShader更加复杂。这两个类都允许多个实例,每个实例都与其自己的GPU资源副本相关联。 FMaterialShader添加了一个SetParameters函数,它允许着色器的C ++代码更改绑定HLSL参数的值。参数绑定是通过FShaderParameter / FShaderResourceParameter类完成的,并且可以在着色器的构造函数中完成,比如说FSimpleElementPS。在使用该着色器渲染某些内容之前调用SetParameters函数,并传递相当一部分信息(包括材质),这会为您提供大量信息来作为您计算要更改的参数的一部分。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值