日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

發布時間:2023/12/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這章介紹在片元shader中計算導數近似值的技術。這個技術把特別的值載入紋理mipmap的每個級別,以特殊的方式使用紋理映射硬件,計算出導數的結果,給出在屏幕上的像素間某個量的變化率。

Cg標準程序庫提供ddx和ddy函數,計算任意關于x和y像素的導數,但是有些硬件不支持這些導數的計算(至少在寫這本書的時候),本文提供了一個解決方案,可以基于紋理映射功能解決這個問題。

在程序紋理中需要特別注意shader的反走樣,大致來說,不應該在單個點上計算程序函數的值,而是在面積上計算函數的平均值,更準確的說,就是要計算函數在當前像素和鄰近像素之間的平均值。

a沒有反走樣,不能表現水平方向上的高頻細節。b把過于高頻的細節圖案中移走消除失真,計算出正確的過濾寬度是關鍵

?用導數函數計算過濾寬度:

float filterwidth(float2 v) {float2 fw = max(abs(ddx(v)), abs(ddy(v)));return max(fw.x, fw.y); }

用紋理計算過濾寬度:用函數tex2D()所做的紋理貼圖查詢,可以自動地對紋理查詢進行反走樣,即使真實紋理坐標的像素異常地變化,適當過濾的紋理值還是能在每個像素的地方返回。基于在相鄰像素上所計算的紋理坐標,硬件可以為每個查詢決定過濾的紋理面積。我們以這樣一種方式進行紋理查詢:(1)為特定的紋理坐標租選擇mipmap級別(2)利用這一點決定過濾寬度

先將寬度信息寫入紋理中

再從根據輸入的uv信息讀出寬度信息

uniform sampler2D filterMap;float filterwidth(float2 uv) {float log2width = (255./16.) * tex2D(filterMap, uv).x;return exp2(-log2width); }

?

?

?

總結

以上是生活随笔為你收集整理的GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。