|
1、vertex factory
顶点工厂继承于FRenderResource;是vertex shader的数据源;
两个重要的宏:
DECLARE_VERTEX_FACTORY_TYPE,
IMPLEMENT_VERTEX_FACTORY_TYPE( 这个宏将vertexfactory绑定到对应的shader中去)
上面两个宏在创建vertexfactory的时候用到,第一个要放在class里,第二个放到外边,两个宏的作用其实就是为vertex factory定义和实现了statictype属性和getType方法(返回statictype),statictype类型为FVertexFactoryType,代表顶点工厂种类的类。并且将vertexfactory加入到全局的顶点工厂列表中。从宏观上来看就是如下效果:class CustomVertexFactory {
public:
static FVertexFactoryType StaticType; (这里初始化的时候,会将.ush文件路径传进去,进而与当前vertexfactory绑定在一起);
virtual FVertexFactoryType* GetType() const override;
} IMPLEMENT_VERTEX_FACTORY_TYPE宏里传入的.ush文件,最后会变成vertex shader的一部分。vertex shader的main函数也来自某个.ush或者.usf文件,main里边会调用某些函数,但并未实现该这些函数,这些函数交由其他.ush来实现,用户可以修改函数实现的方式。因此,用户可以把修改后的.ush文件作为这个宏的参数传进去。
2、proxy
proxy是render thread里的,通常game thread里的component 和render thread里的proxy一一对应;
负责打包渲染时候要用的数据,比如vertex factory、material等;
Unreal通过proxy知道component要使用哪个vertex factory;
常见的例子如:UPrimitiveComponent ------FPrimitiveSceneProxy
3、shader
4、给shader传参数
BEGIN_SHADER_PARAMETER_STRUCT(FMyStruct,)
SHADER_PARAMETER(float, MyScalar)
SHADER_PARAMETER(int, MyInt)
END_SHADER_PARAMETER_STRUCT()
IMPLEMENT_VERTEX_FACTORY_PARAMETER_TYPE
IMPLEMENT_MATERIAL_SHADER_TYPE将一个继承于FShader的class与一个hlsl文件绑定,并可以指定hlsl的入口函数
继承于primitivecomponent的组件 ,要复写createproxy方法,来创建proxy;
在proxy的初始化函数中,会初始化vertex factory等数据;
BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT是旧的宏,新的为BEGIN_UNIFORM_BUFFER_STRUCT,两者等效;
BEGIN_UNIFORM_BUFFER_STRUCT : 定义一个shader global parameter structure;全局
BEGIN_SHADER_PARAMETER_STRUCT: 定义一个shader parameter structure;局部 |
|