Страница 1 из 3

Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 18 фев 2009, 22:44
gnoblin
Мы собрались сотворить мир из картинки!
Это будет история о чести и доблести, прямых руках и [unity 3D] Unity3D версии 2.1 Соберемся же с мыслями и возьмемся за дело!..
[Авторы: Neodrop&Gnoblin]

Часть 1.

Существует несколько сложностей при использовании инструментария [unity 3D] Unity terrain Engine, о которых хотелось бы упомянуть. Все замечания применительны к текущей версии [unity 3D] Unity 2.1
Открываем имеющийся хайтмап в разрешении 4096х4096 px в формате .tga в Adobe Photoshop CS2:

Изображение

Нажимаем “save as”, выбираем формат Photoshop Raw (.RAW):

Изображение

На скриншоте видно, что нам предлагается выбрать, каким образом сохранить каналы изображения (interleaved\non-interleaved). ВНИМАНИЕ! Если вы видите аналогичную менюшку – это признак того, что вы кое-что упустили. Для [unity 3D] Unity нам нужно 8bit либо 16bit изображение с одним каналом…

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 18 фев 2009, 22:48
gnoblin
Необходимо отметить, что вначале я немного тупил, соблюдал не все необходимые условия и, как и следовало ожидать, получал вот такие забавные результаты:

Изображение

Другой ракурс:

Изображение

Что не так …
Еще попытка (на данном этапе я немного сгладил изображение, в надежде, что это исправит «лезвия»):

Изображение

Ракурс по-ближе:

Изображение

Теперь вспоминаем о том, что нам нужно (8\16 bit, 1 канал).
Сначала устанавливаем битность канала:

Изображение

И затем, либо переводим изображение в Grayscale (в том же меню, что и на скриншоте выше), что автоматически схлопнет каналы, либо удаляем лишние каналы сами (что, правда, немного изменит яркость хайтмапа - однако, мне кажется, это в данном случае это не критично):

Изображение

Кроме этого, в результате экспериментов было установлено, что наилучшее разрешение для экспорта составляет 512х512 пикселей (исходные 4096х4096 и пробуемые 2048x2048 и 1024x1024 не подошли). Меняем разрешение.
Радуемся и пробуем экспортнуть хайтмап еще раз:

Изображение

Итак, вроде бы все условия соблюдены, однако мы наблюдаем странные непонятные штуки по краям ландшафта:

Изображение

Как несложно догадаться, это получается из-за шумов по краям нашего изображения (которые, возможно, появились, когда мы сглаживали картинку с целью убрать шумы). Хочется убрать еще шумов, поэтому сглаживаем (blur) еще раз, а затем красим внешние границы картинки в черный цвет (canvas size -2,-2; canvas size +2,+2 с пивотом в центре):

Изображение
Изображение

Экспортим хайтмап и получаем:

Изображение

А вот как это выглядит уже с текстурами:

Изображение

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 18 фев 2009, 22:50
gnoblin
Часть 2.

Изображение

При экспорте RAW Height Map, по краям карты мы можем увидеть некрасивые резкие черные тени. Это происходит оттого, что Террайн в этом месте имеет острую как бритва, кромку. Ее лучше сгладить инструментами редактирования.

Изображение

Изображение

Mass Place Trees : этот инструмент дает нам возможность одной командой, высадить (разместить) на нашем Террейне тысячи и десятки тысяч деревьев. НО (!) деревья почему то размещаются преимущественно на : плоских поверхностях (долинах), Вершинах и Впадинах, практически полностью игнорируя склоны гор.

Изображение

Grass : При рисовании травы, мы видим новую траву только на той дистанции, которая установлена в настройках Террайна. Это очень неудобно, потому что зачастую не понятно, есть ли трава вообще или ее нет. Из-за этого возникают множественные ошибки при «засеивании» травой.

Изображение

На это рисунке мы видим, что травы нет и продолжаем ее рисовать.

Изображение

Но в результате получаем это:

Изображение

Поэтому, стоит сразу запомнить, что работать с травой нужно на дистанции, установленной в настройках Террайна (параметр Detail Distance)
Detailed Mesh : В отличие от Деревьев, Detailed Mesh не имеют коллидеров. Поэтому не будем мечтать о простом и удобном размещении сотен скал на берегу. Коллидеры необходимо ставить руками.

Изображение

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

Изображение

Попробуем этого избежать. Наш склон закрашен текстурой с параметром повторения ( Tiling )
TileX : 75
TileY : 75

Изображение

Чтобы исправить картинку и приблизить ее к реальности, мы добавляем в палитру текстур эту же текстуру еще раз, но меняем настройки тайлинга на
TileX : 15
TileY : 5

Изображение

И получаем более реалистично выглядящую картинку:

Изображение

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 14 апр 2009, 00:19
Neodrop
Вот, что вышло в результате:


Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 11 авг 2009, 19:10
DISLAYER
Может это только у меня, но при 8bit у меня тоже были неровности, нормально получается только при 16bit.

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 11 авг 2009, 19:49
Neodrop
Естественно. Ведь при 8 битах, всего 256 значений для высоты пикселя. Это маловато для гладкости.

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 11 авг 2009, 19:56
Vsadnik
яна 16ти + 10 раз блур ставил. всё равно шероховатость

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 28 апр 2010, 05:58
Courvee
Извините за глупый вопрос. В начале урока у вас карта высот очень реалистичная. Она сделана каким-то генератором, или руками? Можно вообще узнать поподробнее как сделать хорошую карту высот???

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 28 апр 2010, 07:11
Garu
Courvee писал(а):Извините за глупый вопрос. В начале урока у вас карта высот очень реалистичная. Она сделана каким-то генератором, или руками? Можно вообще узнать поподробнее как сделать хорошую карту высот???

Нусс, сам в свое время мозг сломал над террой, и в итоге сошелся на 2х вариантах, которые выдавали относительно сносный результат, не смотря на мою криворукость в рисовании и географический критинизм...
1 - берем ФШ, мутим новую картинку где можно указать относительно шизанутые размеры (зависит от ваших потребностей и возможностей вашего железа) и собсно начинаем - перегонка в грейскейл, перегонка в 16битный режим и понеслася - 1 слой определяет общий уровень высоты, я его гнал темно-серым, далее вырисовываем остров или че вам там нужно - белым цветом, далее выставляем дикую прозрачность, тем самым получая основание для всего - плоский остров который не очень выделяется из воды... Ну а дальше, клонируя слоя и играя с прозрачностью, можно получить вполне рельефный остров... Ну и горы так же вырисовать... Но тут нужно хоть как-то уметь рисовать, лично у меня этим способом получались окопы вместо тропинок итд итп...
2 - почти тож самое, только потом эту фиговину всю пихаем в Геоконтрол2 и там поигравшись с настройками подгоняем удобные для нас "шумы" в плане эрозии почвы итд итп... Так у меня получился относительно реалистичный ландшафт, по заданным кускам (т.е. где нужен холм, там холм, где впадина там впадина)... Но увы, не скажу что ландшафт красив и идеален на все 100...

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 28 апр 2010, 10:00
Courvee
Спасибо большое. Ушел разбираться с геоконтрол до конца.

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 28 апр 2010, 13:51
Garu
Courvee писал(а):Спасибо большое. Ушел разбираться с геоконтрол до конца.

Опять же - это не панацея... Но все же относительно сносно... В идеале найти человека, который занимается ландшафтами, а там хоть хаймап-художник, хоть тот кто в максе все штампует... Хотя, все зависит от потребностей...

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 10 май 2010, 14:05
Courvee
Почему же не панацея? Я выработал для себя отличный алгоритм. Сначала создаем в фотошопе файлик, размеров 513х513 пикселей, затем заливаем черным, и белой кистью на слоях с прозрачностью рисуем места где нам горы нужны, где ущелья и т.д. получится не реалистично, но то, что хочется в общей картине. Сохраняем в джпег, и идем в геокнтрол2. Выставляем нужные настройки, например ширина - 2км, высота 600 метров, стандарты из юнити. Затем загружаем созданную нами картинку. Основа ландшафта уже есть. Затем добавляем несколько фильтов, и получаем очень реалистичный ландшафт, с нужной нам формой. Под конец можно добавить реки или еще что то. Результат меня устравивает на все 100%. К сожалению не могу выложить картинку, потому что пишу не со своего компа, и картинок тут нет. Попробуйте. Может вам понравится.

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 10 май 2010, 16:12
Garu
обственно гдет так и делал, но, есть маааленькая фиговинка в этом решении - много слоев приходилось делать для аппетитного ландшафта, и потом - большую терру не шлепнуть, в ГК2 лимит 4096х4096 пикселей... 8х8 кусков... даже растянемс под 256 (хотя это уже не вкусно) и тогда 16х16 кусков и в лучшем случае это 32х32км щупленькой терры... или 16х16 сносной... не густо... а делать в несколько общих кусков - сшивка... тоже "позитив" на сфинктер...

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 12 май 2010, 10:18
Tutanhomon
для генерации ландшафтов я бы посоветовал бесплатную программу terragen, которая вобщем то предназначена для создания фотореалистичных изображений ландшафтов, но она еще умеет генерировать случайные хайтмапы, причем генерация настраиваема. Также есть экспорт в Raw формат.

main.jpg


generate.jpg


вот оффсайт программы

надеюсь будет полезно, когда то очень много времени убил на эту прогу, уж очень красивые штуки там можно делать. :-bd

Re: Особенности работы с Unity3d TerrainEngine

СообщениеДобавлено: 12 май 2010, 11:31
Courvee
Garu, скажи, а нафига тебе 32км на 32 км??? Или ты собрался авиасимулятор делать? Если да, то есть много программок, которые сделают тебе большой ландшафт, а если что то другое, то переосмысливай свой проект. Такие большие локации никому не нужны...