《魔獸世界》室外光照

2021-05-24 08:51:38 字數 2255 閱讀 6440

《魔獸世界》室外光照

光照在魔獸世界豐富多彩的場景表現上起著畫龍點睛的作用,那些恰如其分的色彩,將整個世界烘染成特點鮮明的大小區域,讓人過目難忘。

這些區域性的用色方案,被儲存在遊戲的光照列表中。實際上,它不僅僅包括光照顏色,還包括了霧、天空、陰影、水體明暗、太陽光暈等諸多顏色。

下面是位於晶歌森林時的截圖,該區域的基本用色為紫色。

下面是位於龍骨荒野時的截圖,該區域的基本用色為青色。

下面則是由晶歌森林過渡到龍骨荒野時的截圖。

截圖中可以清楚地看到,從光照到霧都採用了從紫色到青色的過渡色,甚至可以看到過渡時兩塊區域天空盒的混合。遊戲中,這種過渡是如此自然,很少有人會注意到其中隱藏的混合技巧,實際上,它確實存在。

魔獸世界裡,從環境光照到太陽光暈的顏色,都以光照球為單位被打包儲存在之前提到的光照列表中。每個光照球包含的大致資訊如下:

1. 球位置;

2. 球內徑、外徑;

3. 以時間為索引的顏色組集合。例如環境光橘色、霧色橘色、天空橘色的清晨

6點鐘顏色組;環境光白色、霧色白色、天空白色的正午

12點鐘顏色組…

在遊戲中,這些光照球被放置在世界的各個區域,它們的分布可能是這樣的:

圖中包含了紅、綠、藍三個光照球,可以看出它們的位置、內徑、外徑等簡要資訊。

在遊戲初始時刻,這些光照球按照外徑由小到大的順序被排列成光照佇列。參考上圖,它們的排列方式為:藍

<

綠<

紅。渲染時,首先根據玩家(相機)的位置,計算各個光照球對當前光照的影響權重,計算方式如下:

1. 從光照佇列末尾,即外徑最大的光照球開始,向前遍歷;

2. 對於遍歷到的光照球,如果玩家不在球內,權重為

0,繼續遍歷。否則,接步驟3;

3. 如果玩家處於內球區域(玩家與球心的距離

d小於球內徑),則權重為

1,同時將之前遍歷的所有光照球的權重置

0。否則,接步驟4;

4. 如果玩家處於外球區域(玩家與球心的距離

d在球內徑與外徑之間),此時球的權重

w = 1 – ((d –

內徑) / (

外徑–

內徑))

,同時將之前遍歷的所有光照球的權重乘以

(1 - w)

。接著,使用各個光照球在當前時刻的各項色值乘以上述權重並求和,所得的結果即是此刻玩家位置的最終各項光照色值。

仍以前圖為例,不難看出,圖中點a、

c、d的色值應分別為綠、紅、藍。而點

b的色值計算稍微複雜:

根據光照列表,首先遍歷到紅色光照球,點

b位於紅球的內球區域,故紅球權重為

1;接著是綠色光照球,點

b位於綠球的外球區域,按照前述公式將

b與球心距離、球內徑、球外徑帶入得到權重

w,同時需要將上一步紅球權重1乘以

(1 - w)

記為(1 - w)

;最後是藍色光照球,點

b不在藍球內,故藍球權重為

0。最終求得點

b的色值為

(綠球色值

* w) + (

紅球色值

* (1 - w))

,它相當於對綠球與紅球色值按

w進行插值。

可以想象,如果玩家由

a點出發經b、

c至d,會感受到環境用色由開始的綠色,漸漸過渡到紅色,最終變為藍色的完整過程。

下面是「暴雪嘉年華

2010

wow edit

中為場景打光,左上方黃色的雙層球形線框即為處於編輯狀態下的光照球。

「在製作這些區域中最難的一部分是光線,真的是非常難。我得用光照球給每樣東西都打上光線,又難移動又難儲存,沒有哪個區域是簡單的球形。所以我問我們的乙個程式設計師,我們可不可以先把區域的輪廓描出來,然後我好直接整塊打上光線?然後他說,我想我們可以做到。然後我們做出了這個非常棒的工具,比如你看到的這個卡里姆多,直接把整個地區描繪分離,整塊打上光線,然後再用光照球修飾一下,這對我來說是個巨大的提公升。」在座談會中,魔獸首席環境美工蓋瑞·普萊納如是說。

於是我們知道了在大災變中,除了光照球之外,暴雪引入了更方便的光照組織方式,儘管尚不清楚程式的具體做法,不過它看起來真的很酷,不是嗎?

工作幾年,對魔獸的熱情鮮有衰減,關注魔獸的各種訊息,有時甚至難免捕風捉影之嫌。

一度以為魔獸世界永遠不會被超越,因為很難想象這樣乙個遊戲究竟會是什麼樣子。最近看到一些《激戰

2每個遊戲製作者心中,都有乙個《魔獸世界》。也希望每個遊戲製作者心中,都有一套構建虛擬世界的可靠方法。

魔獸世界 法師

代刷stsm巨集 showtooltip nopet 召喚水元素 pet 冰凍術 cast nopet 召喚水元素 pet 冰凍術 stopmacro nopet petstay petpassive 奧法天賦 奧法輸出巨集 火法輸出巨集 奧法輸出天賦設定 pve 職業輸出通略 80 奧法精華帖 附...

魔獸世界 裝備

在上次編寫的基礎上自己編寫 include include include include using namespace std define warrior num 5 class cheadquarter class cwarrior class cheadquarter cwarrior c...

《魔獸世界》任務系統體驗

魔獸世界 任務系統體驗 開發網遊也有一段時間了,大大小小的網路遊戲倒是也看了不少,但是真正好好玩過的好象只有 天堂ii 而已。有感於自己對於遊戲知識的匱乏,一直在尋找一款值得一玩的遊戲!正巧我的好朋友向我推薦wow,想暴雪還從來沒讓我失望過,它出的東西是要玩一玩的。我抱著乙個慢慢玩,好好體驗的心態進...