2017/05/17

解開V-Ray材質球RGB指數

原文 / Unlocked RGB Exponent
提問 / grantwarwick
編譯 / Hammer Chen

grantwarwick 問:如果能針對反射光澤度的RGB,非異向性( anisotropic )數值與旋轉折射數值解鎖,那會非常地有用!而不是用RGB材質混合的偷吃步作法(請看一下,在散射功能正式寫到VRay以前 之前舊的鑽石材質的小技巧)

Dubbie99 答:不能只用顏色嗎?

grantwarwick 問:你是什麼意思? 在這些slot放顏色?如果我要讓紅色元素比藍色更反射模糊,我必須要混合材質,根據顏色混合,速度會變得超級慢!

Dariusz Makowski (Dadal) :有意思!主要是用在什麼金屬、 黃金、銅或者是?

grantwarwick :絕對是! 看看真實世界的金屬,你會發現在高光的部份出現RGB邊緣現象(RGB fringing)。ILM將這個效果導入到電影《鋼鐵人2 》,雖然我確定這shader node是在Maya做的,但在3dsmax目前無法做的到?

Dariusz Makowski (Dadal) :鋼鐵人有用VRay嗎? 我以為他們是用自己的引擎,使用的是客製化的掃描材質。

joconnell:邊緣效應可能是金屬對於每個光線的紅綠藍元素具有不同的反射曲線所致,而不是因為光澤度。我完全理解你的出發點,如果可以分開三者很好,可能要用到"highlight spread"的方法複製出材質效果。金屬的表面只具有拋光的強度/或是光澤度,或是專注於材質表面。所以難道不可能是紅色比藍色更不平滑嗎?

Vlado答:Joconnell說得對!紅/綠/藍的反射強度可能不同, 但是所有的波長都對幾何體以相同的方式反射, 因此光澤度都一樣。


grantwarwick :感謝Vlado釐清觀念!你覺得有沒有可能允許分開這三個元件,產生邊緣效應呢? 至少我知道我的材質球其實不需要這麼複雜。

Vlado答:我會想一想, 我認為應該很容易

grantwarwick 問:不,並沒有使用V-Ray,但是在RnD階段他們發現必須要把RGB數值分離才能產生非等向性拉絲金屬上會出現的邊緣效應。沒錯,他們有試著用BRDF採樣,但是最後用的是修改版的Cook-Torrence模型。因為採樣資料的複雜度的關係,很難在不同光照環境下重現寫實的效果。

儘管Snow解釋了BRDF掃瞄器對於很多表面相當在行,但是並沒有掃描任何非等向性表面,也沒有方向性的結果,如果你看看盔甲上小的圓形鉚丁,具有小小蝴蝶結般的反射效果。ILM學習到很多關於非等向性表面是怎樣運作的,特別針對鋼鐵人的銀色盔甲,製作了非等向性高光函數。所以我們先加了函數,能夠根據拉絲的方向決定高光的行為。

Snow不認為有完全達到非等向性材質,但是這不是唯一的問題,即使金屬看起來很棒,鋼鐵人材質看起來很不錯。 有一兩顆鏡頭我無法分辨哪個是我們做的。之前在裡面,然後飛到外面, 鋼鐵人在一系列照明環境範圍,即使我們是用標準測試環境做的鋼鐵人材質,我們還是必須要針對不同照明設定微調材質。

joconnell:我在最近一部電影也遇到一模一樣的事。我們設定了某車輛,環境盡可能地理想化,但是在現場即時動態資產無法吻合。現場動態資產比對很無聊所以我們做了很多調整,讓差異化減少。如果讓材質在一開始的時候技術上就很真實, 但是看起來了無生趣的話就必須要調到更生動一點。

Dariusz Makowski (Dadal) :非常感謝提供資訊,相當有趣! 我之前有跟同事爭論過,用這種作法在我們的材質球,但是他最後說服我說RGB的差異很小,反正我們應該不會發覺到。 你有沒有可能放一張你製作的金屬參考圖, 想知道你做到怎樣的程度了!

grantwarwick :

joconnell:我懷疑是氧化 / 銅綠層造成的效果,而不是金屬的屬性。我同意,這樣可能會遠離VRay的產品精神 - 也就是不允許破壞物理的正確屬性,但是如果在主要UI可以看到對使用者來說很方便。

anchovy :沒錯! 這是一種物理現象,也就是表面的細節比可見光還要小, 難道不很酷嗎! 是一種破壞性的介面。

