精選文章

SmallBurger Asset Home

  SmallBurger

2019年3月20日 星期三

如何在LWSRP下製作類似BoatAttack水面反射及折射處理?


  1. 拍射反射貼圖:
    跟BoatAttack一樣,設計一個ReflectionProcessor,繼承IBeforeCameraRender介面,將其掛載在MainCamera,產生拍射反射的射影機物件,並實作ExecuteBeforeCameraRender,依照帶進來的射影機計算反射矩陣,且呼叫LightweightRenderPipeline.RenderSingleCamer進行渲染,取得反射貼圖。
  2. 渲染水平面深度貼圖(基於高度):
    BoatAttack的做法是採用另一個拍射深度貼圖的射影機,進行一次Camera的渲染,
    我覺得這樣做的方式的效率不是很好,自己是改用MultiRenderTarget的方式來進行渲染,用一次的Pass把相關的ColorBuffer及DepthBuffer生成出來,不過要付出的代價是要自行設計繼承IRendererSetup的客製化渲染流程物件。
  3. 產生折射用的背景圖:
    跟BoatAttack類似,目前是在畫SkyBox後,將其拷貝出來,提供給之後攤提折射時使用。
  4. 後記:由於LWSRP很多Pass及DefaultRenderSetup,成員資料多半都設計成private,導致即使只是加一張RenderTexture,也要將整個類別重寫,導致很多Pass的設計都直接拷貝其相關代碼,產生了不少霉味(程式的壞味道…),但由於SRP目前都還在調整架構中,所以也不想完全自己整個重寫,以免之後還是會一直調整,也許等穩定之後,再自己寫一個Forward+試試看,附上相關的測試畫面。


沒有留言:

張貼留言