Уважаемые Игроки, Члены Сообщества и прочие фанаты, я был счастлив по поводу обретения новой DLC, но в последствии ознакомления весьма разочаровался в его качестве.
Я уделил немного времени, дабы получить исходный код мода (декомпилировав его) и распаковать BRF архивы, и могу сказать только, что я ПЛАКАЛ, как они могли выпустить мод в таком состоянии и полагать, что он НЕ даст фатальных ошибок и багов, как в моём случае.
Основные причины для возникновения фатальных ошибок в движке warband'а: ошибки в BRF архивах, Большое потребление памяти.
Основные причины для зависаний: плохой код, перегруженность текстурами и звуками, неиспользование LOD'ов.
The Brytenwalda team is to blame for these problems, NOT TALEWORLDS!
(кому надо, тот сам пусть переведёт)Following are the things I shall lay out as problematic that need sorting out ASAP. Учтите, что я хочу дать вам только поверхностный обзор по файлам мода, но не в коем случае не перечислять всё.
1. Напомним.
Движок Mount & Blade при запуске загружает все ресурсы игры и мода! Это означает, что ВСЕ одиночные текстуры, звуковые дорожки и 3D модели будут загружены в память. OGG и BRF будут распакованы из-за чего станут более полновесными нежели на диске
(постоянном хранилище). Надо учитывать, что Warband - 32-битный движок и может загружать в память не более 2000 мегабайт. И коль скоро объём загружаемых ресурсов превысит указаную цифру, случится вылет!
2. Скрипты\модульная система.
В первую очередь после открытия исходников декомпилированного модуля я был потрясён внушительным объёмом кода... с горем пополам принялся за чтение, начав с кода для сетевой игры, потому как, насколько мне сейчас известно, это самая "грязная" его часть.
Я выделил подтемы на счёт которых хочу рассказать.
2.1. Нагрузка.
При сетевой игре с большим количеством игроков нагрузка критическая. В первую очередь, многие шаблоны миссий запускаются часто, может быть даже слишком часто, это увеличивает загруженность CPU, а это ох какой важный фактор для игровых серверов... please check all template timers and make sure they need to be this often.
(не понял, что имеется ввиду)Следующее, что я заметил - выполняющийся много раз killing loops
(как я понял, имеется ввиду, что камера показывает, когда одним агентом сражён другой), при смерти каждого агента выполняется для всех агентов. Это создаёт проблемы в основном при частом запуске, с десятью игроками killing loops будет выполнен сто раз, с сотней игроков - десять тысяч раз, вы можете себе представить какая нагрузка идёт на серверный CPU?
Шейдер для моря изменён и выполняется сорок раз в секунду, даже когда этого не требуется.
Там ещё много таких казусов, вроде ненужных проверок условий с частотой в каждый фрейм и т. д. и т. п., сплошной бардак...
События на сервере... Сообщения летают туда-сюда на сервер и обратно, неужели так и надо? Так много? Тяжёлые события сильно загружают сервер, многое отправляется с сервера будучи уже применённым к клиенту.
Подведём итоги: требуется вырезка бесполезного кода, избавиться от killing loops
(или что-то вроде), сократить количество событий на сервере за ненадобностью, лучше отправлять одно событие в четыре приёма нежели четыре события - в один! Может я говорю слишком самоуверенно, но для меня это очевидно... Почитайте код и подумайте, нужно-ли то, о чём я толкую...
2.2. hackpositiblies.
Может-ли что-нибудь беспокоить больше нагрузки, может возможность легко обмануть игру, не хочу подавать людям больше идей на этот счёт, но стоит сказать, что многие бонусные способности, проверки и прочие вещи выполняются только на клиенте.
(опущу часть текста, кому надо переведёт)3. BRF архивы (используйте OpenBRF чтобы просмотреть их)
3.1 Ошибки в BRF
Я обнаружил ряд ошибок в BRF файлах. Пожалуйста, исправьте ВСЕ 606 нижеописанных ошибок и предупреждений.
Вот ссылка на полный их перечень:
http://paste.ubuntu.com/9482081/Надо было лучше проверять BRF. Свяжитесь со мной ежели возникнут вопросы. Исправьте все эти ошибки, потом продолжим.
3.2 Организация BRF архивов
Немного оптимизации загрузки.
Поместите ВСЕ ваши текстуры в ОТДЕЛЬНЫЙ BRF.
Поместите ВСЕ ваши материалы в ОТДЕЛЬНЫЙ BRF.
Поместите ВСЕ Native текстуры в ОТДЕЛЬНЫЙ BRF.
Поместите ВСЕ Native материалы в ОТДЕЛЬНЫЙ BRF.
3.3 Порядок загрузки
Нужно всегда в первую очередь подгружать Native ресурсы, а затем уже ресурсы мода/DLC.
Взгляните как я сделал это в своё моде:
Короткий список загрузки:
load_mod_resource = textures_face_gen
load_mod_resource = shaders
load_mod_resource = mymod_shaders
load_mod_resource = textures
load_mod_resource = mymod_textures
load_mod_resource = materials
load_mod_resource = mymod_materials
load_mod_resource = materials_face_gen
3.4 Флаги текстур
Начнём с текстур. Откроем BRF в который вы сохранили ваши текстуры.
Кликните на одну из текстур и взгляните на флаги. В этом “Viking Conquest” не проставлено никаких флагов.
Проставить текстурам флаги - это легко. Они зависят от размера текстуры.
AA000 для 1024*1024
99000 для 512*512
88000 для 256*256
77000 для 128*128
Это самые востребованные флаги. Ежели текстура имеет отличный размер, просто кликните на “...” справа от окошка для записи флага. Отметте галочками “Size U” и “Size V” и выберите подходящий размер.
3.5 Неиспользование LOD'ов
Модели в игре должны становиться менее детализироваными с увеличением дистанции, это значительно облегчает нагрузку на GPU, особенно на больших сценах с множеством игроков.
У вас есть много моделей с LOD'ами только первого и второго порядков.
Я бы порекомендовал делать только LOD2 и LOD4. Можно делать все LOD'ы, но, исходя из своего опыта, я считаю лучшим делать только LOD2 и LOD4.
Создание всех LOD'ов (1,2,3,4) будет неоправданым использованием памяти. LOD1 почти не отличается от LOD0. It is just to close, any larger change in geometry will be immediately visible. Изготовление LOD4 с очень низким качеством подходит для элементов одежды и подобного. Не сомневайтесь, LOD'ы используют тот же материал, что и основная модель.
Эффективный способ экономии - обеспечить маленькие объекты (яблоки, сосиски и другие декорации, которые либо очень малы, либо всегда внутри помещения) LOD'ом четвёртого порядка без вершин и полигонов.
Но не стоит зацикливаться на применении только второго и четвёртого LOD'ов. В некоторых случаях лучше использовать третий LOD вместо второго.
3.6 Модели столкновений (Collision meshes)
Ещё оди источник вылетов - модели столкновений, они в любом случае должны иметь как можно меньше полигонов, ОСОБЕННО ДВИЖУЩИЕСЯ ОБЪЕКТЫ.
Я заметил, что ваши корабли (в качестве движущихся объектов сцен) довольно ысокополигональные модели столкновений. Движущиеся объекты сцен ощутимо влияют на нагрузку, ежели их модели столкновений содержат много граней, предпочтительнее делать менее десяти, что-либо с более чем сотней граней столкновений - просто чёртов убийца. Ваши корабли имеют более ста двадцати граней столкновений.
А для прочих объектов сцен можно делать упрощённые модели столкновений, в то время как у вас многие декорации снабжены весьма многогранными моделями столкновений. Даже ежели такой объект не движется, он всё равно может быть источником вылетов и зависаний (особенно с большим количеством игроков).
Маленькие объекты вообще не нуждаются в моделях столкновений. Я видал связку сосисок модель столкновений которой имела около тысячи полигонов. Зачем? Вы что, собрались гулять по ним? Скорее всего нет. Подумайте об этих вещах прежде чем вставлять модели столкновений в игру.
Я мог бы ещё продолжать, короче, постарайтесь держаться менее тысячи полигонов для моделей столкновений статичных объектов и менее сотни - для движущихся.
4. Текстуры.
4.1 Сжатие
Мне также известно, что многие ваши текстуры неоправдано сжаты по алгоритму dxt5, такие текстуры потребляют на порядок больше свободного места и производительности. dxt5 должен применяться ТОЛЬКО когда нужна возможность полупрозрачности, в прочих случаях используйте dxt1 - без альфа канала, ежели не требуется прозрачности.
НИКОГДА не используйте dxt3 - это плохо.
4.2 Неиспользуемые текстуры
Итак, взгляните, мод включает в себя все текстуры, даже те, которые в нём не используются. Это значит, что на текстуры в вашей папке нет сслыок ни в одном из ваших BRF. Ежели игроки установят настройку "подгружать текстуры в процессе игры"
(в настройках из лаунчера), эти текстуры не будут подгружены. Их будет просто незачем подгружать. Ежели игроки не будут использовать опцию подгрузки текстур по требованию, все текстуры из BRF архивов будут загружены при запуске игры, и опять же от неиспользуемых текстур никакой пользы! Непорядок!
5. Звуковое сопровождение.
5.1 Формат сжатия
Движок игры лучше справляется с WAV файлами. У вас же только OGG, они увеличивают нагрузку. Все короткие звуковые дорожки должны иметь формат WAV! Использование WAV увеличит итоговый вес DLC, но в конечном счёте оно себя окупит.
Это не совсем правильное мнение, что OGG занимают меньше места. Они занимают меньше места на диске. И коль скоро Warband будет запущен, OGG файлы будут распакованы и загружены в память. И ваши шестикилобайтные OGG в распакованном виде превратятся в десятимегабайтные.
5.2 Чтение с жёсткого диска
Полновесные музыкальные файлы, которые не будут часто проигрываться, лучше считывать с жёсткого диска, в том смысле, что они не будут подгружены в память при запуске игры. Такие файлы должны иметь формат OGG, чтобы не испытывать проблем с медлительностью чтения с жесткого диска.
Для чтения файла сжесткого диска применяйте флаг: “sf_stream_from_hd” в вашем sounds.py