1. 程式人生 > >讓你徹底明白什麼叫遊戲引擎(2)

讓你徹底明白什麼叫遊戲引擎(2)

二、引擎的進化

    曾經有一段時期,遊戲開發者關心的只是如何儘量多地開發出新的遊戲並把它們推銷給玩家。儘管那時的遊戲大多簡單粗糙,但每款遊戲的平均開發週期也要達到8到10個月以上,這一方面是由於技術的原因,另一方面則是因為幾乎每款遊戲都要從頭編寫程式碼,造成了大量的重複勞動。漸漸地,一些有經驗的開發者摸索出了一條偷懶的方法,他們借用上一款類似題材的遊戲中的部分程式碼作為新遊戲的基本框架,以節省開發時間和開發費用。根據馬老先生的生產力學說,單位產品的成本因生產力水平的提高而降低,自動化程度較高的手工業者最終將把那些生產力低下的手工業者淘汰出局,引擎的概念就是在這種機器化作業的背景下誕生的。

    每一款遊戲都有自己的引擎,但真正能獲得他人認可併成為標準的引擎並不多。縱觀九年多的發展歷程,我們可以看出引擎最大的驅動力來自於3D遊戲,尤其是3D射擊遊戲。儘管像Infinity這樣的2D引擎也有著相當久遠的歷史,從《博德之門》(Baldur’s Gate)系列到《異域鎮魂曲》(Planescape:Torment)、《冰風谷》(Icewind Dale)直至今年夏天將要釋出的《冰風谷2》,但它的應用範圍畢竟侷限於“龍與地下城(專區)”風格的角色扮演遊戲,包括頗受期待的《夜在絕冬城》(Neverwinter Nights)所使用的Aurora引擎,它們都有著十分特殊的使用目的,很難對整個引擎技術的發展起到推動作用,這也是為什麼體育模擬遊戲、飛行模擬遊戲和即時策略遊戲的引擎很少進入授權市場的原因,開發者即便使用第三方引擎也很難獲得理想的效果,採用《帝國時代2》(Age of Empires)引擎製作的《星球大戰:銀河戰場》(Star Wars:Galactic Battleground)就是一個最好的例子。

    因此,下面對引擎的歷史回顧將主要圍繞動作射擊遊戲的變遷展開,動作射擊遊戲同3D引擎之間的關係相當於一對孿生兄弟,它們一同誕生,一同成長,互相為對方提供著發展的動力。

引擎的誕生(1992年~1993年)

    1992年,3D Realms公司/Apogee公司釋出了一款只有2兆多的小遊戲——《德軍司令部》(Wolfenstein 3D),稍有資歷的玩家可能都還記得初接觸它時的興奮心情,用“革命”這一極富煽動色彩的詞語也無法形容出它在整個電腦遊戲發展史上佔據的重要地位。這部遊戲開創了第一人稱射擊遊戲的先河,更重要的是,它在X軸和Y軸的基礎上增加了一根Z軸,在由寬度和高度構成的平面上增加了一個向前向後的縱深空間,這根Z軸對那些看慣了2D遊戲的玩家造成的巨大沖擊可想而知。

    Wolfenstein 3D引擎的作者是大名鼎鼎的約翰·卡馬克,這位id Software公司的首席程式師正是憑藉這款Wolfenstein 3D引擎在遊戲圈裡站穩了腳跟。事實上,《德軍司令部》並非第一款採用第一人稱視角的遊戲,在它發售前的幾個月,Origin公司就已經推出了一款第一人稱視角的角色扮演遊戲——《創世紀:地下世界》(Ultima Underworld),這款角遊戲採用了類似的技術,但它與Wolfenstein 3D引擎之間有著相當大的差別,舉例來說,《地下世界》的引擎支援斜坡,地板和天花板可以有不同的高度,分出不同的層次,玩家可以在遊戲中跳躍,可以擡頭低頭,這些特性Wolfenstein 3D引擎都無法做到,而且從畫面上看,《德軍司令部》更接近漫畫風格而不是傳統的畫素畫面。

    儘管從技術細節上看,Wolfenstein 3D引擎比不上《創世紀:地下世界》的引擎,但它卻更好地利用了第一人稱視角的特點,快速火爆的遊戲節奏使人們一下子記住了“第一人稱射擊遊戲”這個單詞,而不是“第一人稱角色扮演遊戲”。《德軍司令部》後來還發布過一款名義上的續集——《三元的崛起》(Rise of the Triad),這款遊戲在Wolfenstein 3D引擎的基礎上增加了許多重要特性,包括跳躍和擡頭低頭等動作。

    引擎誕生初期的另一部重要遊戲同樣是出自id Software公司的一款非常成功的第一人稱射擊遊戲——《毀滅戰士》(Doom)。Doom引擎在技術上大大超越了Wolfenstein 3D引擎,《德軍司令部》中的所有物體大小都是固定的,所有路徑之間的角度都是直角,也就是說你只能筆直地前進或後退,這些侷限在《毀滅戰士》中都得到了突破。儘管遊戲的關卡還是維持在2D平面上進行製作,沒有“樓上樓”的概念,但牆壁的厚度可以為任意,並且路徑之間的角度也可以為任意,這使得樓梯、升降平臺、塔樓和戶外等各種場景成為可能。

    由於Doom引擎本質上依然是二維的,因此可以做到同時在螢幕上顯示大量角色而不影響遊戲的執行速度,這一特點為遊戲創造出了一種瘋狂刺激的動作風格,在這方面迄今為止大約只有《英雄薩姆》(Serious Sam)系列能與之相比,除此之外還沒有哪款3D引擎能在大批敵人向你湧來的時候依然保持遊戲的流暢,這也是為什麼如今市面上的大部分第一人稱射擊遊戲都在積極地培養玩家的戰術運用能力、提高玩家的射擊準確率而拒絕濫砍濫殺的主要原因之一。值得一提的是,儘管Doom引擎缺乏足夠的細節度,但開發者仍然在《毀滅戰士》中表現出了驚人的環境效果,其純熟的設計技巧實在令人讚歎。

    不過更值得紀念的是,Doom引擎是第一個被用於授權的引擎。1993年底,Raven公司採用改進後的Doom引擎開發了一款名為《投影者》(ShadowCaster)的遊戲,這是遊戲史上第一例成功的嫁接手術。1994年Raven公司採用Doom引擎開發《異教徒》(Heretic),為引擎增加了飛行的特性,成為跳躍動作的前身。1995年Raven公司採用Doom引擎開發《毀滅巫師》(Hexen),加入了新的音效技術、指令碼技術以及一種類似集線器的關卡設計,使你可以在不同關卡之間自由移動。Raven公司與id Software公司之間的一系列合作充分說明了引擎的授權無論對於使用者還是開發者來說都是大有裨益的,只有把自己的引擎交給更多的人去使用才能使引擎不斷地成熟起來。

    《毀滅戰士》系列本身就相當成功,大約賣了350萬套,而授權費又為id Software公司帶來了一筆可觀的收入。在此之前引擎只是作為一種自產自銷的開發工具,從來沒有哪家遊戲商考慮過依靠引擎賺錢,Doom引擎的成功無疑為人們打開了一片新的市場。

