Создание реального ландшафта.

Speed Tree : Terrain & Trees.

Создание реального ландшафта.

Сообщение xakuda 26 дек 2011, 17:21

Для проекта мне понадобилось перенести реальный ландшафт в unity и вот что я нашёл по этому поводу.
Но есть пару проблем. Не смог нормально перевести в raw и в 3d max я тоже нуб.

Способ первый:
Скрытый текст:
Нам понадобится GoogleEarth http://www.google.com/intl/ru/earth/index.html
И дополнение http://www.ambiotek.com/topoview открываем его в Google Earth
в метках у нас появилась SRTM4.1, снимаем галочки с logo и logo2 и ставим на elevation
Изображение
У нас появляется координатная сетка. Выбираем нужный квадрат. Я выбрал Монако. Теперь жмём на стрелочку
Изображение
В открывшемся окне жмём на скачиваем архив по этим ссылкам
Изображение
В моём случае скачали srtm_38_04.zip весом 15 мб (некоторые районы весят до 100 мб).
В нутри tif файл с разрешением 6001х6001 покрывающий примерно 550х550 км территории (зависит от координат)
Открываем в photoshop и сохраняем в raw. В unity всё работает.

Вопрос: весь файл в raw переводится нормально а вот кусочек с глюками. Объясните как кадрироваться правильно.


Способ второй:
Скрытый текст:
Нам понадобится Google SketchUp
Жмём на Изображение выбираем квадрат и жмём захват. И так захватываем нужную область.
Вот что у нас получилось
Изображение
Экспортируем в 3d max и запекаем heigt map.
Как это сделать выложу позже если понадобится.

Вопрос: как объединить 4 меша в одном я не знаю. Поэтому у меня выходит так.
Изображение
Объясните как объединить в один меш.


Способ третий:
Скрытый текст:
Здесь http://dds.cr.usgs.gov/srtm/version1/ выбираем нужный район и нужный архив. Выбирается по координатам.
И с помощью программы MicroDem переводим в формат tif или bmp. Покрытие территории примерно 100х100 км.
Внятных инструкций не нашёл.

Могу написать то что нашёл.


Способ четвёртый:
Скрытый текст:
На сайте http://maps.google.ru/maps выбираем рельеф
Изображение
С этим я ещё не разбирался.
xakuda
UNец
 
Сообщения: 16
Зарегистрирован: 27 ноя 2011, 16:00

Re: Создание реального ландшафта.

Сообщение xakuda 02 янв 2012, 15:49

Я смотрю помочь никто не может.
xakuda
UNец
 
Сообщения: 16
Зарегистрирован: 27 ноя 2011, 16:00

Re: Создание реального ландшафта.

Сообщение jenqa29 25 янв 2012, 11:59

xakuda писал(а):Для проекта мне понадобилось перенести реальный ландшафт в unity и вот что я нашёл по этому поводу.
Но есть пару проблем. Не смог нормально перевести в raw и в 3d max я тоже нуб.

Способ первый:
Скрытый текст:
Нам понадобится GoogleEarth http://www.google.com/intl/ru/earth/index.html
И дополнение http://www.ambiotek.com/topoview открываем его в Google Earth
в метках у нас появилась SRTM4.1, снимаем галочки с logo и logo2 и ставим на elevation
Изображение
У нас появляется координатная сетка. Выбираем нужный квадрат. Я выбрал Монако. Теперь жмём на стрелочку
Изображение
В открывшемся окне жмём на скачиваем архив по этим ссылкам
Изображение
В моём случае скачали srtm_38_04.zip весом 15 мб (некоторые районы весят до 100 мб).
В нутри tif файл с разрешением 6001х6001 покрывающий примерно 550х550 км территории (зависит от координат)
Открываем в photoshop и сохраняем в raw. В unity всё работает.

Вопрос: весь файл в raw переводится нормально а вот кусочек с глюками. Объясните как кадрироваться правильно.





Способ второй:
Скрытый текст:
Нам понадобится Google SketchUp
Жмём на Изображение выбираем квадрат и жмём захват. И так захватываем нужную область.
Вот что у нас получилось
Изображение
Экспортируем в 3d max и запекаем heigt map.
Как это сделать выложу позже если понадобится.

Вопрос: как объединить 4 меша в одном я не знаю. Поэтому у меня выходит так.
Изображение
Объясните как объединить в один меш.


Способ классный, но только ограничение одним квадратом никчему =( и надпись поверед by google. В 3д максе никогда не работал, как соединять меши не знаю, но нашел видео

http://www.youtube.com/watch?v=dEXdOez2 ... re=related


Способ третий:
Скрытый текст:
Здесь http://dds.cr.usgs.gov/srtm/version1/ выбираем нужный район и нужный архив. Выбирается по координатам.
И с помощью программы MicroDem переводим в формат tif или bmp. Покрытие территории примерно 100х100 км.
Внятных инструкций не нашёл.

Могу написать то что нашёл.



Действительно ничего конкретного нету, возможно както поможет чтото типо этого?

http://gregory.pp.ru/02mai2009/trainz_srtm



Способ четвёртый:
Скрытый текст:
На сайте http://maps.google.ru/maps выбираем рельеф
Изображение
С этим я ещё не разбирался.




вообще нашел видео

http://www.youtube.com/watch?v=pUhPyoB_ ... re=related

выглядит интересно, но где взять такие плагины )) хз.


зы. мне нужно какимто образом перевести хотябы этот участок в юнити =)

Изображение


детальность не очень важна, лиж бы были неровности и текстуры как на скрине. вот думаю как это сделать, если бы кто помог кто разбирается в этих делах, было бы здорово.
jenqa29
UNец
 
Сообщения: 34
Зарегистрирован: 27 май 2011, 18:35

Re: Создание реального ландшафта.

Сообщение jetyb 05 фев 2012, 15:08

Если хотите сделать максимально приближенную к спутниковым данным землю - не советую пользоваться .raw . Перевод высот в этот формат вносит погрешности; если вы используете 8 - битные raw или grayscale bitmap карты, то на хранение высоты каждой точки будет уходить всего 1 байт. Соответственно погрешность составит (yMax - yMin)/255 (yMax и yMin - максимальная и минимальная высоты местности). Причем, как правило, программы при создании .raw используют максимальную разницу высот не по выделенному фрагменту, а по всей загруженной вами области. 16 - битные же raw-ы слабораспространены, и с ними дружит мало программ.
К тому же, если вам нужна карта высот по сетке, отличающейся от имеющихся данных шагом и сдвигом, то данные придется интерполировать. Как именно будут строить новые карты высот сторонние программы, и вообще, возможно ли точное задание карт в них - совершенно непонятно.

Лучше всего из спутниковых данных составить свои карты высот и загрузить их в terrain через terrainData.SetHeights(). Так процесс получения данных будет совершенно прозрачным, и вам не придется вникать в принципы работы сторонних программ.

Сделать это можно так:
Как написано в первом способе, через Google Earth добыть srtm - архив и открыть находящийся там файл через блокнот.
Выглядеть будет дико - 6000 строк, каждая из 6000 чисел. Но принцип хранения данных по виду файла там понять можно.
Соответственно делом техники будет создание читающей оттуда данные и составляющей нужные карты высот программы (лучше это сделать через сторонние приложения, сама unity для этого подходит как отвертка для забивания гвоздей). Сохраните полученный массив данных, в unity напишите свой скрипт, который открывает полученный файл и по нему задает высоты.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Создание реального ландшафта.

Сообщение jenqa29 25 фев 2012, 11:05

jetyb писал(а):Если хотите сделать максимально приближенную к спутниковым данным землю - не советую пользоваться .raw . Перевод высот в этот формат вносит погрешности; если вы используете 8 - битные raw или grayscale bitmap карты, то на хранение высоты каждой точки будет уходить всего 1 байт. Соответственно погрешность составит (yMax - yMin)/255 (yMax и yMin - максимальная и минимальная высоты местности). Причем, как правило, программы при создании .raw используют максимальную разницу высот не по выделенному фрагменту, а по всей загруженной вами области. 16 - битные же raw-ы слабораспространены, и с ними дружит мало программ.
К тому же, если вам нужна карта высот по сетке, отличающейся от имеющихся данных шагом и сдвигом, то данные придется интерполировать. Как именно будут строить новые карты высот сторонние программы, и вообще, возможно ли точное задание карт в них - совершенно непонятно.

Лучше всего из спутниковых данных составить свои карты высот и загрузить их в terrain через terrainData.SetHeights(). Так процесс получения данных будет совершенно прозрачным, и вам не придется вникать в принципы работы сторонних программ.

Сделать это можно так:
Как написано в первом способе, через Google Earth добыть srtm - архив и открыть находящийся там файл через блокнот.
Выглядеть будет дико - 6000 строк, каждая из 6000 чисел. Но принцип хранения данных по виду файла там понять можно.
Соответственно делом техники будет создание читающей оттуда данные и составляющей нужные карты высот программы (лучше это сделать через сторонние приложения, сама unity для этого подходит как отвертка для забивания гвоздей). Сохраните полученный массив данных, в unity напишите свой скрипт, который открывает полученный файл и по нему задает высоты.



спасибо. ) но вопрос решил через autocad, работает норм

http://www.youtube.com/watch?v=NNlAAout ... re=related
jenqa29
UNец
 
Сообщения: 34
Зарегистрирован: 27 май 2011, 18:35

Re: Создание реального ландшафта.

Сообщение Torus 17 апр 2013, 14:19

О вышеизложенных способах не знал ! Лично сам использовал архивы strm (есть на торрентах). Загружал в global_mapper, определял длины сторон нужного куска местности (поскольку расстояния в минутах для широты и долготы получаются разные). Карту высот сохранял в bmp (8 bit). В Photoshop-е менял разрешение (длину х ширину) на адекватное. Кадрировал необходимый кусок. В googleearth находил необходимые координаты - далее делал скрины - сшивал, получал нужный кусок местности соответствующий карте высот. Далее в - Unity дело техники. По глобальной текстуре наносил деревья дороги и т.д и т.п. Ну вобщем,- это кому интересно !Изображение, Изображение
Torus
UNец
 
Сообщения: 2
Зарегистрирован: 29 мар 2013, 10:27

Re: Создание реального ландшафта.

Сообщение SoulEclipse3000 12 июл 2013, 19:48

xakuda писал(а):Я смотрю помочь никто не может.

Есть такая плюшка для Unity TerraLand, только есть одно но - это цена :D
SoulEclipse3000
UNец
 
Сообщения: 5
Зарегистрирован: 12 июл 2013, 13:58
Откуда: Rostov-on-Don

Re: Создание реального ландшафта.

Сообщение Diab10 12 июл 2013, 19:52

SoulEclipse3000 писал(а):
xakuda писал(а):Я смотрю помочь никто не может.

Есть такая плюшка для Unity TerraLand, только есть одно но - это цена :D


Интересная вещица, не видел :)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Создание реального ландшафта.

Сообщение Макс 12 июл 2013, 20:50

SoulEclipse3000 писал(а):
xakuda писал(а):Я смотрю помочь никто не может.

Есть такая плюшка для Unity TerraLand, только есть одно но - это цена :D

Ну цена... Как говорится, ничего нет невозможного... - Для людей, с длииинными руками... =))
Макс
UNIверсал
 
Сообщения: 372
Зарегистрирован: 20 июн 2013, 23:05

Re: Создание реального ландшафта.

Сообщение dance111 27 янв 2014, 18:49

Я знаю где можно TerraLand взять. :ymsmug:
dance111
UNец
 
Сообщения: 12
Зарегистрирован: 22 авг 2012, 19:21

Re: Создание реального ландшафта.

Сообщение Diab10 28 янв 2014, 09:15

dance111 писал(а):Я знаю где можно TerraLand взять. :ymsmug:


Класс. Бан захотели за варез? :)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Создание реального ландшафта.

Сообщение karcun 21 май 2014, 14:50

Хм, решил развить тему.
Как раз сейчас пишу импортилку проекта SRTM-X.
Торрент: http://rutracker.org/forum/viewtopic.php?t=4205188
Проект: http://www.dlr.de.

Итак, чтение файла:
Синтаксис:
Используется csharp
float[,] FloatData = new float[901, 901];
Stream s = new FileStream(filePath, FileMode.Open);
BinaryReader r = new BinaryReader(s);
byte[] record;
byte[] bUHL = r.ReadBytes(80);
byte[] bDSI = r.ReadBytes(648);
byte[] bACC = r.ReadBytes(2700);

for(int i = 0; i < 901; i++){
        byte[] bRC = r.ReadBytes(1); //170
        Debug.Log(bRC[0]);
        byte[] bDBC = r.ReadBytes(3);
        byte[] bLoC = r.ReadBytes(2);
        byte[] bLaC = r.ReadBytes(2);
        for(int j = 0; j < 901; j++){
                record = r.ReadBytes(2);
                FloatData[i,j] = (float)((int)(record[0] << 8) + (int)record[1]);
                if(FloatData[i,j] == 0xFFFF){
                        FloatData[i,j] = 0f;
                }else{
                        FloatData[i,j] /= 10000;
                }
        }
        byte[] bLaC bSUM = r.ReadBytes(4);
}
TerrainData.SetHeights(0, 0, FloatData);
r.Close();
s.Close();
 


Так, данные у нас есть.
Данные говорят нам следующую информацию: квадрат территории, размеченной высотами в метрах каждые 25 метров.
То есть, перед нами ни что иное как готовый хайтмап.

Теперь пишем:
Синтаксис:
Используется csharp
TerrainData             data = new TerrainData();
data.size       = new Vector3(901, 9000, 901);
data.heightmapResolution = 901;

GameObject              terrainObj = Terrain.CreateTerrainGameObject(data);
Terrain                 terrain = terrainObj.GetComponent<Terrain>();
TerrainCollider         collider = terrainObj.GetComponent<TerrainCollider>();

collider.terrainData = data;
terrain.terrainData = data;

terrain.heightmapPixelError = 0;

this.Load(); //считываем хайтмапы в TerrainData
 


Смотрим и любуемся слепком выбранной территории.
Но!
Меня терзают смутные сомнения, что масштаб не выдержан, ибо:
1) Число 10000, на которое мы делим полученные высоты из файла я подбирал методом научного тыка из соображений красивости;
2) Полученный террейн у нас имеет размеры Vector3(28832, 9000, 28832) и data.heightmapResolution = 1025;
3) Наблюдается, что хайтмапРезолюшн действительно равен 1025, так как террейн заполнен высотами не полностью и имеет два края нулевых высот как раз размером чуть больше 100 юнитов.

А надо террейн размером 22525x22525 юнитов (например, отскалить его по осям X и Z 901*25) с трушными высотами.
Прошу помощи в этом вопросе!
karcun
UNец
 
Сообщения: 2
Зарегистрирован: 21 май 2014, 14:00

Re: Создание реального ландшафта.

Сообщение karcun 21 май 2014, 17:18

Да, чуть включил мозг, выключил географический кретинизм, перечитал мануалы и пришел к выводам :D:
1. Переделываем код:
Считываем хайтмап
Синтаксис:
Используется csharp
for(int j = 0; j < terSizeZ; j++){
        record = r.ReadBytes(2);
        FloatData[i,j] = (float)((int)(record[0] << 8) + (int)record[1]);
        if(FloatData[i,j] == 0xFFFF){
                FloatData[i,j] = 0f;
        }else{
                FloatData[i,j] /= terSizeY * terDim;
        }
}
 
Создаем террейн
Синтаксис:
Используется csharp
const Int16 terSizeX = 901;
const Int16 terSizeY = 9000;
const Int16 terSizeZ = 901;
const int       terDim   = 25;

TerrainData             data = new TerrainData();
data.heightmapResolution = terSizeX;
data.size       = new Vector3(terSizeX * terDim, terSizeY, terSizeZ * terDim);

GameObject              terrainObj = Terrain.CreateTerrainGameObject(data);
Terrain                 terrain = terrainObj.GetComponent<Terrain>();
TerrainCollider         collider = terrainObj.GetComponent<TerrainCollider>();

collider.terrainData = data;
terrain.terrainData = data;

terrain.heightmapPixelError = 0;
 

а вот с размером террейна ни чего не выйдет, он не может быть отличным от степени двойки и превышать 4096
karcun
UNец
 
Сообщения: 2
Зарегистрирован: 21 май 2014, 14:00

Re: Создание реального ландшафта.

Сообщение Юзьо 11 окт 2015, 14:09

Недавно обнаружился неплохой ресурс упрощающий труды :ymparty: -Сайт, с помощью которого можно получить Height map реальной местности любого уголка планеты:
http://terrain.party/
Юзьо
UNIт
 
Сообщения: 83
Зарегистрирован: 11 окт 2015, 04:48

Re: Создание реального ландшафта.

Сообщение PREZRAK 11 окт 2015, 14:57

Я б не сказал, что он хорош, иначе бы дал ссылку ещё несколько месяцев назад - качество только для "самолётов".
участник клуба GCC
Аватара пользователя
PREZRAK
Старожил
 
Сообщения: 653
Зарегистрирован: 30 май 2013, 12:41
  • Сайт

След.

Вернуться в Земля и деревья.

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

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