<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; 梁跃</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/475654/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 13:40:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>聊一聊引擎的开发</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/05/04/400003693/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/05/04/400003693/#comments</comments>
		<pubDate>Tue, 04 May 2010 02:06:50 +0000</pubDate>
		<dc:creator>梁跃</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[图形和视觉计算]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[多核]]></category>
		<category><![CDATA[视觉运算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/05/04/400003693/</guid>
		<description><![CDATA[昨天和同事无意中聊到开发引擎使不是一件容易的事情。 我想首先需要搞清楚的是什么是引擎。早在上世纪80、90年代，那时候的游戏开发都是从头来做，没有什么引擎，后来一些聪明的开发者把个个游戏中共用的部分独立出来，包装成了一个函数库并提供一组API共二次开发者调用，这边有了引擎。也就是说引擎的本质概念就是一个能够在不同游戏项目中，或者至少是同类型游戏中重用函数库而已。 而今的现代游戏引擎则更加复杂，它融入了游戏开发的各个模块系统，资源管理系统，渲染系统，物理系统，声音系统，等等。这些系统有些容易实现一些，有些较为复杂，而且它们之间有时候并不是完全隔绝独立的，更过的是相互交融配合，互为支持。更为重要的是，一个完整的引擎还要有完备的工具，什么场景编辑器，特效编辑器，角色编辑器等等。 现在回过头来说说开发一个引擎使不是件容易的事情。怎么说呢，总的来说还是一件比较有挑战的事情。从两方面说一方面是引擎的架构设计前面讲过了引擎是由各个系统组成，它们之间存在着或多或少的关系，这就需要良好的架构设计，使各个系统最大限度保持独立，同时在相互调用相互支撑更加自然协调，做到这一点其实并不容易，没有一些年的经验是很难做到的。在有就是实现层面，小到一个函数的定义，变量的声明大到工具的易用性等工作量也着实不小。以我的经验，一套3D引擎，不含任何逻辑部分，再加上编辑器代码，大约是15w~20w行左右. 如果认为开发引擎很容易，我觉得也许只有卡马克才有资格，他能够在短时间内重写一个引擎。而除此之外认为做引擎很容易，要么是一位还不为人所知神人，要么就还没从有头到尾写过真正的引擎，或者能够拿得出手的引擎。毕竟现实摆在我们面前全人类牛逼引擎也超不过15个。而大家耳熟能详的quake，unreal, cryengine，这些当代牛逼引擎也经过若干年甚至十几年的不断进化才来的。 至于说做一些特别玄的效果是很容易的事情，我觉得这个要从几个方面来说，如果是shader实现的特效，比如hdr，那么这当然是很容易的，至少有大量现成的shader代码可以使用，你只要加进去就行了。如果是一些算法性比较强的比如一些光影响效果等，如果仅仅是一个单纯的展示，写个几千行甚至上万行的程序，就仅仅展示这一项（就像很多论文中的试验程序那样），这时的难度不是如何架构如何编码，而是你算法，如果你参考的是别人的论文自己去实现这个demo，那么难度在于你对算法理解能力，当然这些的前提是你的编码不成问题，是一个C/C++的老手。 而真正的引擎考虑的层面要远比这个高，它需要考虑这个特性与引擎其他部分的关系，调用过程，如何设计才能更加合理，什么样的实现方式才能更加高效简洁，增加这个特性对引擎的性能带来的影响，对引擎开放的接口会带来哪些变化，对工具制作带来的操作，文件数据格式的变化等等等等，一些列问题，使一个通盘的问题。效果的展示仅仅是开始，而不是结束!!! 那么要制作一个引擎到底需要什么？钱？时间?，呵呵，这些是需要的，毕竟不能饿着肚子干，但仅仅需要这些那岂不是遍地都是牛逼的引擎了。最需要的是坚持与韧性！！！在不断的设计编码过程中来完善修正，甚至推翻再来，追求极致的过程。 要想制作出色的引擎 1. 对引擎及引擎各个系统深刻的理解，知道他需要做什么，或者说只需要做什么，这个直接决定了你做的是引擎，还是一个大杂烩。 2. 对引擎及各个系统的结构性设计，这很重要，决定了你引擎的生命力。 3. 功底还算深厚的C/C++编程 4. 那就是你的执著与毅力了 前三条是可以学习，进步，提高的，关键在于第四条！]]></description>
			<content:encoded><![CDATA[<p>昨天和同事无意中聊到开发引擎使不是一件容易的事情。</p>
<p>我想首先需要搞清楚的是什么是引擎。早在上世纪80、90年代，那时候的游戏开发都是从头来做，没有什么引擎，后来一些聪明的开发者把个个游戏中共用的部分独立出来，包装成了一个函数库并提供一组API共二次开发者调用，这边有了引擎。也就是说引擎的本质概念就是一个能够在不同游戏项目中，或者至少是同类型游戏中重用函数库而已。</p>
<p>而今的现代游戏引擎则更加复杂，它融入了游戏开发的各个模块系统，资源管理系统，渲染系统，物理系统，声音系统，等等。这些系统有些容易实现一些，有些较为复杂，而且它们之间有时候并不是完全隔绝独立的，更过的是相互交融配合，互为支持。更为重要的是，一个完整的引擎还要有完备的工具，什么场景编辑器，特效编辑器，角色编辑器等等。</p>
<p>现在回过头来说说开发一个引擎使不是件容易的事情。怎么说呢，总的来说还是一件比较有挑战的事情。从两方面说一方面是引擎的架构设计前面讲过了引擎是由各个系统组成，它们之间存在着或多或少的关系，这就需要良好的架构设计，使各个系统最大限度保持独立，同时在相互调用相互支撑更加自然协调，做到这一点其实并不容易，没有一些年的经验是很难做到的。在有就是实现层面，小到一个函数的定义，变量的声明大到工具的易用性等工作量也着实不小。以我的经验，一套3D引擎，不含任何逻辑部分，再加上编辑器代码，大约是15w~20w行左右.</p>
<p>如果认为开发引擎很容易，我觉得也许只有卡马克才有资格，他能够在短时间内重写一个引擎。而除此之外认为做引擎很容易，要么是一位还不为人所知神人，要么就还没从有头到尾写过真正的引擎，或者能够拿得出手的引擎。毕竟现实摆在我们面前全人类牛逼引擎也超不过15个。而大家耳熟能详的quake，unreal, cryengine，这些当代牛逼引擎也经过若干年甚至十几年的不断进化才来的。</p>
<p>至于说做一些特别玄的效果是很容易的事情，我觉得这个要从几个方面来说，如果是shader实现的特效，比如hdr，那么这当然是很容易的，至少有大量现成的shader代码可以使用，你只要加进去就行了。如果是一些算法性比较强的比如一些光影响效果等，如果仅仅是一个单纯的展示，写个几千行甚至上万行的程序，就仅仅展示这一项（就像很多论文中的试验程序那样），这时的难度不是如何架构如何编码，而是你算法，如果你参考的是别人的论文自己去实现这个demo，那么难度在于你对算法理解能力，当然这些的前提是你的编码不成问题，是一个C/C++的老手。</p>
<p>而真正的引擎考虑的层面要远比这个高，它需要考虑这个特性与引擎其他部分的关系，调用过程，如何设计才能更加合理，什么样的实现方式才能更加高效简洁，增加这个特性对引擎的性能带来的影响，对引擎开放的接口会带来哪些变化，对工具制作带来的操作，文件数据格式的变化等等等等，一些列问题，使一个通盘的问题。效果的展示仅仅是开始，而不是结束!!!</p>
<p>那么要制作一个引擎到底需要什么？钱？时间?，呵呵，这些是需要的，毕竟不能饿着肚子干，但仅仅需要这些那岂不是遍地都是牛逼的引擎了。最需要的是坚持与韧性！！！在不断的设计编码过程中来完善修正，甚至推翻再来，追求极致的过程。</p>
<p>要想制作出色的引擎</p>
<p>1. 对引擎及引擎各个系统深刻的理解，知道他需要做什么，或者说只需要做什么，这个直接决定了你做的是引擎，还是一个大杂烩。</p>
<p>2. 对引擎及各个系统的结构性设计，这很重要，决定了你引擎的生命力。</p>
<p>3. 功底还算深厚的C/C++编程</p>
<p>4. 那就是你的执著与毅力了</p>
<p>前三条是可以学习，进步，提高的，关键在于第四条！</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/05/04/400003693/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