相關推薦

徹底明白什麼遊戲引擎

二、引擎的進化     曾經有一段時期,遊戲開發者關心的只是如何儘量多地開發出新的遊戲並把它們推銷給玩家。儘管那時的遊戲大多簡單粗糙,但每款遊戲的平均開發週期也要達到8到10個月以上,這一方面是由於技術的原因,另一方面則是因為幾乎每款遊戲都要從頭編寫程式碼,造成了大量的重複勞動。漸漸地,一些有經驗的開發者

看完徹底搞懂Websocket原理

轉自:看完讓你徹底搞懂Websocket原理 偶然在知乎上看到一篇回帖,瞬間覺得之前看的那麼多資料都不及這一篇回帖讓我對 websocket 的認識深刻有木有。所以轉到我部落格裡,分享一下。比較喜歡看這種部落格,讀起來很輕鬆,不枯燥,沒有佈道師的陣仗,純粹為分享。廢話這麼多了,最後再贊一個~

徹底明白p++,*p++等 經典例子:char str []="Orange or Apple?";徹底明白p++,*p++

總體來說,對於char型別 的指標是 比較特別的: p++就是指標的移位,cout<<*p:就是取出指標當前值得元素cout<<p:就是這個指標指向的全部字元; 例子: #include <iostream> using namesp

徹底明白JAVA中堆與棧的區別

java程序 運行 一點 動態 自動變 key 空間 類型 lin 原文地址:http://www.2cto.com/kf/201302/190704.html 簡單的說: Java把內存劃分成兩種:一種是棧內存,一種是堆內存。 在函數中定義的一些基本類型的變量和對象的引用

[精]--這一次,徹底明白Java的值傳遞和引用傳遞!

本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆有;這讓人有點摸不著頭

8句話徹底明白什麼是大資料營銷

這個時代搞營銷就像是在做一道未知口味的超級大蛋糕,而營銷手段就好比不同的口味的配料,隨著個人的喜好不同,配出的味道也將會不一樣,但這個蛋糕終歸是要拿到桌面上去品嚐,所以在海量的人群資訊中如何具有針對性的讓潛在客戶看見並接受呢? 答案就是大資料的運用。隨著移動網際網路的發展和移動智慧裝置軟硬體功能的不斷完善,

8句話徹底明白什麽是大數據營銷

合作 信息部 制造 提升 威脅 都是 產品 ado tex 這個時代搞營銷就像是在做一道未知口味的超級大蛋糕,而營銷手段就好比不同的口味的配料,隨著個人的喜好不同,配出的味道也將會不一樣,但這個蛋糕終歸是要拿到桌面上去品嘗,所以在海量的人群信息中如何具有針對性的讓潛在客戶看

