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

RenderScript的设计笔记:

2005-8-11:
1: RenderScript为一系列的渲染指令.用来指示渲染器如何来渲染物体,
  也可以理解为RenderScript如何调用渲染器的渲染接口
2: 物体本身包含了以下的信息,就是渲染器和RenderScript使用的数据.
(1): surface material ,其中包含了 TextureLayer + D3D/OpenGL material.
   在模型系统里。这些参数可以从MAX里导出来.并可以在编辑器里编辑.
(2): shader.系统里有许多预先写好的Shader.
(3): render state. RenderState主要用来控制物体的渲染状态.其中包含了渲染的排序.
   也许我们需要对每个pass设置物体的渲染状态.
   
综上: 渲染器的RenderScript有两种设计方案.一种是把renderscript当作一个.fx来写.
   这样的话,RenderScript其实就是一个数据,一个配置文件.Renderer根据这个配置文件来解析.
同时,我们还需要做一个脚本来控制渲染器有多少个渲染队列。
这样渲染器就可以在修改很少的代码的甚至不修改情况下,支持渲染glow hdr等post render effect

另外的一种就是把渲染器的基本功能设计好,在Renderscript里以指令的形式调用Renderer的功能。
这样RenderScript就真的是一种语言,一种Very High Shading Language.

下面展示第一种方案的两个演示配置文件


渲染器的配置
<RendererCfg

<Queues //这里展示了有多少个渲染队列
< Queue type = main , tip = def //每个渲染队列的用途
RenderTarget = Def_RenderTarget
>
< Queue type = after , tip = glow
Rendertarget = <0.5 , 0.5>Def_RenderTarget
>
>

<RendererScript //这里的数据控制如何
>
>


  渲染脚本
begin RenderScript <name = "卡通">
{
begin tech <name = High>
{
begin pass 0 <render=now>
{
surface_material = DEF_Material
render_state = "单面物体"
vertex_buf = Position/Normal/Tangent/Texturex2
vertex_shader = "ppl_cartoon.vs"
pixel_shader = "ppl_cartoon.ps"
}

begin pass 1 <render=follow> //follow的意思是跟着前面的pass渲染
{
render_state = "放大背面"
vertex_shader = "extrude_back_face.vs"
pixel_shader = "extrude_back_face.ps"
}

begin pass 2 <render=after, tip = glow> //after的意思是表示这个pass要在所有的
{
render_state = "单面物体"
}

}end tech
}end RenderScript

你可能感兴趣的:(script)