前言
徒刑學大作業要用mitsuba,這種一看就很耗CPU的東西ATP是一點兒也不想用虛擬機弄,於是就決定直接在Win上裝一個。
果然配環境配多了不利於身體健康,ATP搗鼓了一晚上血壓蹭蹭地漲,氣得差點把電腦砸了(一拳打爛屏幕.gif),不過最后還是搞好了,所以ATP決定發一個博客記錄一下這個歷史時刻,順便也給后來的人一點前車之鑒。
參考了:
正文
在開始搞所有東西之前,可以先確保一下大前提:
- CMake已經裝了。這個好裝,百度一下即可。
- Python有較新版本,ATP用的3.7,反正import mitsuba是沒問題,具體代碼還沒寫不知道,但應該問題不大
- Visual Studio 2019。重中之重,讓ATP血壓飆升的罪魁禍首。
第一步:從github上下載mitsuba2及其子模塊
上個github太難了155551,直接去參考這篇CSDN叭,人家講的挺詳細的。
官網給的指引是:
git clone --recursive https://github.com/mitsuba-renderer/mitsuba2
這個recursive是非常重要的,因為它確保下載的時候除了主模塊mitsuba2,里面要用的一些子模塊(都存在mitsuba2/ext文件夾里了)以及子模塊的子模塊都遞歸下載了。
但問題是github目前訪問非常難,ATP換了兩個tz都不大行,老是報什么fatal error啦超時啦訪問失敗啦這些的。有時候它突然好一小會兒然后下載到一半又不行了,就很生氣。
根據官網,如果成功下載了主模塊但子模塊沒下載好,可以用下面的命令更新子模塊:
git submodule update --init --recursive
ATP搞的時候其實發現手動下.zip文件是很順暢的,但不知道能不能這樣手動下載解壓然后自己去放到正確的位置上。ATP反正沒心情試驗了,或許有勇士試驗一下(?)
不過ATP還是要控訴為什么助教不直接下好了把包給我們1551,反正每個學期大作業都差不多,這得能省多少事兒啊((
第二部:choosing variants
這一步官網上有,但網上一些教程里沒有。ATP合理推測他們都只想用c++寫。如果只用c++寫確實不需要額外配置這一步。但如果你像ATP一樣想試試用python調mitsuba庫,保險起見還是按官網上的設置一下吧。
打開\mitsuba2\resources目錄,找到一個mitsuba.conf.template文件,把它復制到\mitsuba目錄下並改名為mitsuba.conf。
然后打開這個mitsuba.conf,在第70行左右找到"enabled"這一項。這就是要設置的地方,別的都不用改。初始這塊內容是這樣的:
"enabled": [
# The "scalar_rgb" variant *must* be included at the moment.
"scalar_rgb",
"scalar_spectral"
],
如果你只是想用python import mitsuba並且不考慮GPU,那么直接在里面加一項“packet_rgb”或者“packet_spectral”就可以了。這兩個具體的區別請參考官方文檔。另外更多的可選variants也請參考官方文檔。
文檔里指出,這個enabled里面添加的variant數量與編譯時間和內存使用量成正比,因此不建議包含超過五個variants。ATP只加了一個packet_rgb。
另外,文檔最后說:
If you plan to use Mitsuba from Python, we recommend adding one of packet_rgb or packet_spectral for CPU rendering, or one of gpu_autodiff_rgb or gpu_autodiff_spectral for differentiable GPU rendering.
這也是ATP為什么要搗鼓這個東西的原因。跟着它說的做總不會錯叭。。。
第三步:編譯,得到sln,並生成exe
接下來只需要在\mitsuba目錄下按照文檔下一步來運行:
cmake -G "Visual Studio 16 2019" -A x64
ATP是看到這里的“Visual Studio 16 2019”才悲哀地意識到,它的電腦上裝的還是VS 2017
(然后這個狗VS,安裝新版本的時候竟然還不知道自覺把舊版本卸了,連個“覆蓋舊版本”的選項都不給,純惡心兄弟???)
運行完cmake以后,在\mitsuba文件夾下會有一個叫mitsuba.sln的。用Visual Studio打開這個東西。
這里ATP又觸發了一個怪bug,如果直接雙擊mitsuba.sln文件,它倒是會默認自動用VS打開並且加載,但過一會兒竟然報了個錯,說“xxx.vcxproj error: 沒有安裝該項目的應用程序”
如果你也出現了這個問題,只需要先打開空白的Visual Studio,然后在首頁選擇“打開項目或解決方案”,再打開.sln文件就可以了。
(ATP在寫博客的時候本來想復現一下剛才的bug,但這次直接雙擊.sln文件后,它竟然毫無問題地打開了,也不知道是怎么回事)
等所有東西加載完成后,把菜單欄下面的一個選項從“Debug”調成“Release”,然后生成解決方案。
(這一步巨慢而且巨占CPU,ATP在跑這一步的時候打個字都是卡的,暴躁值++,wdnmd Visual Studio)
此時在\mitsuba\dist文件夾下會有一個mitsuba.exe。說明編譯完成了。
(cmake后面的這坨過程在官網上用一句“proceed building as usual from within Visual Studio”帶過了,對ATP這種不怎么用VS的也太不友好了x)
第四步:設置環境變量
按照官網的說法,只需要在\mitsuba文件夾下運行setpath這條命令就可以了。
ATP試了一下確實可以,運行setpath以后,如果(在同一個cmd里)隨便找個地方這樣運行:
> mitsuba
即:直接輸入mitsuba命令,不帶什么./或者.exe之類的。
如果它輸出了一大串幫助信息,而不是報錯“mitsuba不是批處理文件也不是blabla”這種,那么就安裝成功了。
另外,也可以測試一下,如果(在同一個cmd里)打開python,輸入import mitsuba,沒有報什么找不到模塊的錯,那說明前面所有步驟至少是沒問題的。
但問題就是這種設置path的方法是臨時的,就是你關了cmd重開以后它就失效了。
ATP研究了一下它那個設置環境變量的東西是怎么寫的。雖然\mitsuba目錄下有三個名字叫setpath的文件,但我們在windows下只需要關注setpath.bat:
@echo off
REM ***************************************************************
REM * This script adds Mitsuba to the current path on Windows.
REM * It assumes that Mitsuba is either compiled within the
REM * source tree or within a subdirectory named 'build'.
REM ***************************************************************
set MITSUBA_DIR=%~dp0
set MITSUBA_DIR=%MITSUBA_DIR:~0,-1%
set PATH=%PATH%;%MITSUBA_DIR%\dist;%MITSUBA_DIR%\build\dist
set PYTHONPATH=%PYTHONPATH%;%MITSUBA_DIR%\dist\python;%MITSUBA_DIR%\build\dist\python
上面這串東西它大概的意思就是在PATH里添加\mitsuba目錄下的dist文件夾和build\dist文件夾;在PYTHONPATH里添加dist\python和\build\dist\python。
如果你不確定怎么添加才是正確的,只需要把setpath.bat的第一行那個“@echo off”去掉,然后再運行一次setpath命令。
這樣雖然還是臨時添加,但這一次的區別是它把添加完成以后的PATH和PYTHONPATH變量都輸出來了。
新加的內容一定是在后面兩行,找到那兩行照着手動加進環境變量里就可以了。
ATP參考了一下它輸出來的內容,發現它是添加在“用戶變量”而不是“系統變量”里(因為兩邊都有PATH這個東西,ATP糾結了一下到底該改哪邊)。
改完了以后再重新打開cmd,mitsuba這個命令就可以隨便用了,python代碼也能引用模塊了。
這樣環境應該就是配好了,如果后面寫代碼的時候發現什么問題ATP再來更新。