SkyRiver Forum
http://forum.skyriver.ru/

Подпольные М3
http://forum.skyriver.ru/viewtopic.php?f=26&t=3387
Страница 19 из 21

Автор:  Pingvin [ Вс 25 окт 2009 22:15 ]
Заголовок сообщения: 

Судя по всему глюк с PhysX связан с прогой, а не с компом, т.к. он есть и на XP, и на Viste, и на семёрке, и на ноутбуке, и на стационарном. От видеокарты он тоже не шибко зависит.

Автор:  Krogoth [ Вс 25 окт 2009 22:18 ]
Заголовок сообщения: 

Хотя PhysX я не ставил, у меня только OGRE стоит, а там только базовые библиотеки.

Автор:  smt005 [ Вс 25 окт 2009 22:21 ]
Заголовок сообщения: 

2 Razum и
Krogoth писал(а):
Да, управление жуть, глайдер еле поворачивает

Сделайте ролик - чтобы посмотреть, что у вас творится.

Добавлено спустя 1 минуту 18 секунд:

Krogoth писал(а):
Хотя PhysX я не ставил
Дык в архиве есть требуемые библотеки...

Автор:  Krogoth [ Вс 25 окт 2009 22:26 ]
Заголовок сообщения: 

smt005 писал(а):
Дык в архиве есть требуемые библотеки...
Да, т.е. мутить чего-то еще вроде как не надо.

Автор:  Razum [ Пн 26 окт 2009 1:11 ]
Заголовок сообщения: 

Ролик делать не буду, ибо нечем. А творится у меня все именно так, как надо. Как у тебя в ролике на сайте.

Автор:  Pingvin [ Чт 29 окт 2009 17:20 ]
Заголовок сообщения: 

Да!!! Я запустил его. Но есть лишь одна проблема: "Расширение GL_ ARB_shader_objects не поддреживается.

Добавлено спустя 38 секунд:

Очень сильно тормозит.

Автор:  Razum [ Чт 29 окт 2009 18:36 ]
Заголовок сообщения: 

Поудаляй лишние длл-ки из папки с программой. Мне помогло. Если и тебе поможет, выдам приз.

Автор:  Pingvin [ Чт 29 окт 2009 18:55 ]
Заголовок сообщения: 

Мне тоже помогло.
:smile:

Автор:  Razum [ Чт 29 окт 2009 19:21 ]
Заголовок сообщения: 

Приз - плюха за нечитание темы и задавание вопросов, на которые был получен ответ несколько постов назад. Когда отправлять?

Автор:  smt005 [ Чт 29 окт 2009 21:07 ]
Заголовок сообщения: 

Pingvin писал(а):
Мне тоже помогло.
Какие библиотеки потребовались?

Автор:  Pingvin [ Чт 29 окт 2009 23:06 ]
Заголовок сообщения: 

smt005 писал(а):
Какие библиотеки потребовались?

NxCooking.dll, glut32.dll, PhysXLoader.dll

Добавлено спустя 18 секунд:

И дрова к видеокарте.

Автор:  Shaman [ Пн 26 май 2014 5:09 ]
Заголовок сообщения:  Re: Подпольные М3

Почему-то лето вдохновляет меня попрограммить. Эх, классно было бы с кем-нить вместе командно пилить движок М3, но, похоже, объединить людей над чем-то подобным может только зарплата. В Скаев я уже вырос чтобы верить, так что своими силами и на энтузиазме. :smoke:
Интерес у меня не в том, чтобы сделать "хоть что-то", а в том, чтобы сделать лучше, чем было. Это может показаться наивной затеей, но мне иные варианты просто вот не интересны и всё тут - т.е. или лучше, или ничего вообще. Коды свои я не скрываю, так что присоединяйтесь, если есть желание. :wink:
Решил начать с ландшафта. Хочу вот необъятные территории. Ачивка есть - дальность видимости в 16км мне кажется неплохим результатом. Вот демошка (архив проекта для Вижуалки, 7мБ):
https://docs.google.com/uc?export=downl ... 3J0R0ZfamM
Даже немного реал-тайм терраформинга есть - можно плюхать кратеры на карте. :teeth:
Ковыряйте код, кому интересно, кому нет - можете просто полетать. :rotate:

