2d遊戲中如何實現類似光照的效果,類似燈籠,火啊?


之前在專欄上寫過相關文章:Light of Sight - 2D光影 - 獨立遊戲大像素 - 知乎專欄,貼一部分出來:

光影在2D遊戲中就比較少見了,因為2D的圖片只能儲存到X和Y軸的信息,但3維空間當中的法線對3D光影的計算是必不可少的,所以3D的演算法並不能直接地應用到2D當中。

由於緯度的缺失,2D註定沒有辦法製造真實的光影效果,但是在遊戲這個領域,真實未必是王道。所以現有的2D光影技術,都是在利用2維的數據,製造出光影的感覺。

我所了解的2D方案有兩種:

  1. 一種是類似於獨立遊戲Luminesca和Monaco:What"s Yours Is Mine的「2D光源」; 這個方案的核心在於對阻礙物邊緣的檢測,常用raycast演算法,計算量相對後者,甚至於3D,都會更大。
  2. 另一種是類似於Confederate Express和Legend of Dungeon的Normal Map。它的核心在於下圖左下角的那三個人,五顏六色的是normal map,它的rbg通道並不用來記錄顏色,而是用來記錄人物的XYZ的數據,也就是三維的信息。有了這些信息,就可以計算出每一個點的法線,也就可以用3D的演算法了。

(左上角為Luminesca,右上角為Monaco: What"s Yours Is Mine,左下角為Confederate Express,右下角為Legend of Dungeon。)

如果你對第一種方案感興趣,可以看看我寫的一個開源的Unity插件:f15gdsy/2D-Light-of-Sight-Unity · GitHub,可以實現:

這樣的效果


做一個rgb是黑色,帶有一個alpha通道是glow圓形漸變的mask圖照在最上層。


上面的幾個回答似乎都是指的靜態光照,

如果你是要動態光照的話,可以稍微搜索下關鍵詞"2d dynamic lighting",這兩年對應的工具和技術都比較成熟了。

SpriteLamp是一個不錯的開始 Sprite Lamp


簡單呀,一般弄一個透明圖片帖上去,紋理動畫。少量的情況會弄一點粒子,基本還是透明圖片,如果引擎支持多種像素合成方式的話,可以多試試 SRC_OVER, DST_ATOP這些,看看哪種好。


靜態光照可以簡單的用混合模式模擬,比如疊加,正片疊底等。這樣繪製的時候會直接影響到下層元素的rgb值,動態光照複雜點,沒做過


二十年前都是貼圖加alpha吧。如果硬體不支持alpha就用網點。


最近codeandweb出一個2D的光照編輯器SpriteIlluminator,從演示視頻看非常強大,應該可以滿足大部分2D的光照需求。


可以參考惡魔城系列遊戲


2D遊戲也是可以打全局燈的啊, 或者像頁游那種,模型或者特效 在渲染的時候直接8面渲染出陰影就行了啊。。。。而且光照效果是可以烘培到場景里的啊。。


貌似燈籠 火焰跟光照沒什麼關係吧 這些3d中一般是用粒子來做的


推薦閱讀:

國內開發主機遊戲的會越來越多嗎?
怎樣在遊戲里錄像?
同樣是用 C# 做遊戲,為什麼 XNA 非常失敗,Unity 卻成功了?
請問untiy開發遊戲使用什麼架構比較合適?

TAG:遊戲 | Unity遊戲引擎 | Cocos2d-x |