發表文章

目前顯示的是 2月, 2024的文章

CommandBuffers

圖片
  在2月29日來發一篇也挺有意思的XD。這篇來寫一下默認管線( Built-in Render Pipeline )當中的  CommandBuffers 功能 。 默認管線當中,渲染的順序是固定的模式,不容易調整。大部分情況下就要按照, 不透明/天空球/透明/後處理/UI 等的渲染順序來渲染屏幕的物件。而 CommandBuffers 則是用來自訂部分渲染的方式來擴展 Unity 的默認管線。 我們可以對要渲染的攝影機增加  CameraEvent 的方式來添加希望增加的渲染內容。例如:希望在 不透明(Opaque) 渲染之後希望另外增加額外的渲染則可以用 CameraEvent.AfterForwardOpaque 的方添加到攝影機上面 ( Camera. AddCommandBuffer ( CameraEvent, CommandBuffer)  ) 。 同時記得不使用時需要從攝影機上移除 ( Camera. RemoveCommandBuffer ( CameraEvent, CommandBuffer) ) 。 從這個魔法球的效果來說,會希望內部帶有扭曲的情形,因此我們可以如同上面講一樣,在 不透明(Opaque) 之後添加 CommandBuffer 讓不透明(Opaque)的部分製作全屏幕的扭曲效果(Distort),再與之後的球體物件 半透明(Transparent) 做疊加處理,來達到內部扭曲&染色的特殊表現。 球體貼牆面會有的邊緣效果是則是利用了深度圖(  _CameraDepthTexture ) 取得的 邊緣(Edge)效果。 設定  CommandBuffer C# 的部分 :  private void RendererCommandBuffer(ref CommandBuffer buf, ref Material mat) { buf.name = "[CommandBuffersEffect]"; int screenCopyID = Shader.PropertyToID("_ScreenCopyTexture"); buf.GetTemporaryRT(screenCopyID, -1, -1, 0, FilterMode.Bilinear);