2015-03-06 2 views
1

Я генерирую серию высот серого в Unity, и я хотел бы ее отобразить. Подобно ландшафту в Unity, но не использует компонент ландшафта и с возможностью очень часто меняться без слишком большой потери производительности.Как рендерить эволюционную карту роста в Unity5?

В настоящее время я генерирую сетку сетки (в C#), а затем изменяю вершины каждого кадра в скрипте. Это, однако, медленное и ограничивает разрешение моей карты высот (единство допускает только ячейки до 65000 вершин).

Так что мне было интересно, есть ли лучший способ визуализации этой карты высот?

Примечание:

  • высоты изменяются почти в каждом кадре.
  • Я использую один канал моей текстуры (в настоящее время красный), чтобы сохранить высоту.
  • Разрешение является основной проблемой, оно должно позволять 512, 1024 и выше.
  • Я работаю в Unity5 на Mac.

Большое спасибо!

+1

Я не эксперт, но я уверен, что использование сетки вместо карты высот будет танковать вашу работу независимо. – Shelby115

+0

Да. С «как сеткой» я просто имел в виду, что геометрия действительно перемещена. Так что, как обычная карта, она притворяется. Я удалил часть «как меш», потому что это действительно могло быть неверно истолковано. –

+1

Вам нужна результирующая геометрия, чтобы быть значимой в сцене, или она приемлема, если она визуально? Если последний, вершинный шейдер может справиться с этим на графическом процессоре. – rutter

ответ

1

Я нашел, как это сделать некоторое время назад, но забыл опубликовать мое решение. Так вот спустя год, может быть, это поможет кто-то другой:

Вы можете просто добавить функцию вершин в любой шейдер:

Первый добавить что-то вроде: #pragma surface surf Standard fullforwardshadows vertex:vert (vertex:vert часть главное, аналогичная строка, вероятно, уже будет в шейдере, поэтому просто добавьте ее в эту строку).

Затем создайте вершинную функцию с именем вы его («верт» в моем случае):

void vert(inout appdata_full v) { 
    float4 wsr = tex2Dlod(_MyTexture, v.texcoord); 
    v.vertex.y = wsr.r + wsr.g + wsr.b; 
} 

Вам также нужно пробник где-то там (я просто положить его выше функции верт)

sampler2D _MyTexture; 
Смежные вопросы