|
|
渲染方面始终花的精力不够多,有几个基础问题想问问
问题1:
beginpass
...设置关于 mesh1 的多个渲染参数
fx->commitchanges()
mesh1->draw()
...设置关于 mesh2 的多个渲染参数
fx->commitchanges()
mesh2->draw()
...
...设置关于 mesh2 的多个渲染参数
fx->commitchanges()
meshN->draw()
endpass
这种方式和以下的方式:
...设置关于 mesh1 的多个渲染参数
beginpass
mesh1->draw()
endpass
...设置关于 mesh2 的多个渲染参数
beginpass
mesh2->draw()
endpass
这两种方式,效率方面差别大吗?
第2个问题:
我要渲染shadowmap
骨骼mesh的顶点vs:
//骨骼动画的shadowmap
void BuildShadowMapSkinedMeshVS(
float4 vPos : POSITION0,
float3 normalL : NORMAL0,
float2 tex0 : TEXCOORD0,
float weight0 : BLENDWEIGHT0,
int4 boneIndex : BLENDINDICES0,
out float4 vPosOut : POSITION,
out float3 vPixelOut : TEXCOORD0,
out float2 tex1 : TEXCOORD1
)
普通mesh的顶点vs:
void VS_RenderShadowMap(
float4 vPos : POSITION,
float3 normalL : NORMAL0,
float2 tex0 : TEXCOORD0,
out float4 vPosOut : POSITION,
out float3 vPixelOut : TEXCOORD0,
out float2 tex1 : TEXCOORD1)
输入参数骨骼的比普通mesh的要多两个,我试过了,统一用BuildShadowMapSkinedMeshVS渲染所有模型的shadowmap没有问题,只是在vs的过程加一个判断就可以了,问题是,如果统一用一个vs,那么将出现实际传入的顶点长度小于vs 中in参数的声明的长度,这样会不会有什么效率上的问题?如果切换pass,整个shadowmap的渲染就不能通过一个pass完成了
我的问题是不同的mesh选不同类型的pass去切换,还是尽可能一个pass渲染最大数量的模型(存在传入参数不一致的问题)?
两者效率怎样?
|
|