Render.ru

Создание ландшафтов для 3D стратегий

#1
Вопрос такой: как оптимально смоделить ландшафт для движка: делать один огромный меш и одну большую текстуру или складывать его из патчей и потом отдельно текстурировать каждый патч? Где лучше делать: в 3dsmax или писать для этого свой редактор (как в Warcraft III). Лучший вариант для нас - делать все в 3dsmax, там красивее и быстрее для программера. Короче - подскажите с оптимальным методом моделирования ландшафта.
 

Tengiz

Активный участник
Рейтинг
5
#2
Сложно сказать как лучше. У всех вариантов есть свои плюсы и минусы.
По поводу как сделать ландшафт.
1. Ландшафт extrudits'я из кучи карт высот.
Плюсы - легко оптимизировать за счет одинакового шага сетки
Минусы - не всегда четко понятно, что получиться в результате. Много лишних полигонов на плоских поверхностях.
2. Меsh или path (по фигу) с одинаковым шагом сетки созданный руками за счет смещения точек по оси z (X и Y не трогать)
Плюсы - легко оптимизировать за счет одинакового шага сетки, наглядно видно что выходить в процессе создания mesh'a.
Минусы - можно случайно подвинуть один поинт и тут уж либо тулзу какую-нибудь писать, которая бы четко расставляла все точки на одинаковый шаг по X и Y. Хотя скорее всего писать это все равно придется - Max не дает четкости до тысячных и пойнты скачут в пределах сотых
долей. Ну и конечно более долгое создание mesh'а, а также много лишних полигонов на плоских поверхностях.

Можно конечно оптимизировать полигоны на плоских поверностях, но в таком случае текстурирование только одна большая текстура на весь ландшат (иначе плавные переходы (blend'инг) между текстурами не сделать или очень сложно сделать - я не программист, но мы сталкивались с такой проблемой и решили отказаться от оптимизации)
3. Меsh или path (по фигу) сделанный как тебе надо, оптимизенный ручками или чем угодно.
Плюсы - наглядно видно что выходить в процессе создания mesh'a. Нет лишних полигонов.
Минусы - как я и писал - сложность оптимизации и ограничение на тип наложения текстур. Только одна текстура на весь ландшафт + текстура детальности.

Вот характерный пример двух разных подходов - наш проект Шторм и 4-ый команч.
У нас extrude по картам высот + карта где цветом обозначено где какая текстура, переходы програмно + текстура детальности разная на свой тип ландшафта
Команч - один маленький меш (правда я не знаю каким способом он сделан) с одной текстурой на весь объект и текстурой детальности. Тени на террайне указаны в текстурном файле альфа каналом. Меш террайн тайлиться, за счет этого достигается любой размер карты.
 
#3
Спасибо Тенгиз за полноту изложения :)

Но не все еще понятно. Смотри: проблема как-раз не в геометрии мэша (то-есть количестве полигонов). Наш движок достаточно еффэктивно отсекает лишние полигоны, и, раз возникла потребность в плавающей детализации, сможет делать и это. Вопрос только времени.
Суть проблемы - возможно-ли в 3dsmax создать огромный мэш ландшафта ( :) возможно...) и на отдельные области полигонов накладывать определенные текстуры. Или это проблема для дизайнера? Потому-что у нашего программера есть экспортер файлов макса который берет все из него.

Или - дизайнер создает мэш и патчи из текстур, подготавливая их таким образом, чтобы программер, накладывая эти патчи на мэш (конечно если он пропишет редактор уровней для геймы и загрузит туда энтот мэш) получал нормальный, с визуальной точки зрения ландшафт, используя blending и не заботясь во время "рисования" текстурами ландшафта о геометрии (полигонах). Потому, что, движок сам разобьет ландшафт на квадродеревья (патчи) и просчитает уровни детализации для каждого из них. Согласен - тулзы писать самим прийдеться, мы просто хотели узнать - возможен ли для нашего случая (3D стратегии) вариант, как для FPS (First person shooter) - весь уровень малюем в максе, текстурируем, грузим в движок, бьем на BSP и усе...

Немного путано наверное, но такая-же неразбериха в голове (в головах) :))
 
#4
Все нижеследующее про большие текстуры в сценах...
Есть два страшных понятия для программера: LVM и AGP. Когда он видит такое сочитание символов... у него начинается ломка и течет пена изо рта.
Поясню:
1. Вы грузите в память одну большую текстуру, а после нее много маленьких. Большая идет в LVM память, а маленькие в AGP. Если маленьких много и они очень часто используются, то менеджер памяти может большую текстуру выгнать из LVM, после чего она начинает безбожно тормозить рендер (в два - четыре раза), а может и не выгнать... тогда тормозить будут маленькие.
2. Грузите в память много маленьких... потом одну большую... грубо говоря... происходит примерно тоже самое... т.е. как придумает менеджер.
Выход.
Либо... грузить большую память в sysmem, а потом выдирать из нее кусочки для рендера и помещать в LVM. либо отказаться от больших текстур.

p.s. на самом деле... проблема эта очень актуальна, т.к. нельзя с точной уверенностью говорить, где в данный момент находится текстура, сколько свободно LVM, а сколько AGP... и т.д.
 

Tengiz

Активный участник
Рейтинг
5
#5
То Михаил: Действительно очень путано, и поэтому я возможно не до конца понял, что вы хотите. Итак, я понял, что для вас идеальный вариант такой:
1. Вы создаете весь mesh в Максе, причем кладя болт на одинаковый шаг сетки, т.е. как надо, так и делаете.
2. Вам нужно много разных текстур на разных поверхностях с blend'ингом между ними на стыках.

Вопрос - как текстурить? В максе или в каком-нить своем редакторе? Ежели в Максе, то как решить проблему блендинга между текстурами на програмном уровне. А ежели в своем редакторе, то чего надо сделать с мешом, чтобы нормально текстурить. Я все правильно понял?

Эта блин такая очень непростая проблема. Без равного шага сетки меша и без накладывания на нее текстур с одинаковыми координатами для всех типов текстур, которые (координаты) еще должны быть кратны шагу меша (т.е. шаг сетки 5 метров, а накладываеши координаты ты для всех текстур строго по Z к примеру 10х10 метров) х/з как делать блендинг между тексурами. Мы пока эту проблему не решали и я сходу так не отвечу, т.к. не знаю. Но посоветовать может че смогу как к примеру обойти этот вопрос или сделать по другому, ежели ты мне дашь Асю. Вот так то.
 
#6
Лично мое мнение как модельера, но особо не сведующего в вопросах программирования такое, что для создания ландшафта игры нужен свой специально написанный редактор. Приблизительно по типу Моровинд. С возможностю накладывание максемально допустимых по разрешение кусков текстур на определенную область, с автоматическим смешиванием их по краям. Если кто не знает то редактор Морровинда допускает полностью ручную работу над ландшафтом, что позволяет художнику создавать красивые пейзажи! Но такой метод работы над ландшафтом все таки по моему мнению подходит ближе к Action/RPG жанрам! Хотя похожая генерация использовалась и в играх типа "Блицкриг".
 
Сверху