这个可以说是一个游戏渲染部分非常核心的部分。
game programming gems 5开这个专题是非常有意义的。
shaderlinker反映了整个引擎的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!
本文探讨了游戏渲染中ShaderLinker的重要作用及其实现方法。通过定义不同的渲染技术和材质属性,如像素光照、顶点光照、全局光照模型、法线映射等,将这些特性映射到vertexshader和pixelshader上。利用shader与材质类型的映射,通过组合小函数来形成完整的shader,从而实现了高度灵活且通用的游戏渲染管线。
263

被折叠的 条评论
为什么被折叠?



