→ Ninja5566: 想了一下似乎有暴力解, 只要把cameraA再render到 09/08 05:42
→ Ninja5566: 一個render texture,然後再用另外一個cameraC來結合 09/08 05:43
→ Ninja5566: 但還是滿麻煩的 09/08 05:43
推 cjcat2266: 這個限制感覺是跟內部實作有關,如果內部運作是把 09/08 05:58
→ cjcat2266: 繪製render texture的作業平行處理,那不能有依賴姓 09/08 05:59
→ cjcat2266: 是合理的,這樣就必須多一個pass 09/08 06:00
→ cjcat2266: 不過我跟PP Stack不熟,搞不好有其他解 09/08 06:00
→ Ninja5566: 其實也不一定要pp stack, 只要免費而且有一定品質的 09/08 06:03
→ Ninja5566: PP 插件我都不會排斥 09/08 06:03
推 cjcat2266: 特殊使用需求常常會碰壁,因為自己的需求自己最清楚 09/08 06:25
→ cjcat2266: 其實遇到這種情況我會傾向於自己寫 09/08 06:26
推 cjcat2266: 是否能提供效果node示意圖或期望結果? 09/08 06:28
→ cjcat2266: 或許有其他做法也不一定 09/08 06:28
推 cjcat2266: 咦?RenderTexture是繼承自Texture不是? 09/08 06:32
→ cjcat2266: 怎麼可以收Texture的功能卻不收RenderTexture? 09/08 06:32
→ Ninja5566: 應該是說我的猜測是PP stack會強迫camera寫到screen 09/08 06:56
如果我cameraA不放PP script, cameraB有放
會變成螢幕強迫輸出cameraB的畫面, 並且有PP
不過我是不知道你說"收texture功能"是甚麼意思
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 06:57:49
我不自己寫的原因是因為..我不可能自己把PP stack裡面所有效果自己做出來
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 06:58:54
推 cjcat2266: 啊,我現在才看懂RenderTexture無法"套用"PP的意思 09/08 07:14
→ cjcat2266: 你是說cameraA可以繪製,沒有出任何錯誤,但就是來自 09/08 07:14
→ cjcat2266: cameraB的RenderTexture的那一半沒有PP效果? 09/08 07:15
→ cjcat2266: 搞不好是PP需要g-buffer,blit只有複製color buffer 09/08 07:16
→ cjcat2266: 你實際使用的PP有哪些? 09/08 07:16
→ Ninja5566: 我目前使用forward rendering, 因為blit似乎沒法 09/08 07:35
→ Ninja5566: 在deferred下使用, 我也不知道為什麼 09/08 07:35
→ Ninja5566: AO, motion blur, vignetee, fog, SSR, 09/08 07:36
推 cjcat2266: 那就對了,AO, motion blur, fog, SSR需要g-buffer 09/08 07:49
→ cjcat2266: blit只是附製color buffer,資訊不夠PP使用 09/08 07:49
→ cjcat2266: 需要找到能夠把g-buffer一併餵進用PP的camera的方法 09/08 07:51
→ cjcat2266: 這個我就不熟了,需要另外研究 09/08 07:51
應該說目前有兩個效果, 兩個script
1.我自己的image effect script
2.PP behavior script
兩者都是依賴OnRenderImage 這個function 運作
1只是做我前面講的把兩個texture結合再一起的事情而已
2也是會自己call blit 在他自己script裡面
所以pp script並沒有所謂不能blit的問題(我覺得) 有可能需要綁buffer是真的
但是script裡面的public function都沒有任何東西可以讓我設定
這就是最麻煩的地方
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 08:04:35
推 cjcat2266: AO需要深度和法向量資訊,motion blur需要速度資訊 09/08 07:57
→ cjcat2266: fog需要深度資訊,SSR需要深度和法向量資訊 09/08 07:58
→ Ninja5566: 沒錯, 但是我現在是預設forward rendering, 理論上沒 09/08 08:05
→ Ninja5566: gbuffer吧 09/08 08:05
推 cjcat2266: 我把zbuffer不小心歸到gbuffer了,然後我猜(未驗證) 09/08 08:18
→ cjcat2266: Unity偵測到你要用那些需要gbuffer的PP,還是會開 09/08 08:18
→ cjcat2266: gbuffer,不然效果根本算不出來,forward rendering也 09/08 08:19
→ cjcat2266: 跟gbuffer不互斥,就是多了幾個render target這樣 09/08 08:19
推 cjcat2266: forward rendering只是把最終顏色計算用一個pass搞定 09/08 08:22
→ cjcat2266: 需要的gbuffer還是可以照樣生成,Unity有沒有提供相關 09/08 08:23
→ cjcat2266: 資料流向控制API我就不清楚了 09/08 08:23
推 cjcat2266: PP script public function沒可設定的地方的確很麻煩.. 09/08 08:40
→ cjcat2266: 研究了一下PP stack的資源,看來除非官方有意改進 09/08 08:41
→ cjcat2266: 否則看起來不樂觀... 09/08 08:41
→ cjcat2266: 如果急需的話應該可以想辦法加個自訂camera feed屬性 09/08 09:04
→ cjcat2266: 然後在PopulateCommandBuffer抓gbuffer餵入流程 09/08 09:04
lol 結果是我只要把component順序顛倒就好了
原本是image effect在pp後面, 把他對調就會改變onRenderimage的順序
不過還是感謝回答
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 09:23:34
推 cjcat2266: 咧,這樣竟然有用? 很好奇gbuffer到底是怎麼傳過去的 09/08 09:25
→ cjcat2266: 不然無法想像那些需要gbuffer的PP怎麼運算 09/08 09:26
→ cjcat2266: 不管怎樣,可喜可賀! 09/08 09:26
我猜應該不需要, 因為這時候會變成先把兩者texture結合
再去做PP, 自然就不會有這煩惱了
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 09:32:35
推 cjcat2266: 我的疑惑是,是否在blit RenderTexture的時候也包含 09/08 09:43
→ cjcat2266: 相關的gbuffer,如果是的話,那就說得通了 09/08 09:43
→ cjcat2266: 只是我又好奇這種隱藏的額外資料流,是否是偵測到有需 09/08 09:44
→ cjcat2266: 求才啟用,不然平常沒有需求會浪費運算資源 09/08 09:45
→ cjcat2266: 有空再去挖挖Unity的source看看好了,sorry囉嗦了 09/08 09:45
推 chowleft: 我覺得 Blit 應該沒那麼多功能... 09/08 17:22
→ chowleft: blit寫gbuffer可以用CommandBuffer 09/08 17:23
→ chowleft: 但是也是一次寫一個 buffer 而已 09/08 17:24
→ chowleft: 而且不用 deferred 應該是沒辦法作 SSR 才對啊? 09/08 17:30
我只是嘗試把我想要的功能全開而已, SSR有沒有真的使用到
我不是很確定, 但一旦我開deferred就發現我的image effect會很詭異
cameraB的RT就會變只能抓開頭的一張
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 20:58:06
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 21:00:42
更正: 後來我發現只要把cameraA改deferred, B改forward就可以正常使用了
※ 編輯: Ninja5566 (24.210.62.187), 09/08/2017 21:06:34
推 cjcat2266: 哈,我也想說blit應該沒有那麼花俏,感覺是要自己 09/09 00:59
→ cjcat2266: 寫command buffer複製gbuffer才對,不過我就是好奇只用 09/09 01:00
→ cjcat2266: 一個blit是怎麼讓最終camera可以有足夠資訊把來自兩個 09/09 01:00
→ cjcat2266: 不同camera的場景正確套用需要gbuffer的效果 09/09 01:00
推 chowleft: 原Po的後製特效問題已藉由調整順序解決 09/09 01:51
→ chowleft: 所以 RenderTexture 直接就是加好後製的樣子 09/09 01:51
→ chowleft: 畫到main camera上有沒有gbuffer好像也沒差了 (猜) 09/09 01:52
→ chowleft: 另外我有嘗試一下Po說的共存問題 09/09 01:53
→ chowleft: 好像放在PP後執行的後製處理都會讓PP效果失效 09/09 01:54
→ chowleft: 但是如果在自己元件的 OnRenderImage 函式前 09/09 01:55
→ chowleft: 加上 [ImageEffectOpaque] 標籤就可以無視順序 09/09 01:55
→ chowleft: 只是我不知道有沒有其他副作用 XD 09/09 01:56
→ chowleft: 啊...好像沒有失效的樣子,是我搞錯了...Sorry Orz 09/09 02:03
→ Ninja5566: 所以你的主畫面還有RT 都有PP? 請問你有特別設定 09/09 08:29
→ Ninja5566: gbuffer嗎? 09/09 08:29
推 chowleft: 恩,我是兩邊都設PP,沒設定gbuffer 09/09 21:33
→ chowleft: 這方法的問題就是會跑兩次後製處理 09/09 21:34
→ chowleft: 上圖是直接確認RenderTexture是否有更新這樣 09/09 21:40