GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)
?
該篇文章參照淺墨的這篇文章:https://zhuanlan.zhihu.com/p/35974789
Dawn是由NVIDIA創(chuàng)建的,用來介紹GeForce FX產(chǎn)品線的演示程序,它說明如何使用可編程的著色技術(shù)創(chuàng)建出逼真的人類角色。
最初的Dawn Demo由NVIDIA于2002年發(fā)布,而十年之后的2012年,NVIDIA新發(fā)布了“A New Dawn”技術(shù)Demo。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 Dawn Demo (2002年)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 B?New Dawn Demo (2012年)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 技術(shù)指標(biāo)對比
3.1 引言
這章詳細(xì)介紹了NVIDIA出品的Dawn Demo中對精靈人物的著色技術(shù),主要是皮膚的著色技巧。在當(dāng)時(2002年)NVIDIA創(chuàng)造的此demo的品質(zhì),已經(jīng)成為照片級真實感渲染和實時渲染的代表。
3.2 皮膚著色
基于多種原因,在計算機圖形中模擬皮膚十分困難。在當(dāng)時,即使是在電影中用高端產(chǎn)品模擬出來的仿真角色,通常也經(jīng)不起近距離的觀察。因為,人類可以從中獲得大量非語言來表達的信息,如重心的移動,走動的特別習(xí)慣,面部的表情,甚至有些人的皮膚泛紅等等。
雖然很少有人能理解像“次表面散射(Subsurface Scattering)”、“輪廓照明(Rim
Lighting)”這些詞匯,但是當(dāng)把它們渲染錯了的時候,幾乎任何人都可以指出來。而且除了著色問題外,有時人們會因為皮膚渲染的問題,說皮膚看起來像是塑料做的。
3.3 場景的照明
基于照片的光照(Image Based Lighting , IBL),因為Dawn是一個仙女,我們找到一片合適的森林,拍了大量標(biāo)準(zhǔn)的照片。采用iPIX工具包,拍攝兩張半球環(huán)景照片。采用iPIX軟件,把對應(yīng)的半球半景照片縫合為一個全景,然后用Debevec的HDRShop軟件在每個給定角度對環(huán)景光的顏色和強度進行編碼,創(chuàng)建高動態(tài)范圍的全景。隨后HDRShop可以創(chuàng)建一個漫反射查找表,它執(zhí)行一個卷積,用給定的表面粗糙度為表面創(chuàng)建漫反射或鏡面高光反射映射圖。
1.通過半球照片,創(chuàng)建高動態(tài)范圍(High-Dynamic Range,HDR))的全景
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 立方體環(huán)境反射貼圖
2.漫反射環(huán)境貼圖(Diffuse Environment Map)也是一個立方體映射貼圖,它使用網(wǎng)格表面的法線作為索引。每個像素存儲了相應(yīng)法線與入射光夾角的余弦加權(quán)平均值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 漫反射環(huán)境貼圖(Diffuse Environment Map)
3.鏡面高光環(huán)境貼圖(Specular Environment Map)同樣也是一個立方體映射貼圖,使用反射矢量作為索引(類似于立方體映射)。把此鏡面高光環(huán)境貼圖基于粗糙因子進行模糊,目的是模擬對任何表面任何給定點上的法線的改變。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 鏡面高光環(huán)境貼圖(Specular Environment Map)
存在的問題是,漫反射環(huán)境貼圖(Diffuse Environment Map)和鏡面高光環(huán)境貼圖(Specular Environment Map)考慮了來自環(huán)境的入射光,但不包含由物體引起的陰影。
要解決這個問題,可以生成一個遮擋項,用來近似表達在每個頂點上半球輻射光中,有多大比率場景中其他物體所遮擋。
3.4 皮膚如何對光進行相應(yīng)
皮膚不像大多數(shù)在計算機渲染中建模的表面,因為它是由半透明的表皮、真皮和皮下組織等數(shù)層構(gòu)成的。這可以用次表面散射來模擬。這種現(xiàn)象很普遍,當(dāng)在太陽面前向上舉起手,就能看到穿過皮膚的桔紅色的光。皮膚下的散射在所有的角度上顯現(xiàn)皮膚形態(tài),使它具有了柔軟的、與眾不同的特征。
在這之前有一些小組嘗試使用多層紋理貼圖來模仿皮膚的復(fù)雜性,但一般而言,這個方法比較難管理,美術(shù)同學(xué)很難通過預(yù)想,混合出最終符合預(yù)期的效果。相反,文中使用單張彩色貼圖,通過著色程序來增加色彩的變化。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 Dawn頭部的前半邊的漫反射貼圖
另外,皮膚具有一些極細(xì)微的變化,會影響其反射特性。這對皮膚外觀有微妙的影響,特別是當(dāng)光線直接與相機位置相反時,皮膚的表現(xiàn)則是存在邊緣(Edge)與輪廓光照(Rim Lighting),這時,需要皮膚輪廓邊緣的光照,或給皮膚邊緣加上光暈。
真正的皮膚具有一些細(xì)微的特征,比如汗毛和毛孔能捕捉光線。盡管這些細(xì)節(jié)用于顯式地建模是太不明顯了,但我們還是希望得到一個合適、整體更逼真的皮膚渲染外觀。在特寫時,可以增加凹凸貼圖,提供一些額外的細(xì)節(jié),特別是一些小的皺紋。但需要注意,我們想要的是柔軟的皮膚外觀,而不是光閃閃的油膩的塑料。另外,凹凸貼圖通常只需靜距離特寫時才可見。
我們可以通過建模來近似這兩個著色屬性,建模可以是基于表面法線的簡單公式,或者是基于光線或視線矢量的簡單公式。
通過認(rèn)識,我們可以將上述兩種渲染特性(次表面散射和邊緣光照),建模為基于表面法線和照明或觀察向量的簡單公式,從而近似出兩種著色屬性。尤其是沿著Dawn的輪廓邊緣,對她身后的光線取樣,按照觀察向量的索引,讓“穿過”Dawn的光與她的基礎(chǔ)皮膚色調(diào)混合,從而創(chuàng)建次表面散射和邊緣光照的著色效果。尤其是背景圖中更加明亮的區(qū)域。如下圖。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 Dawn的頭部前面的切線空間法線貼圖(凹凸貼圖)
3.5 實現(xiàn)
Dawn Demo中,毫無懸念地使用頂點著色器和像素著色器進行光照處理,頂點shader的主要功能是將坐標(biāo)轉(zhuǎn)換到投影空間,并執(zhí)行那些不能在像素著色器中執(zhí)行的數(shù)學(xué)運算。
采用單通道(one-pass)的光照解決方案,不需要另外其他的通道渲染,或alpha混合來創(chuàng)建皮膚表面。
文中提供了完整的頂點Shader和像素Shader的源代碼,這里因為篇幅原因不再贅述,具體可以參考原文(PS:上文有貼出Web版的英文全書原文的鏈接)。
核心要點總結(jié)
1)基于圖像的光照(Image Based Lighting , IBL),采用高動態(tài)范圍(High-Dynamic-Range , HDR)光照環(huán)境映射貼圖,環(huán)境漫反射貼圖,鏡面高光環(huán)境貼圖計算光照,代替Phong光照。
2)次表面散射(Subsurface Scattering),通過凹凸貼圖實現(xiàn)
3)對皮膚邊緣加上光暈,即輪廓照明/邊緣光照(Rim Lighting)
?
?
總結(jié)
以上是生活随笔為你收集整理的GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务-高并发情况下接口降级和熔断策略
- 下一篇: 联合概率(joint probabili