對各種場景編輯器中地形編輯的分析

2021-04-08 23:15:30 字數 3850 閱讀 1361

本文從地形生成、高程編輯、紋理生成混合、植物種植、無縫拼接、超大規模

/無限場景等方面簡單地分析了現行各種場景編輯器中地形編輯分析的表現,並簡單介紹一下我們自行研發的場景編輯器及其地形編輯、多解析度分析組織方案。

關鍵字(keywords)

:編輯器、場景編輯、地形生成、無縫拼接、無限場景

引入(introduce)

對乙個完整的引擎類作品來說,場景編輯器是乙個基本工具,因為合適的場景編輯器有助於更好地展現引擎的效果。

現在的場景編輯器很多,包括遊戲帶的關卡編輯器(如

farcry

),引擎軟體帶的編輯器(如

truevision

),以及一些愛好者編寫的編輯器(如

freeworld3d

)。最出名的是

farcry

的sandbox

和unreal

的場景編輯器。其中

unreal

sandbox

編輯器,開源的

freeworld3d

編輯器,以及國內塗鴉的起點編輯器。

其中sandbox

已經成為很多朋友設計編輯器的藍本,不僅功能齊全,在功能的編排上也充分考慮到可操作性。

freeworld3d

在地形面板提供的滑鼠直接拉伸地形以及提供透檢視不同渲染方式的切換可以很好地方便使用者,但是為地形新增紋理的時候顯得相對困難。而起點編輯器則缺少直接地形生成面板。

一般的場景編輯器都主要分為地形、紋理、實體(如植被)、

ai(如人物)等主要面板,在面板中包含生成功能和調節編輯功能。本文主要討論地形的編輯方面。一般編輯器的地形的製作過程是:使用者制定地圖大小

->

生成灰度圖或者網格圖

->

對地形進行微調

->

設定紋理層

->

計算紋理

->

紋理微調

->

完成。目前場景編輯器的主要缺點是缺少一些自動生成的功能,生成的場景缺乏真實感,需要美工人員花大量精力進行調整。

1、地形生成

地形生成的時候一般先生成灰度圖或者拓撲圖(網格圖)。

sandbox

是以灰度圖的形式生成地形的。這樣的優點是在生成的過程直觀快捷,例如使用者可以在

2d平面上用刷子畫高度圖,而且可以以紋理的形式快速訪問。而

farcry

等偏向室外場景的遊戲,先生成灰度圖是比較理想的方案。而且可以生成後再向其他的組織形式轉換,可以統一分割成

bsp形式,還可以適應像

clipmap

這樣的渲染方案。此外,

freeworld3d

提供了多層地形,這樣可以解決空間上的地形層疊問題。

sandbox

帶有地形自動生成的功能,但生成的地形都偏向島嶼。我比較熟悉的有分形和

perlin noise

。對比sandbox

裡邊自動生成的地形,我覺得以上

2種演算法在速度上是可以接受的。分形的好處在於在開始的時候我們可以自己設定種子,這樣就可以讓使用者定義地形的型別或者大致的起伏,這可能可以成為乙個新的功能;而

perlin noise

可以在新增噪音方面起到作用。地形的微調過程中,編輯器一般都提供了「刷子」的功能,可以用來拉伸地形。但是不同編輯器刷子的效果相差較大,估計是平滑函式不同的關係。例如

sandbox

的刷子比較容易刷出三角形的平面,而

freeworld3d

在每個頂點高度調整時都會引發周圍地形的平滑。我覺得

freeworld3d

的平滑功能及線框圖的形式在微調時可以帶來更好的效果。在使用者手工繪製地形高度圖的時候,地形一般都呈現成曲線的形狀,但山地是帶有岩石特性的,所以在在山峰處容易產生摺痕的效果(如圖

1)。我希望能用平滑然後細分的方式做出這種效果,當然效果的範圍可以由使用者選擇。圖1

我們自行開發的

worldexplor

載入pugetsound

瀏覽時的截圖

除了山地外,場景還應該包含河流。我在

sandbox

等編輯器裡邊都沒有找到單獨的河流生成功能。我覺得在地形生成的時候可以考慮加入在制定區域河流生成的功能,因為河流的的生成是跟地形的高度相關的。即讓使用者決定河流的起源及大致流經地,然後根據地形的走勢生成河流。為了方便微調,編輯器一般允許使用者用在透檢視的狀態下滑鼠拾取一小塊地形進行調整,這用

mousepick

就可以實現。我覺得還可以增加拾取一定坡度或者高度的以片地形的功能,這樣就可以選中乙個帶的區域或者一片懸崖之類的地形,這樣可以直接對其進行微調或者紋理編輯。

