我正在学习GLSL以及如何进行转换和照明等但是我只有1个着色器程序正在应用于所有内容。我不确定我是否应该为游戏中的每个对象(即一个盒子或玩家模型)设置不同的程序,或者我是否应该只为每个对象设置一个着色器。
我应该如何使用着色器?它们通常如何使用?
感谢。
答案 0 :(得分:2)
着色器有点像在GPU而不是CPU上运行的函数。拥有一个完成所有事情的着色器就像拥有一个可以完成所有任务的功能;即通常是一个巨大的,不可维护的混乱,到处都是树枝。也就是说,为每个对象设置一个着色器通常是矫枉过正的,因为许多对象可以使用相同的着色器渲染,只是使用不同的模型或纹理。
例如,您可以使用一个执行光照,法线贴图等的着色器渲染世界中的对象。但是,HUD元素不需要任何这些效果;它们通常被绘制为无光泽的漫反射纹理,因此您不会使用照明它们的着色器。
我会说一个好的规则是,如果你在着色器中编写了很多分支(if
,switch
等),特别是如果条件基于{{1那么,可能是时候把它分开了。