Vlado:不是具有不同的光澤度,只是不同顏色的光線反射不同方向,是可以做,但是V-Ray需要修改一點。

grantwarwick :我真的認為這應該是金屬的一個屬性,但是vlado必須確認shader的物理屬性。但是,感謝他的確認。事實上光澤度並不是因為波長而有所變化,我覺得我可以成功地簡化我之前的作法(利用ward BRDF)。你可以注意到陰影區域的周圍有點藍藍的,類似於高光的RGB漸層(我還在想怎樣用vray sampler info tex放大這個效果)

anchovy :以前,是有一種表象的方法達到這個效果,就只是用一個簡單的高光層。事實上我用了renderman的程式碼,在Brazil產生了高光的shader,你可能要看一下這篇論文,以composite map的方式產生效果
http://www.cs.ubc.ca/~xgranier/2002/Granier_2002_ASL/pg-127_granier_x.pdf (譯者注:連結已斷)

這個比較沒那麼技術性
http://bhsunshine.com/shaders/interfere.html

joconnell:沒錯! 很困難。金屬具有每個波長有不同的反射曲線,這樣會造成分色。主要可在表面變化角度時產生顏色變化,因此可以用不同的falloff map:紅色、 綠色與藍色, 三者結合來產生最後的圖。光澤度是表面粗糙度的函數,不是跟光的波長有關,因此我可以猜想你可能會想要這個效果, 但是似乎高光太局限於平坦地區, 因為這應該是跟角度/波長有關的東西。對於鋼鐵人,似乎是在高光附近分色,我認為可能是不一樣的現象。我不知道所有的專有名詞,所以我不知道應該要查什麼, 但我知道在汽車零件上面看到有一層保護膜避免氧化, 這會產生顏色的邊緣效應, 因為他對不同光線具有不同的折射波長。

這裡我做了快速的示範,使用不同的紅色、 綠色、藍色的falloff。你看金屬的樣子並不是你想要的效果,你的參考圖比較像是金屬具有多層的鍍模,讓光線以不同方式過濾。不是在跟你爭論外觀效果, 但是只是強調可能是不同原因造成那個樣子。

所有的金屬都很難製作,我們可以自不同金屬類型取得波長資料,但是缺點是這些資料都來自掃描的資訊。 如果你要製作的是單一的金屬, 具有掃描的資料, 那就很方便。 但是如果要的是更舊化的、 氧化的金屬, 那麼掃描資料就會變得沒那麼有用, 也非常不彈性, 因此我們會用更藝術家的作法來得到那樣的外觀,這樣更有用。

以下快速的例子, 一些fresnel曲線, 讓你產生分色效果, 但是無法得到你要的感覺。 沒錯!更快速的作法是獨立地控制r,g 與 b的光澤度, 雖然這是物理不正確的但是誰在乎過程呢! 只要最後結果看起來是我們要的就好了。

你網站上的作品很棒! 我想要買你的材質, 我總是對於對於已知環境, 要怎樣得到可預期的結果 材質的校正與測量的方法感到興趣 。

grantwarwick :這就是我用的方法阿! 我已經用了帶層的RGB模型,但是我還沒用bump map簡化方法。沒錯 很困難 因為金屬每個波長具有不同的反射曲線 因此造成分色 在具有逐漸改變曲率的表面容易看到顏色的偏移變化 你可以用不同的falloff map 在紅色、綠色與藍色 然後合併成一個final map

光澤度是物體粗糙表面的函數跟波長無關。 我幾乎可以猜到你為什麼可以得到效果, 但你弄的效果似乎太集中於高光, 因為這個效果應該是跟帶曲率的表面/波長有關, 而不是在平坦的表面。 以鋼鐵人的那個例子來說, 似乎是高光處有分色,我猜想可能是不同的原因造成分色 ,我不知道所有的專有名詞 ,但是這個效果可能是金屬表面抗鏽處理的結果, 讓金屬表面具有顏色邊緣 這是由於光線對不同波長的光折射不同所造成的。

joconnell:我拿到某些程式碼 ,可以把從金屬的反射資料轉換成漸層, 可以貼成垂直與平行的falloff ,因此可以得到精確的反射。 如同refractiveindex.info網站,但是,因為這是掃描的資料,根據很特定乾淨、理想的金屬,可能不會跟你想要的或是想像的一樣。我不認為堅持使用這個方法有太多好處, 因為這個方法有其局限性, 但我會很快地跑一下這個程式。題外話, 3D商業廣告的領導品牌framestore倫敦, 引介我開了一個fxphd課程稱作mya214 是maya / mental ray的課程, 這是我第一次我進行HDRI調校,採樣shader...等等 。課程有介紹金屬反射的過程,希望你看看值不值得,很棒的課程。

