如何從程序的角度理解3D術語?

因為之前是做php,golang這樣的後端語言開發,現在到U3D遊戲開發時,在看教程很多術語不能理解,例如光照,貼圖,烘培之類的,當對這些術語不了解時看文檔非常辛苦.
求能用代碼的方式描述這些術語好讓心裡有個大致的意思


光照是一個函數,對於局部光照來說,其參數是光照表面的位置/法線、觀察方向、光源(及其可見性信息)數組、材質特性(雙向反射分布函數/BRDF),返回觀察方向的出射光線。

紋理通常是一維、二維、三維數組,有時會加入向下採樣的版本(mipmap)。貼圖通常是指三維表面映射至二維紋理的坐標。對於網格(mesh)模型,會在每頂點儲存二維坐標,然後使用特別的插值方法去採樣每個表面採樣點的值。

烘焙是緩存光照函數的全部或部分因子至紋理貼圖或頂點數據。例如烘焙光照貼圖是指把觀察方向無關的入射光積分預計算,緩存起來,在運行時與材質特性計算最終光照結果。

不過我覺得用程序的角度不一定令你容易理解,你需要了解物理上光的傳播方式,以至計算機圖形學用哪些演算法去近似化這些過程。


這些術語每一個背後都有一大段故事可以講, 建議樓主慢慢google或者baidu吧. 有很多要學的.


它們本身就是一些歸納過的概念,不是某種單一的處理方法,用代碼表述反而是不直觀的。而且你不能局限在某一種具體的代碼表述里。


這種術語「只」從「程序」的角度很難解釋吧。因為從程序的角度,只能從圖形學的角度來講實現方式而不是直觀的概念,而圖形學也並非三言兩語就能講明白的吖。就像——你不知道這個演算法是幹啥的,卻要我們講演算法的實現思路。
但是一個美術能輕鬆地用他們擅長的建模軟體告訴你他們作為美術的直觀的理解方式,所以建議題主直接問美術。
一個引擎程序猿肯定對該引擎的美術流程也了如指掌,即使問引擎程序猿,最直觀的解釋也是從美術的角度。
對這些概念有了直觀的印象之後直接啃圖形學就好了吖。


這種概念性的東西,就是術語,如果你要用代碼來解釋,那不是幾句話可以解釋清楚的。我那時也不是很懂,但美術可以做出來,所以我也是找組裡的美術問的,看他們對這些術語是如何解釋的,用最直觀的方式去理解,通俗易懂。


用程序來,你就更加看不懂了..


雖然你問怎麼從程序角度理解…但這幾個就不是因程序過程而產生出來的概念啊。

光照,就是一個燈,燈亮了,光照在你身上,就叫光照。離光近的亮遠的暗,被光直射的就亮沒被光照到的地方就暗。大體上就是這樣。你也可以在程序里做手腳讓它不是這樣。

貼圖,就是你是個模特,又叫模型,你們的美術畫了張2048mm*2048mm的帶彈性的圖貼在你身上,就叫貼圖。貼紙上面的點在貼在你身上以後,具體貼到臉上還是鼻子上還是腳趾頭上,這個對應關係一般叫UV。

烘培,就是美術先把一張夜光魔法貼紙貼你身上,然後弄幾個光源去照它,照一段時間以後把光源關了,因為貼紙是帶夜光的,剛剛被光照到的地方就會自己發光,沒被光照過的地方就還是暗的。然後美術看了很好,就把這個[帶有光照信息的]貼紙拿下來備用。這整個過程就叫烘培。

至於程序上具體是怎麼實現的你實際上不用太關心。一定要關心的話可以買樓上 @Milo Yip的書來翻一下。不過人自己都說不用關心了…


《計算機圖形學與幾何造型導論》 清華大學出版社 不謝~


你管他那麼多,做的多了自然都知道了。都是屬性詞,接受了就好。


推薦閱讀:

unity和虛幻引擎的模型不都是從3dmax、maya中導過來的嗎?為什麼畫質會相差這麼大?

TAG:OpenGL | Unity遊戲引擎 | OpenGLES | 計算機圖形學 | Autodesk3dsMax |