Artem Krizhanovskiy展示了索引材料映射方法,該方法允許他通過對來自預定義LUT的所有材料數據進行採樣來增加細節而不會造成內存損失。
介紹
這種方法的主要思想是減少壓縮偽像,增加所有PBR通道的細節,獲得高度可自定義的陰影,而內容沒有任何變化,最後減少內存。
方法
我不使用直接紋理化方法,而是依靠基於材料的方法,其中使用漸變(磨損或狀況)和材料,我們可以從預定義的LUT中採樣所有材料數據。
唯一的輸入是:
-4通道全尺寸漸變ID映射,已壓縮
-完整的切線或對象空間法線貼圖,已壓縮
-16×16反照率,重新繪製LUT,未壓縮
-16×16金屬,粗糙度LUT,未壓縮
漸變紋理:R-環境光遮擋,G-材質ID,B-細節ID,A-漸變
材質LUT1:RGB-反照率,A-重塗遮罩| 未壓縮,無mip-map
材料LUT2:R-金屬,G-粗糙度,BA-空| 未壓縮,無mip-map
基本上,在讀取“材質LUT”紋理時,漸變用作U,材質ID貼圖用作V:texture(materialLUT_sampler,vec2(gradient,material_ID))
從示意圖上看,它看起來像這樣:
該過程非常簡單,可以使用代碼或基於節點的編輯器(例如Substance Designer或Unreal Engine)進行複制:
該模型包含16種材料:
重塗:
在這種情況下,其他的迷彩圖案紋理將用作重繪顏色。
重新繪製的想法是基於反向混合。眾所周知,平凡的線性插值看起來像這樣:
結果= C_base *(1-alpha)+ C_paint * alpha
我們可以得出C_base:
C_base =(結果-C_paint * alpha)/(1-alpha)
並將其與新顏色混合:
結果= C_base *(1-alpha)+ C_repaint * alpha
細節決定成敗
詳細(頂部)圖像的紋理像素密度高16倍,而內存僅重11%。
這種方法的程序性質使我可以將完整的PBR細節集應用於模型,該模型適用於所有材質和重新繪製選項。細節圖由16個圖塊組成,並具有一組細節法線和細節漸變。Detail_ID映射用於定義哪個圖塊用於細節。我建議將BC7紋理格式與RG中的普通R和G通道以及B中的漸變一起使用。代碼中需要進一步恢復普通B通道。您可能會注意到一些細節是空白的,因為我不需要此模型上的16個細節。
您可以看到更改detail_ID如何影響表面: