当我们在ue4中制作了一个美术材质之后,引擎本身会为我们做很多事情,它会把结点翻译为hlsl,生成多个shader变体,并在多个mesh pass中去选择性的调用所需的shader,其中一个重要的过程就是获取shader绑定的数据。
本文将主要讨论ue4是如何处理来自材质的不同的输入,它们将以怎样的形式传递给shader,以怎样的频率更新,并在调用层做了怎样的优化处理。
输入类型
我们在材质中能控制输入的地方有两处,一个是材质直接输入,另一个是材质参数集合:
① 材质直接输入。
我们可以在母材质中开放给shader的参数,如美术纹理和参数。静态的参数我们使用静态材质,动态可运行时修改的参数我们使用动态材质。
这种输入的特点是每个材质独享一份参数输入,因此它在底层设计为每个Material实例独立的Uniform Buffer,在ue4中使用FUniformExpressionCache数据结构来描述。
② 材质参数集合(MPC, Material Parameter Collection)
我们还可以创建MPC资产,可以添加vector或scalar参数。
这种输入的特点是参数可以在多个材质共享,比较适合一些全场景的效果控制,但一个材质支持输入的MPC数量是比较有限的。
它在底层设计为场景中全局的Uniform Buffer集合,同时每个shader引用到的MPC索引由F

本文详细探讨了UE4中材质输入如何转化为shader参数,包括材质直接输入、材质参数集合,以及顶点工厂和像素着色器的输入。文章还阐述了输入上传、绑定的过程和API映射,并讨论了延迟调用的ShaderBinding如何进行缓存优化,以减少CPU渲染指令调用次数。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



