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
本文围绕RenderScript展开,它是一系列渲染指令,用于指示渲染器渲染物体。物体包含surface material、shader、render state等信息。介绍了渲染器的RenderScript两种设计方案,一种将其作为配置文件,另一种将其作为指令语言,还展示了第一种方案的演示配置文件。

5062

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