Сделано так: карта высот имеет 8 уровней детализации: 0 - это первый, базовый уровень, где расстояние между вершинами считается равным 1м; номер 1 - это второй уровень, расстояние между вершинами 2м. Таким образом каждый последующий уровень детализации карты в два раза шире по обоим измерениям, хотя содержит столько же вершин. Т.е. каждая вершина следующего уровня детализации - это среднее арифметическое 4-х смежных вершин предыдущего уровня. Т.е. каждый последующий уровень детализации - это размытый вариант рельефа предыдущего уровня, но охватывающий в 2 раза бОльшую территорию. При рендере область в непосредственной близости от игрока рендерится квадратным куском карты из 0-го уровня, область за ней - куском карты из уровня 1 и т.д. - т.е. чем дальше рендеримый треугольник, тем больше его размер, хотя с точки зрения игрока, за счёт перспективы создаётся впечатление, что все треуги одного размера. Запустите ехешник, ткните кнопку М и всё станет наглядно.

Карта разбита на кусочки 1024х1024 вершины, формат данных - float. При перемещении камеры менеджер карты подгружает эти кусочки с диска, выдирает из каждого уровня детализации участок рядом с камерой, размером 256х256 вершин, и полученный пирожок (256х256)х8 пихает в видеопамять как текстуру типа GL_TEXTURE_2D_ARRAY, одноканальную с типом данных GL_R32F (32-битный float). Благодаря загрузке карты высот в видеопамять под видом текстуры, вершинный шейдер при рисовке имеет доступ ко всем смежным вершинам, поэтому может вычислять нормали сам (а ещё и тангенты с битангентами впридачу). Таким образом при изменении карты необходимо лишь перезагрузить (256*256*8*4=2МБ) данных в видеопамять - это делает возможным апдэйтать карту высот чуть ли не каждый кадр при необходимости без заметных лагов видео. Ну а при желании, терраформинг вообще можно осуществлять рендером паттернов гор, кратеров, холмов и прочих картовысотных примитивов в текстуру карты высот, сделав его полностью реал-таймовой фичей игрового движка. Но я до этого ещё не дошёл - пока что кратеры появляются за счёт модификации карты в обычной памяти.

Следующий этап, который я себе наметил - это текстурирование карты. Помимо высоты вершины нужно хранить также и данные о материале поверхности - какую текстуру использовать. Щас она одна - сраная трава. А хочется песочка, камешков, дёрна, опавших листьев, пожухлой травки, хвои, клеверочка, грязи, асфальта, бетона и пр. - палитру материалов. И чтобы текстуры красиво переходили из одной в другую между вершинами. Учитывая то, что на небольшом участке карты может использоваться большое количество материалов, все они должны торчать в видеопамяти. Ящитаю, слоистый тип текстуры GL_TEXTURE_2D_ARRAY подходит для хранения всей палитры материалов идеально, позволяя хранить все текстуры в одном текстурном слоте.

Т.к. каждый квадратик, рисуемый при рендере карты высот, опирается на 4 вершины, каждая из которых может иметь разный номер текстуры, то на каждом кваде может смешиваться до 4-х разных текстур. В Мехах так и есть - текстуры смешиваются между вершинами. НО! Линейное смешивание выглядит не реалистично: если на одной вершине трава, на другой - песок, то между вершинами мы видим полупрозрачные травинки через которые просвечиваются песчинки. Это как бы не логично: переход от травы к песку в реале выглядит как уменьшение концентрации травинок. И вот чё я подумал: если текстуре травы добавить альфа-канал, и пикселям травинок задать альфу выше, чем пикселям дёрна, а в текстуре песочка альфу задать среднего значения, то можно контролировать приоритет элементов текстуры при смешивани, умножая линейно-интерполируемую между вершинами альфу каждой текстуры на альфу конкретного пикселя: пусть рисуется пиксель той текстуры, чья альфа тупо больше (а не среднее арифметическое от смешивания). Таким образом переход между текстурами будет более реалистичным.
-Upd: не мудрено, что я не первый до этого додумался:
http://www.gamasutra.com/blogs/AndreyMi ... atting.php

Ну и тут мене нужна помощь. Собсно, я не знаю, чем такие особые текстуры рисовать - кто-нить может посоветовать инструментарий для создания 4-хкомпонетных (RGBA) текстур? И желательно ещё и с бамп- и оффсет-мапами чтобы можно было?

Автор:  Krogoth [ Пн 26 май 2014 12:36 ]
Заголовок сообщения:  Re: Подпольные М3

У меня твоя прога вылетает сразу.

Автор:  watcover3396 [ Пн 26 май 2014 13:06 ]
Заголовок сообщения:  Re: Подпольные М3

аналогично :smile:

Автор:  Shaman [ Пн 26 май 2014 13:37 ]
Заголовок сообщения:  Re: Подпольные М3

И как вылетает? Что пишет?
Щас скачал, запустил - у меня пашет. Значит, дело в отсутствии каких-нето длл-ек (как обычно, блин, ну до чего ж задолбала эта традиция вижуалки не включать всё что требуется в ехе-шник...).
Так какой длл-ки не хватает?

Автор:  Shaman [ Пн 26 май 2014 13:54 ]
Заголовок сообщения:  Re: Подпольные М3

Перекомпилил ехе-шник в release конфигурации - может, поможет:
Вложение:
Mech Engine.rar [82.09 КБ]
Скачиваний: 129

Автор:  Krogoth [ Пн 26 май 2014 17:22 ]
Заголовок сообщения:  Re: Подпольные М3

Нет.

Автор:  watcover3396 [ Пн 26 май 2014 17:52 ]
Заголовок сообщения:  Re: Подпольные М3

Шаман, по всей видимости проблема где то в коде, ошибок нет, твой Mech Engine запускается и больше не подает признаков жизни, процесс висит и жрет порядка 30 метров оперативки. Были бы логи, я бы слил.

Автор:  Shaman [ Пн 26 май 2014 23:35 ]
Заголовок сообщения:  Re: Подпольные М3

А, ну это первый раз подвисон может быть секунд на 5 (или дольше - зависит от железа) - там идёт рассчёт тангент и битангент глайда и оптимизация меша, после чего появится Yastreb.glm файл в папке Models, а также ландшафт сгенерится в папке Maps.
Какое железо?

Автор:  watcover3396 [ Ср 28 май 2014 2:56 ]
Заголовок сообщения:  Re: Подпольные М3

Шаман, Процессор DualCore 2x3.1ггц, Видюха nvidia geforce gt240 1гб, Оперативки 4гб, жесткий 500гб.

Автор:  Shaman [ Ср 28 май 2014 14:44 ]
Заголовок сообщения:  Re: Подпольные М3

Либо драйвера к видюхе старые, либо действительно что-то у меня в коде не так. Обнаружил, что в Release конфигурации ехе-шника даже у меня стало иногда вылетать при составлении отсутствующего куска карты. Так что где-то что-то не так, скорее всего, в моих ассемблернутых функциях. Я щас переписываю ФСЁ, переводя все операции над ландшафтом (составление, извлечение кусков, модификацию и пр.) на видюху. В случае успеха будет терраформинг на видюхе. Затребует OpenGL 3.2. Если интересно, что может Ваше железо, скачайте прогу GLview, которая анализирует все поддерживаемые Вашей видеокартой фичи:
http://www.realtech-vr.com/glview/download.php

Автор:  SHW [ Пн 2 июн 2014 15:48 ]
Заголовок сообщения:  Re: Подпольные М3

Выкладывай лучше на github, или еще какой онлайн репозиторий.
Обмениваться кодом в архивах не кошерно :-)

Автор:  Shaman [ Вт 3 июн 2014 0:35 ]
Заголовок сообщения:  Re: Подпольные М3

гитхуб не пошёл - его примочкам винда 7 требуется, у меня ХР. А чем плох Гугл-драйв? Без рекламы же, бесплатный, и лимита овердофига?

Автор:  SHW [ Вт 3 июн 2014 12:08 ]
Заголовок сообщения:  Re: Подпольные М3

Шаман писал(а):
гитхуб не пошёл - его примочкам винда 7 требуется, у меня ХР. А чем плох Гугл-драйв? Без рекламы же, бесплатный, и лимита овердофига?

Я пользовался github-ом и на XP. Там же любым клиентом можно цепляться.
А сравнивать систему контроля версий с файлопомойкой несколько некорректно. Это всё-таки разные вещи.
git, svn - для хранения кода, google-drive, yandex.диск для обмена файлами.
Можно, впринципе, хранить репозиторий в google-drive, но он пару раз херил мне файлы при возникновении конфликтов. После чего я отказался от такой практики.