lllab :你的材質測試,特別是金屬看起來很棒, 你可以分享一下金屬材質檔案嗎?

grantwarwick :我對你的方法感興趣 也想學 我希望看一下做好的範例曲線看起來像怎樣 聽起來很神奇 你可以讓一開始時是朝正確的方向 然後可以再修改使其更吻合

joconnell: 一般會得到的結果是,你會有一個適當的反射曲線(一般來說會大於50%) 大部分的角度是自0~50度, 然後開始朝向100%, 在極端的角度。 每個金屬有其不同的顏色, 因此紅色可能是在55%是平坦、 綠色在45%、 藍色在60%。所指的是0-50度這個區間。

在模型邊原處會有差異, 但再次根據你物體的曲率而定, 可能不值得這樣做。 其他的問題是 這個設定是根據公式與輸出漸層, 因為每個RGB曲線會合併到一個key 編輯起來很不方便 。我會研究其他選項, 例如bercon gradient可以用maxscript 控制 但不是max或是vray內建的 很可惜 我喜歡不侷限自己找到可用的方法

grantwarwick :你可否解釋一下refractiveindex.info網站上面S-polarized, P-Polarized 與 Non Polarized反射曲線的差異? 我很難理解其背後的數學/科學, 但是我可以用眼睛重現正確的反射曲線 然後用blend material把不同的fresnel層組合起來 問題是我的方法太過複雜 應該可以更簡單一點 如果我知道應該要複製哪一條反射曲線?我應該可以自己做出漸層

我google了一下發現到這只是兩條曲線的平均, 通常在電腦繪圖中是逼近而已 所以我假定這三條曲線跟RGB反射曲線沒有關係, 對嗎?

joconnell: 是的,S polarized 與 P polarized就只是兩種測量方法, 我們會平均這兩條,做為可見的光的部份,用在反射百分比上。 網站上面因為用紅色、 綠色與藍色標示會讓你混淆。你只需要到網站上輸入你的波長數值: 紅色 0.650, 綠色 0.510 與藍色 Blue 0.475  然後往下拉到底部會顯示反射曲線 S P 與非偏極的, 這會提供你視覺化的圖表, 展示紅色綠色藍色波長, 金屬從0至90度的曲線。 要分開處理有點痛苦, 但操作差不多就是這樣。

可惜的是falloff map無法給你輸入的位置與數值。 如果可以到話就可以得到很精確的結果 如同你說的 就是去描繪紅色、綠色與藍色曲線, 然後合併產生完整的反射曲線

你可以使用這三個垂直 平行模式用在曲線(因為曲線再0-90是相同的 曲線上的每個數值都是度數 因此可以對應垂直與平行 然後再丟到composite map 選成dditive mode 最後會產生 白光 的反射曲線)

grantwarwick :突然看懂了! 哈哈哈。我願意開始重建材質 只是希望能夠做的正確。或許是我腦袋很累了 但是我想要相信使用composite map產生的反射曲線能夠產生跟我的測試相同的邊緣效應 但我預期是沒辦法做到的。基本上我的金屬材質 是混合三種不同的材質 根據RGB 具有稍微不同的fresnel數值 所以基本與你所說的更大材質階層是相同的 (計算三種材質速度超級慢的)

我今天的測試有十足進展,你看到的紅色的材質, 是你給我修改過的漸層所製作出來的

儘管我們現在主題是金屬 有沒有人知道物理上漫射的資訊 請問漫射是不是也有IOR數值
我看過其他人測試偏光的材質來取得數值 但是Vlado在他的樹葉教學用了不同的方法

我自己的材質 有時候我會在diffuse添加fresnel 總是用眼睛判斷 我不懂物理

joconnell :沒錯! rens有解釋給我聽 金屬一點兒也沒有diffuse 而所有的掃描資料 帶是跟光線在曲面反射的總光線數量 diffuse, spec 與 reflection同時 因此如果曲線在正面是60%反射率 那麼只有60%的光線會反彈 其餘都沒有 要如何分辨diffuse與鏡面金屬 都是跟表面的光澤度  / polish / focus有關 如果你具有真的真的真的很粗糙的金屬 你把光澤度設定為0 最後會看起來想diffuse材質 而且量費了大量的採樣時間

