TGEA中材质的使用(一)

       TGEA是TGE的升级版,采用完全可编程管线,在渲染效果上带来了更好的渲染效果及更强大的可编程性的灵活性。它的脚本大体上与TGE相同,但是新增了材质脚本.

这篇文章是以前写的文档(<TGEA入门指南>),后来整理了在游戏创造杂志上发表,简要介绍了TGEA中材质的使用.顺便在此感谢一下carl帮我画的插图,不愧是程序中的美工,美工中的程序啊..哈哈..


1. 基本概念


1.1. 材质对象简介

材质是TGEA新引入的一个脚本对象。它的含义不同于DX中的材质(只包括光反射属性),它更像3DS max中的材质,包括一个表面渲染的各种属性。

材质指定了模型的表面的渲染效果,它分为两种Material与CustomMaterial。分别对应TGEA对shader两种支持模式:

引擎生成(Procedural Shader Generation),可以使用Material设置好各种渲染特性,后引擎会自动生成相应的shader文件(位于example/shaders/ procedural目录下)。

用户自行开发(Specifying Hand Written Shaders),可以使用CustomMaterials对象,同时指定渲染这个材质所要使用的ShaderData,再在ShaderData中指定相应的shader(hlsl文件)。后续会一一介绍.


1.2. mapTo

首先来看一下材质的一个重要属性mapTo。这个属性指定了模型与材质的映射关系。

TGEA是完全基于可编程管线的渲染引擎,即使用shader(.hlsl)。而mapto与将材质与要使用这个shader渲染的模型联系起来。它们的关系如下图:

图片1.png

图1 一个模型可以由多个材质对象来共同渲染

左边为shader,右边为模型及这个模型的纹理文件。材质居中,它将shader与纹理联系起来。这样引擎遇到使用这张纹理的模型的面时,就会使用这个shader进行渲染。

这样讲或许很不清晰,我们来看具体的实例:

运行tge1.0.3(接下来的TGEA均指TGEA1.0.3)附带的范例“DEMO”,以其中的textur animation为例。这个例子是一个立方体,有6个面,相应的模型与纹理文件位于目录example\demo\data\shapes\test

然后打开同目录下的materials.cs,所有模型的材质定义都在这个文件中,此文件中有如下代码:

new Material(One)

{

   mapTo = one;

   baseTex[0] = "one";

   emissive[0] = true;

   glow[0] = true;

};

第一个属性为mapto,它将材质映射到纹理上。第一行的“mapTo = one;”指的是one.jpg这个纹理文件。使用ShowTool Pro打开newbox.dts,如图2,可以看到one.jpg就是这个模型的一张纹理。因此引擎便使用这个材质来渲染使用了此张纹理的模型的面。

图片2.png

               图2 one

Mapto要特别注意的是它的作用只是将材质与模型的纹理对应起来,它与渲染时使用的纹理无关。具体的看如下例子。在ShowTool Pro里可以发现,模型newbox的纹理“1”的对面是纹理“2”(图3)

图片3.png

     图3 ShowTool Pro中1的对面是2,1与2之间是4和6.

可是在DEMO程序中,可以看见1的对面是6,即2和6的位置对调了。。。

图片4.png

   图4 demo中,1的对面是6,1与6之间是4和2

很有趣,现在让我们来详细看看materials.cs中的相应代码:

  new CustomMaterial(Two)

{

   mapTo = six;

   version = 2.0;

   shader = Waves;

   texture[0] = "two";

   texture[2] = "~/data/interiors/test/metalcrate_bump";

   specular[0] = "1.0 1.0 1.0 1.0";

   specularPower[0] = 16;

   fallback = TwoFallback;

};

mapTo = six;可知,这个材质是应用到模型的six.jpg这张纹理。

但是texture[0] = "two";这句代码却指定了在渲染six.jpg对应的模型的面时,应该使用two.jpg这张纹理进行渲染!

所以要注意mapto只和纹理映射相关,与渲染无关.渲染这个面使用的纹理是材质中的其他属性指定的。

大致了解了材质以及材质的mapTo属性后,接下来具体看看Material与CustomMaterial

posted on 2009-02-01 20:35  chsaov  阅读(756)  评论(1编辑  收藏  举报

导航