2、地表紋理編輯

比起地形來,現在很多編輯器的紋理編輯功能和流程都大同小異了,基本上都採用分層紋理混合和紋理刷。以下是我在

sandbox

生成紋理時的截圖:圖2

圖3圖

4 從圖2

和圖3

可以看出生成紋理時

sandbox

的貼圖方式。貼圖的方案很直觀,無須解釋,我有以下觀點:首先,雖然

sandbox

每層紋理中都含細節紋理,但是圖

2那樣容易產生大量的紋理重複,讓人感覺失真。所以我覺得可以參考我們

wereu

裡邊提到的紋理向上抽樣+擾動的方案,對每格紋理都進行一定隨機的微調。從圖

3中可以看出紋理生成時不同紋理間是沒有過渡的,這樣可能會產生一條很明顯的分界線而需要美工人員去手工調整,所以我覺得應該增加過渡區,過渡區不是簡單的插值或者

alpha

混合,而是能像圖

4的紋理刷一樣的效果,而且過渡區可以不在乙個水平線上,比如在北半球,南面的植被過渡區應該比北邊的過渡區高。此外,在紋理生成的時候,演算法得注意優化。由於紋理是分層的,所以生成表面紋理的運算量比較大,

256×

256的地圖在我

512m

記憶體的機子上用了1-

2分鐘,而這樣的速度其實已經算快的了。我在網上找到了一些關於優化方面的討論,主要是合成的時候採用陣列預存的方式。

3、植物覆蓋種植

一般的場景都有大量的植物覆蓋,所以對比起其他實體,植物更需要在大規模新增時的操作優化。

sandbox

裡邊的植被是採用「混合種植」的方式,即把多個植物模型設在同乙個刷子上,往地形上一次性新增。除了「混合種植」的優化外,我覺得可以參考人工生命的模式在地圖上新增大規模的植物群,主要是可以減少一塊塊植物新增的麻煩以及改進同一種植物模型完全一致的效果。

4、無縫拼接、無限地形

現在較多關注的大規模

/無限地形組織技術主要涉及地形的無縫連線,無限場景組織,室內場景的拓撲連線和切換。前兩者是針對現在遊戲地形的不斷增大而提出來的,而大規模地形只能採取分塊/分層

/金字塔儲存方式,再採用多級多解析度

lod、

或者geometry clipmap

之類方法拼合起來。因此,在編輯器裡採取分塊訪問的方法來應對大規模的地形。在引入新地形塊時候必須使它的邊緣跟相鄰的舊塊高程一致來完成連線。無限地形的話一般都是利用原地形的映象來做的,因此可以採用跟處理分塊地形類似的方法實現。在處理塊過渡的時候

clipmap

可能會有些麻煩。此外,可能還需要建立不同解析度的地形資料。而室內外的無縫切換的技術實現的並不多(或者說我孤陋寡聞)。

farcry

中使用heightfield

管理室外場景,對室內場景採用

bsp組織,並沒有做到拓撲上的無縫切換。

halflife2

從室內場景設計出發,把整個場景以

bsp方式組織,而對於室外地形,則對應二分後每個

su***ce

採用displacement

的形式銜接,同一

su***ce

四角點值相同。

附:我剛做的場景編輯器的介面截圖

Linux各種(常用)編輯器

了解如何通過命令列快速有效地編輯檔案對每個linux系統管理員都至關重要。檔案編輯每天執行,無論是配置檔案,使用者檔案,文字文件還是您需要編輯的任何檔案。在本教程中,我們將向您展示linux中最常見的命令列文字編輯器,並展示它們的優缺點。ubuntu和衍生產品 aptitude update apt...

3報表編輯器 Power BI 中的報表編輯器導覽

在 power bi desktop 和 power bi 服務中,報表編輯器用於設計終端使用者所看到的報表,其中包含圖表 地圖和其他視覺物件 這在兩個環境中是類似的。通常情況下,首先在 power bi desktop 中建立報表。然後將報表發布到 power bi 服務,可在其中繼續修改報表。還...

自製的基Ogre的場景編輯器 OgreSE

ogrese是一款基於ogre 3d渲染引擎的場景編輯器,介面友好,所見即所得。主要功能 l 建立地表 地表變形與著色 lod地形,每個地形塊可用5張紋理 l 地物 包括靜態實體,動態實體,粒子,燈光 的新增與編輯 位置 方向 大小 燈光屬性等資訊 l 地表流體 水面 岩漿等 的自動建立。l 天空,...