WeCode線上少兒程式設計|徹底明白什麼才是真正的少兒程式設計?

少兒程式設計,通常指的是少兒程式設計教育。少兒程式設計教育是通過程式設計遊戲啟蒙、視覺化圖形程式設計等課程,培養學生的計算思維和創新解難能力的課程。少兒程式設計教育並不是要培養未來的程式設計師,而是讓孩子能掌握新科技並應用新科技表達自己,由科技時代的消費者轉變為創造者;同時,少兒程式設計是培養小朋友

C#之徹底明白物件,類,例項化的區別及聯絡

一、前言 在學習類的時候我們肯定離不開物件,它們之間的關係是非常緊密的,要想知道類那麼就一定要知道物件,從物件入手慢慢向類延申,讓你徹底明白類物件和類的聯絡又明白他們的區別。 二、物件和類 物件和類的區別 1,類是一個抽象的概念,它不存在於現實中的時間/空間裡,類只是為所有的物件

Android設計模式之一個例子徹底明白工廠模式(Factory Pattern)

提出疑問 這幾天研究工廠模式的時候,看到網上的一些文章中舉的例子我就很疑惑,我相信這也是許多人的疑惑:工廠模式的功能就是建立例項,我們建立例項直接new不就完了嗎,幹嘛還得再封裝一層工廠類,然後用工廠類再去new出這個例項?這不多此一舉嗎? 比如我看到這樣的

Android設計模式之一個例子徹底明白裝飾者模式(Decorator Pattern)

導讀 這篇文章中我不會使用概念性文字來說明裝飾者模式,因為通常概念性的問題都很抽象,很難懂,使得讀者很難明白到底為什麼要使用這種設計模式,我們設計模式的誕生,肯定是前輩們在設計程式的時候遇到了某種困難,為了避免這種苦難的發生,從而設計出來的這種設計模式,所以這

通俗易懂的徹底明白介面回撥機制

轉載請註明出處:flowsky37的部落格,尊重他人辛苦勞動! 介面回撥簡單理解就是:類A中呼叫B類的中方法C,而B又反過去呼叫A中的方法D,然後D稱為A的回撥方法。是不是心中有一萬隻草泥馬在奔騰,到底說的是什麼。感覺像是你中有我,我中有你,糾

一個例子徹底明白原型物件和原型鏈

function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = function() {

一篇文章徹底明白區塊鏈有哪些應用場景

    Ripple: 區塊鏈跨境支付與外匯結算系統   Ripple為銀行類金融機構提供跨境支付服務,希望取代環球同業銀行金融電訊協會(SWIFT)的跨境轉賬平臺,打造全球統一的網路金融傳輸協議;利用Ripple的跨賬本協議(Interledger Protocol),所有參與者都能看到同一個賬本,銀

一個例項徹底明白Activity的4種啟動模式

首先,我們得有一個概念,就是啟動的Activity都是放在相應的任務棧中。按Back鍵的時候Activity會從任務棧中返回,當任務棧為空時系統就會回收這個任務棧。 那麼我們為什麼需要這4中啟動模式呢?我們新建Activity的並在Androidmanifes

Async和Await如何簡化非同步程式設計,幾個例項徹底明白

部落格園 引言 C#5.0中async和await兩個關鍵字,這兩個關鍵字簡化了非同步程式設計,之所以簡化了,還是因為編譯器給我們做了更多的工作,下面就具體看看編譯器到底在背後幫我們做了哪些複雜的工作的。 同步程式碼存在的問題 對於同步的程式碼,大家

Netty實戰入門詳解——徹底記住什麼是Netty看不懂來找我

一、Netty 簡介 Netty 是基於 Java NIO 的非同步事件驅動的網路應用框架,使用 Netty 可以快速開發

多角度徹底明白yield語法糖的用法和原理及在C#函數語言程式設計中的作用

如果大家讀過dapper原始碼,你會發現這內部有很多方法都用到了yield關鍵詞,那yield到底是用來幹嘛的,能不能拿掉,拿掉與不拿掉有多大的差別,首先上一段dapper中精簡後的Query方法,先讓大家眼見為實。 private static IEnumerable<T> Qu

深入LUA指令碼語言,徹底明白除錯原理

這是道哥的第008篇原創 ![](http://ql815naye.hn-bkt.clouddn.com/wechat-qrcode.png) ## 一、前言 上篇文章我們聊了[gdb的底層除錯機制](https://mp.weixin.qq.com/s/oY2pF5ilk8UCq09022Tt6w

的python程式碼更優雅pythonic—— 基於PEP8

  寫出優雅的程式碼,自己除錯bug更加容易,也便於別人檢視,下面談談一下讓程式碼更加優雅的寫法,主要是基於 PEP8。     1,縮排與換行,每級縮排使用4個空格。 # yes: # 續行與其包裹元素要對齊 foo = long_function_name(var_one