我有一个新的需求,需要为我的项目集成一个热力图,支持高达100万个数据点,并将其投影到我的地形网格上。
我已经阅读了这篇文章:https://www.alanzucconi.com/2016/01/27/arrays-shaders-heatmaps-in-unity3d/,并尝试实现它,经过一些调整后成功了。调整部分是改变了:
我已经阅读了这篇文章:https://www.alanzucconi.com/2016/01/27/arrays-shaders-heatmaps-in-unity3d/,并尝试实现它,经过一些调整后成功了。调整部分是改变了:
uniform float3 _Points [100]; // The positions (x,y,z)
uniform float2 _Properties [100] // The properties (x = radius, y = intensity)
to
uniform float4 _Points [100]; // The positions (x,y,z)
uniform float4 _Properties [100] // The properties (x = radius, y = intensity)
通过对脚本进行一些调整,我已经成功将随机点投影到了100个点,并且热力图被正确渲染了。当我增加了数据量后,我的FPS开始急剧下降,最终遇到了一个问题:在1023个数据点之后,我的着色器崩溃了。请注意,尽管我将热力图投影到了三维网格上,但最终结果只使用两个数据点(X、Z),因为结果应该是一个二维热力图。
如何解决这个(对我来说)庞大的任务?1023个数据点似乎远离100万,所以我认为我做得非常低效。
此外,这个项目必须在Windows、Mac和Linux平台上运行,因此我更喜欢使用OpenGL作为渲染器。
texture2D
地图(也许使用计算着色器?),然后在C#中缓存它,在每个随后的帧中只需迭代一些已更改的点,相应地更改texture2D
,然后将更新后的texture2D
发送到渲染着色器。 - Ruzihm