金屬一點也沒有IOR, 我認為這跟導電物質與非導電物質有關。 dielectrics大部分都是非導電 或是非金屬, 具有很強烈的fresnel, 而金屬使用複雜的IOR 用到的方程式, 我們無法用當前的材質球模擬出來, 以下是比較:

因此你當你再製作金屬時 幾乎可以忽略fresnel 大部分的金屬只具有很小的曲線 但是你不需要把紅色、 綠色和藍色的ior數值分開。而目前的材質球功能你也沒辦法真正做到正確的曲線, 把ior數值設高 ,會造成反射很強 對於正面的角度 然後對於邊緣處又幾乎回到100%的反射

如果要用手調的話, 最好是在0度時反射度% 在90%時反射度 % 然後中間有個點控制曲線, 讓你可以調整中間數值, 我記得mental ray的BRDF可以做的到這個東西。

grantwarwick:學到很多! 感謝您分享資訊。 我恨我自己做了那麼多材質卻是錯的,感謝。抱歉,我要強調,我知道到部分的金屬, 他的diffuse不是光澤度的數值。 但我不知道這個數值是0,我平常設定diffuse又太高,現在我要好好思考照部分。我試著讓材質物理更正確 (我的作法是希望越簡單越好, 在不同照明環境可使用的)

如果我添加90%白色數值到金屬材質上, 然後用非常黑的HDR照明,材質可以微調,而且仍然看起來正確。 但是在陽光底下材質又看起來很差, 我只是希望我是朝正確的方向修改。

joconnell :是的! 還有最後一點,rens告訴我的,如果你希望添加diffuse到金屬或是讓其具有不同階層的光澤度, 會讓算圖變慢。 如果有黃色的diffuse加上黃色的反射顏色, 這表示反射會過濾撞擊到diffuse的黃色光 , 最後你會得到綠色。因為金屬這個單一材質,因此閃亮的部份不會過濾較不閃亮的部份,因此你不會在同一個材質上有diffuse 與反射,你可以做的是混合材質, 其中一個有diffuse (反射是0) 在diffuse slot中有相同的反射曲線, 然後再加上一個材質只有光澤反射, 其上使用相同的混合曲線。

關鍵是以灰色來混合兩個材質。這樣可以避免染色問題,灰色也避免材質提高反射度。請記得在圖表中,反射度就是整體的光線反射,diffuse 反射全部加總。因此如果你提高材質的光澤度, 你的diffuse材質舊必須要減少相同的量,這樣整個曲線才會考量到。大部分的材質都有基礎層(具有diffuse與 光澤度反射, 我會再放上透明的鍍模層, 然後以fresnel falloff跟基礎層混合)。如此應該還是可以維持光線能量守恆。

joconnell :我的意見不是那麼重要啦! 名人像是Brett SimmsBertrand 與 Peter Guthrie才重要啦!我會想知道從採樣的觀點是如何? 很棒的作品。

grantwarwick :我覺得大家對Peter Guthrie是有點評價過高了(譯者注:開完笑話) 但他真的懂得把raw算圖調色調到像照片一般真實

chadstevens :請問一下現在有更簡單的方法做到這個效果嗎? 還是只能用falloff map去分RGB顏色?有沒有人能寫個教學 ?

Recon442:我也曾經搞混說顏色的邊緣效應是因為把RGB的光澤度分開處理所造成的,如果你仔細看看那張照片,其實有太多因子會造成邊緣分色了。

1. 非常強烈的高光:特別是金屬,反射光很強,相機鏡頭會在高光邊緣顯示glares,而這glares通常會有某種程度的色差現象。 V-Ray Lens Effects甚至提供模擬diffraction的選項。
2. 金屬材質的光線不會完全是純白,但是混合不同顏色的光線,會在金屬表面產生分色,不是完美的鏡面。
3. 相機對影像會影不同的反應曲線,也會讓顏色進一步產生偏移
4. 可以對圖片做各種色彩校正的操作
5. 所有的效應都會因為金屬有輕微地顏色, 例如銅的顏色,讓相機的白平衡更偏差

我的意思是,你可以能要找更多參考圖,在不同的照明環境、 角度才能評估材質的反數屬性。 更不用說據此來要求新功能了。 一張近拍的馬鈴薯圖沒有用啦 。


[延伸閱讀]
Complex Fresnel 更寫實的反射材質

Tutorial: realistic gold material with VRay

萬物皆有菲涅耳fresnel

No comments: