如何在Unity3D中编写支持1百万个数据点的热图着色器

问题描述 投票:2回答:1

我有一个新要求,即为我当前的项目集成一个热图,该图将支持多达一百万个数据点并将其投影到我的地形网格上。

[我已经阅读了这篇文章: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个数据点。请注意,尽管我将热图投影到3D网格上,但我仅使用两个数据点(X,Z)作为最终结果应该是2D热图。

[我该如何解决这个任务的怪异,因为1023点似乎离100万点太远了,所以我想我做的效率很低。

此外,该项目必须在Windows,Mac和Linux上跨平台运行,因此我更喜欢OpenGL作为渲染器。

c# unity3d shader
1个回答
1
投票

您可以将要渲染的网格划分为多个网格,并将应保留在地图该部分中的点传递给每个网格。这样,您可以解决单个网格的制服限制。我已经使用了与您使用的基本相同的着色器,实际上我想使用计算机着色器来传递更多的数据,但是我对此并不熟练,现在我必须解决我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.