[程式] 如何对浮点数编码

楼主: 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