在现代游戏中,通常同时在一个场景中同时激活多少个着色器?我知道正在使用多个着色器,游戏在每一帧中在它们之间切换,通常通过着色器绘制对象:
- 使用着色器一绘制所有对象
- 从着色器一更改为着色器二
- 使用着色器2绘制所有对象
不过,我知道这并不是那么简单,尤其是对于整个场景的光晕效果,渲染到纹理等效果,但是我想我们可以假设它在大多数时间都可以正常工作,对吗?“按着色器分组”方法很好,因为切换着色器是一项昂贵的操作。
一方面,您不能有太多的着色器,因为您想快速渲染场景。另一方面,您需要用于皮肤,金属,水等的许多不同的着色器(或带有分支的超级着色器-非常相似)。
理论上的,现代的,第三人称3D PC侦探游戏(如果需要的话,是DirectX 11)将使用多少个(以及哪个)不同的着色器?在某个“帧X”处,将是5个,20个或更多(例如100个活动着色器),仅计算活动着色器吗?我知道这不是一个数字,但我想知道在考虑PC游戏时,什么规模和因素很重要。
在我的示例游戏中,我将每帧使用大约9-11(将其视为不同的小型着色器或一个超级着色器-现在不重要):
- 皮肤着色器
- 眼影器(不是太多吗?但它们是不同的)
- 金属着色器
- 地面着色器
- 雪/雨着色器(如果需要)
- 着色器(如果场景中存在水)
- 发光着色器(仅当涉及某些特殊效果时)
- 发光器着色器(路灯等)
- 标准着色器(对于所有其他着色器,仅是标准着色)
- 具有法线贴图的标准着色器
- 2D着色器(用于GUI等)
是“很多”还是“不是很多”?我是否忘记了一些我需要的重要着色器?