Перейти к содержанию

ArtemSH

Модмейкер
  • Постов

    328
  • Зарегистрирован

  • Посещение

  • Победитель дней

    11

Весь контент ArtemSH

  1. А есть мб демо-версия проекта? Ну или альфа. Пробежаться по тому, что уже было создано за столько лет.  
  2. Я играю и бросаю играть в Обливион уже лет десять, и всё то время, когда он стоит на моем ПК, у игры всегда наблюдаются проблемы, занимающие мой ум. Например, почему Западные Врата Чейдинхола так лагают? Я уверен, что и у вас не наблюдалось строгих 60 FPS в этой игре. Я ожидаю просадок, но даже в оригинальной игре я получаю только 30 FPS при i5 4690K при 4.4GHz и RX 570. Ладно, я тут пока писал стратью погонял с DXVK HUD и сравнил с Gallium HUD и, снова переключившись на DXVK, я заметил, что оптимизация улучшилась в разы. Переключился на Gallium HUD и снова получил хороший результат. Причина этого поста, по ходу, улетучилась, но может быть, имеет смысл для вашего игрового сетапа. Фреймрейт, который вы увидите, не стоит воспринимать как данность. Не знаю, что я сделал, починив этот косяк разработчиков. Но это все еще интересная проблема. Проблема Чейдинхола: низкий фреймрейт! Это старая игра, а наше железо уже в тыыыыщу раз круче того, что было в те годы. AnandTech использовал Athlon 64 dual core и SLI/Crossfire GPUs (который скалировался очень хорошо, Oblivion хорошо с ним ладит), и было верхом успеха получить 30 FPS при средних настройках в виде 1024x768. Сейчас у нас GPU и CPU за $200, разгоняющие современные игры до 100FPS при 1080p, но в Oblivion мы все также пытаемся вытянуть из фреймрейта 60FPS. Что за ерунда? Это большая тема, в которыю я сейчас не хочу погружаться. Поэтому обьясню проблему вкратце простыми словами, опираясь на свои наблюдения. Использование системы обливионом Обливион - плоть от плоти эпохи гейминга на DirectX 9. Он использует движок GameBryo, дополненный после Морровинда пачкой нововведений. Для нас в данном случае важны следующие: физика от Havok, уровень детализации на расстоянии (LOD) и динамическое освещение. Radiant AI тоже был таким нововведением, хотя по факту это улучшение того, что мы уже видели в Морровинде. Использование GPU Оригинальная игра, даже с модами, едва ли использует GPU. Единственные эффекты, которые действительно нагружают GPU, это вещи по типу шейдеров из ENB или Oblivion Reloaded. Большая часть рендерящихся эффектов, как рефракция или отражения в воде, привязаны к GPU. Современные GPU даже не заметят этой нагрузки, поэтому наши GPU всегда используются не на 100%. Использование CPU Будучи игрой из 2006 года, она не любит многопоточность. Большая часть вещей (вызовы отрисовки и ИИ – самые нагружающие) находятся в главном потоке CPU, когда как 1 и, возможно, дополнительный поток делают что-то еще (OSR, кажется, что-то делает с третьим потоком, но этого я еще не тестировал). Пусть ИИ действительно тяжел для загрузки, но в той зоне Чейдинхола лишь 2 стражника у Западных Ворот, так что их ИИ – просто погрешность. Вокруг нет ничего, что затрагивало бы физику. Динамическое освещение, отрисовываемое CPU, отсутствует. Едва ли есть ЛОДы в этой ячейке Чейдинхола, да и оригинальная игра не то чтобы много их в себе содержит. И если ЛОДы не проблема, то тогда откуда такая нагрузка? draw calls Вы скорее всего уже слышали такой термин и возможно в курсе, что «чем их больше, тем ниже оптимизация», но что по сути из себя представляет вызов отрисовки (draw call)? GPU, особенно старые, довольно тупые. Они просто берут информацию и рендерят её на экране. Сейчас GPU стали очень комплексными и способными делать множество вещей, которые выпадали на долю CPU в играх, но в 2006 это была мечта! Сама концепция шейдеров тогда еще была меньше десяти лет от роду. Так как вообще рендерят обьект? Откуда инфа о нем приходит? CPU говорит GPU что, где и как отрендерить. Самый важный аспект из представленных это ЧТО мы будем рендерить, так как он самый ограничивающий. В нашем контексте, я опишу весь меш обьекта как модель, а весь маппинг текстуры (texture mapping) как текстурную карту (texture map). Отдельные компоненты – это меши и текстуры. Сингулярный обьект, ну скажем, модель персонажа, это не единый меш с единой текстурой, привязанной к нему. Это комплексная модель, разделенная на части, позволяющая тем самым легко текстурировать и модифицировать эту модель. То есть вы разделяете модель персонажа на три меша с двумя текстурами на каждый (цвет и карта нормалей (normal map)). Затык в том, что CPU не знает, что это один обьект. Для него это 3 меша с 2 текстурами на каждом, и он говорит GPU: «здесь 9 штук надо отрендерить». Так что вместо того чтобы модель персонажа была единым мешем с двумя текстурами, у неё три меша с шестью текстурами в совокупности. На наших глазах у нас утроилось количество вызовов отрисовки на одну модель. И это самая медленная часть рендеринга 3D графики, её узкое горлышко. Настолько медленная, что соверменные движки выгружают как можно больше в GPU, чтобы CPU не тратило время на вызовы отрисовки. Современные CPU, кажется, ограничены около 10 тысячами вызовов отрисовки перед тем как FPS упадет ниже 60. Однако больше вызовов отрисовки не означает падение FPS в ноль. Чейдинхол вызывает около 46 тысяч вызовов отрисовки, но 30 FPS вполне способен удержать, в то время как 20 тысяч вызовов отрисовки из RAEVWD не могут стабильно выдавать даже 25 ФПС. Это раазница, которую нужно держать в уме. Смотрите на вызовы отрисовки в конкретной области, а не в игре в целом. тестирование Сперва я создал HUD чтобы отражать информацию, которую я хочу видеть. Используя Линукс и AMD GPU, я перешел на Gallium, используя Gallium New драйвер в виде аддона для игр на Wine. Это дало мне информацию по каждому ядру CPU, FPS, загрузке GPU, и количеству вызовов отрисовки. Первые мысли Изначально я был убежден, что собака зарыта в освещении (lights). Я тестил стартовую ячейку в тюрьме и думал, что источники света вызывают около 1500 отрисовок. Это, мягко говоря, многовато для света. Поэтому я пошел в Чейдинхол и повозился с освещением у Западных Ворот, быстро выяснив, что дело не в источниках света. Их отключение ни к чему не привело! Ясно, что я иду в неправильном направлении. Вот так выглядит интерфейс исследования оптимизации Следующая мысль Тогда я решил, что проблема в домах. Я уже знал, что они сделаны неэффективно. Поэтому я протестил дома и отключил их. И увидел, что количество вызовов отрисовки падает в разы! 5000 вызовов отрисовки тут же пропали. Тогда я решил сделать нечто еще более радикальное и удалил пачку домов рядом с собором и снова потестил область. Почти 20 тысяч вызовов отрисовки тут же испарились. Проблема была ни в источниках света, ни в ЛОДах. Виноваты дома Чейдинхола! С источниками света Без источников света С домами Без домов С домами Без домов обливион и вызовы отрисовки Обливион разработан для ПК и Xbox360 соответственно. По правде кое в чем он разрабатывался в первую очередь под Xbox360. У консоли было только 512 МБ памяти для работы на всю систему, когда как самый скромный ПК скорее всего имел 1 ГБ системной памяти и 256 МБ видеопамяти в то время. К тому же игра была создана под один двухслойный диск DVD (содержит около 8 ГБ). Бесезда должна была минимизировать размеры текстур, при этом не делая из игры заблюренную кашу. Чтобы добиться этого они создали  текстуры по единому образцу (generic textures) для общих мешей по единому образцу (generic meshes), чтобы состыковать кусочки мешей вместе и сделать тем самым модель. Эти меши так же соединялись по единому образцу при создании новых строений. Они не могли добиться того чтобы в игре были один меш с одной-двумя текстурами на модель, это бы съело слишком много места на диске и в памяти. Типичный дом в Чейдинхоле имеет следующую модель: Каждый NiTriStrips имеет соответствующую текстуру, и эта текстура должна иметь соответствующую карту нормалей. Это около 50 вызовов отрисовки на дом. А у нас десятки домов перед глазами единовременно. И Обливион не имеет Occlusion Culling, так что все эти дома рендерятся всегда, когда находятся перед глазами. Так что неудивительно, что Чейдинхол не шибко оптимизирован. Данные из Nifskope математическая проблема Если сложить в уме, то окажется, что 50 вызовов отрисовки на дом не могут привести к 46 тысячам вызовам отрисовки в Западных Воротах. Честно? Я тоже не знаю, как это работает. Очень сложно определить, что именно требует вызова отрисовки, особенно, когда у нас нету SDK движка. Если у кого есть более продвинутые познания, я бы мечтал узнать об этом от вас. решение Пока что есть только одна вещь, фиксящая проблемы вызовов отрисовки в Обливионе, и она не самая простая в реализации. Все статичные модели игры (камни, здания, и тд) нужно переделать в единый меш с использованием атласной текстуры. Морровинд имеет восхитительный проект Атласного Текстурирования, который включает все модели игры и комбинирует компоненты мешей в единую модель. Если сделать нечто подобное для домов в Чейдинхоле, то вместо 50 вызовов отрисовки на один дом у нас будет около 3,6% вызовов отрисовки от этого числа. Я бы потестил это сам, но не умею моделировать, да и времени учиться этому нет. VWD opitimized meshes qwertyasdfgh’а это отличная точка отчета, но это только для ЛОДов. Как по мне нам нужен проект, который включит в себя все оригинальные меши. В таком случае даже оригинальные VWD меши будут хорошо оптимизированы. Как мне кажется, это единственный способ сделать Обливион оптимизированным в ближайшем будущем, особенно с учетом порта на OpenMW, который появится лет через 5 минимум, и тем, что Борис не вернется в Обливион чтобы дать нам Occlusion Culling. Тогда проблема Чейдинхола наконец-то будет решена.
  3. https://tesall.club/tutorials/the-elder-scrolls-modding/1736272151378-problema-cheidinkhola Прошу одобрить статью
  4. ArtemSH

    С Рождеством Христовым!

    С Рождеством Христовым!
  5. ArtemSH

    WAC - Integration

    Lord_Inqusitor,интегрейшн более легкая версия. та, что в бете, должна была включить намного больше ВАК-конента в игру. интегрейшн по сути закончен. на него еще есть патчи от других людей (ксеноглауса, если не ошибаюсь)
  6. Всем доброго дня! Тоже подкопились вопросы, причем самого разного толка. Где-то я чую, что мог бы решить, но всё никак не пойму, в чем соль. Как обычно, буду рад ответу на любой из вопросов, потому что они все разноплановые и разные по сложности. Собираю коллективное знание, так сказать, с миру по нитке. Вопрос 1. Правильно ли я понимаю, что хорошая практика иметь шаг в 5 пунктов между стадиями квеста, иначе движок может забаговать? Или это байка? А также какое количество стадий может быть максимальным? Не сами стадии, а их "номер" беспокоит. Например, стадия 455 будет работать? А стадия 1000? Вопрос 2. Как окрасить цветом текст, набранный в MessageBoxEX? Видел окрас в FormID Finder, хотел бы такой же в своем меню одном применить, но в коде Finder ногу сломишь. Интересует зеленый и красный цвета для текста (если быть совсем уж конкретным). Контекст: в менюшке для активатора "Бочонок с вином" игрок может отравить вино. Если бочонок не отравлен, текст будет зеленый; если отравлен - красный. Вопрос 3. Как отфильтровывать нужных неписей\предметы в массиве? Контекст: Мне нужно это для нескольких целей. Первая цель фильтрации: обьектный, привязанный к персонажу скрипт, который отфильтровывает его имущество в ячейке его проживания и меняет владение (ownership) на ничейное (через команду SetOwnership, естественно) чтобы сымитировать "сквоттинг" ячейки и имущества. Нет человека, значит и вещи уже ничейные, что логично. Суб-вопрос: такой скрипт должен привязываться к spell-target в нужной ячейке или можно его привязать к самому персонажу? Суб-суб-вопрос (да): Я привязал к персонажу следующий простейший скрипт, и после этого при убийстве персонажа открытие его инвентаря моментально приводит к вылету, хотя скрипт при этом рабочий, владение предметов действительно меняется. Есть идеи, что здесь не так? Или не тут лежит причина? Вторая цель фильтрации: Я создал пользовательские функции, которые вызываются на определенных стадиях квеста. Они должны отфильтровать нужных неписей и приписать им либо пакеты поведения, либо напрямую приказать сделать то-то и то-то. Но все варианты, которые я использовал, не работают. Либо игра перегружается, и её никак не выключить, либо игра вылетает, либо просто ничего не происходит, хотя скрипт вроде что-то делает. Так что мне нужна экспертиза по тому, где я, собственно, ошибся в структуре или вызванных функциях кода. Вот следующий (нерабочий, игра вылетает) скрипт, который при стадии квеста заставляет пиратов "бежать в страхе" из той ячейки, где они находятся, в любую другую. Второй похожий (но нерабочий, ничего не происходит) заставляет стражников выхватить мечи и в алертном состоянии бродить по поселению: Третья цель фильтрации: похожа на первую. Основной вопрос: как внести в фильтрацию массива условие в виде определенного радиуса от spelltarget'a? Контекст: У меня есть большая ячейка, где существует несколько разных неписей, и если игрок убьет одну группировку, то именно её вещи (и книги, и одежда, и мебель, и контейнеры, и оружие, и тд) становятся ничейными, но только в определенном радиусе. Для этого я набросал следующий скрипт: Вопрос 4. Я писал по поводу скрипта для появляющихся и исчезающих кораблей. Я несколько раз переписал скрипт. Остановился на том, чтобы скрипт действовал в том случае, если 1) игрок неподалеку от поселения (это обьектный скрипт); 2) игрок находится в окне загрузки. Но это привело к другой проблеме: что если загрузка не попадает в нужный временной диапазон? Как прописать активацию\деактивацию моделей кораблей постфактум? Вроде ответ на поверхности, но я действительно не догоняю. Вопрос 5. Схож с третьим. Как активировать сбор массива по временным промежуткам? Контекст: Массив отбирает случайно двух-трех НПС раз в игровой час и кидает им "приказ" активировать активатор (бочку с пивом). Скрипт прикреплен к spelltarget. Но при входе в локацию расположения spelltarget'a сол скриптом у меня вылетает игра (опять ошибка в работе массива). Лечится только полным удалением spelltargeta из локации. Вопрос 6. Вопрос скорее про алгоритмы. Заставить неписей случайно выбирать в какой из 4 домов (interior cells) войти и после вернуться к точке в доках может быть решен несколькими путями. Вопрос в том, какими? Я набросал следующий алгоритм. Тут нужна экспертиза тех, кто работал с пакетами ИИ и может сказать, рабочий ли такой алгоритм или нет. Алгоритм следующий: На каждый маркер (по маркеру на каждую из четырех interior cells) делаем пакет ИИ. В нем условия: 25% GetRandomCount; > 10 от маркера в ячейке; время работы с 9 до 18. Таким образом, каждый пакет получает шанс в 25% быть выбранным, затем сбрасывается, когда персонаж достигает маркера, находясь меньше чем в 10 метрах от него, и пакет ВСЕГДА будет выбираться в промежуток между 9 и 18 часами дня (смотрите зачем нужно дальше). Ну и то, что это будни и так понятно! Когда пакет сбрасывается (персонаж дошел до маркера), он тут же получает классический пакет возвращения к точке А, то есть к маркеру в доках. У этого пакета так же висят условия: > 10 от маркера А; время работы с 9 до 18. То есть, после сброса одного из 4 пакетов персонаж всегда получает этот пакет, возвращается в доки, и там опять выбирает один из 4 пакетов и снова идет к маркеру во внутренней ячейке пока время не достигнет 18 часов. Верно ли я понимаю логику работы движка игры? Я часто наблюдал при тестировании, что указания на метраж от маркера может привести к вылету, если маркер находится в другой ячейке, особенно во внутренней (interior) ячейке. Вылет происходит если персонажа подвергнуть функции evp, когда он находится не во внутренней ячейке, а в пакете при этом указано, что он должен быть не менее чем N метров от предмета во внутренней ячейке. Поэтому мой вопрос про алгоритм\архитектуру действия пакетов совсем не праздный. Вопрос 7. Как работает функция обнуляющая набранный урон от падения​? Точнее: она должна быть привязана к обьекту или к квесту? Если к обьекту, то этот обьеке ( triggerbox) может находиться в воздухе? Или тогда обнуления не произойдет? Контекст: Я прикрепил скрипт с этой фукнцией на triggerbox, который находится в воздухе. Хотел создать эмуляцию "прыжка веры", если игрок в прыжке проходит через триггербокс, висящий в воздухе, то игроку сбрасывают весь набранный урон от падения, и он не получит урона, когда коснется земли. Таким образом, вопрос в том, ошибка допущена в скрипте или в том, что triggerbox в таких случаях должен находиться на земле? Вопрос 8. Особенности включения кастомного xml-bar. После стадии квеста должна вызываться XML с дефолтным баром (полоской), уменьшающейся со временем. С тем, как это будет работать, я разберусь по идее, но вот почему она вообще не появляется, это для меня вопрос открытый. Код я пока закомментировал. Вопрос 9. Как соединить кастомный код с кодом оригинальной канализационной двери с анимацией открытия? Такирелль сильно помог с созданием меню (спасибо еще раз!), но почему-то дверь не воспроизводит анимацию открытия. В остальном код совершенно рабочий, я попытался добавить оригинальные условия скрипта с анимацией открытия канализационной двери, но где-то всё же ошибся. Вопрос 10. Кто нибудь знает функцию или способ как вычленить FormID\EditorID топика диалога, а также условия (conditions) топика? Есть ли функция get чтобы сохранить эти данные в код? По идее мы же как-то можем обратиться к функциям, являющимися условиями диалогов, зная сам топик? Или как это должно работать? По этой теме вообще ничего не нахожу. Вопрос 11. Вопрос по активации\деактивации точек спавна. Делаю это через объектный скрипт, который крепится к самим точкам спавна. Правильно ли это? Или лучше создать отдельный скрипт, повесить его на spelltraget, который и будет контролировать включение\отключение точек? Контекст: по вечерам в поселении в некоторых местах могут заспавниться грабители, но активная точка спавна должна быть только одна из трех. Три референса спавн-точки стоят близко друг ко другу во внешних ячейках. Скрипт вроде рабочий, но есть сомнения в "правильности" самого кода. Вопрос 12. Самый легкий, но важный. Напишите пожалуйста, как в Золотом Издании переведены следующие предметы (LowerCupTan02, MiddleMetalGoblet, LowerMugTan01, MiddleMetalTankard005)? Контекст: Я создал строковый массив, который проходится по инвентарю игрока, и если в нем есть предметы с соответствующими названиями, то он может налить себе в "кружку" (Goblet, Tankard, Cup or Mug) вина из бочонка. Поэтому для перевода нужна информация как эти же названия даны в русском официальном переводе. Вопрос 13. Так сказать, на будущее. Если мод обновляется до новой версии, как вносят изменения с новой версии в перевод предыдущей? не переводить же один и тот же плагин заново?! Наверное должна существовать инфраструктура комфортного обновления существующего перевода? Спасибо всем за помощь в предыдущих вопросах, поддержка форумчан это действительно чудо! Особенно когда сам не знаешь совершенно как решить поставленную задачу. И это очень вдохновляет работать дальше. Всех с наступающим Новым Годом!
  7. то есть моды стоят через вортекс, а потом уже во врай баше сделан башд патч? надо пройтись во врай баше по модам и посмотреть теги. есть ли там теги no merge, к примеру. посмотреть требования OCO, что сказано на счет башд патча\совместимости и теде.  
  8. ArtemSH

    Убежище

    Возможно это заброшенное, но уютное убежище ждет своего героя. Захочет ли он здесь жить? Да кто его спрашивает!

    © ArtSH

  9. Bethesda готовит к выпуску обновлённую версию The Elder Scrolls IV: Oblivion, которую анонсируют в ближайшее время. Об этом сообщили блогеры eXtas1s, NateTheDrake и Klobrille, которые ранее неоднократно делились достоверной информацией о грядущих новинках Microsoft. Улучшенную версию Oblivion разрабатывает студия Virtuos Games, о чем мы писали ранее. Переиздание по-прежнему называют «ремейком», но отмечают, что по масштабу изменений оно похоже на Halo Combat Evolved Anniversary, то есть геймплейно не отличается от оригинала. Обновлённую версию создают на движке Unreal Engine 5. Здесь должна быть подпись к изображению Анонс переиздания должен состояться на презентации Xbox Developer Direct, которая пройдёт в январе, утверждает eXtas1s. Релиз ремейка якобы состоится в 2025 году. Это не первый раз, когда в сети появляется информация о возможном переиздании Oblivion. В сентябре 2023 года в интернет попали документы с упоминанием ряда неанонсированных игр, среди которых был ремастер RPG. Microsoft и Bethesda никаких анонсов, связанных с Oblivion, пока не делали.
  10. ArtemSH

    Кости пращуров своих

    Маленькое кладбище основателей поселения. Неужели только эти холодные камни связывают ушедшее прошлое и пока еще дышащее настоящее? Скрин из моего мода.

    © ArtSH

  11. По ходу я случайно удалил блок с модами на магию\алхимию\бой, так что на днях буду переписывать весь этот блок.
  12. ArtemSH

    20241009 20.16.11 HUD

    Иногда жизнь заставляет превратиться в нечто очень...специфичное. Ну и завести плотоядных овечек в канализации!

    © ArtSH

  13. ArtemSH

    Уголок фаната

    Пока в разработке :) Готово примерно 60-65% модификации. Пока делюсь уже готовым контентом.  Выпущу уже в следующем году.
  14. ArtemSH

    Уголок фаната

    ну в каком-то смысле и разыскивает) это место из моего мода, который я делаю
  15. Обновил гайд. 17.12.24 Детализировал описания в некоторых модах. Добавил категорию "Оружие". Добавил новые модификации\ упоминания аналогов. Cutlasses Improved Hammers Revised Silvered Mithril weaponry and new Silver weapons Jounk's Polearms - Remixed and Remastered Shields of Light
  16. AlisiaMessar, спасибо за ответ! Жаль, на скринах выглядело впечатляюще - много красоты наведено. Уже хотел МТС удалять, уж очень он однообразно выглядит. Ну что ж. Лучше меньше да лучше, как говорил один товарищ
  17. По скринам: мощно! Кто играл, как ощущается в сравнении с MTC?
  18. ArtemSH

    Панорама комнаты

    А большую комнату отгрохал своим отпрыскам мэр! ПС. А на фоне можно заметить модный переключатель света "à la Ayleidienne". Кажется, их совсем недавно завезли в Сиродиил.

    © ArtSH

  19. ArtemSH

    Уголок фаната

    Кажется этот сын главы города является фаном одного очень скользкого лиса...

    © ArtSH

  20. Обновил гайд. 15.12.24 Убрал описки. Переписал некоторые места. Добавил категории "Звук", "Локации", "НПС", перегруппировав некоторые моды. Добавил новые модификации\ упоминания аналогов. GOSH Louder Chapel Bells Louder Ninroots EMC 2 Silence is Golden Coop's TW3 Horse Replacer OCRAFT OCRAFT Crafting Skill County gates Radian AI - NPC's Alive Landmarks of Cyrodiil Lite Marking the Landmarks Road Shrines Bibliophilia Knightly Orders for Cities Legion Forester Outposts Revisited Vanilla Style Loading Screen Addon Charcoal Village Sewers For Every City Map Markers Overhaul Daedric Shrines Prodded With A Stick DTS Downsides to Shields Nascent Archery Overhaul Horse Gameplay Overhaul Cobl for DLC Homes Unread Books Glow Fractional Magic Damage Better Blood Grip of Steel No Recoil or Stagger Haldars Mods Pack Imperial Stock Exchange
  21. ArtemSH

    Turn The Horse

    Мод хорош, только разве в Башд Патче не было ровно такой же фичи во вкладке "исправления"?
  22. Та же концепция была в Reaction (CliffWorms)
  23. Написал список современных модов для моддинга, самые актуальные и интересные на мой взгляд. вот ссылка: https://tesall.club/tutorials/1614-kratkii-gaid-na-sovremennuyu-sborku-tes-iv-oblivion-2023
    1. Moonworks

      Moonworks

      вот бы такой только для Скайрима.. а то делая свою сборку очень долго искать нужное приходится))))
×
×
  • Создать...