Автор:  Shaman [ Вт 1 июл 2014 2:47 ]
Заголовок сообщения:  Re: Подпольные М3

Простите, но вот уж не могу не похвастаться:
Изображение
Дальность видимости 20км (дымка дальше не позволяет видеть, в реале 30км).
Освоил, наконец, мультитекстуринг. Реализовал с помощью двух общих палитр картинок: 13 горизонтальных (травко-песочко-камешки разные) и 9 вертикальных (скалы), запакованых в две текстуры типа GL_TEXTURE_2D_ARRAY - т.е. массив текстур.
Какие текстуры применимы к каждой отдельной вершине, указано с помощью 4хбайтного аттрибута, в котором первое значение - индекс горизонтальной текстуры, второй байт несёт индекс вертикальной текстуры, а 3-й и 4-й я пока не придумал под что отвести, так что про запас пока. :smile: Так что все 4 соседних вершины могут нести разные индексы текстур. Пока что выглядит убого-зеброобразно, т.к. при плюхании горы на карту индексы текстур выставляются тупо из рассчёта высоты вершины. Т.е. без артистического вмешательства и Святого Рандома. Пока что. Ну и интерполяция текстур между вершинами пока что как в Мехах - тупо-линейная. Зато вот с вертикальными текстурами лучше получилось - нет "линий" у подножий гор и растянутостей текстур. Это потому, что фрагментный шейдер, основываясь на значении вектора нормали в точке, выбирает, какую текстуру и в какой пропорции применить - горизонтальную или вертикальную (вертикальных две, кстати). Если нормаль смотрит вверх (у-компонента много больше x и z), будет преобладать горизонтальная текстура, если в бок - вертикальная текстура.

Получается, что на каждый пиксел фрагментный шейдер выковыривает из текстур разные цвета аж 12 раз, смешивая цвет от 4-х вершин, каждый из которых является результатом смешения цветов горизонтальной и вертикальной(х2) текстур. Такой шейдинг, разумеется, ресурсозатратен: крася всё зелёным цветом можно было позволить 60км дальность видимости при том же фпс, что и с мультитекстурингом и 30км (в 4 раза меньше треугольников).

Каждый фрагмент карты размером 1024х1024 вершины содержит в себе 2 массива: карту высот и карту аттрибутов. Таким образом на каждую вершину приходится 8 байт данных {float,char[4]} и общий размер каждого фрагмента карты получается 8МБ. При этом количество уровней детализации - 10, т.е. сегмент карты нулевого уровня имеет размер 1024х1024 метра, 1-го уровня - 2048х2048 метров, 2-го - 4096х4096 метров и т.д., несмотря на то, что количество вершин во всех сегментах одинаково. При модификации карты обновляются затронутые сегменты всех вышестоящих уровней детализации. Т.к. рассчёт шёл на реал-таймовый терраформинг (аччивка успешно достигнута, кстати), то в видюхе постоянно ошивается определённое количество кусков карты. При терраформинге, проходящем на видюхе, эти куски модифицируются, необходимые подгружаются с диска, замещая отработавшие, которые сохраняются на диск.

Отсутствующие сегменты создаются на основе имеющихся сегментов вышележащего слоя путём "увеличительной проекции". Пока что тут косяк: растягивая верхний слой для проекции на нижний, получается, что четверть вершин нижнего слоя чётко копирует данные вершин из верхнего слоя, но вот все остальные попадают в промежутки между ними. Т.е. их значения являются результатом линейной интерполяции. Таким образом самый нижний слой, полученный в результате послойного растягивания верхнего слоя выглядит как полотно огромных квадратов. Вот думаю щас, как с этим бороться. Либо рандомчег призвать на помощь, либо что-нить как-нить со сплайнами замутить чтоле, чтоб кругленько было. ХЗ пока, думаю вот.

