我的材质系统---RenderScript的设计日记 (2005-8-08)

来源:互联网 发布:sql minus except 编辑:程序博客网 时间:2024/04/29 18:35

我的材质系统RenderScript的设计日记:

最近在思考怎么做一个灵活的渲染的控制系统,也就是说的材质系统,或者说Effect系统. 最近思考的可能也就这个了.准备把一些心得以日记的形式写出来.方便终结归纳. 其间各个时间出来的思路可能很不相同, 希望大家评价参考.但是不要起不同的日期的日记思路的完全不搭杠来攻击我.

2005-8-08

功能设计: 1: 提供渲染状态的管理,Shader的使用. 纹理的控制,多pass绘制(包括不连续的Pass绘制).
             支持特定物体指定特效(glow , bloom , hdr等).

          2: 脚本化,提供编辑器编辑,脚本编译后生成的可以整合到模型系统里去,模型系统里的材质
可以输出成脚本.经过重新编辑并重新应用到模型上.
3: 模型输出的材质中包含了:
                (1) 纹理信息: 各层纹理的作用,各层纹理的参数(UV,Title等).
                (2) 基本表面材质信息(漫反射,高光等)
             需要编辑指定的参数.
                (1) 渲染需要经过几个pass,有几种可选择的渲染方案
                (2) 基本渲染状态.渲染的排序方式.
                (3) 多pass渲染的时候,可能需要指定不同的material.需要给一个模型动态增加material信息
                (4)

 

需求:简单.对美术来说简单.可以在材质编辑器里编辑,并导出成脚本和二进制模型
模型编辑器可以把材质编辑器的结果保存回模型里.模型系统解析这个材质后,会生成供渲染器用的材质.
如果模型系统检测到模型的材质不是材质编辑器生成的材质.则可以负责解释成一个基本材质.
      模型编辑器可以把材质导出来后,调用材质编辑器来编辑导出的材质并进行修改.
      所以要求材质编辑器可以嵌入到别的应用程序里。
美术修改完材质后,除非进行一些特殊的控制(强制半透明等效果)以外,渲染器不需要额外的信息,
就可以根据材质的信息来正确渲染这个模型.包括所有的特效和shader状态的自动设置等.

      所有的shader应该共享.不同的渲染状态的物体该正确的自动排序.

Material不被共享.因为它包含了纹理,表面材质,Shader,渲染状态,渲染pass和渲染方式等.
其中被共享的是纹理,Shader和渲染状态.

渲染pass的渲染时间可以指定.可以指定一个pass是紧跟着前一个pass渲染还是单独渲染.
比如,一个卡通的勾边,渲染完本体后需要放大背面.这个时候,这个pass就要紧跟着前一个pass渲染.
渲染这种pass的时候,可以特殊处理.这种pass叫followed pass.可以只切换渲染状态.连vb/ib都不需要切换.



渲染效果上:
支持Multi-Pass的渲染.
支持影子的caster , reciver等效果.
支持Glow,HDR等需要分开的两个多Pass渲染.
支持Cartoon等NPR需要的渲染.

  

原创粉丝点击