这个可以说是一个游戏渲染部分非常核心的部分。
game programming gems 5开这个专题是非常有意义的。
shader linker反映了整个引擎的data pipeline的结构:
所支持渲染的宽度,深度和灵活性。
具体做法是首先定义所支持的渲染方式,这些当然是反映到物体的属性和材质上:
lighting--per-pixel, per-vertex, 全局光模型,normal/parallax map等
texture: 各种mask,animated,
这一切都最后反映到vertex shader和pixel shader上。
根据所支持的渲染技术,写出对应的各个部分,比如parallax map的实现,光照模型,都放在一个个小函数里面,然后在根据现在游戏中有的类型进行组合,进而形成一个个完整的shader。
把shader和材质类型map起来。
map肯定就是有hash的key和value,一般也就是把uint32或者uint64中的每个bit与具体材质信息对应起来,那么转成字符串就成了shader的名字。
这样就完成了map过程。
由于这种做法带来了巨大的通用性,相应的,它对于设计和后期的调试打磨就有更高的要求。
这个方法的确非常cool!
原文链接: