Динамическое создание ландшафта

Динамическое создание ландшафта

Сообщение stepnoy 10 дек 2010, 12:52

Господа, у меня пара нубских вопросов.

Есть ли возможность создавать динамически ландшафт из карты высот и набора текстур во время игры? И как это можно сделать?

Можно ли его в последствии изменять (например воронка от взрыва)?
stepnoy
UNец
 
Сообщения: 2
Зарегистрирован: 10 дек 2010, 12:46

Re: Динамическое создание ландшафта

Сообщение Zaicheg 10 дек 2010, 13:08

Пока что могу посоветовать только ручное создание меша (класс Mesh) по карте высот. То есть, берём пиксель карты высот (Texture2D.GetPixel), фигачим вершину в соответствии с цветом (Mesh.vertices), после вершин задаём Mesh.uv, формируем Mesh.triangles, назначем полученный меш на MeshFilter геймобъекта. По нормалям может Mesh.RecalculateNormals обойдётесь. Про RecalculateBounds тоже не забываем.

Плюс написать шейдер, накладывающий текстуры, пример (по макске) тут:
viewtopic.php?f=35&t=2927

По-моему, вполне реально.

Что касается воронки от взрыва -- всё тоже самое, опеределяете вертексы в зоне взрыва, смещаете, пересчитываете нормали. Просто поэкспериминтируйте.
У Неодропа есть деформатор -- можно спросить конкретно у него.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Динамическое создание ландшафта

Сообщение alexz 10 дек 2010, 19:44

Синтаксис:
Используется csharp
...
var terrainData = terrain.terrainData;
int size = terrainData.heightmapWidth; // Карта высот квадратная ― ширина и высота одинаковые

float[,] heights = terrainData.GetHeights(0, 0, size, size); // Достаём из Terrain'а карту высот целиком
GenerateHeightmaps(heights, size); // Совершаем с картой высот какое-нибудь непотребство
terrainData.SetHeights(0, 0, heights); // Запихиваем модифицированную карту высот обратно в Terrain

var terrainToolkit = terrain.GetComponent<TerrainToolkit>();
terrainToolkit.textureTerrain((titleString, displayString, percentComplete) => { }); // Используем TerrainToolkit, чтобы автоматически раскрасить Terrain нужными текстурами
...
 

Карту высот можно изменить в любой момент. Можно целиком, можно по кусочкам, указывая координаты и размер кусочка при вызове методов GetHeights и SetHeights. Я экспериментировал, заметил, что модификация карты высот работает шустро, только когда рядом нет травы. Если была трава, всё на полсекунды подвисало.

PS
Не, не на полсекунды виснет, а на пару десятых, но всё равно заметно. Вот моя площадка для экспериментов ― остров с динамически генерируемым ландшафтом. Правой кнопкой мыши можно делать в земле корявые ямки.

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dl.dropbox.com/u/8203557/island.unity3d&w=600&h=400&t=false&preview=1' height='"+(400+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: Динамическое создание ландшафта

Сообщение gnoblin 11 дек 2010, 03:00

еще было бы полезно отключить выпадающее меню в вебплеере по правому клику :p
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Динамическое создание ландшафта

Сообщение Neodrop 11 дек 2010, 14:27

Это в теге отключается. Я подправил.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


Вернуться в Tips & Tricks

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1