PbrtCraft 用 pbrt 畫 Minecraft 遊戲場景

#Rendering #Python #Pbrtcraft

這是一個在學期中忽然有要做的專案:把 Minecraft 的遊戲畫面用基於物理方式,像是光線追蹤或光子映射的方式畫出來。

我已經先在 Github 上開了 PbrtCraft

流程

我目前弄的 Pipeline 就是先讀取 Minecraft 的地圖檔案,生成場景描述,然後送到 pbrt-v2 畫。

讀取 Minecraft

直接用 PyAnvilEditor來讀取。

生成場景描述

這裡就會需要取得到 Minecraft 的資源包,資源包有兩部分,第一部分是描述模型,第二部分則是所有貼圖。

pbrt-v2

針對原本的 pbrt-v2 ,為了能夠方便渲染 Minecraft 場景,我做了以下調整:

目前成果

天空 HDR 來自 HDRI Haven

畫面來自 Minecraft 1.13 ,右邊半透明的是水。

接下來?

仍然有不少事情等著,像是 Volume ,除了水暫時當作玻璃,其餘如火、岩漿等,我並沒有寫進場景描述。

生物,包含 NPC 、怪物以及一般生物,目前還並沒有讀取並且畫出來,這需要讀取地圖上生物的位置資訊以及他們的模型。

光源,例如火把、南瓜燈 … 等,假如需要符合 Minecraft 的模型,卻又有不錯的渲染效果,那可能需要寫一些不太符合物理性質的光源,像是不會直射眼睛,但卻會影響周遭。

pbrt 部分改用 pbrt-v3 ,這樣就可以用到更新過的 OpenEXR 和使用 sppm 渲染。

增加一個 GUI ,讓一般玩家也可以輕易操作,目前考慮是用 Tornado 架 Server ,這樣一些開 Server 的也可以用這個來畫場景。