Для рисовки карты из всех 10-ти слоёв собирается стопка вырезанных кусков, и 2 полученных слоёных текстуры (высОты и аттрибуты) юзаются вершинным шейдером, который вытягивает из них высоту и аттрибут для каждой вершины во время рисовки по стандартной сетке. Слоёные пирожки заново составляются каждый раз после того, как карта была изменена или камера переместилась достаточно далеко. К счастью, это не ресурсозатратно, так что может происходить покадрово, при условии, что все требуемые куски карты находятся в видеопамяти. Иначе придётся сперва произвести их тусовку, чтобы собрать все фрагменты, требующиеся для составления пирожков.

Рисуются пирожки так: сначала рисуется полный квадрат нулевого уровня детализации, затем рисуются все остальные слои, каждый в 2 раза больше, но с вырезаной центральной частью. Получается, что треуги каждого последующего слоя в 2 раза больше по размеру, но из-за перспективы, на экране все треуги занимают примерно одинаковую площадь. Геморрно было, разумеется, сопоставлять без щелей и расхождений внешние края одного слоя с внутренними границами следующего слоя, т.к. край внутреннего слоя имеет в 2 раза больше вершин. Решил я, что лучшее решение - считать внешний край внутреннего слоя как будто принадлежащим следующему слою - т.е. брать значение высоты не из своего слоя, а из следующего. Получилось идеально.

Ну в общем вот, в неравном бою с ордами собственнокриворучно созданных багов, ковыряю ландшафтег, попутно зубря ОпенГЛ, и изредка спотыкаясь о баги даже в драйверах нВидии.
Был бы благодарен, если бы кто дал кучку ландшафтно-тематичных текстурок с бамп-мапами и оффсет мапами, чтобы добавить кульного бампа в мой картонный ландшафт и реалистично смешивать текстуры вместо этой убогой линейной полупрозрачной интерполяции. :angel:

Автор:  Shaman [ Вт 1 июл 2014 3:44 ]
Заголовок сообщения:  Re: Подпольные М3

Ах, ну и ехе-шник полапать же нужно дать публике (архив 14МБ)! :smile:
Средняя кнопка мыши переключает между режимом фулскрина с управлением камерой и в режимом окна с курсором; левая и правая кнопки увеличивают и уменьшают дальность видимости, соответственно (вот только туман всё равно на месте останется, гы). Кнопки WSAD - движения вперёд/назад/влево/вправо, пробел - вверх, С - вниз, QE наклоняют камеру набок, кручение колёсика мыши меняет скорость перемещения; кнопка R переключает между режимом обычного рендеринга и вайрфреймом. Esc - выход.

При нажатии кнопки М на карту рядом с камерой плюхается гора. В рандомной ориентации, но стандартного размера (что-то около сотни метров у основания).

Учтите, перемещаясь по карте вы заставляете движок генерировать и сохранять на диск в папку Map новые фрагменты карты (каждый по 8МБ размером), так что размер папки будет расти. У меня вот уже за 2.5ГБ перевалил размер, пока я скалы плюхал для красочной картинки да слетал к дальнему горному хребту.

Если в папке отсутствуют куски карты (изначально я оттуда всё убрал), то несколько кусков высшего уровня детализации будет сгенерено автоматом (на картинке - это те горы вдалеке). Всё остальное, что наплюхаете, будет сохраняться.

Автор:  watcover3396 [ Вт 1 июл 2014 18:46 ]
Заголовок сообщения:  Re: Подпольные М3

Шаман, ну да дальность прорисовки впечатляет, только кому такая прорисовка нужна, ведь это смерть компу если нормальные модели запилить.
Почему ты не возьмешься за нормальный готовый движок? Ведь Unreal Engine 4 есть исходный код на плюсах, что тебе мешает сделать Механоиды на нем, а не делать свой велосипед.

Автор:  Вадим [ Вт 1 июл 2014 20:34 ]
Заголовок сообщения:  Re: Подпольные М3

А при движении горные пики также пляшут, как и раньше, или ты это поборол?

Автор:  GranMinigun [ Вт 1 июл 2014 21:18 ]
Заголовок сообщения:  Re: Подпольные М3

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

Автор:  Вадим [ Вт 1 июл 2014 21:41 ]
Заголовок сообщения:  Re: Подпольные М3

GranMinigun писал(а):
Вадим, пляшущие горные пики - неустранимое зло
Могу ошибаться, но в Батле3 такого не было, хотя по вторичным признакам вроде как видно, что там используется именно шамановская система с уровнями детализации.

Страница 19 из 21 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/