發表文章

目前顯示的是有「PostProcessing」標籤的文章

CustomBloom

圖片
對於美術朋友來說,後製的Bloom泛光需求基本上是標配的存在。而特效美術而言,也常有會希望能有限制範圍的泛光效果,而不是全屏幕的Bloom泛光。此時內建的後製Bloom就無法達成這類需求,所以就須要自己下去客製化Bloom(CustomBloom)。 這次也是基於Unity 內建渲染管線 (Built-in Render Pipeline)上來實現。在CustomBloom上可以為2個部分。 第1部分是我們需要知道特定的物件(特效)的範圍,因此可以在該效果的Shader之下再多加上一個 Pass 用來繪製遮罩部分。 第2部分則是將遮罩部分交由後製的CustomBloom的後制效果,走標準的流程( 高斯模糊 )處理,來達到特定範圍的泛光效果。 References: https://assetstore.unity.com/packages/3d/environments/3d-scifi-kit-starter-kit-92152

Depth Texture To World Position

圖片
  這篇來稍微實作一下深度圖的應用效果。 深度圖當中的數值介於 0~1 之間,精度通常為 32 or 16 bits,而且是非線性分佈,因此往往會需要再取到深度之後再轉一次成為線性的過程才比較方便後續使用。 這次的效果是在 Unity 內建渲染管線 (Built-in Render Pipeline)上製作。 一般來說要開啟深度圖可已在代碼當中加上 Camera.main.depthTextureMode = DepthTextureMode.Depth; 來讓攝影機取得深度圖資訊。 而這次是在 PostProcessing 效果上製作,因次需要在後製的 class 上加上 DepthTextureMode GetCameraFlags() 來讓攝影機開啟取得深度圖。 在開啟深度圖之後,所有的不透明物件(Opaque)都會多計算一次 Pass 來取得深度資訊(Z-Pre Pass)。如果有性能考量,須留意 DrawCall 是否增長過多。 如果是在URP環境,就可以使用 CopyDepth 的方式來取得不透明物件(Opaque)的深度圖。 再來便是在 void Render(PostProcessRenderContext context) 內執行相關的 shader 以及參數的設置。 由於我們希望從深度圖轉出世界座標,因此必須給予shader正確的 攝影機矩陣(Matrix4x4)資訊(傳遞目前的VP逆矩陣)。 最後則可以用後製shader得到的世界座標來做出貼地板的掃光效果。 References: https://ompuco.wordpress.com/2018/03/21/9/ https://www.jianshu.com/p/80a932d1f11e https://assetstore.unity.com/packages/3d/environments/landscapes/free-island-collection-104753 https://assetstore.unity.com/packages/3d/props/exterior/rock-and-boulders-2-6947