【问题标题】:How to utilize matrix math for neighbour processing in HLSL?如何在 HLSL 中利用矩阵数学进行邻居处理?
【发布时间】:2020-11-09 14:02:17
【问题描述】:

我正在尝试使用 HLSL 在 GPU 上进行邻居处理,我想知道是否有一种方法可以一次加载一组邻居样本而不仅仅是一个样本,这样我就可以利用矩阵数学而不是for 循环。

我目前的实现,使用 SampleLevel 函数是这样的:

float3 pixel = inputTex.SampleLevel(sampleState, uv + uvOffset, 0.0, 0.0);

相反,我想一次加载多个样本,但我还没有找到相应的 API。或者,如果我的方法完全错误,请告诉我如何在 HLSL 中使用矢量化和矩阵数学。感谢您的任何建议,祝您有美好的一天!

【问题讨论】:

    标签: matrix gpu vectorization hlsl fragment-shader


    【解决方案1】:

    据我所知,您可以从单个纹理访问中获得的最大值是 float4。

    您的选择是(假设您只需要 4 个相邻值):

    • 调用 4 种加载方法(需要纹素整数坐标,而不是 UV)。
    • 使用点采样器调用 4 个采样方法(需要将 UV 偏移 0.5/textureSize,因此您的采样将是 (u - offset, v - offset), (u + offset, v - offset), (u - offset, v + 偏移量),(u + 偏移量,v + 偏移量))
    • 如果你的纹理是单通道的(或者如果你只需要红色通道),你可以使用 Gather - https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-to-gather

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多