如何在Unity URP中自定義ToneMapping


人類對畫質的追求總是無止境的,最近正好在學習A站大佬Adrian Mendez分享的Unity Urp原神卡通渲染制作流程,發現里面用到了自定義ToneMapping-Gran Turismo tonemapper,說是可以保持顏色飽和度以及修復過曝區域,比較適合卡通渲染之類的:

然而PostProcessing自帶的Tonemapping里只有ACES和Neutral,而且參數都不讓調。於是google一下,發現colin大佬也問過類似的問題。經過調查發現大致有兩種方式,第一種是直接改文件,具體操作可以參考這里這里官方的postProcessing文檔里也有類似方法。不過我本人沒嘗試過,而更傾向於第二種方法,因為相對更加自由。

第二種方法:添加Blit Renderer Feature。這里需要先把相關代碼從Github弄下來,import到項目中,然后可以在UniversalRenderPipelineAsset_Renderer上點擊Add Renderer Feature添加一個Blit Feature(注意Event里放在不同的階段,效果也會不同,如果像圖中所示放置,可能導致Bloom效果不明顯,放到After Rendering Post Processing可能會更好):

這玩意好像可以干很多基於屏幕圖像的后處理的活,要實現自定義ToneMapping的話只需要把ToneMapping代碼寫到Shader里然后創建一個材質,再把材質丟到Blit Material里就可以了,畢竟ToneMapping只需要camera color的信息嘛。
所以剩下的工作就是根據大佬提供的GT Tonemap函數公式寫個shader就可以了!我自己寫了個代碼丑一點的shader版本,不過效果應該是一樣的,感興趣的同學可以戳網盤鏈接,提取碼zfdi。另外Github上也放了一份

此外我還自己驗證了一下曲線效果,形狀看上去應該沒啥問題,十字線交點表示(0.5,0.5):

最后當然是比較畫質改善了多少啦!左邊是沒有toneMapping的,右邊是用了GT toneMapping的效果:

感覺應該是可以平衡亮度值高的顏色吧,反正應該是更好看了233...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM