如何在Unity5中渲染不断变化的高度图?
How to render evolving heightmap in Unity5?
我在Unity中生成了一个灰度高度图,我想渲染它。类似于 Unity 中的地形,但不使用地形组件并且能够经常更改而不会造成太多性能损失。
目前我生成了一个网格(在 c# 中),然后在脚本中改变了每一帧的顶点。然而,这很慢,并且限制了我的高度图的分辨率(Unity 只允许最多 65000 个顶点的网格)。
所以我想知道,有没有更好的方法来渲染这个高度图?
备注:
- 高度图几乎每一帧都会改变。
- 我使用纹理的一个通道(目前是红色通道)来存储高度。
- 分辨率是个主要问题,它应该允许 512、1024 及以上。
- 我在 mac 上使用 Unity5 工作。
非常感谢!
我刚才找到了如何做到这一点,但忘了 post 我的解决方案。所以一年多后就在这里,也许它会对其他人有所帮助:
您可以简单地将顶点函数添加到任何着色器中:
首先添加如下内容:#pragma surface surf Standard fullforwardshadows vertex:vert
(vertex:vert
部分很重要,类似的行可能已经在着色器中,因此只需将其添加到该行)。
然后用你的名字创建顶点函数(在我的例子中是"vert"):
void vert(inout appdata_full v) {
float4 wsr = tex2Dlod(_MyTexture, v.texcoord);
v.vertex.y = wsr.r + wsr.g + wsr.b;
}
你还需要一个采样器(我只是把它放在 vert 函数上面)
sampler2D _MyTexture;
我在Unity中生成了一个灰度高度图,我想渲染它。类似于 Unity 中的地形,但不使用地形组件并且能够经常更改而不会造成太多性能损失。
目前我生成了一个网格(在 c# 中),然后在脚本中改变了每一帧的顶点。然而,这很慢,并且限制了我的高度图的分辨率(Unity 只允许最多 65000 个顶点的网格)。
所以我想知道,有没有更好的方法来渲染这个高度图?
备注:
- 高度图几乎每一帧都会改变。
- 我使用纹理的一个通道(目前是红色通道)来存储高度。
- 分辨率是个主要问题,它应该允许 512、1024 及以上。
- 我在 mac 上使用 Unity5 工作。
非常感谢!
我刚才找到了如何做到这一点,但忘了 post 我的解决方案。所以一年多后就在这里,也许它会对其他人有所帮助:
您可以简单地将顶点函数添加到任何着色器中:
首先添加如下内容:#pragma surface surf Standard fullforwardshadows vertex:vert
(vertex:vert
部分很重要,类似的行可能已经在着色器中,因此只需将其添加到该行)。
然后用你的名字创建顶点函数(在我的例子中是"vert"):
void vert(inout appdata_full v) {
float4 wsr = tex2Dlod(_MyTexture, v.texcoord);
v.vertex.y = wsr.r + wsr.g + wsr.b;
}
你还需要一个采样器(我只是把它放在 vert 函数上面)
sampler2D _MyTexture;