1

在我的应用程序中,没有截锥体剔除,无论如何都会绘制相机看不到的对象。当相机不看物体时,我的 fps 在我的 android 设备上接近 60。当它查看物体时,我的 fps 下降到大约 15。

因此我认为这是我的像素着色器的问题。因为我用的是monogame,所以shader其实是用directx shader model 3.0写的。下面是我的纹理采样器声明和我的像素着色器。(这是唯一使用的像素着色器)

texture2D tex1;

sampler2D tex1Sampler = sampler_state
{
    Texture = <tex1>;
    MinFilter = Point;   
    MagFilter = Point;   
    MipFilter = Point;   

    AddressU = Clamp;  
    AddressV = Clamp;
};

float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
    float4 color =  tex2D(tex1Sampler,input.Texture);
    clip(color.a - .12f);
    color *= input.Tint;
    return color;
}

什么可能导致这种 FPS 下降?其他一些信息:使用的纹理大小为 250 x 250,这是我测试中使用的唯一纹理。

这也不是什么荒谬的事情,就像十亿个三角形都排成一列,并且没有启用背面剔除。就像场景中的1000个小三角形一样,应该不无道理。

4

1 回答 1

1

从像素着色器中移除 Clip() 并获得 30 fps 的提升。

现在,如果不对所有内容进行排序,我就无法真正进行 alpha 混合.....

于 2013-07-27T20:59:28.037 回答