<?xml version="1.0" encoding="GBK" ?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dcterms="http://purl.org/dc/terms/">
 <channel>
  	  <title><![CDATA[]]></title>
	  <link>http://cys.cg.blog.163.com</link>
	  <description><![CDATA[ ]]></description>
	  <language>zh-CN</language>
	  <pubDate>Thu, 24 Dec 2009 22:53:28 +0800</pubDate>
	  <lastBuildDate>Thu, 24 Dec 2009 22:53:28 +0800</lastBuildDate>
	  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
	  <generator><![CDATA[NetEase Space]]></generator>
	  <managingEditor><![CDATA[cys.cg]]></managingEditor>
	  <webMaster><![CDATA[C.Y.S]]></webMaster>
		  <ttl>120</ttl>
	  <image>
	  	<title><![CDATA[]]></title>
	  	<url>http://ava.bimg.126.net/photo/jIS9gQNe0Hsym6LAXQO1zA==/169447935982023427.jpg</url>
	  	<link>http://cys.cg.blog.163.com</link>
	  </image>
  <item>
  	<title><![CDATA[平安夜~！有D意思~]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520091124105315263</link>
    <description><![CDATA[<div>哈哈~搜后更新~</div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520091124105315263</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520091124105315263</guid>
    <pubDate>Thu, 24 Dec 2009 22:53:15 +0800</pubDate>
    <dcterms:modified>2009-12-24T22:53:15+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[FR R3 SE新增功能! ]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200971315126221</link>
    <description><![CDATA[<div><A href="http://p.blog.linkus.jp/hoshitokinotoki/parts/blog.js" target=_blank>
</A><P style="TEXT-INDENT: 2em">（2009年7月30號） - cebas公司發佈新版的finalRender R3和finalRender R3 SE (Studio Edition)版本。再次， cebas公司保證提供用戶市場上最高品質的軟體技術。 
</P><P style="TEXT-INDENT: 2em">finalRender R3 SE其實是針對大導演Roland Emmerich的最新特效大片”2012”所量身訂做的. 這讓電影特效發揮到過去無法探索的境地。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">3.0版有哪些新增功能？ </P>
<P style="TEXT-INDENT: 2em">這次3.0版， finalRender for 3ds Max推出兩種口味; 標準版，與工作室版，稱為finalRender R3 SE版&nbsp;，這個版本可以讓製作公司或工作室發揮更高的品質與彈性。這兩種產品都使用相同穩定且有好萊塢特效實戰經驗的軟體核心。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-Scatter</P>
<P style="TEXT-INDENT: 2em">finalRender R3提供了全新的物體分散功能稱為fR-Scatter。fR-Scatter可以很有效率地使用記憶體，產生幾乎沒有上限的物體數量。您可以用貼圖來控制物體分布的方式。或是控制物件之間的碰撞。如此您可以輕易處理數以百萬計的物體。這是finalRender R3內建的工具&nbsp;不用另外購買喔！ </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-Override</P>
<P style="TEXT-INDENT: 2em">讓你可以完全掌控光線跟踪和全局照明的效果。您可以透過這個材質來控制物件的反射，折射，焦散，投射陰影，產生和GI效果！</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fRDome </P>
<P style="TEXT-INDENT: 2em">這是一個全新的燈光類型。他讓您可以同時產生真實的 AO效果&nbsp;加上area shadows 加上HDRI照明, 這全部只需要靠一盞fRDome就夠了！這樣簡單控制可以輕鬆處理實戶外照明。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR Photographic Tone Mapper</P>
<P style="TEXT-INDENT: 2em">要控制HDRI亮度的功能最重要就是Tone Mapping，我們根據最新的科學研究對人眼的了解&nbsp;研發了這個功能。這新工具對控制曝光控制&nbsp;讓顏色能正確地顯示在非線性螢幕上面&nbsp;。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR Physical Camera</P>
<P style="TEXT-INDENT: 2em">全新的相機類型，讓您可以從這裡控制曝光效果，動作模糊，眩光和相機暗角，現在您可以以單一介面輕鬆地調整這些效果。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Scanline-Rendering</P>
<P style="TEXT-INDENT: 2em">FinalRender&nbsp;Stage-1 3.0引入了一種新的混合掃描線渲染技術，除了標準的光線跟踪和全局照明算法，另一種特殊的“掃描線繪製”算法已被添加到渲染引擎核心。這個混和技術的最大優點是讓您同時使用兩種算圖技術，讓你算的更快解獲得高品質的效果。每種渲染器都有其優缺點，但是混合兩種技術可以產生最大的效益！</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">互動全緩衝渲染模式&nbsp;（即時算圖模式！）</P>
<P style="TEXT-INDENT: 2em">finalRender R3的帶有許多新的功能和先進的工具，最令人興奮的就是它的即時算圖模式。 finalRender的渲染引擎已經完全重新編寫，所以能支援3ds max的Active Shade算圖模式。這一個特殊渲染模式，當用戶更動場景時, finalRender的算圖效果會即時更新。這對用戶有即大的幫助，因為您不需要一遍又一遍按下render按鈕看效果。&nbsp;使用此模式讓用戶可以直接使用此模式產生的效果圖而不需要另外再執行render一次本。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-Glare</P>
<P style="TEXT-INDENT: 2em">新的渲染特效能模擬照片過亮的像素產生的炫光效果。它讓您能即時的控制Glare效果</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">什咪是Studio Edition？ </P>
<P style="TEXT-INDENT: 2em">finalRender R3 SE版本是針對工作室或是專業特效公司所設計的&nbsp;讓您可以達到最大的品質與彈性 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Studio Edition 支援複雜的渲染流程。 finalRender R3的SE版是第一套在3ds max平台支援無限數量的Render Elements和render passes。您現在可以利用MAXScript來控制 finalRender R3 SE 執行複雜的渲染流程。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Matte Shadow是電影特效的關鍵元素， finalRender R3 SE提供您最完整的Matte Shadow控制選項。您的工作室一定會很高興發現即使你用了上百層圖層與passes finalRender R3 SE也不會產生問題。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">PyroCluster 3.5現在變成finalRender SE內建的功能&nbsp;它能提供您靈活的體積煙渲染效果&nbsp;並且與finalRender SE完美結合&nbsp;控制GI與陰影。 PyroCluster原本定價至少345美金&nbsp;現在finalRender SE是完全免費提供這項功能！ PyroCluster 3.5是最近被用在許多電影遊戲特效當中。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-Ocean&nbsp;Object (只有SE版有提供)</P>
<P style="TEXT-INDENT: 2em">渲染真實的水面效果是很大的挑戰，尤其是渲染大型水面如海洋。finalRender R3.0 SE，&nbsp;提供您fR-Ocean 物體&nbsp;讓你可以計算大型的水體，這樣的水體跟3ds max標準物件一樣。fR-Ocean可以輕易的縮放&nbsp;製作動畫與最佳化海，以確保最高的細節與最少的多邊形。同時還提供您fR-Ocean material 可以渲染出真實的海洋效果。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-ReWrapper(只有SE版有提供) </P>
<P style="TEXT-INDENT: 2em">fR-ReWrapper material 提供您最大的彈性&nbsp;將渲染效果輸出成Render Elements 或是rendering pass。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">fR-Ocean Material（只有SE版有提供） </P>
<P style="TEXT-INDENT: 2em">fR-Ocean material可以讓您渲染出真實的水或海洋效果！基於真實世界的物理，您甚至可以控制浮游生物的數量或其他水中漂浮粒子。預設參數就能產生非常真實的效果。你也可以以藝術家的角度來製作乾淨的游泳池，因為所有參數都可以很容易地修改。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">增強的動態模糊（只有SE版有提供） </P>
<P style="TEXT-INDENT: 2em">全新的global TM Sampling選項讓最佳化場景的3D動態模糊。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200971315126221</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200971315126221</guid>
    <pubDate>Thu, 13 Aug 2009 13:51:26 +0800</pubDate>
    <dcterms:modified>2009-08-13T13:51:26+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[BLUE BOY]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520095280255674</link>
    <description><![CDATA[<div><P>作业~，但是未完成。 他和他的机械人...</P>
<P>暑假咯~~~~~~~~~~</P>
<P><A href="http://img.bimg.126.net/photo/jEjbRWFfHm73L-DpokaKig==/3992722544641502675.jpg" target=_blank><IMG title="BLUE BOY - C.Y.S - " alt="BLUE BOY - C.Y.S - " src="http://img.bimg.126.net/photo/jEjbRWFfHm73L-DpokaKig==/3992722544641502675.jpg"></A><A href="http://img.bimg.126.net/photo/obSk4_04fgEG0WJ3y0bCFg==/3992722544641502676.jpg" target=_blank><IMG title="BLUE BOY - C.Y.S - " alt="BLUE BOY - C.Y.S - " src="http://img.bimg.126.net/photo/obSk4_04fgEG0WJ3y0bCFg==/3992722544641502676.jpg"></A><A href="http://img.bimg.126.net/photo/CunsiezCKTUiOLg436DMyw==/3992722544641502677.jpg" target=_blank><IMG title="BLUE BOY - C.Y.S - " alt="BLUE BOY - C.Y.S - " src="http://img.bimg.126.net/photo/CunsiezCKTUiOLg436DMyw==/3992722544641502677.jpg"></A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520095280255674</comments>
    <slash:comments>2</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520095280255674</guid>
    <pubDate>Sun, 28 Jun 2009 12:25:56 +0800</pubDate>
    <dcterms:modified>2009-08-02T12:55:36+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[得闲雕雕]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200951081048466</link>
    <description><![CDATA[<div><P><A href="http://img.bimg.126.net/photo/bp9N9gBqsUOB6MLAeEfJlA==/3403876893362665652.jpg" target=_blank></A></P>
<P>一角色，设计中。有时间再上图。。</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200951081048466</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200951081048466</guid>
    <pubDate>Wed, 10 Jun 2009 20:10:48 +0800</pubDate>
    <dcterms:modified>2009-08-02T12:54:16+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[伊达]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752009510885879</link>
    <description><![CDATA[<div><P>好耐无2D&nbsp; 2D一下。居然有点手累。。。。</P>
<P><A href="http://img.bimg.126.net/photo/KOC-yidf98e5udvUbbPFnw==/5708312527692925006.jpg" target=_blank><IMG title="伊达 - C.Y.S - " alt="伊达 - C.Y.S - " src="http://img.bimg.126.net/photo/KOC-yidf98e5udvUbbPFnw==/5708312527692925006.jpg"></A><A href="http://img.bimg.126.net/photo/kew5gUqZfLw0igg3uOlzSg==/5708312527692925007.jpg" target=_blank><IMG title="伊达 - C.Y.S - " alt="伊达 - C.Y.S - " src="http://img.bimg.126.net/photo/kew5gUqZfLw0igg3uOlzSg==/5708312527692925007.jpg"></A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752009510885879</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752009510885879</guid>
    <pubDate>Wed, 10 Jun 2009 20:08:58 +0800</pubDate>
    <dcterms:modified>2009-06-10T20:08:58+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[关于DDS文件格式的说明]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200941110244910</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">&nbsp;DDS文件格式要追述到S3(Silicon &amp; Software Systems)公司提出的一种纹理压缩格式S3TC(S3 Texture Compression), 其目的是通过对纹理的压缩, 以达到节约系统带宽并提高效能的目的. S3TC就是通过压缩方式, 利用有限的纹理缓存空间来存储更多的纹理, 因为它支持6:1的压缩比例, 所以6M的纹理可以被压缩为1M存放在材质缓存中, 从而在节约了缓存的同时也提高了显示性能. 后来的DXTC和FXT1都是与S3TC类似的技术, 它们分别是微软和3dfx开发的纹理压缩标准, FXT1能提供比S3TC更高的压缩比, 达到8:1, 同时它也在3DFX新版本的Glide中得到支持. DXTC是1999年微软从S3公司取得S3TC的授权后更名而来的, 并在DirectX6中提供了支持, 即使用户的图形硬件不能支持S3TC, DirectX API会自动解码压缩后的纹理贴图. 压缩纹理贴图可以使用高品质的离线压缩器, 不会造成加载程序时有很多延时, 而DDS文件就可以使用DXTC方式压缩或是存储未压缩的像素格式.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注: S3TC是一种有损压缩方式, 纹理被压缩到每单元4点(不透明纹理或简单透明纹理)或每单元8点(复杂透明纹理), 压缩后的纹理品质保持良好.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DDS(DirectDraw Surface)文件格式是微软为DirectX开发的一种图片格式, 它是可以使用类似S3TC标准提供的一种压缩纹理格式. DDS文件可以有很多不同的格式, 可以含有 Mipmap 或不保存 Mipmap 信息, 可以使用压缩或非压缩的像素格式,&nbsp;&nbsp;常见的压缩数据方式有 DXTn(DXT1~DXT5), DDS文件的结构见MSDN: <A href="http://msdn2.microsoft.com/en-us/library/bb172993.aspx">DDS File Reference</A>.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DXT1压缩格式</P>
<P style="TEXT-INDENT: 2em">可以提供高达8:1的压缩比例, 它可以支持1 bit 的 Alpha 通道, 每个 4x4 的块可以根据需要有或没有这个透明通道. 不需要 alpha 通道时, 每个块可以有四种颜色(其中两个是插值得到的). 需要 alpha 通道时, 只能有三种颜色, 另一个被保留用来描述是否透明, 因为只有一位 Alpha 信息, 所以只能表示透明或不透明, 因此DXT1的透明其实是一种镂空, 利用网孔达到的透明效果. 我们一般对画面质量要求不高并且不需要透明信息的图片使用这种格式.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DXT3压缩格式可以提供4:1的压缩比例, 可以支持4 bit 的 Alpha 通道, 主要用于Alpha通道较锐利, 对比强烈的材质, 比如镂空, 以及部分半透材质等.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DXT5压缩格式也可以提供4:1的压缩比例, 支持4 bit 的 Alpha 通道, 保存的上插值Alpha信息. 主要用于Alpha通道比较柔和的材质. 如用作镜面光屏蔽材质等.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至于 DXT2 和 DXT4 压缩格式并不常用, 与 DXT3 和 DXT5 压缩格式很相似, DXT2 与 DXT3 的区别在于 DXT2 使用带有预乘 Alpha 的压缩格式, DXT3 使用无预乘 Alpha 的压缩格式, DXT4 与 DXT5 的区别在于 DXT4 使用带有预乘插补 Alpha 的压缩格式, DXT5 使用插补 Alpha 的压缩格式, 无预乘. 关于压缩信息见MSDN: <A href="http://msdn2.microsoft.com/en-us/library/bb206238.aspx">Textures with Alpha</A>.</P>
<P style="TEXT-INDENT: 2em">DDS文件可以通过 nVidia 公司提供的 Photoshop 插件直接打开编辑和保存, 请可以<A href="http://developer.download.nvidia.com/tools/texturetools/Photoshop_Plugins_8.23.1101.1715.exe">点此下载</A>. 另一个方法是先在用 Photoshop 编辑图片将图片保存为有 Alpha 通道的 TGA 格式文件, 再使用转换工具生成DDS文件, 转换和查看DDS文件的工具可以安装DXSDK后获得, 也可以使用本站简化版的转换和查看工具, 请 <A href="http://www.csinx.org/IDevelope/DDSTools.asp">点击此处</A> 打开下载页面. </P>
<P style="TEXT-INDENT: 2em"></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200941110244910</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200941110244910</guid>
    <pubDate>Mon, 11 May 2009 22:24:49 +0800</pubDate>
    <dcterms:modified>2009-05-11T22:24:49+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[3D游戏引擎剖析 ]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752009411102125344</link>
    <description><![CDATA[<div><P 游戏引擎介绍， 渲染和构造3D世界 ></P>
<P ><BR>　　自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏，它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化，可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心，用新的模型，场景和声音创造新的游戏， 或向已有的游戏素材中添加新的东西。大量的新游戏根据已经存在的游戏引擎开发出来，而大多数都以ID公司的Quake引擎为基础， 这些游戏包括Counter&nbsp; Strike， Team Fortress， Tac Ops， Strike Force， 以及Quake Soccer。Tac Ops 和Strike Force 都使用了Unreal Tournament 引擎。事实上， "游戏引擎" 已经成为游戏玩家之间交流的标准用语，但是究竟引擎止于何处，而游戏又从哪里开始呢?像素的渲染，声音的播放，怪物的思考以及游戏事件的触发，游戏中所有这一切的幕后又是什么呢？ 如果你曾经思考过这些问题， 而且想要知道更多驱动游戏进行的东西，那么这篇文章正好可以告诉你这些。 本文分多个部分深入剖析了游戏引擎的内核， 特别是Quake引擎，因为我最近工作的公司Raven Software已经在Quake引擎的基础上开发出了多款游戏，其中包括著名的Soldier of Fortune 。&nbsp; </P>
<P ><BR>　　让我们首先来看看一个游戏引擎和游戏本身之间的主要区别。 许多人们会混淆游戏引擎和整个游戏 。这有点像把一个汽车发动机和整个汽车混淆起来一样 。 你能够从汽车里面取出发动机， 建造另外一个外壳，再使用发动机一次。 游戏也像那。 游戏引擎被定义为所有的非游戏特有的技术。 游戏部份是被称为 '资产' 的所有内容 (模型，动画，声音，人工智能和物理学)和为了使游戏运行或者控制如何运行而特别需要的程序代码， 比如说AI--人工智能。&nbsp; </P>
<P Quake 游戏结构的人来说， 游戏引擎就是 Quake。exe ，而游戏部分则是 QAGame。dll 和 CGame。dll 。 如果你不知道这是什么意思， 也没有什么关系；在有人向我解释它以前， 我也不知道是什么意思。 但是你将会完全明白它的意思。 这篇游戏引擎指导分为十一个部份。 是的， 从数量上来说，总共是十一个部份! 每个部分大概3000字左右。现在就从第一部分开始我们的探索吧，深入我们所玩游戏的内核，在这里我们将了解一些基本的东西， 为后面的章节作铺垫。。。 ></P>
<P ><BR>　　让我们从渲染器来开始游戏引擎设计的探讨吧， 我们将从游戏开发者(本文作者的背景)的角度来探讨这些问题。事实上，在本文的各个段落，我们将常常从游戏开发者的角度探讨， 也让您像我们一样思考问题!&nbsp; </P>
<P 尽管我们下面的探讨可能让新手感到有些恐惧，先别去理会它。 渲染器做些什么？为什么它是必须的？我们将会解释这些重要问题。&nbsp; ></P>
<P 你通常想做的第一件事情就是建造渲染器。 因为如果看不见任何东西 – 那么你又如何知道你的程序代码在工作呢? 超过 50% 的 CPU 处理时间花费在渲染器上面； 通常也是在这个部分，游戏开发者将会受到最苛刻的评判。 如果我们在这个部分表现很差，事情将会变得非常糟糕， 我们的程序技术，我们的游戏和我们的公司将在 10 天之内变成业界的笑话。 它也是我们最依赖于外部厂商和力量的地方，在这里他们将处理最大限度的潜在操作目标。 如此说来， 建造一个渲染器确实不象听起来那么吸引人（事实如此）， 但如果没有一个好的渲染器， 游戏或许永远不会跻身于排行榜前10 名。&nbsp; ></P>
<P 3D 加速卡， API ，三维空间数学， 对 3D 硬件如何工作的理解等等。对於主机（游戏机）游戏来说，也需要相同类型的知识，但是至少对于主机， 你不必去尝试击中一个移动中的目标。 因为一台主机的硬件配置是固定的 "时间快照"， 和PC（个人计算机）不同， 在一台主机的生命期中，它的硬件配置不会改变。&nbsp; ></P>
<P 因为额外的 3D 处理在处理器时间和和內存带宽方面都是极为昂贵的。 它也是一种预算， 要弄清楚你想在什么地方花费处理器时间，而你宁愿在什么地方节省一些从而达到最好的整体效果。 接下来我们将会介绍一些这方面的工具，以及怎样更好的用它们让游戏引擎工作。 ></P>
<P ><BR>　　最近，当我和一位从事计算机图形方面工作长达数年之久的人会谈时，她向我吐露道， 当她第一次看到实时操纵计算机 3D 图象时， 她不知道这是怎么实现的， 也不知道计算机如何能够存储 3D 图象。 今天这对于在大街上的普通人来说或许是真实的，即使他们时常玩 PC 游戏， 游戏机游戏， 或街机游戏。 </P>
<P 3D 世界的一些细节，你也应该看一看 Dave Salvator 所写的“3D 管线导论“，以便对3D 图象生成的主要过程有一个整体的了解。 ></P>
<P 物体（对象）被储存成 3D 世界中的一系列点(被称为顶点)， 彼此之间有相互关系，所以计算机知道如何在世界中的这些点之间画线或者是填充表面。 一个立方体由8个点组成，每个角一个点。立方体有6个表面， 分别代表它的每一个面。 这就是 3D 对象储存的基础。 对于一些比较复杂的 3D 物体， 比如说一个 Quake 的关卡，将有数以千计(有时数以十万计)的顶点， 和数以千计的多边形表面。&nbsp; ></P>
<P 本质上与上面的立方体例子类似， 它仅仅是由许许多多的小多边形组成的一些复杂场景。模型和世界如何储存是渲染器的一部份功能， 而不属于应用程序/游戏部份。 游戏逻辑不需要知道对象在內存中如何表示， 也不需要知道渲染器将怎样把他们显示出来。 游戏只是需要知道渲染器将使用正确的视野去表示对象， 并将在正确的动画幀中把正确的模型显示出来。 ></P>
<P 并且不需要去改动游戏的一行代码。许多跨平台引擎， 而且许多自行开发的游戏机引擎就是这样的，如 Unreal 引擎， --举例来说， 这个游戏 GameCube 版本的渲染器就可以被你任意的替换掉。&nbsp; ></P>
<P 并得到多边形， 而几乎所有的 3D 显示卡都使用多边形来作为它们的最终渲染图元。 一个图元就是你在任何显示卡上面所能使用的最低级的绘制（渲染）单位，几乎所有的硬件都是使用三个顶点的多边形(三角形)。 新一代的 nVidia 和 ATI 显卡可以允许你以数学方式渲染(被称为高次表面)， 但因为这不是所有图形卡的标准， 你还不能靠它作为渲染策略。 ></P>
<P 我们将会在下面的曲面片小节中更进一步介绍这些高次表面。 ></P>
<P ><BR>　　问题来了。 我现在有一个由几十万个顶点/多边形描述的世界。 我以第一人称视角位于我们这个 3D 世界的一边。 在视野中可以看见世界的一些多边形， 而另外一些则不可见， 因为一些物体， 比如一面看得见的墙壁， 遮挡住了它们。 即使是最好的游戏编码人员， 在目前的 3D 显卡上， 在一个视野中也不能处理 300，000个三角形且仍然维持 60fps (一个主要目标)。 显卡不能处理它， 因此我们必须写一些代码，在把它们交给显卡处理之前除去那些看不见的多边形。 这个过程被称为剔除。 </P>
<P 在深入了解这些之前，让我们探讨一下为什么图形显示卡不能处理超高数量的多边形。 我是说，最新的图形卡每秒钟不能处理几百万个多边形吗？它不应该能够处理吗? 首先，你必须理解市场销售宣称的多边形生成率和真实世界的多边形生成率。 行销上宣称的多边形生成率是图形显示卡理论上能够达到的多边形生成率。&nbsp; ></P>
<P 相同的纹理，相同的尺寸大小， 正在往显示卡上传送多边形的应用程序除了传送多边形以外什么也不做， 这时显卡能处理多少多边形数量， 就是图形芯片厂商呈现给你的数字。&nbsp; ></P>
<P -- 多边形的 3D 变换， 光照计算， 拷贝较多的纹理到显卡內存， 等等。 不仅纹理要送到显示卡， 而且还有每个多边形的细节。一些比较新的显卡允许你实际上在显卡內存本身里面储存模型/世界几何细节， 但这可能是昂贵的，将会耗光纹理正常可以使用的空间，所以你最好能确定每一幀都在使用这些模型的顶点， 否则你只是在浪费显示卡上的存储空间。 我们就说到这里了。 重要的是，在实际使用显卡时，并不必然就能达到你在显卡包装盒上所看到的那些指标，如果你有一个比较慢速的CPU ， 或没有足够的內存时，这种差异就尤为真实。 ></P>
<P ><BR>　　最简单的剔除方式就是把世界分成区域， 每个区域有一个其他可见区域的列表。 那样， 你只需要显示针对任何给定点的可见部分。 如何生成可见视野区域的列表是技巧所在。 再者， 有许多方法可以用来生成可见区域列表， 如 BSP 树， 窥孔等等。&nbsp; </P>
<P DOOM 或 QUAKE 时，你已经听到过使用 BSP 这个术语了。 它表示二叉空间分割。&nbsp; ></P>
<P 是一种将世界分成小区域的的方法，通过组织世界的多边形，容易确定哪些区域是可见的而哪些是不可见的 – 从而方便了那些不想做太多绘制工作的基于软件的渲染器。它同时也以一种非常有效的方式让你知道你位于世界中的什么地方。&nbsp; ></P>
<P ( 最早由 3D Realms 已经取消的 Prey 项目引入游戏世界 )里，每个区域 ( 或房间) 都建造有自己的模型， 通过每个区域的门 ( 或窥孔 )能够看见另外的区段。 渲染器把每个区域作为独立的场景单独绘制。 这就是它的大致原理。 足以说这是任何一个渲染器的必需部份，而且非常重要。&nbsp; ></P>
<P "遮挡剔除"之下，但是他们全部都有同样的目的: 尽早消除不必要的工作。 对於一个FPS游戏(第一人称射击游戏) 来说，视野中时常有许多三角形，而且游戏玩家承担视野的控制，丢弃或者剔除不可见的三角形就是绝对必要的了。 对空间模拟来说也是这样的， 你可以看见很远很远的地方 – 剔除超过视觉范围外面的东西就非常重要。 对于视野受到限制的游戏来说 – 比如 RTS (即时战略类游戏)--通常比较容易实现。 通常渲染器的这个部份还是由软件来完成， 而不是由显卡完成， 由显卡来做这部分工作只是一个时间问题。 ></P>
<P ><BR>　　一个简单的例子，从游戏到多边形绘制的图形管线过程大致是这样: <BR>　　　　· 游戏决定在游戏中有哪些对象， 它们的模型， 使用的纹理， 他们可能在什么动画幀，以及它们在游戏世界里的位置。 游戏也决定照相机的位置和方向。 </P>
<P 游戏把这些信息传递给渲染器。以模型为例 ，渲染器首先要查看模型的大小 ，照相机的位置， 然後决定模型在屏幕上是否全部可见， 或者在观察者 (照相机视野) 的左边，在观察者的后面，或距离很远而不可见。它甚至会使用一些世界测定方式来计算出模型是否是可见的。 (参见下面这条) ></P>
<P 世界可视化系统决定照相机在世界中的位置，并根据照相机视野决定世界的哪些区域 / 多边形是可见的。有许多方法可以完成这个任务， 包括把世界分割成许多区域的暴力方法，每个区域直接为"我能从区域 D 看见区域 AB &amp; C"， 到更精致的 BSP(二叉空间分割)世界。 所有通过这些剔除测试的多边形被传递给多边形渲染器进行绘制。&nbsp; ></P>
<P 对於每一个被传递给渲染器的多边形， 渲染器依照局部数学 ( 也就是模型动画) 和世界数学(相对于照相机的位置?)对多边形进行变换，并检查决定多边形是不是背对相机 (也就是远离照相机)。背面的多边形被丢弃。 非背面的多边形由渲染器根据发现的附近灯光照亮。然后渲染器要看多边形使用的纹理，并且确定 API/ 图形卡正在使用那种纹理作为它的渲染基础。 在这里，多边形被送到渲染 API，然后再送给显卡。&nbsp; ></P>
<P 下面的图表摘自Dave Salvator's 3D 管线一文，可以给你多一些具体细节:&nbsp; ></P>
<P 管线 ><BR>　　- 高层的概观 <BR>　　　1. 应用程序/ 场景 <BR>　　·场景/ 几何数据库遍历 <BR>　　·对象的运动，观察相机的运动和瞄准 <BR>　　·对象模型的动画运动 <BR>　　·3D 世界内容的描述 <BR>　　·对象的可见性检查，包括可能的遮挡剔除 <BR>　　·细节层次的选择 (LOD) </P>
<P 几何 ><BR>　　·变换 (旋转，平移， 缩放) <BR>　　·从模型空间到世界空间的变换 (Direct3D) <BR>　　·从世界空间到观察空间变换 <BR>　　·观察投影 <BR>　　·细节接受/ 拒绝 剔除 <BR>　　·背面剔除 (也可以在后面的屏幕空间中做) <BR>　　光照 <BR>　　·透视分割 - 变换到裁剪空间 <BR>　　·裁剪 <BR>　　·变换到屏幕空间 </P>
<P 三角形生成 ><BR>　　·背面剔除 ( 或者在光照计算之前的观察空间中完成) <BR>　　·斜率/ 角度计算 <BR>　　·扫瞄线变换 </P>
<P 渲染 / 光栅化 ><BR>　　·着色 <BR>　　·纹理 <BR>　　·雾 <BR>　　·Alpha 透明测试 <BR>　　·深度缓冲 <BR>　　·抗锯齿 (可选择的) <BR>　　·显示 </P>
<P 然後根据纹理对这个列表排序(这样你只需要对显卡传送一次纹理， 而不是每个多边形都传送一次)， 等等。在过去，会把多边形按照它们到相机的距离进行排序，首先绘制那些距离相机最远的多边形， 但现在由于 Z 缓冲的出现，这种方法就不是那么重要了。 当然那些透明的多边形要除外，它们要在所有的非半透明多边形绘制之后才能够绘制 ，这样一来，所有在它们后面的多边形就能正确地在场景中显现出来。 当然，象那样，实际上你必须得从后到前地绘制那些多边形。 但时常在任何给定的 FPS 游戏场景中， 通常没有太多透明的多边形。 它可能看起来像有，但实际上与那些不透明的多边形相比，其比率是相当低的。&nbsp; ></P>
<P API， API 就能利用硬件加速的变换和光照处理 (T&amp;L)， 这在如今的 3D 显卡中是很平常的事情。 这里不讨论涉及到的矩阵数学(参见Dave的 3D 管线导论)，几何变换允许 3D 显卡按照你的尝试，根据相机在任何时间的位置和方向，在世界的正确角度和位置绘制多边形。&nbsp; ></P>
<P 包括裁剪运算，决定任何给定的多边形实际上是否可见，在屏幕上完全不可见或部分可见。 光照运算，计算纹理色彩明亮程度，这取决于世界的灯光从什么角度如何投射到顶点上。 过去，处理器处理这些计算，但现在，当代图形硬件就能为你做这些事情， 这意谓着你的处理器可以去做其他的事情了。很明显这是件好事情 (tm) ，由于不能指望市面上所有的 3D 显卡板上都有T &amp; L， 所以无论如何你自己将必须写所有的这些例程 (再一次从游戏开发者角度来说)。 你将在本文各处的不同段落看到 "好事情 ( tm)" 这个词汇。 我认为，这些特征为使游戏看起来更好作出了非常有用的贡献。 毫不令人吃惊，你也将会看见它的对立面；你猜到了，那就是“坏事情 (tm)”。 我正在尝试争取这些词汇的版权， 你要使用他们就得支付一笔小小的费用哟。 ></P>
<P ><BR>　　除了三角形，曲面片的使用现在正变得更普遍。 因为他们能用数学表达式来描述几何 ( 通常涉及某种曲线的几何形体) ，而不仅仅只是列出大量的多边形以及在游戏世界中的位置， 所以曲面片 ( 高次表面的另一个名称) 非常好。 这样，你实际上就能够动态地根据方程式来建立( 和变形 )多边形网格， 并决定你实际想要从曲面片上看到的多边形数量。 因此，举例来说，你可以描述一个管道， 然后在世界中就可以有这种管道的许多样例。 在一些房间中， 你已经显示了 10，000个多边形，你可以说，"因为我们已经显示了大量的多边形，而且任何更多的多边形将会使幀速率下降， 所以这个管道应该只有 100 个多边形"。 但在另外一个房间中， 视野中只有 5，000个可见的多边形，你可以说，"因为我们还没有达到预算可以显示的多边形数量 ， 所以，现在这个管道能有 500 个多边形"。 非常美妙的东西 --但你必须首先知道所有这些，并建立网格，这不是无足轻重的。 通过 AGP 传送同一个对象的曲面方程确实要比传送其大量顶点节省成本。 SOF2 就使用了这个方法的一种变体来建立它的地表系统。 </P>
<P ATI 显卡具有 TruForm， 它能带一个以三角形为基础的模型，并将该模型转换为基于高次表面的模型，使其平滑 — 接着再用十倍三角形数量把模型转换回基于大量三角形的模型 (被称为retesselation)。然后模型送往管线做进一步的处理。 实际上 ATI 仅仅在 T &amp; L 引擎之前增加了一个阶段来处理这个过程。这里的缺点是，要控制哪些模型需要被平滑处理而哪些又不需要。你常常想要一些边缘比较尖锐， 比如鼻子，但它却被不恰当的平滑过了。 这仍然是一种很好的技术，而且我能预见它在将来会被更多的应用。&nbsp; ></P>
<P -- 我们将会在第二部分继续介绍光照和纹理，下面的章节会更加深入。></P>
<P 3D环境的光照和纹理 ></P>
<P ><BR>　　在变换过程中， 通常是在称为观察空间的坐标空间中， 我们遇到了最重要的运算之一: 光照计算。 它是一种这样的事情， 当它工作时，你不关注它，但当它不工作时， 你就非常关注它了。有很多不同的光照方法，从简单的计算多边形对于灯光的朝向，并根据灯光到多边形的方向和距离加上灯光颜色的百分比值，一直到产生边缘平滑的灯光贴图叠加基本纹理。而且一些 API 实际上提供预先建造的光照方法。举例来说，OpenGL 提供了每多边形，每顶点，和每像素的光照计算。&nbsp; </P>
<P 你没有必要用这种光照方式查看每个单独的多边形。 这种方式的优点是时常可以使用硬件转换与光照（T &amp; L）来帮助快速完成。 不足之处是它不能产生阴影。 举例来说，即使灯光是在模型的右侧，左手臂应该在被身体投影的阴影中，而实际上模型的双臂却以同样的方式被照明了。 ></P>
<P 当用平面光照绘制一个多边形时， 你让渲染（绘制）引擎把整个多边形都着上一种指定的颜色。这叫做平面着色光照。 (该方法中，多边形均对应一个光强度，表面上所有点都用相同的强度值显示，渲染绘制时得到一种平面效果，多边形的边缘不能精确的显示出来) 。 ></P>
<P ( Gouraud 着色) ，你让渲染引擎给每个顶点赋予特定的颜色。 在绘制多边形上各点投影所对应的像素时，根据它们与各顶点的距离，对这些顶点的颜色进行插值计算。 (实际上Quake III 模型使用的就是这种方法， 效果好的令人惊奇)。&nbsp; ></P>
<P Phong 着色。如同 Gouraud 着色，通过纹理工作，但不对每个顶点颜色进行插值决定像素颜色值， 它对每个顶点的法向量进行插值，会为每个顶点投影的像素做相同的工作。对于 Gouraud 着色，你需要知道哪些光投射在每个顶点上。对于 Phong 着色，你对每个像素也要知道这么多。&nbsp; ></P>
<P Phong 着色可以得到更加平滑的效果，因为每个像素都需要进行光照计算，其绘制非常耗费时间。平面光照处理方法很快速， 但比较粗糙。Phong 着色比 Gouraud 着色计算更昂贵，但效果最好，可以达到镜面高光效果("高亮")。 这些都需要你在游戏开发中折衷权衡。 ></P>
<P ><BR>　　接着是生成照明映射，你用第二个纹理映射（照明映射）与已有的纹理混合来产生照明效果。这样工作得很好， 但这本质上是在渲染之前预先生成的一种罐装效果。如果你使用动态照明 (即，灯光移动， 或者没有程序的干预而打开和关闭)，你得必须在每一幀重新生成照明映射，按照动态灯光的运动方式修改这些照明映射。灯光映射能够快速的渲染，但对存储这些灯光纹理所需的内存消耗非常昂贵。你可以使用一些压缩技巧使它们占用较少的的内存空间，或减少其尺寸大小， 甚至使它们是单色的 (这样做就不会有彩色灯光了)，等等。 如果你确实在场景中有多个动态灯光， 重新生成照明映射将以昂贵的CPU周期而告终。&nbsp; </P>
<P 以Quake III为例，场景使用照明映射， 动画模型使用顶点照明。 预先处理的灯光不会对动画模型产生正确的效果 -- 整个多边形模型得到灯光的全部光照值 -- 而动态照明将被用来产生正确的效果。 使用混合照明方式是多数的人们没有注意到的一个折衷，它通常让效果看起来"正确"。 这就是游戏的全部 – 做一切必要的工作让效果看起来"正确"，但不必真的是正确的。&nbsp; ></P>
<P 1GHZ CPU 和 GeForce 2 显卡。是进步了，但一切都是有代价的。&nbsp; ></P>
<P 我们就进行裁剪运算。 不进入血淋淋的细节而，剪断运算决定哪些三角形完全在场景 (被称为观察平截头体) 之内或部份地在场景之内。完全在场景之内的三角形被称为细节接受，它们被处理。对于只是部分在场景之内的三角形， 位于平截头体外面的部分将被裁剪掉，余下位于平截头体内部的多边形部分将需要重新闭合，以便其完全位于可见场景之内。 (更多的细节请参考我们的 3D 流水线指导一文)。 ></P>
<P 线转换)，场景被映射到2D 屏幕坐标。到这里，就是渲染（绘制）运算了。 ></P>
<P ><BR>　　纹理在使3D场景看起来真实方面异常重要，它们是你应用到场景区域或对象的一些分解成多边形的小图片。多重纹理耗费大量的内存，有不同的技术来帮助管理它们的尺寸大小。纹理压缩是在保持图片信息的情况下，让纹理数据更小的一种方法。纹理压缩占用较少的游戏CD空间，更重要的是，占用较少内存和3D 显卡存储空间。另外，在你第一次要求显卡显示纹理的时候，压缩的(较小的) 版本经过 AGP 接口从 PC 主存送到3D 显卡， 会更快一些。纹理压缩是件好事情。 在下面我们将会更多的讨论纹理压缩。&nbsp; </P>
<P 映射（多纹理映射） ><BR>　　游戏引擎用来减少纹理内存和带宽需求的另外一个技术就是 MIP 映射。 MIP 映射技术通过预先处理纹理，产生它的多个拷贝纹理，每个相继的拷贝是上一个拷贝的一半大小。为什么要这样做?要回答这个问题，你需要了解 3D 显卡是如何显示纹理的。最坏情况，你选择一个纹理，贴到一个多边形上，然后输出到屏幕。我们说这是一对一的关系，最初纹理映射图的一个纹素 (纹理元素) 对应到纹理映射对象多边形的一个像素。如果你显示的多边形被缩小一半，纹理的纹素就每间隔一个被显示。这样通常没有什么问题 -- 但在某些情况下会导致一些视觉上的怪异现象。让我们看看砖块墙壁。 假设最初的纹理是一面砖墙，有许多砖块，砖块之间的泥浆宽度只有一个像素。如果你把多边形缩小一半， 纹素只是每间隔一个被应用，这时候，所有的泥浆会突然消失，因为它们被缩掉了。你只会看到一些奇怪的图像。&nbsp; </P>
<P MIP 映射，你可以在显示卡应用纹理之前，自己缩放图像，因为可以预先处理纹理，你做得更好一些，让泥浆不被缩掉。当 3D 显卡用纹理绘制多边形时，它检测到缩放因子，说，"你知道，我要使用小一些的纹理，而不是缩小最大的纹理，这样看起来会更好一些。" 在这里， MIP 映射为了一切，一切也为了 MIP 映射。 ></P>
<P ><BR>　　单一纹理映射给整个3D 真实感图形带来很大的不同， 但使用多重纹理甚至可以达到一些更加令人难忘的效果。过去这一直需要多遍渲染（绘制），严重影响了像素填充率。 但许多具有多流水线的3D 加速卡，如ATI's Radeon 和 nVidia's GeForce 2及更高级的显卡，多重纹理可以在一遍渲染（绘制）过程中完成。 产生多重纹理效果时， 你先用一个纹理绘制多边形，然后再用另外一个纹理透明地绘制在多边形上面。这让你可以使纹理看上去在移动，或脉动， 甚至产生阴影效果 (我们在照明一节中描述过)。绘制第一个纹理映射，然后在上面绘制带透明的全黑纹理，引起一种是所有的织法黑色的但是有一个透明分层堆积过它的顶端 ， 这就是 -- 即时阴影。 该技术被称为照明映射 ( 有时也称为 暗映射)，直至新的Doom ，一直是Id引擎里关卡照明的传统方法。&nbsp; </P>
<P Matrox 第一个在流行的 3D 游戏中发起使用各种不同形式的凹凸贴图。就是生成纹理来表现灯光在表面的投射，表现表面的凹凸或表面的裂缝。 凹凸贴图并不随着灯光一起移动 -- 它被设计用来表现一个表面上的细小瑕疵，而不是大的凹凸。 比如说，在飞行模拟器中，你可以使用凹凸贴图来产生像是随机的地表细节，而不是重复地使用相同的纹理，看上去一点趣味也没有。&nbsp; ></P>
<P ATI 和 nVidia 显卡片能执行每像素运算，这种缺省观察角度的不足就真的不再是有力而快速的法则了。 无论是哪一种方法， 到目前为止，没有游戏开发者太多的使用； 更多的游戏能够且应该使用凹凸贴图。 ></P>
<P = 糟糕的事物 ><BR>　　纹理高速缓存的管理游戏引擎的速度至关重要。 和任何高速缓存一样，缓存命中很好，而不命中将很糟糕。如果遇到纹理在图形显示卡内存被频繁地换入换出的情况，这就是纹理高速缓存抖动。发生这种情况时，通常API将会废弃每个纹理，结果是所有的纹理在下一幀将被重新加载，这非常耗时和浪费。对游戏玩家来说，当API重新加载纹理高速缓存时，会导致幀速率迟钝。 </P>
<P – 这是确保任何 3D 游戏引擎速度的一个决定性因素。 纹理管理是件好事情 – 这意味着只要求显卡使用纹理一次，而不是重复使用。这听起来有点自相矛盾，但效果是它意谓着对显卡说，"看， 所有这些多边形全部使用这一个纹理，我们能够仅仅加载这个纹理一次而不是许多次吗?" 这阻止API ( 或图形驱动软件) 上传多次向显卡加载纹理。象OpenGL这样的API实际上通常处理纹理高速缓存管理，意谓着，根据一些规则，比如纹理存取的频率，API决定哪些纹理储存在显卡上，哪些纹理存储在主存。 真正的问题来了：a) 你时常无法知道API正在使用的准确规则。 b)你时常要求在一幀中绘制更多的纹理，以致超出了显卡内存空间所能容纳的纹理。&nbsp; ></P>
<P MP3 文件，尽管无法达到那样的压缩比率，但纹理可以被压缩。 从声音波形文件到MP3的压缩可以达到 11:1的压缩比率，而绝大多数硬件支持的纹理压缩运算法则只有 4:1 的压缩比率，尽管如此，这样能产生很大的差别。 除此之外，在渲染（绘制）过程中，只有在需要时，硬件才动态地对纹理进行解压缩。这一点非常棒，我们仅仅擦除即将可能用到的表面。 ></P>
<P III 在其阴影系统就是这么做的。处理多边形时，把它们加入到一个内部的阴影列表，一旦所有的多边形处理完毕，渲染器遍历纹理列表，就将纹理及所有使用这些纹理的多边形同时传送出去。&nbsp; ></P>
<P T &amp; L（如果支持的话）时，并不怎么有效。你面临的结局是，满屏幕都是使用相同纹理的大量的多边形小群组，所有多边形都使用不同的变换矩阵。这意谓着更多的时间花在建立显卡的硬件 T &amp; L 引擎 ，更多的时间被浪费了。 无论如何，因为他们有助于对整个模型使用统一的纹理，所以它对实际屏幕上的模型可以有效地工作。但是因为许多多边形倾向使用相同的墙壁纹理，所以对于世界场景的渲染，它常常就是地狱。通常它没有这么严重，因为大体而言，世界的纹理不会有那么大，这样一来API的纹理缓存系统将会替你处理这些，并把纹理保留在显卡以备再次使用。&nbsp; ></P>
<P PS2 上面，你最好是远离"一次纹理" 的方法。在 Xbox 上面， 这是不重要的，因为它本身没有图形内存(它是 UMA 体系结构)，且所有的纹理无论如何始终保留在主存之中。&nbsp; ></P>
<P FPS 游戏中，试图通过AGP接口传送大量纹理是第二个最通常的瓶颈。最大的瓶颈是实际几何处理，它要使东西出现在它应该出现的地方。在如今的3D FPS 游戏中，最耗费时间的工作，显然是那些计算模型中每个顶点正确的世界位置的数学运算。如果你不把场景的纹理保持在预算之内，仅居其次的就是通过AGP接口传送大量的纹理了。然而，你确实有能力影响这些。 通过降低顶层的 MIP 级别(还记得系统在哪里不断地为你细分纹理吗?)， 你就能够把系统正在尝试送到显卡的纹理大小减少一半。你的视觉质量会有所下降-- 尤其是在引人注目的电影片断中--但是你的幀速率上升了。这种方式对网络游戏尤其有帮助。实际上，Soldier of Fortune II和Jedi Knight II: Outcast这两款游戏在设计时针对的显卡还不是市场上的大众主流显卡。为了以最大大小观看他们的纹理，你的3D 显卡至少需要有128MB的内存。这两种产品在思想上都是给未来设计的。&nbsp; ></P>
<P 2 部份。在下面章节中，我们将介绍许多主题，包括内存管理，雾效果，深度测试， 抗锯齿，顶点着色，API等。></P>
<P   ></P><P 内存使用，特效和API ></P>
<P ><BR>　　让我们想一想，在今天实际上是如何使用3D 显卡内存的以及在将来又会如何使用。 如今绝大多数3D显卡处理32位像素颜色，8位红色， 8位蓝色，8 位绿色，和 8 位透明度。这些组合的红，蓝和绿256个色度，可以组成 16。7 百万种颜色-- 那是你我可以在一个监视器上看见的所有颜色。&nbsp; </P>
<P Carmack 为什么要求 64 位颜色分辨率呢? 如果我们看不出区别，又有什么意义呢? 意义是: 比如说， 有十几个灯光照射模型上的点，颜色颜色各不相同。 我们取模型的最初颜色，然后计算一个灯光的照射，模型颜色值将改变。 然后我们计算另外的一个灯光， 模型颜色值进一步改变。 这里的问题是，因为颜色值只有8位，在计算了4个灯光之后，8位的颜色值将不足以给我们最后的颜色较好的分辨率和表现。分辨率的不足是由量化误差导致的，本质原因是由于位数不足引起的舍入误差。&nbsp; ></P>
<P 或 32 位，你有一个更高分辨率，因此你能够反复着色以适当地表现最后的颜色。这样的颜色深度很快就能消耗大量的存储空间。我们也应提到整个显卡内存与纹理内存。这里所要说的是，每个3D 显卡实际只有有限的内存，而这些内存要存储前端和后端缓冲区，Z 缓冲区，还有所有的令人惊奇的纹理。最初的 Voodoo1 显卡只有2MB显存，后来 Riva TNT提高到16MB显存。然后 GeForce 和 ATI Rage有32MB显存， 现在一些 GeForce 2 到 4的显卡和 Radeons 带有 64MB 到128MB 的显存。 这为什么重要? 好吧，让我们看一些数字… ></P>
<P 1280x1024分辨率和32位 Z- 缓冲跑起来。 好，屏幕上每个像素4个字节，外加每个像素4字节的Z-缓冲，因为都是每像素32位。我们有1280x1024 个像素 – 也就是 1，310，720个像素。基于前端缓冲区和Z-缓冲区的字节数，这个数字乘以8，是 10，485，760字节。包括一个后端缓冲区，这样是 1280x1024x12， 也就是 15，728，640 字节， 或 15MB。 在一个 16MB 显存的显卡上，就只给我们剩下1MB 来存储所有的纹理。 现在如果最初的纹理是真32 位或 4字节宽，那么我们每幀能在显卡上存储 1MB/4字节每像素 = 262，144个像素。这大约是4 个 256x256 的纹理页面。&nbsp; ></P>
<P 显卡没有现代游戏表现其绚丽画面所需要的足够内存。很明显，在它绘制画面的时候，我们每幀都必须重新把纹理装载到显卡。实际上，设计AGP总线的目的就是完成这个任务，不过， AGP 还是要比 3D 掀卡的幀缓冲区慢，所以你会受到性能上的一些损失。很明显，如果纹理由32位降低到16位，你就能够通过AGP以较低的分辨率传送两倍数量的纹理。如果你的游戏以每个像素比较低的色彩分辨率跑， 那么就可以有更多的显示内存用来保存常用的纹理 (称为高速缓存纹理) 。 但实际上你永远不可能预知使用者将如何设置他们的系统。如果他们有一个在高分辨率和颜色深度跑的显卡，那么他们将会更可能那样设定他们的显卡。 ></P>
<P ><BR>　　我们现在开始讲雾,它是某种视觉上的效果。如今绝大多数的引擎都能处理雾， 因为雾非常方便地让远处的世界淡出视野，所以当模型和场景地理越过观察体后平面进入视觉范围内时，你就不会看见它们突然从远处跳出来了。 也有一种称为体雾的技术。这种雾不是随物体离照相机的距离而定,它实际上是一个你能看见的真实对象，并且可以穿越它，从另外一侧出去 -- 当你在穿越对象的时候，视觉上雾的可见程度随着变化。想象一下穿过云团 -- 这是体雾的一个完美例子。体雾的一些好的实现例子是Quake III一些关卡中的红色雾，或新的Rogue Squadron II 之 Lucas Arts的 GameCube 版本。其中有一些是我曾经见过的最好的云--大约与你能看见的一样真实。 </P>
<P Alpha 测试和纹理Alpha混合的好时机。当渲染器往屏幕上画一个特定像素时，假定它已经通过 Z- 缓冲测试 (在下面定义)，我们可能最后做一些Alpha测试。我们可能发现为了显示像素后面的某些东西，像素需要透明绘制。这意味着我们必须取得像素的已有值，和我们新的像素值进行混和，并把混合结果的像素值放回原处。这称为读-修改-写操作,远比正常的像素写操作费时。&nbsp; ></P>
<P 这样效果会更加鲜明。 (Kyle's Lightsaber在 Jedi Knight II 中的效果)。 ><BR>&nbsp; <BR>　　每当厂商提供新的显卡时，我们可以得到硬件支持的更新更复杂的混合模式，从而制作出更多更眩目的效果。GF3+4和最近的Radeon显卡提供的像素操作，已经到了极限。 </P>
<P ><BR>　　用模板产生阴影效果，事情就变得复杂而昂贵了。这里不讨论太多细节（可以写成一篇单独的文章了），其思想是，从光源视角绘制模型视图，然后用这个把多边形纹理形状产生或投射到受影响的物体表面。&nbsp; </P>
<P ></P>
<P 通常有一些被游戏开发者偏爱的“足够好”的方法。如要更多的了解阴影，请参考 Dave Salvator的 3D 流水线一文。 ></P>
<P ><BR>　　现在我们开始讨论深度测试， 深度测试丢弃隐藏的像素，过度绘制开始起作用。过度绘制非常简单 – 在一幀中，你数次绘制一个像素位置。它以3D场景中Z（深度）方向上存在的元素数量为基础，也被称为深度复杂度。如果你常常太多的过度绘制， -- 举例来说, 符咒的眩目视觉特效，就象Heretic II，能让你的幀速率变得很糟糕。当屏幕上的一些人们彼此施放符咒时，Heretic II设计的一些最初效果造成的情形是，他们在一幀中对屏幕上每个相同的像素画了40次! 不用说，这必须调整，尤其是软件渲染器，除了将游戏降低到象是滑雪表演外，它根本不能处理这样的负荷。深度测试是一种用来决定在相同的像素位置上哪些对象在其它对象前面的技术，这样我们就能够避免绘制那些隐藏的对象。&nbsp; </P>
<P 换句话说，是什么在其他场景对象前面,或者隐藏了其他场景对象? 是深度测试作出的这个决定。&nbsp; ></P>
<P (或像素)位于彼此的后面，在渲染器获得他们之间没有一个快速的方法丢弃他们。对非Alpha混合的多边形分类排序( 在Z- 方向上)，首先渲染离你最近的那些多边形，优先使用距离最近的像素填充屏幕。所以当你要渲染它们后面的像素（由Z或者深度测试决定）时，这些像素很快被丢弃，从而避免了混合步骤并节省了时间。如果你从后到前绘制，所有隐藏的对象将被完全绘制，然后又被其他对象完全重写覆盖。场景越复杂，这种情况就越糟糕，所以深度测试是个好东西。 ></P>
<P ><BR>　　让我们快速的看一下抗锯齿。当渲染单个多边形时，3D 显卡仔细检查已经渲染的，并对新的多边形的边缘进行柔化，这样你就不会得到明显可见的锯齿形的像素边缘。两种技术方法之一通常被用来处理。 第一种方法是单个多边形层次，需要你从视野后面到前面渲染多边形，这样每个多边形都能和它后面的进行适当的混合。如果不按序进行渲染，最后你会看见各种奇怪的效果。在第二种方法中，使用比实际显示更大的分辩率来渲染整幅幀画面，然后在你缩小图像时，尖锐的锯齿形边缘就混合消失了。这第二种方法的结果不错，但因为显卡需要渲染比实际结果幀更多的像素，所以需要大量的内存资源和很高的内存带宽。 </P>
<P Salvator 的3D 流水线一文。 ></P>
<P ><BR>　　在结束讨论渲染技术之前，我们快速的说一下顶点和像素着色，最近它们正引起很多关注。顶点着色是一种直接使用显卡硬件特征的方式，不使用API。举例来说，如果显卡支持硬件 T &amp; L ，你可以用DirectX或OpenGL编程，并希望你的顶点通过 T &amp; L 单元 (因为这完全由驱动程序处理，所以没有办法确信)，或者你直接利用显卡硬件使用顶点着色。它们允许你根据显卡自身特征进行特别编码，你自己特殊的编码使用T &amp; L 引擎，以及为了发挥你的最大优势，显卡必须提供的其他别的特征。 事实上，现在nVidia 和ATI 在他们大量的显卡上都提供了这个特征。&nbsp; </P>
<P 那样，为顶点着色编写一次代码就可以在任何显卡上运行，这可是个坏消息。然而，因为你直接和显卡硬件交流，它为快速渲染顶点着色可能生成的效果提供最大的承诺。( 如同创造很不错的特效 -- 你能够使用顶点着色以API没有提供的方式影响事物)。事实上，顶点着色正在真的将3D 图形显示卡带回到游戏机的编码方式，直接存取硬件，最大限度利用系统的必须知识，而不是依靠API来为你做一切。对一些程序员来说，会对这种编码方式感到吃惊，但这是进步代价。 ></P>
<P 为动画模型变换网格是顶点程序的主选。 ></P>
<P 比如，使远处的纹理模糊，添加炮火烟雾, 产生水中的反射效果等。一旦 ATI 和 nVidia 能实际上就像素着色版本达成一致( DX9's 新的高级阴影语言将会帮助促进这一目标), 我一点不惊讶DirectX 和OpenGL采用Glide的方式-- 有帮助开始, 但最终不是把任何显卡发挥到极限的最好方法。我认为我会有兴趣观望将来。 ></P>
<P Closing...） ><BR>　　最终，渲染器是游戏程序员最受评判的地方。在这个行业，视觉上的华丽非常重要，因此它为知道你正在做的买单。对于渲染器程序员，最坏的因素之一就是3D 显卡工业界变化的速度。一天，你正在尝试使透明图像正确地工作；第二天 nVidia 正在做顶点着色编程的展示。而且发展非常快，大致上，四年以前为那个时代的 3D 显卡写的代码现在已经过时了，需要全部重写。 甚至John Carmack 这样描述过，他知道四年以前为充分发挥那个时期显卡的性能所写的不错的代码，如今很平凡 -- 因此他产生了为每个新的id项目完全重写渲染器的欲望。Epic 的Tim Sweeney赞同 -- 这里是去年他给我的评论:&nbsp; </P>
<P Unreal 被设计为软件渲染和后来扩展为硬件渲染。下一代引擎被设计为 GeForce 及更好的图形显示卡，且多边形吞吐量是Unreal Tournament的100倍。&nbsp; ></P>
<P ></P>
<P -- 祝福和诅咒 ><BR>　　那么什么是API? 它是应用程序编程接口,将不一致的后端用一致的前端呈现出来。举例来说，很大程度上每种3D显示卡的3D实现方式都有所差别。然而，他们全部都呈现一个一致的前端给最终使用者或者程序员，所以他们知道他们为X 3D显示卡写的代码将会在Y 3D显示卡上面有相同的结果。好吧，不管怎样理论上是那样。 大约在三年以前这可能是相当真实的陈述，但自那以后，在nVidia 公司的引领下，3D显卡行业的事情发生了变化。&nbsp; </P>
<P -- 而且人们仍然在这样做。跟Unreal一样，Age of Empires II: Age of Kings有一个优秀的软件渲染器 – 否则你将使用两种可能的图形API，OpenGL或者 DirectX 之一。OpenGL是一种真正的跨平台API (使用这种API写的软件可以在Linux，Windows和MacOS上运行。)， 而且有多年的历史了，为人所熟知，但也开始慢慢地显示出它的古老。 大约在四年以前，定义OpenGL驱动特征集一直是所有显示卡厂商工作的方向。 ></P>
<P ><BR>&nbsp; <BR>　　3dfx 创造了T- 缓冲。 nVidia 努力寻求硬件变换和光照计算。Matrox努力获取凹凸贴图。等等。 我以前说过的一句话，"过去几年以来，3D显示卡领域的事情发生了变化。"委婉地说明了这一切。&nbsp; </P>
<P DirectX。这受Microsoft公司控制，且在PC 和 Xbox 上被完美地支持。由于明显的原因，DirectX 没有Apple或者 Linux 版本。因为Microsoft控制着 DirectX，大体上它容易更好地集成在Windows里面。&nbsp; ></P>
<P DirectX 为你的 3D 显示卡支持一个新的特征，那么你需要游说微软，希望采纳你的愿望，并等待新的 DirectX发行版本。对于OpenGL，由于显示卡制造商为3D显示卡提供驱动程序，你能够通过OpenGL扩展立即获得显示卡的新特征。这是好，但作为游戏开发者，当你为游戏编码的时候，你不能指望它们很普遍。它们可能让你的游戏速度提升50%，但你不能要求别人有一块GeForce 3 来跑你的游戏。好吧，你可以这么做，但如果你想来年还在这个行业的话，这是个相当愚蠢的主意。 ></P>
<P ，在任何既定时间你容易确切地知道你能从显示卡获得的特征，如果一个特征不能获得，DirectX 将会用软件模拟它(也不总是一件好事情，因为这样有时侯非常的慢，但那是另外一回事)。对于OpenGL，你可以更加贴近显示卡的特征,但代价是不能确定将会获得的准确特征。></P>
<P 模型与动画，细节级别 ></P>
<P ><BR>　　你的角色模型在屏幕上看起来怎么样,怎样容易创建它们,纹理,以及动画对于现代游戏试图完成的`消除不可信`因素来说至关重要。角色模型系统逐渐变得复杂起来, 包括较高的多边形数量模型, 和让模型在屏幕上移动的更好方式。 </P>
<P ></P>
<P 个多边形的手的模型，有 300 个顶点(注意，在顶点和多边形之间通常并不是3个对1个的关系，因为大量多边形时常共享顶点 – 使用条形和扇形，你能大幅减少顶点数量)。如果动画有 10 幀，那么你就需要在内存中有300个顶点位置的数据。 总共有300 x 10 = 3000 顶点，每个顶点由x，y，z和颜色/alpha信息组成。你能看见这个增长起来是多么的快。Quake I，II和 III 都使用了这种系统，这种系统确实有动态变形网格的能力，比如使裙子摆动，或者让头发飘动。 ></P>
<P 骨架是你运动的对象)。 网格顶点和骨架本身相关，所以它们在模型中的位置都是相对于骨架，而不是网格代表每个顶点在世界中的位置。因此，如果你移动骨架，组成多边形的顶点的位置也相应改变。这意谓着你只必须使骨骼运动，典型情况大约有 50 个左右的骨架—很明显极大地节省了内存。 ></P>
<P ><BR>　　骨骼动画的另一个优点是能够根据影响顶点的一些骨架来分别“估价” 每个顶点。例如，双臂的骨架运动，肩，脖子而且甚至躯干都能在肩中影响网格。当你移动躯干的时候，网格就活像一个角色一样移动。总的效果是3D角色能够实现的动画更加流畅和可信，且需要更少的内存。每个人都赢了。&nbsp; </P>
<P ></P>
<P -- 说,"我不关心动画想要对这块骨架所做的事情，我想要让它指向世界中的一个特定点"。这很棒。你能让模型着眼于世界中的事件，或者使他们的脚在他们站着的地面保持水平。这一切非常微妙，但它可以帮助带给场景附加的真实感。 ></P>
<P 我需要把这个特别的动画用於模型的腿，而一个不同的携枪或射击动画在模型躯干上播放，且那家伙（角色）叫喊的不同动画效果在模型的头部播放"。非常妙。Ghoul2 ( 在Soldier of Fortune II: Double Helix and Jedi Knight I: Outcast中使用了Raven的动画系统 ) 拥有所有这些好东西，且特别被设计为允许程序员使用所有这些忽略能力。这对动画的节省像你一样难以相信。像你一样的动画上的这次救援不相信. Raven有一个角色行走的动画和一个站立开火的动画，并在它同时行走和开火形下把这两个动画合并，而不是需要一个动画表示角色行走并开火。 ></P>
<P Skeletons in the Closet ><BR>　　先前描述的效果可以通过具有层次的骨骼系统来完成。这是什么意思呢？意思是每块骨架实际上的位置相对于它的父亲，而不是每个骨架直接位于空间中的地方。这意谓着如果你移动父亲骨架，那么它所有的子孙骨架也跟着移动，在代码上不需要任何额外的努力。这是让你能够在任何骨架层次改变动画，而且通过骨骼其余部分向下传递的东西。&nbsp; </P>
<P -- 但那时你不能忽略一个骨架并且预期它工作。你所看到的只是身体上的一个骨架开始了新动画，除非你实现了某种‘向下传递信息’的系统，否则在该骨架下面的其它骨架保持原来的动画。首先由一个层次系统开始，你就自动地获得这些效果。&nbsp; ></P>
<P -- 混合是一个微妙的事情,但如果正确的运用，它真的有些差别。 ></P>
<P ><BR>　　反向运动学 (IK) 是被许多人们丢弃的一个专业术语，对它的真实含义没有多少概念。IK 是如今游戏里面一个相对比较新的系统。使用 IK ，程序员能够移动一只手，或一条腿, 模型的其余关节自动重新定位，因此模型被正确定向。而且有模型的关节新位置的其馀者他们自己，因此模型正确的被定向。比如，你将会说,"好，手 , 去拾起桌子上的那个杯子"并指出杯子在世界中的位置。手就会移动到那里，且它后面的身体会调节其自身以便双臂移动，身体适当弯曲，等等。 </P>
<P IK 工作的次序相反。想像一只手，手附着在手臂上，手臂附着在身体上。现在想像你重重地击中了身体。通常手臂像连迦般抽动，且手臂末梢的手随之振动。 IK 能够移动身体，并让其余的四肢自己以真实的方式移动。基本上它需要动画师设定每种工作的大量信息 -- 像关节所能通过的运动范围，如果一块骨架前面的骨架移动，那么这块骨架将移动多少百分比，等等。 ></P>
<P IK 解决办法需要一个层次骨骼系统而不是一个模型空间系统 -- 否则它们都耗时太多以致无法恰当地计算每个骨架。 ></P>
<P ><BR>　　最后，我们应当快速讨论一下与缩放模型几何复杂度相关的细节级别（LOD）系统(与讨论MIP映射时使用的LOD相对照)。假定如今绝大多数PC游戏支持的处理器速度的巨大范围，以及你可能渲染的任何给定可视场景的动态性质(在屏幕上有一个角色还是12个？)， 你通常需要一些系统来处理这样的情况，比如，当系统接近极限试图同时在屏幕上绘制出12个角色，每个角色有3，000个多边形,并维持现实的幀速率。 LOD 被设计来协助这样的情景中。最基本的情况，它是在任何给定时间动态地改变你在屏幕上绘制的角色的多边形数量的能力。面对现实吧，当一个角色走远，也许只有十个屏幕像素高度，你真的不需要3000个多边形来渲染这个角色 -- 或许300个就够了，而且你很难分辨出差别。&nbsp; </P>
<P LOD 系统将会需要你建立模型的多个版本，而且他们将会依靠模型离观察者的接近程度来改变屏幕上的LOD级别， 以及多少个多边形正被同时显示。更加复杂的系统实际上将会动态地减少屏幕上的多边形数量，在任何给定时间，任何给定的角色，动态地 -- Messiah和Sacrifice包括了这种风格的技术，尽管在CPU方面并不便宜。你必须确信，与首先简单地渲染整个事物相比，你的 LOD 系统没有花较多的时间计算出要渲染那些多边形（或不渲染）。 任一方式都将会工作，由于如今我们试图要在屏幕上绘制的多边形数量，这是件非常必要的事情。注意， DX9 将会支持硬件执行的自适应几何缩放(tessellation)。 ></P>
<P -- 当你在为一个模型做一些你在现实生活中不能做到的事情的动画时， 你倾向于这样做 -- 举例来说，你确实不能向后弯腰，或像Mortal Kombat 4中的Lui Kang那样在行进的脚踏车上踢腿，通常运动捕捉这时候就出局了! 通常运动捕捉动画 -- 实际上视频捕捉活生生的演员贯穿于你想在屏幕上所看到的动画 -- 是得到逼真的东西的方式。真实感的东西能使一款普通游戏看起来很棒，而且能掩饰许多事情。比如 NFL Blitz，屏幕上的模型大约有 200 个多边形。它们在静止站立时看起来可怕的斑驳，一旦这些模型跑动起来它们就有快速流畅的动画，模型自身的许多丑陋消失了。眼睛容易看见的是 '逼真的' 动画而不是模型自身的结构。 一个不错的模型设计师能够掩饰大多数模型缺陷。 ></P>
<P   ></P><P 物理，运动，效果 ></P>
<P ><BR>　　常常在建立一个含有任何3D成分的游戏时，你最终要试图建立一个将会在里面产生游戏动作的3D环境。 不知怎么的游戏开发者提供了一个建立这种环境的方，它容易修改，有效率，有较低的多边形数量，对于游戏既容易渲染又容易运用物理学。很简单，对吗？当做这个的时候我用左手在做什么？当做这的时候 , 我对我的左手做什么? 是的。不错。&nbsp; </P>
<P Studio Max，建造游戏世界是不同于建造内部或外部世界的模型的尴尬。你有三角形数量问题 -- 任何给定的渲染器一次只能渲染这么多的多边形，这对于天才的关卡设计师来说永远都不够。不知这些，你也只能每个关卡存储预定数量的多边形，所以即使你的渲染器能够在视野中处理250，000个多边形，即使你只能在合理数量的空间中存储500，000个多边形，那么取决于你怎么处理它，最后你的关卡价值像两个房间那么小。不好。&nbsp; ></P>
<P -- 最好足够灵活，允许游戏引擎需要的各种事物 – 比如，在世界中放置对象，在进入游戏以前对关卡的适当预览，以及准确的光照预览。在他们花三个小时预先处理关卡来产生一个 '引擎可消化的' 格式之前 , 这些能力允许游戏开发者看到关卡将在游戏中看起来怎么样。 开发者需要关于关卡，多边形数量，网格数量等等的相应数据。 他们需要一个合宜而友好的方式能够让世界有纹理背景图，容易存取多边形数量缩减工具，如此等等。这个清单可以继续列下去。&nbsp; ></P>
<P 但即使3D Max需要对它的功能有一些任务特定的扩展来有效率地完成关卡建造工作。甚至可能使用关卡建造工具，像QERadient（见下图），而且把它的输出重新处理成你的引擎能够解释的格式。 ></P>
<P 别烦扰… ><BR>　　回想一下我们在第一部分讨论的BSP (二叉空间分割) 树，你也可能听说过潜在可视集合（PVS）这个术语正被四处谈论。两者都有相同的目标，不去探究涉及到的繁杂的数学，它是一种把世界分解为你能从世界任何给定位置看见的墙壁的最小子集的方式。在实现时，它们仅仅返回你能看见的那些，而不是那些隐藏在可能被遮挡的墙壁后面的。你能想象出这给软件渲染器带来的好处，渲染的每个像素(可能是这样的情形)极为重要。它们也按从后到前的顺序返回那些墙壁，在渲染时这是很方便的，因为你能够在渲染次序中确定一个对象的实际位置。&nbsp; </P>
<P 树最近正不受欢迎，由于它们的一些古怪，而且因为我们从当今3D显示卡获得的像素吞吐量，再加上Z缓冲像素测试，BSP 常常成了一个多余的过程。它们在计算出你在世界的确切位置和正在你周围的几何物体方面是便利的，但常常有比BSP树更好而且更直观的方式来存储这些信息。&nbsp; ></P>
<P ></P>
<P ><BR>　　既然我们已经在内存中得到了世界的结构，我们必须防止我们的角色从里面掉落出去，并处理地板，斜坡，墙壁，门，以及移动平台。加之，我们必须正确地处理地心引力，速度变化，惯性，和放置在世界里面的其它对象的碰撞。这被看作是游戏物理学。而且在我们进一步深入讨论之前，我想现在就在这里消除一个神话。任何时候你在世界中看见物理，或者任何人在一个复杂的游戏环境中宣称“真实的物理”，很好，它是BS。超过80%的建造一个有效率游戏物理系统的精力花在简化用来处理世界中对象的真实方程式上面。甚至那时，你时常忽略什么是‘真实的’，并创造一些‘有趣的’东西，毕竟，这是目标所在。 </P>
<P -- 你看不见身体像真实生活中那样倒在桌子上面或者边缘 -- 而且地心引力它本身甚至可能是可变的。 面对现实吧，在真正的世界中，空间中的飞船不像二战飞行战斗员在它们的表面操作那样实行。在空中，全部是力和反作用力，力在重量点周围作用，等等。不像 X-Wing中的Luke Skywalker那样啸叫。尽管那样做更加有趣！&nbsp; ></P>
<P – 我们决定对它们进一步要做的取决于我们和我们的游戏需要。 ></P>
<P ><BR>　　如今绝大多数的游戏引擎建造有某种效果产生器，这允许我们表现出有洞察力的游戏者期盼的所有可爱的吸引眼球的东西。然而，效果系统幕后所进行的东西能够急剧影响幀速率，所以这是我们需要特别关心的地方。如今我们有很棒的3D显示卡，我们能够传送大量的三角形给它们，而且他们仍然要求更多的三角形。并不总是那样。 在Heretic II，使用它的可爱的软件渲染模式，由于他们漂亮的符咒效果，Raven遇到了相当严重的过度绘制问题。回想当你在屏幕上绘制相同的像素超过一次时，过度绘制就发生了。当你有许多效果正在进行，按其性质你有许多三角形，多个三角形可能相互堆叠在彼此上面。结果是你有许多重复绘制的像素。加上Alpha，这意味着在重新绘制之前你必须读取旧像素并和新的像素混合，这会消耗更多的CPU时间。&nbsp; </P>
<P II的一些效果能说明这点，我们在一幀里对整个屏幕重复绘制了四十遍。很惊讶，是吗？因此他们在效果系统里面实现了一个系统采样在过去30幀的幀速率，如果速度开始减慢，它就自动地缩减任何给定效果绘制的三角形数量。这样使主要工作完成了，幀速率保持住了，但一些效果看上去很丑陋。&nbsp; ></P>
<P ></P>
<P -- 比如喷出的一团团烟雾。它们面向照相机自动而典型地旋转，缩放，改变它们的透明级别，因此它们能够随着时间淡出。我们容易看到大量的粒子，但我们却限制精灵的数量—尽管两者之间的真正不同如今正在模糊。将来，特别是在 DX9 和更加高级的图形硬件表面以后，我们可能看到更多的人们使用过程shader来产生跟粒子系统相似或者更好的效果，创造非常棒的动画效果。&nbsp; ></P>
<P -- 大量的三角形。当你沿着系统向上时，你对图原的定义随着变化。比如说，顶层的游戏程序员不想考虑处理个别的三角形。他仅仅想说,"这个效果在这里发生" 并让系统以一种黑盒方式处理它。因此对于他来说，一个效果图原就是‘让我们在世界的这点持续这么长时间用这样的引力产生一束粒子’。在效果系统内部，它可能认为一个效果图原是它那时正在产生的每个单独的效果，像一组遵循同样的物理学规则的三角形—然后它传送所有这些单独的三角形到渲染器进行渲染，因此在渲染器层次，图原就是一个单独的三角形。有一点困惑，但你知道总的思想了。&nbsp; ></P>
<P   ></P><P 声音系统，音频APIs></P>
<P   ></P><P -- PC声卡制造商创新公司（Creative Labs）的Sound Blaster Live！ 从旧的时间个人计算机声音卡片制造业者有创造力的中心. 多年来创新公司已经为DirectX提供了他们的EAX声音扩展，并且他们是发起新的OpenAL（开放音频库Open Audio Library）的创立者。就如同OpenGL是一个图形API一样，OpenAL，像它起来听一样，是一个声音系统的API。OpenAL 被设计为支持大多数通常声卡的许多特征，而且在一个特定的硬件特征不可得时提供一个软件替代。></P>
<P OpenAL，我向创新公司的Garin Hiebert询问了其定义: ></P>
<P 这里借用我们的 " OpenAL 规格和叁考" 的一个定义: ></P>
<P 是对音频硬件的一个软件接口,给程序员提供一个产生高质量多通道输出的能力。OpenAL 是在模拟的三维环境里产生声音的一种重要方法。它想要跨平台并容易使用，在风格和规范上与OpenGL相似。任何已经熟悉OpenGL的程序员将发现OpenAL非常熟悉。 ></P>
<P API能容易地被扩展适应插件技术.创新公司已经把EAX支持加入到这套API了，程序员可以用来给他们的声音环境增加复杂的反响，比赛和障碍效果。></P>
<P Knight II: Outcast 一样，连同Eagle 世界/声音特征编辑器,Soldier of Fortune II 以这个新系统为特征。什么是Eagle？ 在介绍这个以前，让我们讨论一些其他的系统，并定义一些声音术语。 ></P>
<P Blaster Live！系列，或者老的A3D声卡）。它非常像一个API前端，捆绑了一些额外的特征在里面。 在其他事物当中Miles让你存取一些事物像MP3解压缩。 它是很好的解决方案，但像任何事一样，它花费金钱并是你的代码和硬件之间的额外一层。虽然对於快速的声音系统制造，它非常有用，而且他们有段时间了，因此他们的确精通自己的业务。></P>
<P ></P>
<P III 里面的A3D 代码做了这些事情，关闭这些选项通常能够提高幀速率。Tribe 2 是这种弊病的另外一个受害者。关闭3D声音选项则你的幀速率立即好转，这在你考虑Tribes世界有多大和你能看见多远时有意义。 ></P>
<P ></P>
<P 这是一个编辑器，允许多数第一人称射击游戏地图设计者将他们的地图导入到这个工具，然后构造简化的几何形体来为实际游戏引擎中的EAX代码产生一个声音地图。其思想是你不需要一个真实的图形地图的复杂几何形体来模拟声音环境。你也能够给产生的简化地图分配声音物质，这样声音环境就能够动态地改变。我亲眼目睹了这在Soldier of Fortune和Unreal Tournament上的示范，确实相当引人注目。 我这在财富和 Unreal 巡回赛和它的军人上真的对示范是证人相当醒目. 当你跳入水中时，听到所有的声音改变，这是一个非常令人沉浸的经历。 ></P>
<P ></P>
<P — 尽管在PlayStation 2和Xbox上，硬件相当不错。我说的限制，仅仅是指扩展，而不是它所能够做的。我一点也不会感到惊讶看到这些游戏机上的游戏很快支持杜比数字5.1（Dolby Digital 5.1）输出。Xbox ，由于它的 MCP 音频处理器，能够将任何游戏音频编码为5.1，并且游戏不需要特别编码就能利用这个特征。杜比（Dolby）把ProLogic II 带到了 PS2 上，并与Factor 5合作为GameCube游戏实现了ProLogic II。在 Xbox 之上，Halo, Madden 2002 和 Project Gotham Racing等游戏都有5.1杜比数字音频内容。DTS最近也为 PS2 游戏开发者发布了SDK，为这个平台上的游戏带来了降低了比特率的DTS音频版本。></P>
<P ></P>
<P   ></P><P 如果你总想听到16种可能的声音，但你不知道声音卡是否能够处理，那么你回到了尝试和试验的道路上 — 就是你自己用软件混合。这实际上是Quake III声音系统的工作方式，但提一个问题:"Quake III是为A3D和Sound Blaster Live！声卡世界发布的，这比以前更加标准化，为什么还这样做？" 这是个好问题。实际上Quake III的声音系统几乎每行代码都和Quake II中的声音系统一样。而且Quake I，甚至Doom也是这样。你想一想，向上直到 A3D 声卡和 SB Live! 声卡，许多年来声音系统的需求没有真正地改变过。两个扬声器，二维方向，音量简单地随着距离减小。从Doom一直到Quake III没有发生太大变化。而且在游戏行业中，如果不是迫不得已，别理会它。></P>
<P 90% 的声音情形中，依靠软件混合对你的幀速率没有真正发生太多不同。当DirectSound在一些狂热的编码者眼中甚至还不是一丝光线时，Doom引擎就已经产生了。它从来没有得到更新过，因为它从来就没有真的需要更新。 ></P>
<P SoundBlaster Live！声卡的一些聪明特征，例如房间的回声特性: 一块石窟，或一个礼堂，一个巨穴, 一个足球体育馆等。而且你真的应该使用由硬件提供的混合器，毕竟，那是它存在的目的。这种方法的一个不足之处是程序本身时常无法获得混合结果，因为混合是在声卡内部完成而不是在主存。如果由于某种原因你需要看到产生的音量，你是运气不好。></P>
<P Tracks in Games（游戏中的音轨）><BR>　　我们没有过多的谈到游戏中的音乐生成。传统的有两种方法，一种是简单的音乐 .wav 文件(或同等物)。它被预先制作做好，准备运行，和最小忙乱。然而，这些在内存和回放时间方面很昂贵。第二种方式用预设的样本编码MIDI音轨。这时常比较节省内存，但缺点是必须同时把一些声音混合在一起，因而会把声音通道用光。 </P>
<P   ></P><P href="http://www.fatman.com/" target=_blank>www.fatman.com</A>) 就是一家这样的公司。音乐可能比其他别的东西更加容易外包，这是他们存在的方式。 </P>
<P ：1的声音样本压缩，然而在送到声音卡之前只花费CPU很少的时间解压缩。当我在Rave Software工作时，在Star Trek Voyager: Elite Force 中，我们设法用MP3在一张CD上面完全支持三种语言，仍然为较多的图形留有空间。主要地，我们 MP3 只用于非玩家角色（NPC）的语音，由于游戏的全部音频效果MP3流和动态解压缩超出了硬件的处理能力，虽然在将来这是肯定可能的。比较新的格式，如来自 Dolby 的 AAC 和来自微软的WMA，以将近两倍MP3的压缩率提供了相等或者更高的音频质量（实际上一半的比特率），可能应用到将来的游戏中。 ></P>
<P ></P>
<P 网络和连线游戏环境></P>
<P Vs TIE Fighter的家伙们题为“淹没在Internet” 的演讲，全是关于让网络游戏实时地在Internet上工作的东西。他们选择那个题目是多么的正确啊。当它开始处理数据包的丢失，乱序，潜伏（一个数据包发送到它的目的地所花的时间）等等时，它确实淹没了。然而它是可能的。对于Internet需要一些聪明和经验，但它是肯定可能的。看看今天大量的连线游戏，从Quake III，Unreal Tournament，Counter Strike一直到EverQuest和Ultima Online。 ></P>
<P ></P>
<P ></P>
<P   ></P><P 在Web网络上有大量关于这些协议的深奥的技术资讯。实际上，在Cisco网站上有一些极好的TCP/IP指导。我们将在较高层面上介绍一些TCP/IP的基本知识，目的是让你更好地了解使用这些标准协议的网络游戏设计者面临的挑战。 ></P>
<P 这实在象是在一张明信片上写下你要发送的，贴上邮票，写上地址，塞进一个邮箱，它就送走了。 ></P>
<P ></P>
<P ></P>
<P UDP--他们不能保证有序或可靠送达，但它确实很快—或者结果是至少通常比TCP/IP更快。现在我们了解这些了，接下来呢？></P>
<P UDP 明显的是快速响应游戏的方式，我们将必须自己处理数据包的丢失和乱序。边而且这是技巧所在。不用说出太多的代码秘密，我就能说有方法。作为开始，有客户端预言，一个被谈论得相当多的词语。当你作为一个客户端连接到一个大的服务器，但是不能连贯地看见来自服务器的更新，客户端预言开始起作用了。正在你的电脑上运行的游戏部分看着你正给它的输入，并在缺乏来自服务器的任何弃绝信息的情况下，对它认为将继续进行的事情作出‘最好的猜测’。它将会显示被猜测的数据，然后当它得到来自服务器的世界的最新状态时，改正它自己，如果需要。你可能会对这个方法的效力感到惊讶。大体而言，大部分时间数据包不容易丢失—大多数时候是一秒的几十分之一，这种情况下游戏没有太多的时间偏离服务器实际上认为正在发生的事情。偏离确实会随着时间变的比较大，大多数游戏里面有一个超时功能，当出现很长时间没有来自服务器的联络时就停止游戏。 ></P>
<P -- 第一人称射击游戏不需要这样有效的客户端预言，因为它多数情况下仅仅处理“我在哪儿，我是否要射击？”。在第三人称游戏中，你必须更加精确，因此你能够正确地预测你的角色正在播放的动画，并且动作流畅。在这种情形中流畅的动画是完全必要的。Heretic II在这方面有很大的问题，并且是当它开始网络编码时Raven一直不得不处理的最困难的事情之一。 ></P>
<P 调制解调器，第一跳典型的延迟是100ms，这已经严重地增加了你到网络上任意一台游戏服务器的潜在连通时间。对于宽带连接比如像DSL，第一跳的延迟时间多半是20ms。使用Windows中一个叫做TraceRoute（TRACERT.EXE）的命令行程序并指定一个目标IP地址或者域名，你能够找出你的第一跳的连通时间。仔细观察第一跳，因为这几乎总是你到你的ISP的网络连通时间。并且观察你在你的ISP的网络内部用了多少跳直到你看见在一个给定跳上列出的一个不同的域名。 ></P>
<P ></P>
<P   ></P><P ></P>
<P ></P>
<P   ></P><P ></P>
<P   ></P><P 脚本系统></P>
<P -- 叙事者，倒叙，等等 – 但通常是使用实时情景的人们和事件来完成。当然，游戏是不同的，游戏开发者在他们平常的FPS中不应该做太多的倒叙，因为通常会需要载入新的环境或者关卡，以及新的纹理和/或模型。所有这些额外的处理和渲染能影响到主要的游戏序列的性能。你可以重用已经存储在内存里面的场景元素来倒叙，但那样会看上去明显比较粗陋。></P>
<P 的Star Trek Voyager: Elite Force广泛利用了脚本序列产生游戏中的事件和使用游戏引擎本身的剪辑场景。></P>
<P 3D 图形卡还比较简单的时候，剪辑场景通常使用高端3D工作站制作，得到的3D动画然后被记录为一个数字视频文件，以流式文件存储在CD-ROM。你从剪辑场景的漂亮图形画面回到真实游戏的相对粗陋的3D画面，这是相当令人不愉快的失望的事情。但像Half-Life 和 Star Trek Voyager : Elite Force这样的游戏很好地利用了它们自己的引擎产生所有的剪辑场景，结果是剪辑场景和游戏之间的过渡更加平滑。></P>
<P ></P>
<P C，尽管以一种非常简单的形式。 大量这种类似“if this，then do that”的东西。大部分脚本倾向在范围内是相当线性的—意味着它通常由许多在次序上彼此相接的命令组成。在世界中移动角色A指向B。当完成以后，让他讲话，完成以后，移动他指向C。相当简单的事情。></P>
<P ></P>
<P Trek Voyager: Elite Force中面临的一个很大的问题是这样的情形，使用者可能会想要把一个角色从一条船的某个地方带到另外一个地方，但是从A点到B点的路径可能会随着每次游戏根本地改变。举例来说，他们需要让Munro(你所扮演的游戏主要角色)从发动机舱室到输送舱。 不幸的是由于游戏的非直线性，在事件到达这一点以前你可能已经破坏了涡轮升降机，或者也许 Jeffries 管被损害不能通过。假定当脚本开始的时候我们不知道世界的状态，我们不得不为几乎各种可能发生的事情编写脚本以便适用于这些‘如果。。。怎么办’的情形。而且它仅仅从那里变得更加糟糕。我们能建立的一些情形提供了如此多可能的组合情形，以致于为了一个满意的结论而准确测试每一个可能发生的事情几乎是不可能的。请和在SiN, Star Trek Voyager : Elite Force or Deus Ex中工作的任何人谈谈。QA部门传统地憎恨这些类型游戏，因为这已经使他们的工作比以前更加困难了 50 倍。 ></P>
<P   ></P><P Dose关于脚本系统的论述><BR>　　去年底我访谈了Jim Dose--Ritual的前任开发者，现在是Id Software的一个开发者，Doom3脚本系统（和其他一些事情）的设计者。尽管这次访谈有些久了，但仍然是很有洞察力。 </P>
<P 与包含设计者传统想要使用的所有特征相反): ></P>
<P   ></P><P s 'Alice'.重写了脚本系统。></P>
<P Raven已经看到这个恰好在他们的ICARUS系统中出现了。ICARUS 实际上是一种与Jim在上面描述的相同种类的脚本系统，而且负责在Star Trek: Voyager: Elite Force中的所有脚本事件。它在Soldier of Fortune II和Jedi Knight II : Outcast中被重复使用。为了解决系统需要处理的新问题，这些问题在最初的实现中没有被预见/不需要，脚本系统的很多部分已经被重新编写了。></P>
<P   ></P><P ></P>
<P   ></P><P Max或者Maya 这样的程序产生的动画区分开来。></P>
<P   ></P><P (武器系统)。></P>
<P 现成产品与定做的游戏引擎设计工具，游戏特定主题></P>
<P ></P>
<P   ></P><P ></P>
<P   ></P><P ></P>
<P ></P>
<P 重新创造车轮到某种程度 b） 陷入那些建造现成工具的人们已经遇到过的相同的问题之中，只是他们已经解决了这些问题。时常人们建造一个单一特定的工具花费了相当的时间和努力，并产生了一个远远超出你自己的个人需求的工具。还有，他们有代表性地收编了一些你或者认为是没有用的，或者没有时间自己实现的特征。加上他们典型地有吸收特征你或会没有想有用,或没有时间实现你自己. 这是第三方软件无法争辩的。></P>
<P   ></P><P ></P>
<P Gribb，Rave Software的技术带头人，对‘现成的工具’和‘自己动手建造’的问题是这么说的： ></P>
<P 自己开发的工具有能够根据自己产品的需要进行定制的优势，你拥有代码，可以修正任何错误或者增加任何的改进。 ></P>
<P  ></P>
<P Gribb阐述这个主题： ></P>
<P 我是支持发布几乎所有的源代码。我认为我们没有任何来自我们的竞争者的害怕的事情，合法的业务不会想到窃取知识产权。游戏迷，业余游戏制作者，以及游戏的普及都能够从发布的源代码获益。" ></P>
<P   ></P><P ></P>
<P II时他们决定做的第一件事情之一就是为用鼠标使用第三人称照相机尝试和找出一个直观的方法。在这以前，大多数游戏采用的是Tomb Raider风格的照相机（第三人称预兆的追逐）他们发现这时常不能正确地工作，在很多情形下会给玩家带来挫折。照相机时常会得到任意的视角，如果可能的话移动相机，而且有时改变玩家的方向。 ></P>
<P ></P>
<P War中看到。这款游戏有着如此多的模式，按键，等等，仅仅熟悉和操纵游戏都不可能。></P>
<P 我不是说一款游戏不应该有灵活性—Soldier of Fortune必定有许多可能的按键设定。但通常，当你认为它们大多数实际上都是不需要的时候Quake引擎有一个很好的方式。是的，你可以选择你想要使用什么武器，但你不是必须这样。游戏将会自动地为你那样做。这就是灵活性和过度设计之间的不同。如果游戏需要你按下某个键来选择一个武器，那将会有问题。你理解这个了吗？ ></P>
<P -- 一款游戏时常将会根据玩家觉得他们对事件或者主要角色有多少控制而获得成功或失败。如果控制被改变，重新定向，或仅仅简单地从他们哪儿移除，它能导致游戏自身缺乏参与，不用说，那是一件很糟糕的事情。在这上面花费时间并让它保持简单，将会有巨大的帮助。></P>
<P ></P>
<P "游戏" 部份。这个部分使用所有的其它技术让一些事物显示在屏幕上，到处移动，让它对你产生反应并且让你对一些事物产生反应。这个系统有许多方法，但现在我将紧扣Quake的方法因为那是我最熟悉的。></P>
<P -- 实体也可能是其他的事物。基本上它是游戏在任何给定时间需要知道的任何事物，例如让事情继续进行的定时器，模型的碰撞检测盒，特效，模型，游戏玩家，等等。></P>
<P off we go。典型地实体是为了返回到游戏早先的状态而被存储和装载的那些东西。通常在装载过程中使用的方法是把游戏地图装载进来，好像你正在重新开始一个关卡一样，然后装载所有存储的实体，这样他们就返回到游戏存储时它们的状态。Voila，即刻返回一个存储的游戏。当我理解Heretic II的方法时这并不是那么的容易—装载/存储几乎比其他任何事情带给我的问题还多，特别是在协作模式。 ></P>
<P   ></P><P ><BR>　　脚本：照相机可以沿着一条设定的路径前进 <BR>　　游戏时间：照相机有必须要遵循的定义的行为 </P>
<P 嗯，我将仅仅跟随主要的角色"是不够的。这意谓你也可能需要让照相机穿过墙壁，或让它按一些方式移动以致甚至引起一些胃的恶心。让它沿着一些定义的上下运动路径前进也有益处，如同任何玩Descent游戏超过一小时的人可以告诉你的一样。身体和头部习惯于上下是一个静态的变量，并当它不是时，他们不喜欢它。制作Quake 1的 Mike Abrash，曾经告诉我即使当它被定义，他仍然处理 的麦可 Abrash 地震 1,曾经告诉我即使当它被定义,他仍然从他们正制作的游戏感到运动恶心。他提到，对于他来说，离开制作Quake 1一年时间才让他的胃安定下来。啊哈，我们所作出的牺牲。></P>
<P 这是在世界中影响其他的物体，而且使他们对给定情形产生反应的东西，--比如说被射击。通常武器系统由许多不同的类型组成；攻击扫描，基于飞弹的，以及范围形式。></P>
<P ></P>
<P   ></P><P ></P>
<P — 如，在游戏的一幀中多次使用它们 -- 对于今天许多游戏的速度下降是有责任的。在Jedi Knight II：Outcast，他们的光刀战斗已经遇到了这个问题，因为他们不仅需要知道光刀是否击中了某处的什么和它现在的位置，而且对于它们之间的所有点都得这样，他们对光刀做了多次追踪。 ></P>
<P   ></P><P 人工智能和导航（路径发现）></P>
<P 好…劳拉的胸部是多么的有弹性...既然我们现在已经能够渲染出非常真实的乳房，中心就开始转移到我们实际上用那些多边形做什么了（即玩游戏）。因为它给你提供实际玩游戏的刺激作用和参与游戏世界中正在进行的事情，所以人工智能在这个领域非常关键。></P>
<P 一直到创造基于小组的策略游戏，这些游戏和你交互，并且实际上在你玩的时候向你学习。人工智能包含了许多规则，如果你（作为一个游戏开发者）没有花费足够多的时间让它正确地工作，它会反过来在你屁股上咬一口。所以让我们谈论一些哪些规则？这样你能更好地理解人工智能系统会确实是多么的复杂。为了避免法律上的纠纷，我们将使用一个假设的游戏而不是一个真实的游戏作为例子。></P>
<P ></P>
<P — 比如它在守卫一扇门，并且在这个区域小巡逻，NPC也必须有‘世界意识’。游戏设计者需要决定NPC的人工智能将如何看见世界，和它的知识范围。你将会仅仅说“计算机知道正在进行的每件事情” 吗？这通常被认为是一件糟糕的事情，因为非常明显计算机能够看见和听见你不能看见和听见的事情，这被当成是在作弊。不是一种有趣的经历。或者你将模拟他的视野，这样他只能够对他能看见的事物作出反应吗？当有墙壁出现时这里就有问题了，因为你开始进入那些我在第九部分提到的‘追踪’例程，看看NPC是否试图对被墙壁挡住的人作出反应。这是一个很明显的人工智能问题，但是当涉及到门和窗户时，这个甚至变得更加复杂了。 ></P>
<P   ></P><P ></P>
<P ></P>
<P   ></P><P --- 世界导航><BR>　　快速，准确的世界导航( 也叫做路径-发现) 近来已经成为游戏开发者的圣杯。 让它看起来非常信服是一件非常困难的事情。你需要有局部世界的地理知识—墙壁的位置，台阶，悬崖和建筑物等的边缘。你也需要世界中的对象的知识—比如家具，汽车，尤其是其他人的位置。真正最后的因素是问题所在，一会儿我们将回到这一点上。 </P>
<P ></P>
<P ></P>
<P Realms的Jess Crable，现在为Duke Nukem Forever工作，如是说： ></P>
<P 导航在许多方面是个巨大的挑战，主要是当游戏中有大量正在发生的事情和一些非计划性的东西，比如障碍。为了避免和（或）真实地对非计划性的障碍物导航（例如像另外的AI），AI需要很好地知道正在它周围发生的事情。比较而言另外一个巨大的挑战就是真实感。如果AI正在表现玩家在实际生活中看到的一些东西，比如说一个人，或者一条狗， 那么让它看上去真实可信就更加困难。"></P>
<P NPC 从他在世界中的位置，移动到他认为听到声音的地方，但你不能盲目地按照这个执行并期望得到看起来不错的结果。这种性质的路径倾向于非常特定于一个给定的目的。当你沿着走廊从一个房间跑到另外一个房间时，它很好，但如果你试图指导他穿越一个巨大的房间时，路径结点方法容易最终得到一些看起来很奇怪的发现路径。这些路径也不是动态的。因为他们被预先建造，他们不容易考虑到世界的任何动态变化。桌子可能有被移动过了，椅子被破坏了，墙壁被摧残，当然，人们会移动。这就是局部导航不同于世界导航的地方。它必须考虑局部世界并导航NPC在里面穿越。它必须知道周围的环境，存在哪些可以选择的路径，并决定选择哪一条。 ></P>
<P   ></P><P Chris Reed—Soldier of FortuneII使用名为LICH的AI系统的现在的负责人—如是说： ></P>
<P 此刻我能告诉你，我们在平滑移动上正有着最大的困难。在一个多丘陵的长满草的丛林中试图让五个角色在彼此附近行走是一个非常困难的问题。让底层系统完美是重要的，因为除非角色在较低层次上（避免墙壁，适当的动画）看起来真实，他们不能够有效地表达任何较高层次决定的智能。由于这个单独的原因，动画和底层的移动是最重要的和最难实现的。它确实需要完美。"></P>
<P ></P>
<P of Fortune中的AI就是这样的例子。他们受到了指责，因为坏家伙没有以适当的方式对刺激作出反应。当他们明显应该这样做的时候，敌方NPC不扫射，或者不逃跑。部分问题是他们没有扫射敌人NPC的动画，或者让他们往回跑，因为空间的问题。因此世界上所有最伟大的AI代码都不能够解决这个问题。这是所有要考虑的重要事情。 ></P>
<P Chris Reed关于AI‘感觉’的一些评论： ></P>
<P 我认为反馈是AI的一个极大的问题。如果角色对于他周围环境的变化不产生反应，游戏的真实感就被完全打破了。这有许多明显的例子(听见枪炮声，看见同伴被击中...)，以及一些更加微妙的事情(当两个人通过门厅时看着彼此并点头致意)。玩家是乐意接受一些生硬和可预测性的，但是这些事物容易把游戏带到现实生活。"></P>
<P Crable 赞同：></P>
<P 平衡是非常重要的… 对玩家将会有多大的乐趣至关重要，但还有其他的问题要平衡。游戏玩家时常说他们想在游戏中看见更加真实的人工智能。然而，太多的真实感开始把乐趣带走。在这两者之间必须要有一个好的平衡。变化和随机同样也很重要—行为的变化，和保持在可信范围内的一定程度的不可预测性。"></P>
<P ></P>
<P 自然发生的游戏本质上创造游戏将遵守的规则，那将会造成游戏程序员不能预见的情形。 ></P>
<P and White是这种情形的一个完美的例子，和The Sims一样—游戏有它自己的规则，但你如何运用和调和他们是你自己的事情。实际上，你在玩游戏的过程中创造着游戏，而不是照着游戏设计者/程序员已经为你定义的路线进行。 ></P>
<P Life中的一些海军陆战队士兵的行为就是这样做的—压制火力和侧翼攻击从设定的规则中动态完成。它看起来是动态的，而且一定程度上它是这样。然而，在FPS世界中仅仅有一组规则时常是不够的。几何和其他AI时常能够打败简单的规则，这让保持正确并依然有趣变得更加困难。所以对那些可怜的AI程序员有一些同情心吧。他们的工作不容易。 ></P>
<P   ></P><P 最后的章节></P>
<P and White所关注，这款游戏实际上没有HUD。在Peter Molyneux经历了Dungeon Keeper以后，它在屏幕上大量的图标，他决定游戏的大部分被这些图标占用了，主要的屏幕没有被足够利用。因此他决定废除所有这些东西。Peter迈了大胆的一步，我们为你喝彩。很不幸，这种方式适用于B&amp;W这类风格的游戏，但它并不总是对其他种类的游戏有用。 ></P>
<P of Fortune的最初设计在屏幕上有一个图标，当被击中时向你准确显示身体的哪个部位被击中。当他们决定他们不准备为不同身体部位的伤害而处罚玩家时，最后这个被丢弃了。在一些早期的Soldier of Fortune的屏幕截图上，依然能够在屏幕的右上角看见这个图标。 ></P>
<P ></P>
<P ></P>
<P Kombat，甚至QuakeIII都有一个非常快速的游戏进入系统。少许选择，然后你就进入游戏了。这并不意味着你不能有一个接一个的菜单允许你改变每件事物，但它们不应当是必需的且应当已经有合理的缺省设置了。如果甚至在你进入游戏以前你必须用14个屏幕设置一个角色，可能是第一次你可能没有关于你正在选择的线索而且仅仅会做任何事情以通过屏幕，可能做了一些会极大影响初始游戏体验的事情。而且有可能它将会是不利的影响，作为一个游戏程序员/设计者，我在这里告诉你无论你做任何事情，让玩家第一次选择一些愚蠢的事物，无需让它更糟糕你就会有足够的机会制造很差的第一印象。 ></P>
<P   ></P><P Trek Elite Force。Half Life基于Quake 1引擎，Deus Ex基于Unreal，这个清单还在继续。如今有两种许可证方式---一个完全的游戏引擎（或游戏操作系统如Jason Hall授予LithTech），或者一组给定问题的部分解决方案。这方面一个好的例子会是RenderWare，这是一个渲染场景的部分解决方案并给你提供一些物理。你不能仅仅拍着一些模型并把它们称为完成了的游戏---还需要有声音系统，游戏机制，等等。但它确实给了你一个建立游戏的坚实基础。还记得我在渲染和物理学章节提到的所有数学知识吗？很好，这样你就避免了所有那些东西。 ></P>
<P -- 或至少是创始者为他们的游戏所需要的全部解决方案。记住QuakeIII是可以多人玩的，不时建立在单人游戏的基础之上的比如说Unreal Tournament。使用QuakeIII，你失去了单人游戏需用的某些系统，像读取/存储，脚本等等。你只是的到了Id公司制作一款游戏需要的东西，而不一定就是你所需要的东西。有时侯如果系统的一个局限恰好是你所需要的东西时，这可能是一个真正的缺点。给Star Trek Voyager加入读取/存储和脚本：Elite Force不是野餐，但是必须的。然而，使用Quake3引擎依然是领先的开端。></P>
<P Sweeney 对于今天一些流行的预先打包的游戏引擎解决方案有一些评论。></P>
<P 我认为我能公平地比较游戏引擎 (Quake，Unreal等) 和游戏组件如 RenderWare 和 Karma。游戏引擎是包含游戏开发的所有技术方面的组织严密的框架：渲染，编辑工具，物理学，人工智能，网络，等等。></P>
<P ></P>
<P ( 你能完全看见内部正在发生什么，你可以自由地根据你的需要扩充它)，也是诅咒 (如果你改变它，你将必须把变化合并进新的版本之内)。></P>
<P  ></P>
<P   ></P><P 已经发展了很多年，与Unreal类似。很有趣，主要是因为变化的硬件和API版本，实际上Unreal最初的版本花费了四年时间才完成。当他们刚开始的时候，软件渲染是唯一的游戏。当开发正在继续的时候，3dfx带来了Glide，然后是Nvidia的TNT显卡（从那时起硬件和APIs确实有了更多的进步）。这就是它为何支持这么多不同的渲染途径的原因。当然在一个相同的引擎内支持所有这些是一场编码恶梦，但那是另外的事。每个引擎有模块化的方式， 并且当一个模块---比如说，脚本---变得过时了或者需求变化了，你只需要把它抽出来并开始做一个新的模块。></P>
<P Carmack创造了在当时的硬件上运行最快的东西时，引擎的每个版本都经过了完全的重写。QuakeII完全重写了不少于四次，我个人看到了QuakeIII的机器人代码的三个不同的版本。其他的开发者也没有能够避免这种情形。John Scott，建造了Soldier of Fortune II的地表系统，曾对我提到，在动态地表生成上他曾尝试了许多方法让物理学正确地工作。 ></P>
<P   ></P><P Games的Tribes 2引擎---被称为The Torque Game Engine。我的理解是它可以收取微小数量的许可费用，将来有一些版税协议。这是的确值得考虑的事情。你可以在这里看到这个引擎的特征细节><A href="http://www.garagegames.com/index.php?sec=mg&amp;mod=v12&amp;page=features" target=_blank>http://www.garagegames.com/index.php?sec=mg&amp;mod=v12&amp;page=features</A> 。 然后就是Serious Sam 引擎。这也是需要许可证的，的确值得看一看。如果你对它有兴趣的话，可以联系God Games---他们应当可以给你指明正确的方向。 </P>
<P Space引擎。你可以从这里下载><A href="http://sourceforge.net/projects/crystal" target=_blank>http://sourceforge.net/projects/crystal</A> ，并在你的游戏中随意使用。这不是一个专业的引擎，但看看所有的部分如何结合在一起时常是一个好的学习经历。</P>
<P Engine，现在已经被Id公司开放源代码。对于任何有抱负的游戏程序员来说这是一个很好的开端----下载它，编译，开始调整。值得记住的是，这个擎是许多年以前的了，与Quake III或者新的Doom没有多少相似性。重复一遍，它确实是个好的开始。你能从这里找到发现好的资源网页><A href="http://www.inside3d.com/qip/home.shtml" target=_blank>http://www.inside3d.com/qip/home.shtml</A> 。</P>
<P   ></P><P Strike服务器比任何其他游戏服务器都要多。和它最近的竞争者（Quake III或者Unreal Tournament）相比，几乎有两倍的CS服务器。 ></P>
<P mods 全部来自于一些编辑程序，这些程序让游戏者能够修改DOOM最初的.WAD文件，提供他们自己自家制造的关卡设计和纹理。人们开始玩这些(大致)自家建造的工具，并且也发现了他们可以产生其他人想玩的关卡。Id注意了这个趋势，而且将Quake系列引擎带到了一个新的阶段，这样设计游戏，使得游戏是用户可修改的。他们甚至发布他们自己的设计工具，指令，而且甚至---喘口气---游戏中的代码，如此有抱负的游戏程序员可以在Quake Universe中玩。你可能从这个创造出自己版本的Quake连线经历。许多今天的业内大师来自这种早期的修改经验。现在有名的设计者如LevelLord和CliffyB在这个行业中就是这样开始的。最高的荣誉来自一位名叫ZOID的绅士，他提出了3Wave CTF，第一个‘夺取旗帜’的游戏，游戏中需要人们组队---连线游戏从纯粹的死亡竞赛以来的第一次进化发展。 ></P>
<P Texas，Id软件公司所在地，举行的一年一次的quake大会。人们带着他们的PC来到这里，或为了看最新的mods或是展示的基于Quake引擎的游戏。 ></P>
<P III修改版本：The Teachers Strike Back。但你不能仅仅生产一款游戏，发布你的工具，就袖手旁观。实际上你最初必须把代码设计成不需要程序员就可以容易地扩充, …好吧, … John Carmack。></P>
<P ></P>
<P Studio Max的‘lite’版本，称为gmax。最好的是，它是免费的。如果你想要试一试，你能从这里抓取它><A href="http://www.discreet.com/products/gmax/gmaxconsumer/index.html" target=_blank>http://www.discreet.com/products/gmax/gmaxconsumer/index.html</A> 。</P>
<P mod 社区，因此我认为感谢他们做了件好的工作是公平的。我过去时常说，在行业中到达一个‘真正的’工作最快的方式是从一个mod开始，说明你有完成它的训练并用它作为一个面试获得者。不能说，"我能做这个" 就像已经完成了一样。因此去到那里并开始吧。你损失什么了吗？></P>
<P Simpson 是一个游戏程序员，断断续续在这个行业已经有大约20 年了。他在英国本土从15岁开始，在C64的时代，Sinclair Spectrums和 BBC Micros，经历了 Amiga 和ST，离开了一段时间，然后90年代中期至后期在Mideay Games写街机游戏。他最近在Raven Software工作过，制作有Soldier of Fortune， Heretic， Hexen， Star Trek : Voyager : Elite force 和 Jedi Knight II : Outcast，在北加州的Maxis可以找到他，为Will Wright的游戏产品工作。业余时间他为GameBoy Color和Advance编写代码，因为“你能尽可能地远离C++编码，而且，如同John Carmack所说，底层编程对程序员的灵魂有好处”。></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752009411102125344</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752009411102125344</guid>
    <pubDate>Mon, 11 May 2009 22:21:25 +0800</pubDate>
    <dcterms:modified>2009-05-11T22:21:25+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[街霸4]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520094562145667</link>
    <description><![CDATA[<div><P>听讲7月几出PC版街霸4~对本人来讲，没什么吸引力，我是KOF FANS。我觉得还是八神型好多.......</P>
<P>红毛白毛绝对不是八神的对手......</P>
<P>不过CAPCOM制造的街霸热潮很高~这也难怪~~街霸4的画面渲染很好,很强大.~~C社制作很精良~~</P>
<P>转看KOF 3D版- -我玩得好郁闷（基本没前代特色,完完全全是一个硬套上KOF人物的另类格斗游戏）.......</P>
<P>送上街霸4公博：</P>
<P><A href="http://img.bimg.126.net/photo/vCBTlI_DD5WqijNpgaeKkQ==/3441594540241718231.jpg" target=_blank><IMG title="街霸4 - C.Y.S - " alt="街霸4 - C.Y.S - " src="http://img.bimg.126.net/photo/vCBTlI_DD5WqijNpgaeKkQ==/3441594540241718231.jpg"></A></P>
<P><A href="http://www.capcom-fc.com/sf4/2009/05/post_105.html">http://www.capcom-fc.com/sf4/2009/05/post_105.html</A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520094562145667</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520094562145667</guid>
    <pubDate>Tue, 5 May 2009 18:21:45 +0800</pubDate>
    <dcterms:modified>2009-05-05T18:30:29+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[各種光照模型參考]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200944794524</link>
    <description><![CDATA[<div>光照模型是渲染的基礎，各種不同的光照模型可以表現各種不同的表面屬性。1986年，Immel曾嘗試給出可以統一各種光照模型的“系 統方程”，但由於運算量出奇龐大，以至現在的超級電腦求解也比較困難，所以沒有得到實際的應用。<BR>　　各種光照模型的以流傳是因為至今視覺工業還是基於經驗而不是物理定律，所以Lambert、Blinn、Phong、Cook-Torrance、Strauss、 Anisotropic等經驗模型今天還可以生存而不至於被Radiosity和Raytrace等物理模型代替。(Radiosity和Raytrace都有自己的光照定律， 在max、mr、fr、br中還可以和以上經驗模型混用是因為他們還有很強的生命力) 
<P>　　Lambert：一個絕對經典的經驗模型，基於漫反射面的光照基礎。它只是簡單地計算出I=k*Il*cos(x)，可以看到影響它的因素只有漫反射 係數k和物體法線同光線的點積，所以它特別容易表現紙張、牆壁、木頭等表面粗糙而沒有高光的物體。(Max卻把它的改良版本稱為Metal ……) 
</P><P>　　Phong:　更經典的經驗模型，它加入了高光係數，可以渲染出高光：I=Il*W(x)*cos(x)^n，可以看出在高光控制上用了冪(就是法線與 光線的點積的n次方)，所以高光的邊緣比較平滑。Max中的Specular level就是冪的數值，而在maya中就表示為cos power，可以說max的說明比較感性，maya的說明比較理性。 
</P><P>　　Blinn:　 著名的圖形學家Blinn提出的經驗與定律相結合的經典光照模型（因為公式十分複雜，所以不作討論，想仔細瞭解的請和我聯繫），它使用了 “雙向反射率”（請別問我是什麼，我到現在還搞不清楚這玩意兒到底是什麼……）和微平面法線，使高光邊緣有一層比較尖銳的區域， 很接近現實中的塑膠、金屬等表面光滑而又並非絕對光滑的物體實際反射情況。當Blinn的rough值取一定的值（到底是多少要視各個系統確 定）時，可以退化成Phong；而當高光係數為0時，可以退化成Lambert。所以Blinn是最實用的光照模型。 
</P><P>　　Cook-Torrance：用Max和Maya的朋友比較陌生，用XSI的朋友就很熟悉，但是否覺得比較難控制呢？這是一個更接近物理定律的光照模型， 它的所有計算方式和Blinn一樣，但只是高光部分用了光譜計算。這在自然界的一些金屬中可以看到高光的異常變化狀況，但其實它並不使用， 而且光譜計算要額外的運算，所以在Max和Maya中沒有引入。</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200944794524</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200944794524</guid>
    <pubDate>Mon, 4 May 2009 19:09:04 +0800</pubDate>
    <dcterms:modified>2009-05-04T19:09:04+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[關於Renderman, MentalRay, Lightscape, Brazil, FinalRender的演算法討論]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752009447737880</link>
    <description><![CDATA[<div><P>衆所周知，Renderman,MentalRay,Brazil,FinalRender,Lightscape都是一流的渲染器，孰優孰劣，大家都在網上討論了很多了。這 次我想從它們的演算法入手進行分析，看它們在演算法上的優劣，希望能讓大家對它們有更深入的瞭解，從而改進對渲染器的使用。 
</P><P>
</P><P>首先，每一個渲染器都基於一套基本的求解演算法，這些演算法的名稱大家都已耳熟能詳了。基本渲染演算法有三種：Scanliner(掃描線 )、R aytrace(光線跟蹤)、Radiosity(輻射度)。Scanliner與Raytrace都爲大多數軟體所採用，而Radiosity就只有BMRT與Lightscape採用。 <BR>Scanliner最早被開發，應用亦最廣泛。其中Renderman的REYES(Render Everything You'd Ever Seen)演算法是Scanliner的最極致的發揮，但也表示Scanliner已經走到了盡頭了。Raytrace的應用越來越廣泛，它最初用來求解非漫反射 面之間的光能傳遞，即反射與折射的類比。後來分散式光線跟蹤與雙向光線跟蹤得到長足發展，特別是先進的有限元採樣演算法得到發展 後，光線跟蹤也被應用於漫反射面的光能傳遞求解。MentalRay的Global Illumination、Brazil、FinalRender就是很好的例子。其中，分散式光線跟蹤的演算法決定了軟體輸出的質量。MentalRay假定每個元面都有一 張P hotonMap(在雙向光線跟蹤演算法的創始人Arvo(ARVO1986)的論文中叫Illumination Map)，在PhotonMap上投射光線採樣，然後把PhotonMap像Texture一樣貼在元面上。所以MentalRay必須設定光線的大小(Radius)以方便在 PhotonMap上採樣。這樣保證了速度，但要在有豐富經驗的人調較下才能渲染出高質量的圖片。Brazil直接用半球體採樣，用立體方位角投射 到元面表面，類似於Radiosity演算法的立方體採樣，但Brazil通過控制輻射殘差來加快速度，也犧牲了質量，所以在採樣不足的情況下， Brazil渲染的質量是最差的。FinalRender用有限元採樣，同時保證了速度和質量。有限元是一種結合Radiosity的採樣方法。 
</P><P><BR>Radiosity是在80年代末發展起來的渲染演算法，它採用熱力學的輻射積分式：B(x)=E(x) + p(x)$B(x')[cos(x)cos(x')/pi*r^2]*HID(dS(x),dS(x'))dA(x')，其中x'爲源元面，x爲目標元面，B(x)是x的輻射度分量， E(x)是x的源能量，p (x)是x的漫反射係數,$是對元面x積分，HID是遮擋函數(x與x'之間有遮擋爲0，沒有則爲1)，dA(x)是x的面積。可以看到，R adiosity是通過對整個場景的表面都求解輻射度來達到類比光能傳遞效果。Lightscape的求解過程就是Radiosity的Shooting過程，它採用空間四叉 樹演算法來加速求解，所以速度比較快。Radiosity渲染基於物理學理論，其渲染效果真實，是R aytrace所不能比擬的，但從視覺效果上考慮，現在Raytrace和Radiosity不相上下，在速度上，Raytrace更占絕對優勢。而且，Refract( 折射)、caustic(焦散效果)是Radiosity無法類比的(所以Lightscape也帶了Raytrace渲染器)。 
</P><P>
</P><P>第二，每個渲染器都有貼圖的優化演算法，這也是成敗的關鍵，因爲高級的渲染往往極依賴貼圖，像一些優秀的CG都“無圖不歡”甚至“無 圖不成”，所以貼圖的質量是十分重要的！Renderman的優化演算法堪稱第一！爲什麽？它用了先進的改良式B-spline(B樣條) 演算法，克服了許多貼圖變形的問題，尤其是在同等元面由於鏡頭焦距不一引起的走樣( 因爲軟體常常假設同一元面在畫面上的解析度是一樣的，就導致當鏡頭對準元面中心，而元面兩極z值直差超過了MipMap或Liner的極限， z 值小的部分和z值大的部分之間的區域過度産生嚴重走樣，MR2用z值細分元面解決了問題，但造成了運算量的不必要增加)。在渲染 器多如牛毛的今天，很多標榜光能傳遞的軟體都忽略了貼圖演算法的重要性，片面的加強實際上專業用戶並不需要的功能，捨本逐末。也 是因爲如此，使用最原始的Scanliner的Renderman在今天能穩穩地坐在電影製作的第一把交椅上。<BR>　　<BR>貼圖是渲染裏一個複雜的大系，它包括原始圖像的處理、合成，與幾何物體座標的互換，過程化的貼圖以及過渡性的貼圖(PhotonMap 和ShadowMap等)。貼圖也參加幾何變換(Displacement)，燈光的定義(VolumeShader)以及鏡頭特效。 
</P><P>Max向渲染器提供了貼圖的原始處理，可以讓渲染器直接使用它的輸出而專心於畫面的質量，它包括了圖形學裏的4X3種貼圖投射方式：( 平面、圓柱體、立方體、球面)～(表面向量、景物中心、中介面法向量)。其實真正有用只有：平面～中介面法向量、圓柱體～中介面法向 量、立方體～中介面法向量、球面～景物中心、立方體～景物中心。所以不要盲目選擇貼圖方式。詳細的貼圖方式指引請參考《電腦真實感 圖形的演算法基礎》。 
</P><P>Maya的貼圖分爲Normal和Project(Stencil不在貼圖方式的討論之列)，也就是UV和以上的四種貼圖表面(平面、圓柱體、立方體、球 面)，當然，它還包含了衍生出來的三角平面和攝像機平面。<BR>　　 
</P><P>Renderman提供了更詳細的貼圖方案，但對普通用戶有用的只有ST(就是UV)和MayaUV(還是UV)。因爲在Renderman裏面要精確控制貼 圖必須寫Expression。 
</P><P>
</P><P>所謂的UV，就是指曲面座標。在我們看來，空間是三維的(用三個分量表示一個向量)，而在曲面上看來，空間是二維的，如地圖上的經度和 緯度一樣。要指出曲面上的一點，就要用向量v (u,v)表示。而貼圖則是平面的，要影射到空間的元面上必須用一種貼圖影射(就是以上討論的幾種)：<BR>在曲面座標上P(u,v)可以轉換成貼圖座標T(s,t)，就是若曲面S(u[0,1],v[0,1])那貼圖就是T(s[0,Tmax_x],t[0,Tmax_y])，然後求螢幕座 標E (p)=Sp(u,v)=S'(u,v)=T(s,t)，得到螢幕的顔色爲F(T(s,t))，F爲加工的過程。在max中選擇的貼圖方式就是S'。這就 是貼圖在渲染器內的工作方式。 
</P><P>
</P><P>貼圖的合成主要是Renderman的結點式思想，這點在Maya中的已經得到體現，相信我不用在討論。但結點式Shader並不是Maya第一個使用， 早在1 984年，Cook(著名圖形學家，提出了著名的Cook-Torrance光譜光照模型)就提出了左右結點的Shanding language。最初，Renderman就是這一思想的實驗産物，可以說Shading language導致了Renderman的誕生。所以Renderman的貼圖處理能力可以說是Renderman的看家本領了。 
</P><P>
</P><P>貼圖的反走樣：主要的方法有Liner(一次)、Quadric(二次)、Gaussian(高斯)、MipMap等。其中MidMap應用最廣泛，從OpenGL到Dire ctX到MayaRenderer到Renderman的Script都可以看到它的身影。所以我們主要討論MidMap(其他的請“望文生義”吧)。<BR>　　 
</P><P>MidMap的工作方式是在記憶體中建立一張比原始檔案還要大的正方形查找表，也就是N X N的陣列。大多少？例如：一張TIFF(256 X 256 X 24bit NoAlpha)的貼圖，MidMap將打開一個(512X512)+1的陣列。其排列爲(用圖形比較清楚):<BR>---------------------------------------------<BR>| | |<BR>| | |<BR>| | |<BR>| R | G |<BR>| | |<BR>| | |<BR>---------------------------------------------<BR>| | | |<BR>| R | G | |<BR>| | | |<BR>|--------------------| B |<BR>| R | G | | |<BR>|---------| B | |<BR>| X | B | | |<BR>--------------------------------------------- 
</P><P>
</P><P>使用的時候計算在匹配的解析度下應使用哪一張Map。如此可見MidMap是一種的速度和質量可以達到最平衡的演算法。所以Maya以MidMap&amp; #29234;缺省方式。 
</P><P>
</P><P>在貼圖的討論中，我們主要討論的是Renderman的貼圖，因爲其他的幾個軟體並沒有太多的貼圖文獻(而Renderman則幾乎每年的SIG GRAPH都有)所以不作討論。<BR>　　 
</P><P>第三，我們來集中討論一下光能傳遞。 
</P><P>關於光能傳遞，相信有必要詳細敍述，因爲網上和市面的許多教材都存在片面的說法，許多使用光能傳遞軟體的人甚至寫教材的人 都沒有比較扎實的光能傳遞理論基礎，這導致我們很多時候都無法發揮渲染器的最大潛能。這也是許多人就算用L ightscape、MentalRay也只能做出很“假”的圖的原因了。瞭解光能傳遞，就算用Max的渲染器也可以做出很真實質量很高的圖形。 
</P><P>
</P><P>所謂光能傳遞，就是物體表面反射物體吸收波長以外的光能在封閉環境中的面到面之間的傳遞。所以光能傳遞必須滿足：1、場景封閉；2 、場景內有原始的未被吸收的光能；3、傳遞方式爲面到面。 
</P><P>我們之所以看到物體有不同的顔色，是因爲物體表面屬性決定了物體吸收一定波長的光能，而不吸收的一部分反射到我們的眼睛裏， 産生了顔色。如果一束全波段光波射到一白色物體和紅色物體上（兩物體靠近，都是漫反射面），則白色物體並不吸收任何可 見波波長的光能（理論上，實際上它還是要吸收一部分），把接收的光能都反射出去。那麽紅色物體就吸收了除紅色波長以外的所有可 見光光能，把紅色波長的光能反射出去。這樣，白色物體從環境中獲得的光能發生了不平衡，紅色光波的能量戰多數，於是，在實際中的以 上情況，我們將看到兩物體之間發生了光能傳遞。<BR>　　 
</P><P>還有一個例子，就是鏡子。因爲漫反射面十分粗糙，幾乎每個點的法線都不同，所以光能發射的方向不一，就造成了輻射現象；而非 漫反射面表面法線一致，所以光能反射方向一致，所有光能向同一方向反射，造成鏡面現象。<BR>　　 
</P><P>要注意的是，生活中我們是在一個封閉的空間中觀察物體的，就算是戶外，因爲空氣有散射作用，所以也可以算是封閉。就是在一 定範圍內光能必須趨向平衡。所以幾乎所有的光能傳遞演示場景都是在封閉的室內，而室外的場景則必須添加大氣輻射。L ightscape中的完成百分比實際是它估算的環境內輻射平衡殘差（以後會討論），但也可以看作是封閉環境中剩餘的未平衡能量。 
</P><P>
</P><P>光能傳遞分成四種類型：漫反射～漫反射、非漫反射～漫反射、非漫反射～非漫反射、漫反射～非漫反射。這四種傳遞性質各異，難以以 統一的演算法求解，也導致了兩種完全不同的演算法的産生。<BR>　　 
</P><P>Raytrace光線跟蹤是最早開發來解決反射、折射的涉及非漫反射面參與的光能傳遞的演算法，它基於假設光線是一根沒有大小、長度的射 線，從螢幕平面投射到場景中，與可見面相交；它完全遵守反射折射定律。所以R aytrace極其成功地解決了兩種傳遞：非漫反射面～非漫反射面　和　漫反射面～非漫反射面。<BR>　　 
</P><P>Raytrace是逆向求解演算法，屬於遞迴演算法，其核心爲每次求交後調用自身再次求交，直到反射／折射深度達到最大值。因  234;場景內包含了大量的元面，所以光線跟蹤的大部分運算量都集中在求交上，則軟體的求交演算法極爲重要。B SP是最成功的求交演算法之一，MentalRay剛推出之時許多人都驚歎於它的快速就是因爲當時只有它應用了BSP。<BR>　　 
</P><P>BSP叫(Binary Space Partition)空間二叉樹演算法，即把場景分成許多子空間，每個父節點都有兩個子節點。場景爲最大父節點，場景下包含兩個節點 （左右節點），若左節點包含的元面數目大於閥值，則把左節點分成上下兩個子節點，再看上下節點中的元面數目……如此剖分直到子節 點深度大於閥值。當求交時只需把光線與左右節點求交，若左節點有交則只需把光線與上下節點求交，最後把光線與確定的空間節點中的有限元面求 交。這樣就可以節省大量無用的求交。 
</P><P>
</P><P>雖然Raytrace完美地解決了兩種傳遞方式，但在日常生活當中我們最常見的漫反射面～漫反射面的傳遞（除非您住在鏡子世界當中）它則 顯得束手無策。1 984年美國Cornell大學和日本廣島大學的學者分別把熱力學中的輻射度方法引入到了光能傳遞求解當中，成功地類比了漫反射面之間的光能傳遞。 於是R adiosity演算法問世了。<BR>　　 
</P><P>光能與熱能的性質十分相似，可以說光與熱是能量的兩種表現方式，光在理想漫反射面上的傳遞方式與熱力學的輻射方式近似。因? 4;熱是向熱力不均勻的地方傳遞的，而光也是向光能不平衡的地方傳遞的；而熱力輻射的方式是擴散的，光能在漫反射面上的反射也可以 近似表示爲擴散。<BR>　　 
</P><P>Raytrace假設光線是沒有大小的一根射線，但漫反射面的表面十分粗糙，幾乎每一點上的發線都有不同程度的偏離。因爲是從螢幕上 出發向場景採樣，所以R aytrace也在某程度上用一根光線的大小抹殺了很多不能用有限採樣表示的資訊（如用320X240表示一個十萬面的球，則很多極點的元面被 忽略，因爲螢幕上的光線只能和一個元面有交）。R aytrace無法較精確地採樣漫反射面上的光照資訊，那就更無法表現漫反射面的光能傳遞了。（但後來有了分散式光線跟蹤就另當別論了， 下面會討論到） 
</P><P>
</P><P>Radiosity把元面上的光能看作整體，採用全局求解的方法，先把整個場景的光能分佈求出，再在螢幕上顯現。它不在受一條條的光線所限制， 而把能量一分分地送出去。 
</P><P>
</P><P>Radiosity的演算法有很多種，其中最常用的爲逐步求精和空間四叉樹演算法。Lightscape把兩者結合起來，繼承了逐步求精法的耗大 記憶體和空間四叉樹求解奇慢的“優點”，留了一個“大好”的印象給大家。其實R adiosity的求解核心是輻射度方程（見討論（一））。它的積分號表明了它不能精確求出輻射度的解的性質，所以用殘差估算和有限元演 算法可以快速解決問題。因爲用R adiosity演算法的軟體並不多(好象只有Lightscape、FinalRender和BMRT吧），所以在此不多說了，如果有興趣知道更多的輻射度資料， 請和我聯絡。 
</P><P>
</P><P>(其實大家有必要知道Radiosity更多，因爲有限元度方法的出現令Radiosity活力大增，相信不久大家就會見到大批基於有限元度演 算法的R adiosity軟體的出現) 
</P><P>
</P><P>上面的演算法解決了三種傳遞方式，還有一種呢？就是Caustic！著名的聚焦現象。 
</P><P>因爲光在經過非漫反射面的傳遞後會出現集中聚焦、二次光源等現象，而一般的Raytrace和Radiosity都不能解決，於是誕生了雙向 光線跟蹤。 
</P><P>其實在雙向光線跟蹤之前還有一種很重要的演算法，就是分散式光線跟蹤。在Radiosity誕生的那一年，著名的圖形學家Cook發表了分散式光線 跟蹤的論文。分散式光線跟蹤其實是一種非均勻的採樣演算法，但它通過j itter抖動來達到分散式的效果。比如說：螢幕上的一點要求解，則軟體通過jitter得到一張查找表（通常是16x16的），按照上面的抖動值換算螢幕上 的光線發射方向。這樣就可以避免了R aytrace“抹殺元面資訊”的行爲。<BR>　　 
</P><P>在分散式的基礎上，Heckbert和Hanrahan提出了雙向光線跟蹤的思想。因爲光線應該是從光源出發射向物體的，但Raytrace則從螢幕出 發射向物體再回溯到光源，所以一般的R aytrace被稱爲逆向光線跟蹤。這樣的好處是避免不需要的光線求解，簡化演算法，減少運算量。但這樣根本不利於光能傳遞的求解。 雙向光線跟蹤的思想是在逆向光線跟蹤的同時進行正向的光線跟蹤。實際上雙向光線跟蹤是通過一張PhotonMap來實現的。 
</P><P>
</P><P>PhotonMap是一張抽象的貼圖，它包裹在物體的表面上，當進行正向光線跟蹤時從光源到物體表面進行有限的光線採樣，光線交在物體上， 但採樣結果表現在PhotonMap上，也就是說光線是射在PhotonMap上的。PhotonMap上的資訊是光線資訊，所以通過整理後可以得到精細的C austic貼圖，在渲染時要得到物體表面資訊可以直接從PhotonMap上得到相應的元面上的貼圖資訊。<BR>　　 
</P><P>同理，使用PhotonMap的全局光照也是通過這樣的採樣方法達到光能傳遞的效果。 
</P><P>PhotonMap用在Caustic上是一種十分精確的方法，但在全局光照裏就屬於基於視覺上的演算法，並不精確真實。</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752009447737880</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752009447737880</guid>
    <pubDate>Mon, 4 May 2009 19:07:37 +0800</pubDate>
    <dcterms:modified>2009-05-04T19:07:37+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[黑暗地带-Dark Sector]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752009432539757</link>
    <description><![CDATA[<div><P>前段时间在电驴无意发现了新发布的游戏《黑暗地带-Dark&nbsp;Sector》,接着玩了一下- -游戏性很好,画面很好,很久没找到一个这么好的游戏了(剧情空洞一点拉,哈哈).游戏系统有点象生化危机4+战争机器,还加入了游戏独特的武器和武器的子弹时间,非常不错~可以体会到制作者足够的诚意了,接着来大概介绍一下。</P>
<P>公司：加拿大Digital&nbsp;Extremes&nbsp; </P>
<P>类型：&nbsp;3D&nbsp;科幻动作射击</P>
<P>引擎：自行开发的「Sector」3D&nbsp;引擎制作，展现出相当优秀的即时光影运算表现。(我开始以为是虚幻3,但是游戏开始并没看到虚幻3的LOGO,<FONT color=#ff6600>外国团队就是猛,想写引擎就写,而且效果那么好</FONT>.)</P>
<P><BR>个人认为特色的还有游戏画面的正片负冲效果~！非常之电影。</P>
<P>机械设定也披有小岛秀夫监督的问题(制作团队应该参考了很多游戏的优秀机械设定)</P>
<P>至于最终画面嘛~景深/动态模糊/HDR/法线/灯光图/高光图/等等等等.......该有的都有.制作很精良.</P>
<P>官网：<A href="http://www.digitalextremes.com/">http://www.digitalextremes.com</A></P>
<P>在AUTODESK上也有Digital&nbsp;Extremes的介绍</P>
<P><A href="http://usa.autodesk.com/adsk/servlet/item?siteID=1170359&amp;id=10948685">http://usa.autodesk.com/adsk/servlet/item?siteID=1170359&amp;id=10948685</A>&nbsp; </P>
<P>哈哈 3DS MAX不错,不错~~~</P>
<P><A href="http://img.bimg.126.net/photo/b4vrlov3Tm-yxXP2T85wPQ==/3995818769385102924.jpg" target=_blank><IMG title="黑暗地带-Dark Sector - C.Y.S - " alt="黑暗地带-Dark Sector - C.Y.S - " src="http://img.bimg.126.net/photo/b4vrlov3Tm-yxXP2T85wPQ==/3995818769385102924.jpg"></A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752009432539757</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752009432539757</guid>
    <pubDate>Sun, 3 May 2009 14:53:09 +0800</pubDate>
    <dcterms:modified>2009-05-03T19:07:31+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[再谈生化4]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752009432253301</link>
    <description><![CDATA[<div><P>&nbsp;外国老就是厉害，pc版的生化危机4由于capcom制作得太粗糙，以ps2为蓝版，却去掉了光源效果。而国外爱好者没有放弃，作了很多补丁，于是高解析度贴图，光源效果等都被加上了(著名的有高清晰贴图材质补丁,还有就是bloom补丁,其中高清晰贴图的<FONT color=#ff0000>原理是截取ngc中的材质,然后再用photoshop重新编辑,所以1.0版本就已经比NGC要好了,现在的2.0版本强更多了,新的贴图增加了2g多的容量</FONT>,能不强吗)，让画面超过NGC很多（除了人物多边形数量）。- - 这就需要了解游戏公司打包文件的内容和用什么格式。<BR>可以看出，材质的提升，对游戏效果影响有多大~<A href="http://img.bimg.126.net/photo/JbF3ahHrDMP427H-ZJeVvQ==/3180385761854306409.jpg" target=_blank><IMG title="再谈生化4 - C.Y.S - " alt="再谈生化4 - C.Y.S - " src="http://img.bimg.126.net/photo/JbF3ahHrDMP427H-ZJeVvQ==/3180385761854306409.jpg"></A></P>
<P><FONT color=#ff0000 size=5>bloomrc<FONT color=#000000 size=2>效果插件就更加厉害，能加入HDR效果。HDR效果也是代表次世代技术之一。</FONT></FONT></P>
<P><A href="http://img.bimg.126.net/photo/vNCVvWzvt7v1yCONs2tDTw==/2581407011414898158.jpg" target=_blank><IMG title="再谈生化4 - C.Y.S - " alt="再谈生化4 - C.Y.S - " src="http://img.bimg.126.net/photo/vNCVvWzvt7v1yCONs2tDTw==/2581407011414898158.jpg"></A></P>
<P><FONT size=2>送上文件中文解析(这些词语也是游戏必懂的)</FONT></P>
<P>enbseries.ini的全中文解释:<BR>兼容性设置] 新增的和其他d3d9.dll共存解决办法<BR>enableproxylibrary = （ 0,1 ）加载第三方插件，帮助解决多个d3d9.dll共存问题。 <BR>initproxyfunctions = （ 0,1 ）连接到第三放插件<BR>proxylibrary = （文件名）其他d3d9.dll的文件名<BR>[全局设置]<BR>UseEffect=(0,1) 让游戏一开始就运行本补丁.有些硬件可能会出错，不推荐使用。<BR>alternativedepth = （ 0,1 ）提高一些处理效果的性能，但并非所有videocards可以使用这个模式，如果您看到了游戏中物体有粗线，禁用此参数。 <BR>AllowAntialias（全屏抗锯齿）=(0,1) 0关闭，1开启。这个好像有问题，显卡一般的话一定要关！<BR>BugFixMode=(0..5) 不同的硬件会有问题. drivers 169.xx 和 171.xx 不要设置成１ 0-高质量，中等效果, 1-高质量，效果稍差, 2-最高效果, 3-最低效果（运行最快）, 4-低效果, 5-低效果，中等速度.<BR>比较乱，我现在按照烧显卡等级从低到高排序：3（破显卡推荐）-5-4-1-0-2<BR>SkipShaderOptimization=(0,1) １，取消阴影最优化设置（可能会排除一些BUG）<BR>QuadVertexBuffer,作者未作解释，四顶点缓冲？<BR>[效果]<BR>EnableBloom=(0,1) 1，开启光晕效果（比如灯光在墙上的亮斑）. <BR>EnableOcclusion=(0,1) １，开启遮挡剔出算法，试补丁版本而定）（奇怪的功能，显卡一般的推荐关掉）<BR>EnableReflection=(0,1) １，开启车身反射效果。<BR>enablemotionblur = （ 0,1 ） 开启动态模糊效果。快速移动鼠标，即可感觉到模糊处理，比较酷<BR>enablewater = （ 0,1 ）开启水的处理效果<BR>enableshadow = （ 0,1 ）开启阴影效果<BR>depthbias = （ 0 .. 1000 ）景深优化控制。对一些videocards可能是有用的，以消除远景的闪烁和遮挡的环境。 <BR>[按键设置]<BR>keyuseeffect = （ 1 .. 255 ）用十进制数进行设置，默认F12，按键数值清参照文件key_codes.txt<BR>keybloom = （ 1 .. 255 ）用十进制数进行设置，光晕效果开关，默认F9<BR>keyocclusion = （ 1 .. 255 ）用十进制数进行设置，遮挡剔除算法，默认F10<BR>keyreflection = （ 1 .. 255 ）用十进制数进行设置，反射效果，默认F11<BR>keycombination = （ 1 .. 255 ）用十进制数进行设置，组合键，默认SHIFT。这次可以更改组合键SHIFT了<BR>keyshadow = （ 1 .. 255 ）用十进制数进行设置，影子，默认F8。新增的两个功能控制<BR>keywater = （ 1 .. 255 ）用十进制数进行设置，水质处理，默认F7</P>
<P>以上设置都要配合组合键（默认SHIFT）使用<BR>[反射效果控制]<BR>ReflectionPower=(0..100) 车辆反射效果等级.<BR>ChromePower=(0..100) 车身金属效果 (这个版本可能不可用).<BR>usecurrentframereflection = （ 0,1 ）1，使用当前帧画面作为反射的影像；0，使用前帧图像作为反射的影像。影响到机器处理速度 <BR>reflectionquality = （ 0 .. 2 ）反射质量。 0表示最大的质量和最慢的速度。<BR>ReflectionSourceSpecular = （ 0 .. 100 ）在反射效果中加入镜面材质（车身）颜色对反射效果的影响。有些车身部分会变得更光亮。普通玻璃的反射变淡可能与这个值有关<BR>reflectionsourcetfactor = （ 0 .. 100 ） 在反射效果中加入镜面材质（车身）纹理对反射效果的影响。有些车身部分可能会适得其反。反射影像随车身弯折变化<BR>useadditivereflection = （ 0,1 ）反射效果加到汽车屏幕颜色上， 0意味着更柔和的反射<BR>reflectiondepthbias = （ 0 .. 1000 ） 景深优化控制。对一些videocards可能是有用的，以消除闪烁和反射错误。<BR>UseLowResReflection=(0,1) 使用小而模糊的纹理作为反射影像，看起来像磨砂反射。 <BR>[BLOOM光晕设置]<BR>BloomPowerDay=(0..100) 光晕效果等级，决定屏幕亮度<BR>BloomFadeTime=(0..100000) ‘光晕效果处理’对屏幕亮度变化的响应时间（毫秒）<BR>bloomconstantday = （ 0 .. 100 ）光晕效果在白天的强度等级<BR>bloomquality = （ 0 .. 2 ）光晕效果质量， 0为最大质量。 <BR>BloomScreenLevelDay=(0..100) 设置白天时间在一天中的比例<BR>BloomCurveDay= （ -10 .. 10 ）修正光晕在白天时的效果。负值增加半色调的亮度（朦胧的视觉效果） 正值反之。不喜欢朦胧感觉的玩家可以设正值，越大越清晰，注意时白天和夜晚分开设置的 <BR>bloompowernight = （ 0 .. 100 ）光晕效果在夜晚的强度等级，受屏幕亮度影响<BR>bloomconstantnight = （ 0 .. 100 ）光晕效果在夜晚的强度等级，不受屏幕亮度影响<BR>BloomCurveNight = （ -10 .. 10 ）修正光晕在夜晚时的效果。负值增加半色调的亮度（朦胧的视觉效果） 正值反之。 <BR>BloomScreenLevelNight=(0..100) 设置夜晚时间在一天中的比例<BR>bloomadaptationscreenlevel = （ 0 .. 100 ）屏幕亮度百分比，推荐其数值大于bloomscreenlevelday 。 <BR>bloomadaptationmultiplier = （ 0 .. 100 ） 白天时的光晕亮度，屏幕亮度大于BloomAdaptationScreenLevel 时使用。100禁用适应<BR>bloomallowoversaturation = （ 0,1 ） 0 ，光晕柔和地应用于屏幕和光亮的区域而不会造成过饱和。<BR>[SSAO]<BR>UseFilter=(0,1) １，开启过滤功能，过滤EnableOcclusion引起的噪声、干扰等<BR>OcclusionQuality=(0..2) occlusion效果等级，0最高。目前这个功能有BUG<BR>FilterQuality=(0..2) 过滤效果等级，0最高，速度最慢<BR>darkeninglevel = （ 0 .. 100 ）被遮挡的暗区的黑暗水平<BR>brighteninglevel = （ 0 .. 100 ）环境遮挡的物体边缘亮边<BR>illuminationlevel = （ 0 .. 100 ）直接照射时的光线传输<BR>additiveilluminationlevel = （ 0 .. 100 ）未直接照射的暗区的亮度<BR>useambientocclusion = （ 0,1 ） 暂时不可用<BR>useindirectlightning = （ 0,1 ）计算间接照射（影响性能） <BR>*Warning, depending from mod version preset may be disabled.<BR>**Two keys required for operating, f.e. SHIFT F12 activates modification by default.<BR>[色彩修正]<BR>darkeningamountday = （ -100 .. 100 ）黑暗，或亮暗的屏幕地区在白天所占的比例。负值更加明亮，正值更加黑暗。 <BR>screenlevelday = （ 0 .. 100 ）白天时间在一天中的比例 <BR>screenlevelnight = （ 0 .. 100 ）夜晚时间在一天中的比例 <BR>darkeningamountnight = （ -100 .. 100 ）黑暗，或亮暗的屏幕地区在夜晚所占的比例。负值更加明亮，正值更加黑暗。 推荐使用正值以增加夜晚的真实<BR>gammacurveday = （ -10 .. 10 ）修正光晕在白天时的效果。负值增加半色调的亮度（朦胧的视觉效果） 正值反之。 <BR>gammacurvenight = （ -10 .. 10 ）修正光晕在夜晚时的效果。负值增加半色调的亮度（朦胧的视觉效果） 正值反之。 <BR>[插件] <BR>weathermod = （ 0,1 ）天气MOD色彩修正。可能暂时停用。 <BR>[水] <BR>usewaterdeep = （ 0,1 ）平稳过渡不同水深之间的光影变化 <BR>waterdeepness = （ 0 .. 1000 ）不同深度水的透明度处理<BR>WaterQuality= （ 0 .. 2 ）水的效果处理质量， 0，最大质量。 </P>
<P>[影子] <BR>shadowfadestart = （ 0 .. 1000 ）能看得清阴影的最大距离<BR>shadowfadeend = （ 0 .. 1000 ）影子完全消失的距离<BR>shadowamountday = （ 0 .. 100 ） 影子在白天里的清晰度<BR>shadowamountnight = （ 0 .. 100 ） 影子在夜晚的清晰度<BR>shadowscreenlevelday = （ 0 .. 100 ）日间影子模式时间在一天中的比例 <BR>shadowscreenlevelnight = （ 0 .. 100 ）夜晚影子模式时间在一天中的比例 <BR>shadowquality = （ 0 .. 2 ）阴影质量， 0是最大和最慢的。 <BR>useshadowfilter = （ 0,1 ） 过滤阴影<BR>filterquality = （ 0 .. 2 ）过滤阴影的质量， 0是最大和最慢的</P>
<P>[引擎] <BR>forceanisotropicfiltering = （ 0,1 ）对大多数游戏材质强制使用各向异性过滤。 <BR>maxanisotropy = （ 1 .. 16 ）最大程度的各向异性过滤，数值越大，纹理越尖锐清晰。<BR>forcedisplayrefreshrate = （ 0,1 ）强制使用规定的刷新率<BR>displayrefreshratehz = （ 60 .. 240 ）自定义reflresh率。警告，不正确使用这个参数，可能是游戏错误！ （或死机） </P>
<P>[动态模糊控制] <BR>motionblurquality = （ 0 .. 2 ）动态模糊质量， 0是最大质量<BR>motionblurvelocity = （ 0 .. 100 ）动态模糊时的拖影长度<BR>motionblurrotation = （ 0 .. 100 ）建议和motionblurvelocity一样</P>
<P><BR>设置文件为enbseries.ini<BR></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752009432253301</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752009432253301</guid>
    <pubDate>Sun, 3 May 2009 14:25:03 +0800</pubDate>
    <dcterms:modified>2009-05-03T14:27:02+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[DC游戏碟里的文件作用]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520094303215726</link>
    <description><![CDATA[<div><P><FONT color=#ff6600>查找相关工具即可查看相应文件</FONT></P>
<P>acx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多个adx音频的联合 (类式于afs格式)</P>
<P>adx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRI 压缩格式音频</P>
<P>afs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多个adx 音频的联接</P>
<P>als&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adx 文件列表</P>
<P>bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DC的可执行文件（大家都很熟悉了！）</P>
<P>elf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DC的可执行和可联接格式dc elf file (executable and linkable format)</P>
<P>nja&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ninja model file</P>
<P>pvm&nbsp;&nbsp;&nbsp;&nbsp; dreamcast model files?? (power vr model)</P>
<P>pvr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dreamcast texture files (power vr texture format)贴图纹理</P>
<P>san&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; picture file by CRI图型文件</P>
<P>sfa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRI sofdec audio软编码音频</P>
<P>sfd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRI sofdec movie and audio multiplexed file软编码动画</P>
<P>sfv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cri mpeg sofdec video for dreamcast视频文件</P>
<P>spr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprite file (contains pvr)贴图纹理</P>
<P>str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; streaming file (for streaming movie or audio)动画</P>
<P>tb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sega tone bank file (for midi stuff)音乐<BR></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520094303215726</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520094303215726</guid>
    <pubDate>Sun, 3 May 2009 12:32:15 +0800</pubDate>
    <dcterms:modified>2009-05-03T12:40:35+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[DREAMCAST内部各组成部分详细资料供研究参考]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520094302823374</link>
    <description><![CDATA[<div><P><FONT color=#ff6600>以现在所了解的图形知识，去了解当年的DC。感叹日本10多年前的图形能力。</FONT></P>
<P><A href="http://img.bimg.126.net/photo/FDwdAqh4n_WbpxTuRvd_Vg==/336644072146675446.jpg" target=_blank><IMG title="DREAMCAST内部各组成部分详细资料供研究参考 - C.Y.S - " alt="DREAMCAST内部各组成部分详细资料供研究参考 - C.Y.S - " src="http://img.bimg.126.net/photo/FDwdAqh4n_WbpxTuRvd_Vg==/336644072146675446.jpg"></A></P>
<P>&nbsp;</P>
<P>Dreamcast一词是由Dream以及及Boardcast两个单词所组成的，按照世嘉的解释，就是要将建 <BR>立一个庞大的游戏网络，让各位Dreamcast玩家可以在上面自由地进行互动。 </P>
<P>&nbsp;</P>
<P>DC的图形芯片"PowerVR2DC"与DC的系统控制器（这个控制器的主要作用是把内存以及周边的部 <BR>件连接在一起）是集成在一起的，位于整个DC底板的中央，从实物上来看的话，是整个DC底板 <BR>中最大的一块IC。如果我们按照PC系统芯片组的分类来看，这个IC属于整合了图形内核以及总 <BR>线控制器、I/O控制器的整合型芯片组。 </P>
<P>案s日立SH4 </P>
<P>PowerVR2DC图形内核使用了Tile渲染体系（Tile Base Rendering），在这种渲染体系中，屏幕 <BR>会被划分为许多像素块（或者说Tiles）。3D引擎会检视每个三角形的顶点坐标，以确定哪一个 <BR>是可以完全置于或者是部分置于tile中，接下来，就会采用一个拣选算法，按照深度来存放这 <BR>些顶点坐标。当拣选完成以后，3D引擎就会在tile中对每个像素进行"预演"，以确定该像素属 <BR>于哪个三角形，并且对其进行渲染。当每个在tile中的像素被渲染以后，这个tile就会被写入 <BR>到帧缓冲中，然后就按照这样的步骤继续进行下一个tile的渲染。这种方式的一个好处是，只 <BR>要tile的尺寸分得足够细小，所有的Z-buffer数据就可以完全置入到显示芯片的内部cache中去， <BR>彻底免除了由于对大Z-Buffer进行读取、写入的操作，并且较传统方式来说，可以在每个像素 <BR>Render之前就进行Z-test来提升渲染效能的，从而免除了overdraw（无效渲染），显著地提升 <BR>有效带宽。 </P>
<P>（注解：所谓的Overdraw--无效渲染是指在3D游戏中的场景在大多数的时候，从玩家的视角来看， <BR>前面可能会存在一些"障碍物"，例如：墙壁、怪物以及其他的物件，甚至玩家手中的武器也可以 <BR>视作是阻挡视线的障碍物。在传统的渲染体系中，这些障碍物之间的关系使用被称作深度缓冲的 <BR>东东来描述，而最常用的深度缓冲被称作Z-Buffer。有了Z-Buffer以后，物体之间的前后关系就 <BR>可以确定下来。加上传统渲染体系的的渲染方式是从里到外的，也就是说，先渲染场景中最远的 <BR>物件，然后在往外渲染，这意味着，如果远处的物体在玩家的视角里有物件遮挡的时候，远处的 <BR>物体也依然在是被渲染引擎全部渲染，而事实上，这个远处的物体对于玩家来说其实可能只有部 <BR>分是可见甚至是完全看不到的，这就意味着，对这个远端物体进行渲染其实是在做废功，这就是 <BR>所谓的Overdraw了。不同的3D游戏中，Overdraw的程度是不同的，根据玩家与场景中最远端物体 <BR>之间的层次关系，我们可以大致确定并且描述该场景的复杂程度--depth complexity。在PC游戏 <BR>Quake3中，大多数的情况下，其复杂程度大约是3.5倍，大致的意思就是有玩家视角到最远端物件 <BR>之间有大约两堵墙壁以及其他一些物体在遮。Overdraw所造成的浪费主要包括了图形内核的渲染 <BR>能力以及显存的带宽。） </P>
<P><BR>PowerVR2DC拥有8MB独立的SDRAM作为帧缓冲和材质缓冲（如果使用传统的渲染体系的话，应该还 <BR>会包含存放深度值的Z-Buffer，不过由于DC使用的是Tile渲染体系，所以也就免除了这个外部的 <BR>深度缓冲），显存运行的频率是100MHz，总线宽度是64位，也就是说，这8MB的显存所能提供的 <BR>物理峰值带宽是：100MHzX64bits/8=800MB/s，当游戏中的场景复杂程度达到3.5（也有可能是更 <BR>高或者更低）的时候，可以达到的等效带宽约等于3.5X800MB/s=2800MB/s=2.8GB/s，当然，这只 <BR>是理想的数值而已，实际的情况肯定不会有这么高的。 </P>
<P>不过，我要在此说明的是，PowerVR2DC依然存在Z-Buffer，只不过这个Z-buffer是非常的小，而 <BR>且这个Z-Buffer在任何情况下都是以24位精度运作的（如果考虑到Stencil-Buffer的话， <BR>PowerVR2DC内部的深度缓冲就是32位了）。 <BR>PowerVR2 DC除了应用Tile方式来解决Overdraw导致的带宽浪费外，还具备(vector quantization) <BR>材质压缩功能，可以实现的最高压缩倍率是10:1。引入了材质压缩功能以后，就可以降低对显存 <BR>的材质缓冲占用，有效降低对显存带宽的占用。综合以上特性，Power2DCVR的渲染效能相对于传统 <BR>的渲染方式来看，可以看作是具备1Gtexels/s的渲染能力。 </P>
<P>PowerVR2DC支持4种API： <BR>SEGA自己的图形API：Dragon； <BR>Videologic的PowerSGL Direct <BR>Microsoft的Direct 3D <BR>Silicon Graphics的OpenGL </P>
<P>DC使用的CPU是来自日立的SH-4： <BR>&nbsp; </P>
<P>注解：SH4之所以不能提供持续的1400MFLOPS是由于SH4的数据cache在数据重载速度方面并不能持 <BR>续满足其浮点单元数据装载速度需求。 <BR>在SH4中，包含了三个主要的运算单元：负责整数的CPU、负责浮点的FPU以及一个128位VGE <BR>（Vector Graphics Engine，主要擅长的是向量运算）。与其前辈SH-2、SH-3相比，SH4最大特 <BR>色在于前两者都不具备的Vector Graphics Engine。Vector Graphics Engine本身其实是一个专 <BR>为矩阵运算（matrix arrays）设计的浮点单元，我们可以把这个Vector Graphics Engine看作是 <BR>Nvidia GeForce256图形芯片中的T&amp;L单元（不同的是，DC的向量处理单元是与CPU在同一个芯片中， <BR>而GeForce256则是独立于系统中的图形芯片）。由于在3D游戏中的图形变换操作（Transformations） <BR>会涉及大量的矩阵运算，这意味着具备Vector Graphics Engine的SH4将可以在这方面较其前几代 <BR>产品出色得多。在日立的技术文档中，SH4能够每秒实现5百万个多边形。在大多数情况下，我们 <BR>会把SH4的FPU和VGE都归纳入到SH4的FPU去。世嘉号称DC是128位的主机中的这个128位其实就是出 <BR>自于此。 </P>
<P>世嘉声称，SH4使用的是16位固定长度的指令有助于降低对存储空间的需求（对此做法我有保留）。 <BR>5段流水线：指的是CPU完成第一条指令所需要的时间是5个周期，但是从第六个周期起，就可以实 <BR>现每个周期都完成一条指令。 </P>
<P>2-ways超标量：所谓的超标量，其实就是指该处理器能够在同一时间内执行2条或者更多的指令。 <BR>SH4的指令被分为4组：integer（整数）、simple integer/load/store（简单整数/装载/存储）、 <BR>branch（分支）以及floating point（浮点）。任何两个来自不同组的指令都可以并行地处理， <BR>例如：一个整数以及一个浮点指令可以并行地处理，而如果两个都是分支指令的话就不能并行地 <BR>执行了。 </P>
<P>SH4中的MMU（内存管理单元）完全兼容微软的Windows CE操作系统。内存可以划分为1 Kbyte、 <BR>4 Kbyte、64 Kbyte以及1 Mbyte等不同的页面，这些页面会被WindowsCE作为内存分区（跟我们 <BR>说的硬盘分区类似）并且在SH4执行不同的处理之间提供内存保护。内存保护是非常重要的，因 <BR>为如果不同的线程（类似于子程序）对彼此的内存空间造成干扰的话，操作系统以及程序都会 <BR>崩溃。 </P>
<P>SH4之前（即98年1月之前）的所有RISC体系处理器都只有一个浮点乘法单元，而SH4则拥有4个浮 <BR>点乘单元，所以能够比之前的RISC处理器提供4倍的浮点乘性能。由于SH4的浮点单元是全流水线 <BR>的，所以能够在每个周期里执行一条指令就能够同时驱动这四个浮点单元。这意味着在200MHz <BR>（*4）的情况下，SH4可以每秒计算800百万条乘法操作。就此而言，SH4的速度是其前辈SH2 <BR>（Saturn）的40倍。 <BR>由于世嘉希望DC能够成为一个建立在互联网上的平台，所以SH4还被赋予了一个特殊的任务：软 <BR>件Modem。 <BR>DreamCast的音频子系统使用了两枚运算芯片：45MHz的ARM7TDMI(采用32-bit RISC体系，英国公 <BR>司ARM设计，已经授权给YAMAHA了；具备40MIPS的运算能力)以及一枚DSP（数字信号处理器）， <BR>综合起来就是所谓的Yamaha AICA。世嘉公司的大部分游戏平台产品都采用了YAMAHA公司的音频 <BR>解决方案，例如：DC的上一代产品Saturn以及Model 2、Model3街机底板。AICA拥有2MB的音频 <BR>内存。 <BR></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520094302823374</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520094302823374</guid>
    <pubDate>Sun, 3 May 2009 12:28:23 +0800</pubDate>
    <dcterms:modified>2009-05-03T14:57:51+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[haha]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752008101203347916</link>
    <description><![CDATA[<div><P>天冷了，整番张短发带卷。</P>
<P><A href="http://img.blog.163.com/photo/SmAMFnF9gRDLl_XUw0snKA==/1701516234216969193.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/SmAMFnF9gRDLl_XUw0snKA==/1701516234216969193.jpg"></A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752008101203347916</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752008101203347916</guid>
    <pubDate>Wed, 12 Nov 2008 00:33:47 +0800</pubDate>
    <dcterms:modified>2008-11-12T00:33:47+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[牛哥]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520089190461082</link>
    <description><![CDATA[<div><P><FONT size=2>啊牛~大家好朋友甘多年,饭又吃过,BEND又夹过,鸡未吊过.</FONT></P>
<P><FONT size=2>玩音乐绝对是一件好事,我绝对支持.但是现在物质上就系有那么的不容许..希望以后可以用把几十万的吉他,敲几十万的鼓.</FONT></P>
<P><FONT size=2>加上你近派建工成功.送张图你~.CD封面形式.我上到张大图在2D相册,知你实喜欢.</FONT></P>
<P><A href="http://img.blog.163.com/photo/8kMWxgj3lhH9dGBoLCzz3w==/5364350106152397594.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/8kMWxgj3lhH9dGBoLCzz3w==/5364350106152397594.jpg"></A></P>
<P>&nbsp;</P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520089190461082</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520089190461082</guid>
    <pubDate>Sun, 19 Oct 2008 12:46:10 +0800</pubDate>
    <dcterms:modified>2008-10-19T13:15:21+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[测试渲染]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/7331527520089991959646</link>
    <description><![CDATA[<div><P>MR渲，好用，抵用，确实不错。</P>
<P><A href="http://img.blog.163.com/photo/U4Znn5p5h5zCgs7lG96n8Q==/316377873823339802.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/U4Znn5p5h5zCgs7lG96n8Q==/316377873823339802.jpg"></A></P>
<P><A href="http://img.blog.163.com/photo/lJGov6N0yOAejMaRkdZK_Q==/5143392249434538021.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/lJGov6N0yOAejMaRkdZK_Q==/5143392249434538021.jpg"></A></P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/7331527520089991959646</comments>
    <slash:comments>5</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/7331527520089991959646</guid>
    <pubDate>Thu, 9 Oct 2008 21:19:59 +0800</pubDate>
    <dcterms:modified>2008-10-09T21:28:39+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[今日值得纪念咯~]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200893101045739</link>
    <description><![CDATA[<div><P>剧组真系好多人材~哈哈~!!!!!真系高兴能够加入. 真的感受到好多前所未有的东西.!</P>
<P>PS:&nbsp; 和导演拍戏拍通宵,从岗顶行回五山......汗....................................</P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200893101045739</comments>
    <slash:comments>2</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200893101045739</guid>
    <pubDate>Fri, 3 Oct 2008 22:10:45 +0800</pubDate>
    <dcterms:modified>2008-10-03T22:14:42+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[介绍下自己做CG的流程]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/733152752008829104051206</link>
    <description><![CDATA[<div><P><A href="http://img.blog.163.com/photo/rYlEnVvs4BalHSz3Z_4SzQ==/3718847392301664568.jpg" target=_blank></A>首先开个ZB...拉个Zball.大概把型雕刻一下.~~</P>
<P><A href="http://img.blog.163.com/photo/vis41gXhusw4iL7DWKDBcg==/4269412446748104439.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/vis41gXhusw4iL7DWKDBcg==/4269412446748104439.jpg"></A></P>
<P><A href="http://img.blog.163.com/photo/tFuZ6k4YLTEahYzWy1HwAQ==/4269412446748104449.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/tFuZ6k4YLTEahYzWy1HwAQ==/4269412446748104449.jpg"></A></P>
<P>&nbsp;</P>
<P>有做动画的打算,导到SILO 2.1里重拓扑...MAX&nbsp; ZB都可以~~个人喜欢...</P>
<P>布线很重要....这个靠个人经验了.. </P>
<P><A href="http://img.blog.163.com/photo/c3-h6s_Ni2nfBN6lWMBy1g==/3718847392301664526.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/c3-h6s_Ni2nfBN6lWMBy1g==/3718847392301664526.jpg"></A></P>
<P><A href="http://img.blog.163.com/photo/rYlEnVvs4BalHSz3Z_4SzQ==/3718847392301664568.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/rYlEnVvs4BalHSz3Z_4SzQ==/3718847392301664568.jpg"></A></P>
<P>&nbsp;</P>
<P>送到UVL里分UV....UVL虽然分得快.但和分得好是两回事,要得到好的UV还是需要细心调节...</P>
<P><A href="http://img.blog.163.com/photo/Gz4bzPooVWOxvidDwUe2yQ==/4293337819768483485.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/Gz4bzPooVWOxvidDwUe2yQ==/4293337819768483485.jpg"></A></P>
<P>&nbsp;</P>
<P>OK~UV有了~再给ZB里雕刻~! -----呼~好麻烦的工序.我自己也觉得...哈哈~</P>
<P>今天先雕刻到这里~~很累~......</P>
<P><A href="http://img.blog.163.com/photo/-j9pJy7BYR7LebuYcOeMpw==/1759500079419251415.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/-j9pJy7BYR7LebuYcOeMpw==/1759500079419251415.jpg"></A></P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/733152752008829104051206</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/733152752008829104051206</guid>
    <pubDate>Mon, 29 Sep 2008 22:40:51 +0800</pubDate>
    <dcterms:modified>2008-09-29T22:40:51+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[SHOW SHOW]]></title>	
    <link>http://cys.cg.blog.163.com/blog/static/73315275200881601321934</link>
    <description><![CDATA[<div><P>&nbsp;</P>
<P>&nbsp;哈哈~show show本人装备图.</P>
<P><A href="http://img.blog.163.com/photo/P99xHxI9CxWd76sd3QCH1g==/5101733952881084034.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/P99xHxI9CxWd76sd3QCH1g==/5101733952881084034.jpg"></A></P></div>]]></description>
	    <author><![CDATA[C.Y.S]]></author>
	    <comments>http://cys.cg.blog.163.com/blog/static/73315275200881601321934</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://cys.cg.blog.163.com/blog/static/73315275200881601321934</guid>
    <pubDate>Tue, 16 Sep 2008 00:13:21 +0800</pubDate>
    <dcterms:modified>2008-09-16T00:13:21+08:00</dcterms:modified>
  </item>    
 </channel>
</rss>