簡體   English   中英

GPU上的紋理圖像處理?

[英]Texture Image processing on the GPU?

我正在將某個場景渲染到紋理中,然后我需要以一種簡單的方式處理該圖像。 我現在如何做這個是使用glReadPixels()讀取紋理,然后在CPU上處理它。 然而這太慢了,所以我在考慮將處理轉移到GPU。

我能想到的最簡單的設置是顯示一個簡單的白色四邊形,它在正交投影中占據整個視口,然后將圖像處理位寫為片段着色器。 這將允許處理的許多實例並行運行以及訪問處理所需的紋理的任何像素。

這是一個可行的行動方案嗎? 以這種方式做事常見嗎? 有沒有更好的方法呢?

是的,這是通常的做事方式。

  1. 將某些東西渲染成紋理。
  2. 使用着色器繪制全屏四邊形,該着色器讀取該紋理並執行一些操作。

可以通過讀取一個像素並在片段着色器中輸出一個像素來完成簡單的效果(例如灰度,顏色校正等)。 可以通過從偏移位置讀取一個像素並輸出一個像素來完成更復雜的操作(例如旋轉圖案)。 通過讀取多個像素可以完成更復雜的操作。

在某些情況下,需要多個臨時紋理。 例如,高半徑的模糊通常以這種方式完成:

  1. 渲染成紋理。
  2. 渲染為另一個(較小的)紋理,使用着色器將每個輸出像素計算為多個源像素的平均值。
  3. 使用這個較小的紋理渲染成另一個小紋理,使用着色器進行適當的高斯模糊或其他。
  4. ......重復一遍

但是,在所有上述情況中,每個輸出像素應獨立於其他輸出像素。 它可以使用更多的輸入像素。

不能很好地映射的處理操作的示例是Summed Area Table,其中每個輸出像素取決於輸入像素和相鄰輸出像素的值。 仍然可以在GPU上進行這些操作( 例如pdf )。

是的,這是進行圖像處理的常用方法。 如果您要為每個像素設置顏色,則四邊形的顏色並不重要。 根據您的應用,您可能需要注意像素采樣問題(即確保您從源紋理上的正確像素進行采樣,而不是在兩個像素之間的中間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM