零基礎(chǔ)如何學(xué)習(xí)計(jì)算機(jī)圖形學(xué)?
零基礎(chǔ)入門(mén)圖形學(xué)最舒服的姿勢(shì)就是GAMES的課程了。
pbrt(書(shū))非要說(shuō)的話是離線渲染入門(mén),不是圖形學(xué)入門(mén)。pbrt(書(shū))對(duì)于零基礎(chǔ)來(lái)說(shuō)太重了,不好把握重心。從內(nèi)容上來(lái)講,pbrt(書(shū))沒(méi)有那么難,只是東西太多,比較散。不推薦直接拿來(lái)入門(mén),但是不代表你入門(mén)的時(shí)候不能看它。你可以每過(guò)一段時(shí)間翻翻目錄,看看你對(duì)每一章的認(rèn)識(shí)有沒(méi)有變化,如果你差不多能明白2-19章大致是要干嘛的了(可能在明白渲染方程之后?),你可以讀一下你感興趣的內(nèi)容(跳著讀)。書(shū)里面代碼太多,讀起來(lái)有時(shí)候感覺(jué)挺割裂的,當(dāng)然了這其實(shí)算是feature。
如果你想入門(mén)離線渲染,留給你一個(gè)小建議:如果你不是過(guò)于執(zhí)著于一個(gè)你自己的渲染器,或者說(shuō)一個(gè)興趣向的產(chǎn)品,那我不建議你重頭寫(xiě)一個(gè)離線渲染器(smallpt這種級(jí)別不算)。
如果你為了學(xué)習(xí),那么教育向挖空填代碼的Nori2是一個(gè)很好的起點(diǎn)(Nori系實(shí)際上有三個(gè),一個(gè)EPFL的,一個(gè)ETH的,一個(gè)Cornell的,Cornell這個(gè)是Nori的Java版,名字也改成了Wakame)。另一個(gè)教育向的代碼是pbrt,Standford是拿它來(lái)上課的(當(dāng)然也有原因是mmp是instructor之一)。
Nori和pbrt相比就是體量小,優(yōu)點(diǎn)是,你可以比較容易地了解代碼的每個(gè)部分都是干嘛的,魔改起來(lái)需要考慮的東西也少一些。缺點(diǎn)是,支持的東西少,不過(guò)為了教育目的其實(shí)是足夠的,如果你魔改的東西多了,你需要改Nori的一些設(shè)計(jì)。
那么,用這兩個(gè)代碼做基礎(chǔ)的大作業(yè)區(qū)別在哪,用Nori你努努力能在部分方面達(dá)到pbrt("復(fù)制"pbrt內(nèi)容),再努努努努力能在部分方面超過(guò)pbrt(復(fù)現(xiàn)論文),其實(shí)不如直接在pbrt基礎(chǔ)上加?xùn)|西,能夠集中精力在更有價(jià)值的事情上。
所以作為自學(xué)來(lái)說(shuō),推薦你用Nori完成日常作業(yè),然后在pbrt的基礎(chǔ)上復(fù)現(xiàn)一篇論文作為大作業(yè),雖然Nori切換到pbrt上會(huì)需要一點(diǎn)點(diǎn)時(shí)間熟悉代碼,不過(guò)這個(gè)難度其實(shí)不高。
這里沒(méi)有提mitsuba,因?yàn)閙itsuba即使是編譯成功就能勸退很多零基礎(chǔ)了,而且也不適合學(xué)習(xí)向。
回到開(kāi)頭,不推薦重頭開(kāi)始寫(xiě)的原因很簡(jiǎn)單,你如果花別人兩倍三倍的時(shí)間去完成一件事,對(duì)你來(lái)說(shuō)也算是"戰(zhàn)略上的懶惰"。你也可以問(wèn)問(wèn)你自己,達(dá)到pbrt/blender/arnold的真子集和能夠?qū)崿F(xiàn)某個(gè)他們不支持的效果,哪個(gè)更吸引你。而且有多少人知道pbrt本身是不完善的,是留給書(shū)后作業(yè)空間的,又有多少人完成過(guò)其中一部分。
能夠站在巨人的肩膀上是好事,這一次你可以選擇依靠他人。(魔改了pbrt它就是你的渲染器了)
我也聽(tīng)別人說(shuō)過(guò)"為了鍛煉代碼能力"這種理由,其實(shí)幫助非常小,而且如果你目的太多了也不好顧全大局。
如果你一定要完全自己寫(xiě),給一個(gè)關(guān)于場(chǎng)景文件的建議。我見(jiàn)過(guò)包含場(chǎng)景最多的還真是pbrt的,另外有一個(gè)單獨(dú)的pbrt_parser項(xiàng)目,你可以拿來(lái)用。mitsuba2有一個(gè)mitsuba2-blender項(xiàng)目可以把blender導(dǎo)出mitsuba2格式。Benedikt Bitterli有一些mitsuba格式的場(chǎng)景。usd的場(chǎng)景不是很了解,我也沒(méi)怎么見(jiàn)過(guò),nvidia好像有一個(gè),usd自己有2個(gè),apple有幾個(gè)。obj+mtl的場(chǎng)景,Morgan McGuire有一些。luxcore/appleseed也有很多場(chǎng)景,而且他們都是自帶blender導(dǎo)出的。總之能用現(xiàn)成的parser盡量就用,實(shí)在不行在parser改一點(diǎn)。你也可以自己有個(gè)場(chǎng)景文件格式,然后寫(xiě)幾個(gè)converter把別的格式轉(zhuǎn)過(guò)去。祝愿你不要在這種地方浪費(fèi)太多時(shí)間。(wenzel有部分場(chǎng)景是他老婆給他造的,你有嗎[狗頭保命])