指哪打哪的遊戲是如何實現的? 揭祕光槍背後的原理
第一代光槍與《打鴨子》
早在FC紅白機時期,就已經有光槍外設的存在了。與FC同捆發售的光槍外設具有手槍的外觀,因此在日本的命名為“光線銃”,而歐美的名稱則是“Zapper”。雖然它不是第一款光槍,但卻是第一代光槍中名氣最大的一款。儘管外形看上去是“槍”,名字裡面也包含“槍”,但它並不是真正的“槍”,只不過是一個攝像頭罷了。
Zapper光槍
那麼攝像頭是如何當做“槍”來使用的呢?大名鼎鼎的光槍遊戲《Duck Hunt》,也就是國內俗稱的《打鴨子》,相信絕大多數玩家都比較瞭解,下面就用《打鴨子》來分析一下第一代光槍的原理。
經典光槍遊戲《打鴨子》
首先要知道的是,對於遊戲來講,螢幕並不是一整塊的大區域,而是會被分為NxN的小區域。當玩家扣動光槍扳機時,螢幕會變成全黑色,這是用來檢測光槍是否正對著螢幕。隨後螢幕中的鴨子(目標區域)會依次變成白色,除了當前的鴨子是白色外,其他區域都是黑色。同一時刻最多隻能有一直鴨子變白色,這是為了保證當前檢測鴨子的唯一性。所有鴨子輪流變白一遍後,畫面恢復正常,整個過程大約持續0.1秒。在這段時間內,光槍中的攝像頭會去檢測正對著的物體是否是白色,如果是白色則判斷射擊命中鴨子,否則就判斷射擊落空。
4個狀態
這種檢測方式雖然巧妙,但是也存在著弊端:
1.因為光槍中攝像頭只判斷正對著的是否是白顏色,無法判斷光槍正對著的精確位置,也就是說在檢測瞬間對著白紙開槍也是會被系統判定為命中的。
2.這種遊戲的原理註定要利用螢幕閃爍才能實現,因此目標越多,閃爍就越厲害,對眼睛的傷害就越大。
實際效果
第二代光槍與陰極射線管
到了SFC超級任天堂時期,光槍也隨之得到了升級。但是第二代光槍Super Scope必須配合採用隔行顯示的CRT(陰極射線管)電視(俗稱“大腦袋”或者“大屁股”電視)才能使用。這裡知識點比較多,讓我們一步步來了解。
SFC的光槍Super Scope
- CRT電視的影象顯示原理
CRT(Cathode Ray Tube,陰極射線映象管)電視裡面有一根真空管,一個或多個電子槍。當電子槍射出的電子束轟擊熒光屏上時,就會讓螢幕內測的熒光粉發光,眾多的發光點按照一定的規則排布就形成了影象。
CRT電視原理
熒光粉受到高速電子的轟擊時會吸收能量,其中的電子會從低能級躍遷到高能級,但由於高能級非常不穩定,馬上又會從高能級回到低能級,並將能量以熒光(光能)的形式釋放出來。這就意味著電子束轟擊螢幕所能維持的發光時間是很短的,想要讓螢幕穩定的發光就必須持續發射電子束。
熒光原理
電子槍並不是同時發出大量電子束同時打在螢幕上的,而是從電視螢幕的左上角開始,由左至右、從上到下以Z字型的軌跡掃過整個螢幕的。由於人眼具有視覺暫留現象(Persistence of vision),即在看到光的作用結束後,視覺影響並不立即消失, 而是暫留時間約為0.1至0.4秒(中等亮度的光刺激),於是便能夠將螢幕上的發光點識別為一幅完整的影像。
掃描束
- 隔行顯示與逐行顯示
按照正常的思路思考,電子束應該就是一行接著一行地掃描的,但事實並非如此。CRT有PAL和NTSC兩種制式(區別見註釋1),這裡以國內國內使用的PAL制式說明,因為PAL電視垂直方向有625行掃描線,如果電子束一行一行地掃到最後一行最後一個點時,第一行第一個點可能早就熄滅了(頻寬不夠)。於是人們便想到了一個解決方式,那就是第一次掃描只掃描1,3,5的奇數行,第二次掃描只掃描2,4,6的偶數行,兩次疊加就能夠拼成完整的畫面了。因為這種掃描方式是間隔著掃描的,也就取名為“隔行掃描”(interlaced scan),而一行接著一行掃描的方式就叫做“逐行顯示”(progress scan)。
隔行掃描
常常聽到的480p和480i後面的字母就是表示掃描方式是逐行還是隔行。下面用一張動圖來直觀地表現一下這兩種掃描方式的差別,雖然用時相同,但是感覺卻是不同。假設顯示一張完整的圖(一幀畫面)需要10秒鐘,那麼在5秒鐘時,逐行掃描只能看到半個螢幕,剩下半個螢幕內容完全未知。但是隔行掃描已經可以大致猜出來要顯示的內容了,剩下的靠自己腦補就足夠了,無非就是一些細節可能猜不到而已(註釋2)。
逐行掃描與隔行掃描
註釋1:
PAL電視標準是:每秒25幀,電視掃描線為625線,奇場在前,偶場在後,標準的數字化PAL電視標準解析度為720*576, 24位元的色彩位深,畫面的寬高比為4:3, PAL電視標準用於中國、歐洲等國家和地區。
NTSC電視標準是:每秒29.97幀(簡化為30幀),電視掃描線為525線,偶場在前,奇場在後,標準的數字化NTSC電視標準解析度為720X486, 24位元的色彩位深,畫面的寬高比為4:3。NTSC電視標準用於美、日等國家和地區。
遊戲外包裝標明制式
註釋2:
隔行掃描上可能會使得二維碼顯示不完全,用手機掃描CRT電視上的二維碼無法識別就是這個原因。
隔行掃描無法識別二維碼
- 第二代光槍原理
雖然光槍槍口看上去較大,但是真正感受光的元件接收範圍還是很小的,光槍對準螢幕的範圍略大於兩行掃描線距離,因此隔行掃描時可以認定為對準的就是一個“點”。當玩家按下光槍扳機時,電視會先按照隔行掃描的方式繪製一個全白色的幀,當光槍收到白色訊號時,遊戲就可以計算出光槍對準的位置了。例如一行有10點,每個點掃描1秒,那麼當光槍在第25秒收到白色訊號時,就可以推算出它在第3行第5列。當然這只是為了便於理解的簡化模型,實際上還要考慮消隱時間、掃描線迴歸時間等等。
紅色代表白色訊號的掃描方式(簡化)
如果遊戲判斷光槍位置與遊戲目標位置相同,那麼就判定為命中了。這種光槍的優點就在於精確度更高,而且不會出現第一代光槍那種作弊漏洞。而採用這種方式製作的遊戲,也不用頻繁重新整理畫面,也不那麼累眼睛。
SFC光槍遊戲
第三代光槍與紅外線
隨著科技的進步,CRT電視逐漸被背投電視、等離子電視和液晶電視所取代,第二代光槍就很難有用武之地了。這時任天堂又推出了不依靠CRT電視就可以遊玩的第三代光槍,也就是2006年誕生的,以體感為賣點的Wii。與之前的主機與光槍配件的搭配形式不同,這次手柄與光槍合二為一,既可以當做控制器,又可以當做光槍。
任天堂Wii
Wii主機上的黑色條狀部件叫做感應條(sensor bar),裡面左右分別裝有一個紅外線LED。當用Wii手柄的前方對準螢幕時,手柄前方的紅外攝像頭會根據感應條中的兩個LED光源的位置進行計算,從而得出手柄前方正對著的位置。需要說明的是,平時Wii手柄與Wii主機是通過藍芽連結,而非紅外線,所以玩非光槍類遊戲沒有必要將手柄正對著螢幕。
Wii手柄配合支架
如果Wii的感應條失靈了的話,也有一些奇葩方式來修復,其中一種就是使用兩個蠟燭來代替感應條中的紅外線LED。
蠟燭代替紅外光源
在一些大型電玩廣場裡經常能夠看到光槍遊戲,《VR特警》和《死亡之屋》就是兩款非常流行的遊戲。其實街機光槍遊戲也有CRT顯示器和液晶兩種,前者的原理同前兩代光槍,後者的原理類似於Wii。
街機光槍遊戲
擴充知識
索尼在PS3和PS4平臺都推出了相應的體感外設控制器PS Move,配合槍托可以當做光槍來使用,但是原理卻與前面提到的有所不同。PS Move前端配備會發出不同顏色光線的圓球,配套的PS Eye攝像頭會以2D影像辨識方式追蹤圓球位置。也就是說這種是通過攝像頭來進行捕捉,與微軟的Kinect的原理頗為類似。
PS Move
光槍遊戲興起與衰落
光槍遊戲曾經風靡世界,但現在已經比較小眾了,這都是其玩法機制導致的。常見的光槍遊戲有兩種,一種是類似於《打鴨子》,場景固定,只能守候目標出現。這種機制註定了遊戲內容不會太深,放到一些娛樂場所供大眾遊玩或者比賽效果還是不錯的,但是長時間玩容易感到單調。
固定背景
另一種類似於《VR特警》,玩家雖然也只能等候目標出現,但是遊戲場景是變化的。玩家不能控制鏡頭畫面,只能根據遊戲自身進度進行前進、後退、轉身等等,因此這類也叫作“軌道式射擊”。
軌道式射擊
軌道式射擊可以根據玩家的操作來決定接下來的行走路線,大大豐富了遊戲的內容。很多大型遊戲中心都會置備幾臺這種遊戲,早年的《死亡之屋》和《VR特警》非常普及,之後也出現了螢幕更大,效果更好的《第一滴血》,近幾年還出現了可以坐在車上的《叢林冒險》和《海盜大冒險》,更有支援4人聯機、帶有駕駛艙的《光環:渡鴉小隊》。一些玩家會因好奇心而體驗一下,但很少見到反覆遊玩的。
《光環:渡鴉小隊》大型駕駛艙
光槍遊戲可以說是時代的產物,在電子遊戲還處於早期階段時,使用手柄遊玩射擊遊戲是比較困難的。光槍外設的出現讓玩家可以憑藉身體本能進行遊玩,指哪打哪的體驗非常好。但隨著電子遊戲不斷髮展,遊戲的操作越來越複雜,單憑光槍一個扳機鍵已經無法滿足遊戲的需要了,加上鍵盤與滑鼠的出現,可以實現更加快速精準的打擊,光槍遊戲逐漸邊緣化,更加偏向體驗和休閒。感謝光槍遊戲在那個時代帶給我們的快樂,期待光槍遊戲在未來能夠有所突破。
來源:AGamer
原地址:https://www.toutiao.com/a6799169452416958988/
相關文章
- 揭祕電子遊戲背後音效製作的故事遊戲
- 漲知識了!Wi-Fi背後的原理揭祕!
- 遊戲AI的生命力源自哪裡?為你揭開MOBA AI的祕密!遊戲AI
- 揭祕.NET Core剪裁器背後的技術
- 小牛互娛團隊揭祕:遊戲屢創佳績的背後邏輯遊戲
- 揭祕氪金遊戲的背後,隱藏著哪些不為人知的內幕?遊戲
- 為你揭祕小程式音視訊背後的故事......
- 揭祕 · 外賣系統背後的AI人工智慧AI人工智慧
- 揭祕全球最大網站Facebook背後的那些軟體網站
- 快照是什麼?揭祕儲存快照的實現
- HttpServletRequest中的方法是哪個類實現的?HTTPServlet
- 美國爆紅手機遊戲背後的祕密遊戲
- 谷歌Allo的“智商”哪兒來?人工智慧技術大揭祕谷歌人工智慧
- 揭祕山姆會員店,棄售活鮮背後的思考
- 首次揭祕!阿里無人店系統背後的技術阿里
- 揭祕移動電商背後的資料生存指南——資訊圖
- 重製遊戲還要重現 Bug?!揭祕遊戲重製的幕後故事遊戲
- 熱門VR遊戲背後的五個祕密VR遊戲
- 做業務、做技術和打雜,你的職場現狀是哪種?
- 揭祕 Twitter 背後的基礎設施:效率與優化篇優化
- 深度揭祕亂碼問題背後的原因及解決方式
- 聊一聊Unity協程背後的實現原理Unity
- 揭祕webpack外掛的工作原理Web
- 實現原理揭祕:如何用Unity製作逼真的自然場景?Unity
- 獨家 | 揭祕2021雙11背後的資料庫硬核科技資料庫
- [譯] JavaScript 是如何工作的:CSS 和 JS 動畫背後的原理 + 如何優化效能JavaScriptCSSJS動畫優化
- 【原始碼分析】Lottie 實現炫酷動畫背後的原理原始碼動畫
- 揭秘仿比心app原始碼的開發背後,功能是如何實現的APP原始碼
- Google“快一億倍”背後:量子計算到底是如何實現的?Go
- win10哪個版本打遊戲好?windows10玩遊戲哪個版本好用Win10遊戲Windows
- 揭祕Stripe欺詐檢測系統背後的機器學習演算法 - quastor機器學習演算法AST
- 【雲中論道】揭祕短視訊爆紅背後的技術支柱
- 當程式設計師老去 揭祕不為人知背後的辛酸故事程式設計師
- inject 不生效?!依賴注入背後的實現原理和執行邏輯是怎樣的?依賴注入
- firewalld: 背後的原理(nftables)
- 嘀嗒出行:營收風光的背後實則夾縫生存營收
- 3年發行5個爆款,揭祕小團隊成功背後的推手
- 不敢閱讀 npm 包原始碼?帶你揭祕 taro init 背後的哲學NPM原始碼