《超級瑪麗 3》使用了什麼樣的技術可以在 128K 中寫進這麼多東西? | 知乎問答精選

 

A-A+

《超級瑪麗 3》使用了什麼樣的技術可以在 128K 中寫進這麼多東西?

2018年12月24日 知乎問答精選 暫無評論 閱讀 5 ℃ 次

【何皮皮的回答(321票)】:

我寫過FC模擬器,對這個比較瞭解。

  • 代碼部分: 全是手寫的6502彙編,要多精簡有多精簡。

  • 聲音部分: FC有兩路方波生成器,一路三角波生成器,一路隨機噪聲,一路PCM。PCM採樣可以實現很好的效果,但數據量巨大,所以大多數遊戲沒用。用方波/三角波來發聲就類似最簡單的MIDI音樂,數據量很小。
  • 圖形部分: 這是主要占卡帶容量的部分,下面簡單說一下

    • FC的圖形處理單元以sprite的方式組織圖像,程序能控制的最小顯示單位不是一個點,而是8x8的sprite。
    • 「那整個畫面捲動的時候不是應該一塊一塊(8像素)的跳動嗎?」——PPU另外有卷軸寄存器,可以按像素級指定捲動的量。也就是說sprite雖然是8x8的,但在屏幕上不見得總是對齊到8x8的格子裡。
    • 事實上通過控制卷軸寄存器,結合
    • sprite裡具體每個點的顏色也不像現在是豪華的16位或32位RGB直接指定,而是一個2bit的索引,從一個16色的調色板裡選。
    • 既然是2bit的索引值,最多就只能指定4色。而且因為00固定代表透明,所以實際上最多只有3色。
    • 那為啥要用到16色的調色板?實際上是4個4色的調色板。每4個相鄰的sprite(16x16)可以從這4個調色板裡指定一個。所以你去數,FC的一個16x16 sprite裡最多只能顯示4種顏色,因此會有那種經典的單調感。
    • 16色的調色板有兩個,一個背景層用,一個角色層用。調色板從FC PPU固定死的64種顏色中選取顏色。因為這64個顏色裡黑色/透明重複了多次,所以實際不同的顏色只有54種。
    • 不管你看沒看暈,上面的重點是,FC遊戲裡面一個像素只佔用2bit的卡帶空間。
    • 並且因為所有顯示內容都按sprite組織,大大方便重複使用。要顯示形狀一模一樣的兩朵雲,或者幾十個磚塊,只需要在顯存裡重複寫下這些sprite的編號,而不是重複sprite的數據(8x8x2/8=16byte)
    • 因為調色板的存在,形狀一樣而顏色不同的圖案也不需要占額外的空間,只要設置一下調色板就行了,包括變色的效果也是這樣做的。紅色的Mario和綠色的Luigi就是同一套Sprite。
    • 透明、滾動、前後景疊加、碰撞檢測都是PPU完成,不需要另外寫程序。
    • sprite的數據也不存在由CPU從卡帶讀入到RAM的過程(除了後期的磁碟機),而是直接由卡帶映射到FC的64KB地址空間進行訪問。不同的卡帶硬件(所謂的mapper)支持由程序控制將卡帶上的不同地址映射到FC的同一地址空間,所以儘管8位的FC只有64KB尋址能力,但卡帶容量可以做到256KB甚至更大。

所以說白了就是在當年技術條件有限的情況下,實現了各種基礎的圖像壓縮算法,以及對開發人員要求極高的數據重用……

之所以美版魂斗羅只有128KB容量,而日版有256KB,就是因為美版砍掉了日版裡的各種片頭/過場/片尾的動畫和圖案。對,本人目前的頭像就是被美版Contra精簡掉的內容之一。

【李鴻章的回答(34票)】:

感謝邀請, 對FC 開發其實不熟, 翻了點資料, 隨便吐槽一下. 如有疏漏歡迎指正, 補充

先來瞭解下FC 的技術參數:

FC使用一顆理光製造的8位的6502中央處理器,PAL制式機型運行頻率為1.773447MHz,NTSC制式機型運行頻率為1.7897725MHz,內存和顯存為2KB。

FC有一顆可顯示64種顏色的圖像控制器(PPU),畫面可顯示2層卷軸和5個頁面,其中2個背景頁面各佔用1KB顯存;由於顯存的限制,最多只能顯示16種顏色。

FC遊戲通常以只讀內存形式存放於可插在主機插槽上的遊戲卡中,容量有LA系列24K,LB系列40K,LC系列48K,LD系列64K,LE系列80K,LF系列128K,LG系列160K,LH系列256K,特卡系列和多合一卡帶等。還有一些帶有電池用來保存遊戲進度。

超級瑪麗3 是1988年出來的, 128K 在當時已經算是FC上的大作. 8位機的極限內存尋址是256k, 所以當時128k 已經是"龐大"的容量, 就如同32位機時代初期, 開發一個使用2G內存的遊戲一樣的感覺. 只是由於摩爾定律, 讓現在的我們覺得不可思議而已.

由於當時的開發都是使用彙編語言, 彙編開發更加需要考慮性能和空間的問題, 所以整個遊戲的邏輯代碼會很精簡. 而在當時分辨率下, 16色圖片的資源量很小. 再通過顯存的大小我們可以看出來, 最大的資源都不可能超過2KB.

不得不說, 在當時這樣"惡劣"的環境底下, 能開發出來至今依然讓人覺得精美好玩的遊戲, 的確是很強大. 宮本茂大叔的確不是徒有虛名.=D

【見證了歷史的回答(2票)】:

其實代碼占的容量遠沒你想像的大,就是後來PS和土星年代,一張CDROM裡遊戲代碼部分也只幾十MB,其它都是動畫和音樂占容量

標籤:-遊戲開發 -超級馬裡奧(SuperMario)


相關資源:





給我留言