[程式] 如何對浮點數編碼

作者: Ninja5566 (苦味)   2018-10-26 00:59:14
這問題比較是圖學相關問題, 所以我直接用圖學範例來敘述我的問題
如果有說明不清楚之處請再反映
問題:
假設有一個三角形, 每個節點上都有一個浮點數值, 我希望
這個浮點數值被編碼成代表著兩個或以上的正實數, 每個數字皆為 [0, 1] 區間
不考慮誤差且在 vertex shader中, 這些數字可以很容易的被解/編碼
例如說 float = 100 * a + b, a, b皆介於0 1 之間
要解出a 以及b是相當容易的事情, a, b再送到pixel shader就可以得到a, b
這兩數之內插值
但是如果這數字沒有在vertex shader被解開, 而是整個浮點數被送進
pixel shader做內插, 請問有沒有一個編碼方式可以在pixel shader
還原出a, b 內插值?
如果有的話, 請問一個浮點數可以塞進多少個該數值?
作者: LPH66 (-6.2598534e+18f)   2018-10-26 01:08:00
我久遠以前的印象怎麼記得可以送不只一個浮點數過去?如果你兩個 shader 都動得到, 有什麼原因要硬塞成一個?
作者: Ninja5566 (苦味)   2018-10-26 01:24:00
因為有些平台不能送太多到pixel shader, 會無法編譯像UE4中 安卓平台只能送6個 float, 送一個顏色過去就去掉一半了
作者: cjcat2266 (CJ Cat)   2018-10-26 05:26:00
不是有辦法標註讓attribute不要被內插?像HLSL有nointerpolation還有100 * a + b,b = 1.0f的時候會被吃掉吧?可能要用個sign或什麼把這個edge case編進去
作者: Ninja5566 (苦味)   2018-10-26 05:45:00
1.f這種狀況就不討論了, 因為一定有誤差就轉成 b - KINDA_SMALL_NUMBER 之類的就好因為我是用UE4, 我目前找不到不被內插的方法我的想法是解得出a應該可以倒回求b
作者: Alimen (狂人)   2018-10-26 10:20:00
可以考慮把兩浮點數編到一個 1D texture 傳進去然後100a那招,你必須確保a只有小數下兩位,否則b會被吃掉
作者: Ninja5566 (苦味)   2018-10-26 10:38:00
不是很想要把它弄進texture裡面, 因為安卓對texture sample數量也有所限制, 光基本貼圖可能就有點吃緊了我記得安卓只能一次讀4張, 當然可以考慮把檔案塞到一般貼圖, 但是這真的有點費工, 因為這資料是動態的所以要更新至於數值的話, 0~0.99應該夠用了, 加上可以內插應該不是問題
作者: cjcat2266 (CJ Cat)   2018-10-26 15:55:00
UE4強制內插? 所有shader都可以明令不內插吧
作者: Ninja5566 (苦味)   2018-10-27 22:14:00
那個node就跟我說的依樣, 除了你數值輸入外完全沒有任何可供調整的參數還有UE4除了custom node之外, 只能使用float或floatvec
作者: cjcat2266 (CJ Cat)   2018-10-28 00:04:00
那用int呢,論壇上說int不會被內插
作者: Ninja5566 (苦味)   2018-10-28 01:44:00
ue4 material在大部分情況沒法用int
作者: cjcat2266 (CJ Cat)   2018-10-28 08:04:00
好吧...看來我這UE4外行真的無法亂猜答案,有請其他熟悉的UE4的高手回答
作者: ADF (............￾ ￾NN￾)   2018-10-29 12:46:00
基本上這跟GPU裝置相關 我曾做過UE4在PS4上優化 像ati系列的有提供GetParameterPX GetViVjPerspCenter 可以在pixelShader可以在解碼後 自己做內插
作者: Ninja5566 (苦味)   2018-10-30 02:24:00
請問這技術有關鍵字嗎? 感謝回答
作者: ADF (............￾ ￾NN￾)   2018-10-30 16:58:00
在pc上你可已查 amd shader explicit vertex parameter
作者: kuma660224 (kuma660224)   2018-11-24 14:14:00
對UE4不熟,不過用貼圖傳值可不受限圖數吧就把一張圖分成上下,放兩張?UV在PS再做scale offset,讀兩次不同位置

Links booklink

Contact Us: admin [ a t ] ucptt.com