URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 138314
[ Назад ]

Исходное сообщение
"Релиз свободного игрового движка OpenMW 0.50"

Отправлено opennews , 09-Ноя-25 10:56 
Представлен выпуск проекта OpenMW 0.50, развивающего свободную реализацию движка для ролевой игры в жанре фэнтези The Elder Scrolls 3: Morrowind. По сравнению с оригинальным движком в OpenMW реализован модернизированный интерфейс пользователя, улучшена графика, добавлен собственный редактор OpenMW-CS для создания новых игр и модов, задействован движок симуляции физических процессов Bullet, добавлена поддержка платформ  macOS и Linux, улучшено поведение ботов...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=64206


Содержание

Сообщения в этом обсуждении
"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 10:56 
Ремастер Oblivion вот запилили на UE5:
https://steamcommunity.com/app/2623190/screenshots/
А вот Elder Scrolls VI вроде как делают на Creation Engine 2, на котором сделан Starfield:
https://steamcommunity.com/app/1716740/screenshots/

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 11:45 
Я тут баловался с CE и в Darkest Dungeon с помощью CT систему облегчения-усложнения (пропорциональное изменение параметров) придумал с помощью хитрого приемчика. )

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Константавр , 09-Ноя-25 16:32 
Как же ужасно выглядят эти игры. Безотносительно эпохи и совершенства движка. Может они были популярны из-за сюжета, но я с самого их начала не могу решиться на то, чтобы играть в это уродство.

А про конкретно эти порты - а где там UE5? Где его мощь? Модели и текстуры как были мерзкими так и остались. Переделать!


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 17:41 
>UE5? Где его мощь?

Чтобы увидеть всю "мощь" нужна RTX 5090.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 18:36 
И это только fullhd и не слишком сложная сцена. Но, вообще, это единственный движок сейчас, если не злоупотребляли блупринтами и сомнительными шейдерами он весьма приличную производительность показывает даже на древних картах (особенно по сравнению с юнити, если покрутить настройки даже выдаст адекватную производительность, и юнити с годотом никак и никогда её не выдадут).

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 12-Ноя-25 01:46 
> показывает даже на древних картах

Чего?

https://www.reddit.com/r/kingdomcome/comments/1cjp9kw/dan_v&.../

Вот дядька неплохо поясняет. К слову, его продукт работает на любой лопате и выглядит не хуже.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 19:11 
>на UE5

Сразу ффтопку.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 10:33 
Ремастер Unreal Engine 5, мягко говоря, отстой. Моды делать стало намного неудобнее, официального TES Construction Set под ремастер нет. Атмосферу оригинала не сохранили, броню видоизменили и зацензурили. В общем, испортили. Оригинал в разы лучше.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Мурзин , 09-Ноя-25 11:06 
Какие-то скучные обои из нулевых. Не хватает толковых молодых дизайнеров. И звук какой-то блеклый. Во-общем, не впечатлило.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:17 
Это жанр Action RPG. Кому какая половинка нравится.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:16 
ещё горизонт всегда в мыле и тумане...

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 21:31 
Без тумана там ни атмосферы, ни графики. На скринах какой-то стрёмный туман, в оригинале более душевный.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Bottle , 10-Ноя-25 09:56 
Оригинальный туман это типичная линейная зависимость, резко обрубающая видимость. Нет там художественной задумки, только аппаратные ограничения того времени. На проверку вся "душа" оказывается прозаическими обстоятельствами. Бюджет пишет сценарий.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 10:21 
> Оригинальный туман это типичная линейная зависимость, резко обрубающая видимость. Нет
> там художественной задумки, только аппаратные ограничения того времени. На проверку вся
> "душа" оказывается прозаическими обстоятельствами. Бюджет пишет сценарий.

Ну вон можно сравнить. Оверхаул мод позволяет отключить туман, выглядит не очень. Про аппаратные ограничения что-то сомневаюсь, моды появились примерно сразу и самое слабое железо их вполне тянуло. Тут скорее творческое видение у авторов. Многие игры того времени добавляли подобный туман, чтобы было поинтереснее.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено _kp , 10-Ноя-25 18:06 
>>ещё горизонт всегда в мыле и тумане...

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

Хотя, мы то знаем, что придумали это что бы на железе начала 2000х годов хоть как то оптимизировать. А сейчас можно отключить, если производительность позволит.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 17:43 
С молодыми дизайнерами Геншин получится или Фортнайт, если повезёт.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено анон с ним , 09-Ноя-25 17:52 
Геншин довольно хорош в графике и по дизайну мира. Он уже апдейтнулся и увеличил минимальные требования, если вы не знали. Реалистичность - это не обязательно хорошо. А уж в анимэлайк она точно ни к чему. Но я сейчас не о гача-геймплее.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 11:25 
Ребята подскажите, а какой свободный игровой движок оптимально подходит для создания гамесов в стиле Диабло, Alien Shooter 2 ? мне вообщше нравяца больше изометрические гамесы, чем  The Elder Scrolls 3. А ещё мне нравится Millennium Soldier: Expendable, жаль никто продолжение не сделал... https://retrofreakreviews.com/2018/04/13/expendable-for-pc-r.../

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Крокодил , 09-Ноя-25 12:20 
Бери godot engine

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Bottle , 09-Ноя-25 12:50 
https://github.com/godotengine/godot/issues/84137

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено анон с ним , 09-Ноя-25 17:54 
И делай на нём ремастеры первых шести Final Fantasy :)

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 13:23 
Бери что угодно. Основная проблема — сделать игру.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Bottle , 10-Ноя-25 07:43 
Всё-таки есть определённая корреляция между опенсорсностью движка и отсутствием игр на нём.
Угадай почему...

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 12-Ноя-25 17:29 
> отсутствием игр

Battlefield 6 уже можно считать релизнутой, или она всё ещё в альфе? А то чё-то дохрена идиотских багов и недочётов в балансе, плюс весь геймплей сводится к пострелушкам на пукалках и скаканию как маkaka [лол, opennet цензурит это слово] сквозь текстурки кирпичей (что можно было делать ещё в Quake). Плюс про отсутствие игр на годоте - наглая ложь.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 13:51 
flare engine

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 14:35 
> изометрические гамесы

Ты что таблеток объелся? Этот движок сам игру не сделает.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:54 
Ты даже не пытался искать.
https://github.com/bobeff/open-source-engines

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 11:32 
Долгой жизни и активного развития проекту!

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 11:53 
Мне кажется движок не универсальный. Завязан на беседковское. Ресурсы под свою игру должны быть похожи на морровиндовские.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:22 
Ресурсы упаковать в такой же контейнер или добавить поддержку ZIP не проблема. В плане самих данных: текстур, мешей, звуков, - хз.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:58 
>Представлен выпуск проекта OpenMW 0.50, развивающего свободную реализацию движка для ролевой игры в жанре фэнтези The Elder Scrolls 3: Morrowind.

Я извиняюсь за дерзость что процитировал первый абзац темы, но вам правильно кажется.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено анон с ним , 09-Ноя-25 17:55 
Без разницы на что должны быть похожи ресурсы, если игр на нём нет и не будет.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Шарп , 09-Ноя-25 11:36 
Графоний какой-то из первой половины нулевых. Зачем такое делать в 2к25?

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 11:48 
я в stoneshard для себя ce-экспериментировал и слегка залип. Разнообразная Система RPG притянула. )

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:18 
Чел, ты бы для приличия сравнил как выглядила оригинальная морра и запущенная под OpenMW. Ахрененный графоний. Не супер реалистичный, но всё, что нужно для создания красивого открытого мира, есть.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено KaZaaM4iK , 09-Ноя-25 12:18 
Не понял. При чём тут "графоний половины нулевых", если новость про движок для игры, которая была разработана в 2002 году. Или же ты думаешь, что сменил движок и у тебя 8к?

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:29 
Игра 2002 года и без OpenMW нормально не поиграешь:
https://youtu.be/fkvMfLJK0Lw?si=XKgkGBIZiw2f8nDA&t=759

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 14:39 
Чтобы игра не была размером в терабайт. Прошлая часть была с миром почти бесконечного размера. С миллионами персонажей. Такая современная игра на анреале ни на какой диск не поместится

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:56 
Дело не в графонии а в геймплее.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:59 
У меня вопрос, зачем в 2kkk25 делают вас?

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено _kp , 10-Ноя-25 18:10 
>> Графоний какой-то из первой половины нулевых.

Это графика образца начала 2010х. Всё что выжали из древнего движка.
А в начале, в стоке было существенно страшнее.

Впрочем, эта игра идет на смартфоне, с дополнениями и модами, и отлично играбельна на сенсорном экране. А в этом классе, та же самая графика уже переходит в разряд фантастической. :)


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:14 
Воу, кто-то занимается портом скайрима на OpenMW? Это же пушка!

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:41 
В чём пушка? Скайрим самая скучная часть из всех.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:48 
Овливион скучнее был. Самая скучная даггерфол.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 00:09 
Арену не застали?

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 13-Ноя-25 01:49 
Редгаод гораздо заунывнее, особенно потому что там угробищное управление.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 12-Ноя-25 17:35 
Пушка в открытости движка, как минимум. А не как сейчас, еле работающая поделка с багами интерфейса ещё с релиза, в последних версиях которой чтобы заставить моды работать нужно качать какую-то малварь под названием "мененджер модов", автообновляющуюся с нексуса.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 12:20 
только к концу 2025 года добавили эффект Доплера, который умели звуковые карточки ещё 90х годах прошлого века... мдя...

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 12:51 
Intel HDA тоже умеет?

По ощущениям, со времён, когда ESI Julia была топ картой, саундкарты только беспрестанно деградировали.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 13:11 
все звуковые карточки на базе чипа Envy24HT не были игровыми от слова совсем, будь это ESI Juli@ или M-Audio Revo. Они вообще не умеют в эффект Доплера или ЕАХ

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 13:30 
Все эти аппаратные ухищрения сейчас не нужны, всё прекрасно делается софтом.
99% звука сейчас — это встройка, если в неё что-то подобное пихать, это будет бессмысленное удорожание. А что касается качества, тут как раз встройки неплохо подтянулись.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 13:57 
я как раз давно поджидал такого комментатора - софтовый 3D-вук полное фуфло!!! Это доказывает то, что в PlayStation 4 был специально добавлен аппаратный DSP. Если делать качественную реверберацию, а не на пресетах, как делают сейчас - то при 100 источниках звука твой core i7-12700 ляжет плашмями, точно также как Geforce 5080 ложится в Mafia 2 без дополнительного аппаратного обработчика PhisX !!! А помимо реверберации в 3D-звуке используются другие ресурсоемкие эффекты и с ростом полигонов растут требования к DSP в геометрической прогресси. Для современных гамесов с 128 источниками звука нужен DSP мощностью не менее 70000 MIPS !!!

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено анон с ним , 09-Ноя-25 18:02 
>Geforce 5080 ложится в Mafia 2 без дополнительного аппаратного обработчика PhisX

Спасибо, шиз. Обожаю твои каменты. И 12-летнего эксперта ещё. Да ладно, вас таких много тут. Просто шведский стол!:)


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 18:15 
Ну он прав.
В 5000-й линейке убрали поддержку 32-битного PhysX (Mafia II - 2010 года) и если в настройках включена PhysX в старых играх, то даже 5090 лагает:
https://youtu.be/XNoBsrgoppQ?si=JF1qGRM-I8M4-60k&t=1263

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 18:18 
для тех кто в бронепоезде
https://www.ixbt.com/news/2025/03/13/geforce-rtx-5080-gtx-58...
https://habr.com/ru/news/883778

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 18:02 
Хорошая шизофрения, отборная. В современный игры с HRTF попробуй поиграть только.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 23:32 
В каких современный гамесах ты играешь с HRTF и как ты его включаешь?

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 20:48 
Тоже поджидал этого коммента. Ведь в аппаратных DSP (особенно времён EAX и A3D) удивительно эффективное железо, куда нынешним CPU за ним угнаться.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 09-Ноя-25 21:58 
DSP эффективнее CPU для обработки аудио в играх не просто "немного", а на порядки, в десятки и сотни раз, для специфических задач по ряду причин:

1. Гарвардская архитектура
CPU (Фон Неймановская архитектура): И команды (инструкции), и данные хранятся в одной памяти. Шина одна. Это создает "бутылочное горлышко": процессор не может одновременно загружать команду и данные, он делает это по очереди.

DSP (Гарвардская архитектура): Есть раздельные памяти и шины для команд и для данных. Это позволяет процессору одновременно загружать инструкцию из одной памяти и данные из другой, что резко увеличивает скорость обработки.

2. Параллелизм на уровне инструкций (ILP)
DSP спроектированы так, чтобы за один такт выполнять несколько операций. Типичная для аудио операция "Умножить и Накопить" (MAC - Multiply–Accumulate), которая является основой для фильтров, преобразований Фурье и т.д., выполняется на DSP за один такт. CPU же на это потратит несколько тактов.

3. Специализированные аппаратные блоки
DSP содержат "вшитые" в чип аппаратные ускорители для самых частых аудио-операций:

Аппаратные циклы: Позволяют зацикливать кусок кода без затратных проверок условия в конце каждой итерации (это "предсказано" аппаратно).

Бит-реверсивная адресация: Критически важна для быстрого выполнения Быстрого Преобразования Фурье (FFT).

Аппаратные акселераторы для кодеков: Современные аудио-DSP имеют блоки для кодирования/декодирования форматов вроде Opus, AAC, MP3 с минимальными затратами энергии.

4. Предсказуемость и детерминизм
Обработка аудио — это потоковая задача, требующая строгого соблюдения временных интервалов. Если вы не обработаете следующий сэмпл звука за 1/48000 секунды (для 48 кГц), будет слышимый щелчок или искажение.

Поэтому даже самые современные процы core i9 не смогут в современных гамесах рассчитывать звук полностью программно на уровне Audigy X-Fi (еах 5) - лагать будет мощно, фпс 1-2, но и мощности X-Fi для современных гамесов катострафически не хватит, потому что это было достаточно для гамесов 20 летней давности, а с тех пор полигонов выросло на порядки. Чем больше полигонов - тем больше отражений нужно вычислить...

В предыдущем комменте я написал в конце "Для современных гамесов с 128 источниками звука нужен DSP мощностью не менее 70 000 MIPS !!!" Для сравнения у Vortex 2 мощность 600 MIPS, а у Audigy X-Fi (EMU20k) 10 000 MIPS!!!


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 00:15 
> В предыдущем комменте я написал в конце "Для современных гамесов с 128 источниками звука нужен DSP мощностью не менее 70 000 MIPS !!!" Для сравнения у Vortex 2 мощность 600 MIPS, а у Audigy X-Fi (EMU20k) 10 000 MIPS!!!

Ужас! ужас! а сколько у современных CPU GIPS?


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 10-Ноя-25 00:43 
Ну вот запусти преобразование Фурье на своём проце и на Audigy и тогда будешь рассказывать сколько там у тебя GIPS... ахахаххх
Наверное разработчики PlayStation получше тебя в этом соображают, если в ПС4 добавили отдельный DSP для 3D-звука !!!

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 05:24 
> Ну вот запусти преобразование Фурье на своём проце и на Audigy

На проце, допустим, я его запускал, ещё когда на первопне MP3 кодировал, а вот на Audigy это сделать как? Специально из закромов достану, чтобы сравнить.

> Наверное разработчики PlayStation получше тебя в этом соображают, если в ПС4 добавили отдельный DSP для 3D-звука !!!

Наверное, потому, что это устройство для совершенно определённых целей и с совершенно жёсткой конфигурацией? Там это имеет смысл. И да, это придаёт звуку какое-то особое волшебство? Я неоднократно играл, так чёт не заметил по сравнению с ПК.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 10-Ноя-25 09:22 
Для начала можно запустить простенький тест на Audigy:

#include <windows.h>
#include <dsound.h>
#include <cmath>
#include <vector>
#include <complex>

class FourierTest {
public:
    void generateTestSignal(std::vector<float>& signal, int sampleRate) {
        // Генерация тестового сигнала (синус + гармоники)
        for (int i = 0; i < signal.size(); i++) {
            double t = (double)i / sampleRate;
            signal[i] = 0.6f * sin(2 * M_PI * 1000 * t) +  // 1 kHz основная
                        0.3f * sin(2 * M_PI * 2000 * t) +  // 2 kHz гармоника
                        0.1f * sin(2 * M_PI * 3000 * t);   // 3 kHz гармоника
        }
    }
    
    void FFT(std::vector<std::complex<float>>& data) {
        // Реализация БПФ
        const size_t N = data.size();
        if (N <= 1) return;
        
        // Разделение на четные и нечетные
        std::vector<std::complex<float>> even(N/2), odd(N/2);
        for (size_t i = 0; i < N/2; i++) {
            even[i] = data[i*2];
            odd[i] = data[i*2+1];
        }
        
        // Рекурсивный вызов
        FFT(even);
        FFT(odd);
        
        // Объединение
        for (size_t k = 0; k < N/2; k++) {
            std::complex<float> t = std::polar(1.0f, -2.0f * M_PI * k / N) * odd[k];
            data[k] = even[k] + t;
            data[k + N/2] = even[k] - t;
        }
    }
};

если всё ОК, можно уже запустить приблизительно такой с профилированием и загрузкой ЦП, для измерения:
- Задержки ввода-вывода (latency)
- Способности обрабатывать данные без разрывов (glitches)
- Максимальную нагрузку, которую выдерживает звуковая карта:


#include <windows.h>
#include <dsound.h>
#include <cmath>
#include <vector>
#include <complex>
#include <chrono>
#include <thread>
#include <pdh.h>
#include <pdhmsg.h>
#include <iostream>
#include <iomanip>
#include <psapi.h>

#pragma comment(lib, "dsound.lib")
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "pdh.lib")

class CPUUsageMonitor {
private:
    PDH_HQUERY cpuQuery;
    PDH_HCOUNTER cpuTotalCounter;
    FILETIME prevSysKernel, prevSysUser, prevProcKernel, prevProcUser;

public:
    CPUUsageMonitor() : cpuQuery(NULL), cpuTotalCounter(NULL) {
        PdhOpenQuery(NULL, NULL, &cpuQuery);
        PdhAddEnglishCounter(cpuQuery, "\\Processor(_Total)\\% Processor Time", NULL, &cpuTotalCounter);
        PdhCollectQueryData(cpuQuery);
        
        SYSTEM_INFO sysInfo;
        FILETIME ftime, fsys, fuser;
        
        GetSystemInfo(&sysInfo);
        GetSystemTimeAsFileTime(&ftime);
        memcpy(&prevSysKernel, &fsys, sizeof(FILETIME));
        memcpy(&prevSysUser, &fuser, sizeof(FILETIME));
    }
    
    ~CPUUsageMonitor() {
        if (cpuQuery) PdhCloseQuery(cpuQuery);
    }
    
    double getCurrentCPUUsage() {
        PDH_FMT_COUNTERVALUE counterVal;
        PdhCollectQueryData(cpuQuery);
        PdhGetFormattedCounterValue(cpuTotalCounter, PDH_FMT_DOUBLE, NULL, &counterVal);
        return counterVal.doubleValue;
    }
    
    double getProcessCPUUsage(HANDLE processHandle) {
        FILETIME ftime, fsys, fuser;
        FILETIME fcreate, fexit, fkernel, fuserproc;
        
        GetSystemTimeAsFileTime(&ftime);
        GetProcessTimes(processHandle, &fcreate, &fexit, &fkernel, &fuserproc);
        
        ULARGE_INTEGER now, sys, user, procKernel, procUser;
        memcpy(&now, &ftime, sizeof(FILETIME));
        memcpy(&sys, &prevSysKernel, sizeof(FILETIME));
        memcpy(&user, &prevSysUser, sizeof(FILETIME));
        memcpy(&procKernel, &prevProcKernel, sizeof(FILETIME));
        memcpy(&procUser, &prevProcUser, sizeof(FILETIME));
        
        ULARGE_INTEGER newSys, newUser, newProcKernel, newProcUser;
        memcpy(&newSys, &fsys, sizeof(FILETIME));
        memcpy(&newUser, &fuser, sizeof(FILETIME));
        memcpy(&newProcKernel, &fkernel, sizeof(FILETIME));
        memcpy(&newProcUser, &fuserproc, sizeof(FILETIME));
        
        double percent = 0.0;
        ULONGLONG totalSys = (newSys.QuadPart - sys.QuadPart) + (newUser.QuadPart - user.QuadPart);
        ULONGLONG totalProc = (newProcKernel.QuadPart - procKernel.QuadPart) +
                             (newProcUser.QuadPart - procUser.QuadPart);
        
        if (totalSys > 0) {
            percent = (double)totalProc / totalSys * 100.0;
        }
        
        memcpy(&prevSysKernel, &fsys, sizeof(FILETIME));
        memcpy(&prevSysUser, &fuser, sizeof(FILETIME));
        memcpy(&prevProcKernel, &fkernel, sizeof(FILETIME));
        memcpy(&prevProcUser, &fuserproc, sizeof(FILETIME));
        
        return percent;
    }
};

class MemoryMonitor {
public:
    static SIZE_T getProcessMemoryUsage() {
        PROCESS_MEMORY_COUNTERS pmc;
        if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) {
            return pmc.WorkingSetSize / 1024; // KB
        }
        return 0;
    }
    
    static SIZE_T getPeakMemoryUsage() {
        PROCESS_MEMORY_COUNTERS pmc;
        if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) {
            return pmc.PeakWorkingSetSize / 1024; // KB
        }
        return 0;
    }
};

class HighPrecisionTimer {
private:
    LARGE_INTEGER frequency;
    bool supported;
    
public:
    HighPrecisionTimer() {
        supported = QueryPerformanceFrequency(&frequency);
    }
    
    double getTime() {
        if (supported) {
            LARGE_INTEGER current;
            QueryPerformanceCounter(¤t);
            return (double)current.QuadPart / frequency.QuadPart;
        }
        return (double)GetTickCount() / 1000.0;
    }
};

class FourierTest {
private:
    CPUUsageMonitor cpuMonitor;
    HighPrecisionTimer timer;
    
public:
    struct PerformanceMetrics {
        double totalTime;
        double fftTime;
        double iOTime;
        double cpuUsage;
        double memoryUsage;
        double peakMemory;
        int bufferSize;
        std::string testType;
    };
    
    void generateTestSignal(std::vector<float>& signal, int sampleRate, float frequency = 1000.0f) {
        for (size_t i = 0; i < signal.size(); i++) {
            double t = (double)i / sampleRate;
            // Сложный сигнал с несколькими гармониками
            signal[i] = 0.6f * sin(2 * M_PI * frequency * t) +
                        0.3f * sin(2 * M_PI * frequency * 2 * t) +
                        0.1f * sin(2 * M_PI * frequency * 3 * t) +
                        0.05f * sin(2 * M_PI * frequency * 5 * t);
        }
    }
    
    void FFT(std::vector<std::complex<float>>& data) {
        const size_t N = data.size();
        if (N <= 1) return;
        
        // Разделение на четные и нечетные
        std::vector<std::complex<float>> even(N/2), odd(N/2);
        for (size_t i = 0; i < N/2; i++) {
            even[i] = data[i*2];
            odd[i] = data[i*2+1];
        }
        
        // Рекурсивный вызов
        FFT(even);
        FFT(odd);
        
        // Объединение
        for (size_t k = 0; k < N/2; k++) {
            std::complex<float> t = std::polar(1.0f, -2.0f * M_PI * k / N) * odd[k];
            data[k] = even[k] + t;
            data[k + N/2] = even[k] - t;
        }
    }
    
    void optimizedFFT(std::vector<std::complex<float>>& data) {
        const size_t N = data.size();
        size_t k = N, n;
        float thetaT = M_PI / N;
        std::complex<float> phiT = std::complex<float>(cos(thetaT), -sin(thetaT));
        std::complex<float> T;
        
        while (k > 1) {
            n = k;
            k >>= 1;
            phiT = phiT * phiT;
            T = 1.0f;
            
            for (size_t l = 0; l < k; l++) {
                for (size_t a = l; a < N; a += n) {
                    size_t b = a + k;
                    std::complex<float> t = data[a] - data[b];
                    data[a] += data[b];
                    data[b] = t * T;
                }
                T *= phiT;
            }
        }
        
        // Бит-реверс перестановка
        size_t j = 0;
        for (size_t i = 0; i < N - 1; i++) {
            if (i < j) std::swap(data[i], data[j]);
            
            size_t k = N >> 1;
            while (k <= j) {
                j -= k;
                k >>= 1;
            }
            j += k;
        }
    }
    
    PerformanceMetrics testCPUFFT(int bufferSize, int sampleRate, bool useOptimized = false) {
        PerformanceMetrics metrics;
        metrics.bufferSize = bufferSize;
        metrics.testType = useOptimized ? "CPU Optimized FFT" : "CPU Standard FFT";
        
        std::vector<float> testSignal(bufferSize);
        generateTestSignal(testSignal, sampleRate);
        
        double startMemory = MemoryMonitor::getProcessMemoryUsage();
        double startCPU = cpuMonitor.getCurrentCPUUsage();
        double startTime = timer.getTime();
        
        // Выполнение БПФ
        std::vector<std::complex<float>> fftData(bufferSize);
        for (size_t i = 0; i < bufferSize; i++) {
            fftData[i] = std::complex<float>(testSignal[i], 0.0f);
        }
        
        double fftStartTime = timer.getTime();
        if (useOptimized) {
            optimizedFFT(fttData);
        } else {
            FFT(fttData);
        }
        double fftEndTime = timer.getTime();
        
        double endTime = timer.getTime();
        double endCPU = cpuMonitor.getCurrentCPUUsage();
        double endMemory = MemoryMonitor::getProcessMemoryUsage();
        
        metrics.totalTime = (endTime - startTime) * 1000; // мс
        metrics.fftTime = (fftEndTime - fftStartTime) * 1000; // мс
        metrics.cpuUsage = (startCPU + endCPU) / 2.0;
        metrics.memoryUsage = (startMemory + endMemory) / 2.0;
        metrics.peakMemory = MemoryMonitor::getPeakMemoryUsage();
        
        return metrics;
    }
    
    PerformanceMetrics testSoundCardFFT(int bufferSize, int sampleRate) {
        PerformanceMetrics metrics;
        metrics.bufferSize = bufferSize;
        metrics.testType = "Sound Card FFT";
        
        std::vector<float> testSignal(bufferSize);
        generateTestSignal(testSignal, sampleRate);
        
        double startMemory = MemoryMonitor::getProcessMemoryUsage();
        double startCPU = cpuMonitor.getCurrentCPUUsage();
        double startTime = timer.getTime();
        
        // Эмуляция работы со звуковой картой
        // В реальном приложении здесь будет DirectSound код
        double ioStartTime = timer.getTime();
        
        // Эмуляция задержки звуковой карты
        std::this_thread::sleep_for(std::chrono::microseconds(500));
        
        // Эмуляция аппаратного БПФ
        std::vector<std::complex<float>> fftData(bufferSize);
        for (size_t i = 0; i < bufferSize; i++) {
            fftData[i] = std::complex<float>(testSignal[i], 0.0f);
        }
        
        optimizedFFT(fttData); // Аппаратное ускорение
        
        double ioEndTime = timer.getTime();
        double endTime = timer.getTime();
        double endCPU = cpuMonitor.getCurrentCPUUsage();
        double endMemory = MemoryMonitor::getProcessMemoryUsage();
        
        metrics.totalTime = (endTime - startTime) * 1000; // мс
        metrics.iOTime = (ioEndTime - ioStartTime) * 1000; // мс
        metrics.cpuUsage = (startCPU + endCPU) / 2.0;
        metrics.memoryUsage = (startMemory + endMemory) / 2.0;
        metrics.peakMemory = MemoryMonitor::getPeakMemoryUsage();
        
        return metrics;
    }
    
    void runComparativeAnalysis() {
        const int sizes[] = {256, 512, 1024, 2048, 4096, 8192, 16384};
        const int sampleRate = 44100;
        const int iterations = 5;
        
        std::cout << "==================================================================================" << std::endl;
        std::cout << "                   СРАВНИТЕЛЬНЫЙ АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ" << std::endl;
        std::cout << "==================================================================================" << std::endl;
        std::cout << std::setw(8) << "Размер" << " | "
                  << std::setw(18) << "Тип теста" << " | "
                  << std::setw(10) << "Время(мс)" << " | "
                  << std::setw(12) << "БПФ время(мс)" << " | "
                  << std::setw(10) << "ЦПУ(%)" << " | "
                  << std::setw(10) << "Память(МБ)" << " | "
                  << std::setw(12) << "Пик память(МБ)" << std::endl;
        std::cout << "----------------------------------------------------------------------------------" << std::endl;
        
        for (int size : sizes) {
            // Тест стандартного БПФ на ЦПУ
            PerformanceMetrics cpuStd = testCPUFFT(size, sampleRate, false);
            printMetrics(cpuStd);
            
            // Тест оптимизированного БПФ на ЦПУ
            PerformanceMetrics cpuOpt = testCPUFFT(size, sampleRate, true);
            printMetrics(cpuOpt);
            
            // Тест звуковой карты
            PerformanceMetrics soundCard = testSoundCardFFT(size, sampleRate);
            printMetrics(soundCard);
            
            std::cout << "----------------------------------------------------------------------------------" << std::endl;
            
            // Небольшая пауза между тестами
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    }
    
    void printMetrics(const PerformanceMetrics& metrics) {
        std::cout << std::setw(8) << metrics.bufferSize << " | "
                  << std::setw(18) << metrics.testType << " | "
                  << std::setw(10) << std::fixed << std::setprecision(3) << metrics.totalTime << " | "
                  << std::setw(12) << std::fixed << std::setprecision(3) << metrics.fftTime << " | "
                  << std::setw(10) << std::fixed << std::setprecision(1) << metrics.cpuUsage << " | "
                  << std::setw(10) << std::fixed << std::setprecision(1) << (metrics.memoryUsage / 1024) << " | "
                  << std::setw(12) << std::fixed << std::setprecision(1) << (metrics.peakMemory / 1024) << std::endl;
    }
    
    void runStressTest() {
        std::cout << "\n==================================================================================" << std::endl;
        std::cout << "                         ТЕСТ ПОД НАГРУЗКОЙ" << std::endl;
        std::cout << "==================================================================================" << std::endl;
        
        const int bufferSize = 4096;
        const int sampleRate = 44100;
        const int stressIterations = 100;
        
        double totalCPUTime = 0;
        double totalSoundCardTime = 0;
        double maxCPUUsage = 0;
        double maxMemoryUsage = 0;
        
        for (int i = 0; i < stressIterations; i++) {
            PerformanceMetrics cpu = testCPUFFT(bufferSize, sampleRate, true);
            PerformanceMetrics sound = testSoundCardFFT(bufferSize, sampleRate);
            
            totalCPUTime += cpu.totalTime;
            totalSoundCardTime += sound.totalTime;
            maxCPUUsage = std::max(maxCPUUsage, cpu.cpuUsage);
            maxMemoryUsage = std::max(maxMemoryUsage, cpu.memoryUsage);
            
            if (i % 10 == 0) {
                std::cout << "Итерация " << i << "/" << stressIterations
                          << " - ЦПУ: " << std::fixed << std::setprecision(2) << cpu.totalTime << "мс"
                          << ", Зв.карта: " << sound.totalTime << "мс" << std::endl;
            }
        }
        
        std::cout << "\nРЕЗУЛЬТАТЫ ТЕСТА ПОД НАГРУЗКОЙ:" << std::endl;
        std::cout << "Среднее время ЦПУ: " << std::fixed << std::setprecision(3)
                  << (totalCPUTime / stressIterations) << " мс" << std::endl;
        std::cout << "Среднее время звуковой карты: " << (totalSoundCardTime / stressIterations) << " мс" << std::endl;
        std::cout << "Максимальная загрузка ЦПУ: " << std::fixed << std::setprecision(1)
                  << maxCPUUsage << "%" << std::endl;
        std::cout << "Максимальное использование памяти: " << std::fixed << std::setprecision(1)
                  << (maxMemoryUsage / 1024) << " МБ" << std::endl;
        
        double speedup = totalCPUTime / totalSoundCardTime;
        std::cout << "Ускорение звуковой карты: " << std::fixed << std::setprecision(2)
                  << speedup << "x" << std::endl;
    }
};

int main() {
    SetConsoleOutputCP(CP_UTF8);
    
    std::cout << "Запуск теста производительности БПФ..." << std::endl;
    std::cout << "Аудиокарта: Audigy X-Fi" << std::endl;
    std::cout << "Инициализация мониторов производительности..." << std::endl;
    
    FourierTest tester;
    
    // Запуск сравнительного анализа
    tester.runComparativeAnalysis();
    
    // Запуск теста под нагрузкой
    tester.runStressTest();
    
    std::cout << "\nТестирование завершено. Нажмите Enter для выхода...";
    std::cin.get();
    
    return 0;
}


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 00:32 
> В-третьих, а не дешевые ли у тебя наушники?

Во-первых, на консолях на бытовых ТВ играют. Как правило, на их же динамиках.

Вышеприведённые тесты вообще не понял, что должны показать, по-человечески можно?


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 11-Ноя-25 01:01 
> Во-первых, на консолях на бытовых ТВ играют. Как правило, на их же динамиках.

чтобы на ТВ получить 3д-звук без наушников нужно подключать минимум 4 колонки (2 сзади)
> Вышеприведённые тесты вообще не понял, что должны показать, по-человечески можно?

измеряет мипсы и гипсы на аудиджи и проце через преобразование Фурье


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 10-Ноя-25 10:36 
> Наверное, потому, что это устройство для совершенно определённых целей и с совершенно жёсткой конфигурацией? Там это имеет смысл. И да, это придаёт звуку какое-то особое волшебство? Я неоднократно играл, так чёт не заметил по сравнению с ПК.

Во-первых, какая у тебя ПС4 - не на всех есть DSP (Базовая PS4 (Slim, Fat) - Отсутствует, PS4 Pro - Присутствует)
Во-вторых, далеко не все игры используют этот DSP
В-третьих, а не дешевые ли у тебя наушники?


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 00:38 
> Во-первых, какая у тебя ПС4 - не на всех есть DSP (Базовая PS4 (Slim, Fat) - Отсутствует, PS4 Pro - Присутствует)

Ой, как всё сложно-то. Я было подумал, куплю божественную плойку и получу неземной звук (на своём телевизоре за тридцать тыщ, да), а тут сложнее с подбором конфигурации, чем на ПК.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено всё сжечь , 11-Ноя-25 05:32 
Хер знает. Я сейчас играю на PS5 Pro и наушники гарнитура Elite. Всё как-бы зашибись. Я не тот аноним. PS4 и PS4 Pro в коробках лежат. Наследники задорого продадут :D

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 11-Ноя-25 00:30 
а у PS5 есть не просто чип, а целый кастомный блок на основе GPU - Tempest Engine, способный обрабатывать сотни immersivных 3D-звуков с высочайшей детализацией, так сказать современная версия Wavetracing на Vortex... А ПК-бояре благодаря Микрософту как минимум ближайшие десятилетие будут отставать в области звука лет на 20 от PS... ахаахахх

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено winorun , 10-Ноя-25 15:08 
Ты сейчас бред несеш. Слышал звон, да не знаешь где он.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 14:06 
>Все эти аппаратные ухищрения сейчас не нужны

Может быть, но разница есть даже с простыми картами:
- https://www.asus.com/ru/motherboards-components/sound-cards/.../
- https://www.asus.com/ru/motherboards-components/sound-cards/.../


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 11-Ноя-25 10:12 
благодаря таким как ты звук на ПК откатился на 20 лет назад - до появления ЕАХ и A3D
ты просто из этой категории людей
https://rutube.ru/video/851ea75ace0deba9eb197255dfec4a3d/
нужно чтото с этим делать...

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 15:07 
EAX и A3D были вынужденной мерой, причём оба не без недостатков. Сейчас 3D-звук запросто реализуется программно. Не знаю, как ещё это донести. Ну хоть API FMOD бегло просмотрите, например.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 11-Ноя-25 18:03 
Ну я не вижу в FMOD многих API, какие есть в EAX и A3D. А ещё я вижу FMOD любит жульничать с источниками звука, экономя на ресурсах ПЦ, мдя... Наверное инженеры PlayStation 5 получше тебя в этом соображают и не просто так выделили для звука мощнейший аппаратный блок ??? Качественный 3D-звук - это такая же сложная технология, как RTX, которая требует мощный, многопоточный асик

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 21:13 
> Ну я не вижу в FMOD многих API, какие есть в EAX и A3D.

Стыд и позор разработчикам, которые не стали слепо копировать древние API.

> А ещё я вижу FMOD любит жульничать с источниками звука, экономя на ресурсах ПЦ, мдя...

То-то A3D и EAX не жульничали.

> Наверное инженеры PlayStation 5 получше тебя в этом соображают и не просто так выделили для звука мощнейший аппаратный блок ???

Насчёт «мощнейший» это маректологическая шелуха, а зачем они так сделали — а потому что могут. У них унифицированная архитектура, которая клепается многомиллионными тиражами по 10 лет, при довольно слабом CPU. Там это выгодно. А вот 90% пользователей ПК 3D-звук на встройке нафиг не сдался, а нишевые устройства всегда будут по оверпрайсу.

> Качественный 3D-звук - это такая же сложная технология, как RTX, которая требует мощный, многопоточный асик

Ага, и типа у саундбластеров и вортексов он был.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 11-Ноя-25 22:27 
> Стыд и позор разработчикам, которые не стали слепо копировать древние API.

ну я сужу не по названиям API, а по описаниям функций

> То-то A3D и EAX не жульничали.

аргументы? у тебя их нет, потому что ты даже не читал документацию по A3D...

> Качественный 3D-звук - это такая же сложная технология, как RTX, которая требует мощный, многопоточный асик
> Ага, и типа у саундбластеров и вортексов он был.

Достаточно сравнить, как звучит реверберация в пещерах в оригинальной Diablo 2(с включенным ЕАХ) и Diablo 2 Resurrected, чтобы понять - какой фуфлыжный современный, программный 3D-звук... А вот большинство пользователей не смогут этого сделать, потому что они не смогут запустить на своих пк ХР... Я вот недавно перепрошел оригинальную Diablo 2 наслаждаясь реверберацией в пещерах и дворцах...

P.S. я вот не понимаю твоего противодействия качественному 3D-звуку, словно у тебя кусок хлеба забирают. Даже у той бабки, которой интернет не нужон, и то есть больше логичных аргументов... А может это такой генетический код русских людей - препятствовать развитию, японцы они не такие - они в отличие от русских много создали передовых технологий, а не только PlayStation...  


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Zenitur , 12-Ноя-25 22:09 
Можно пожалуйста то же видео на других площадках? Рутьюб не люблю.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено зомбированный , 12-Ноя-25 22:34 
https://www.youtube.com/watch?v=SRARPdrTUp0

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 15:23 
> Intel HDA тоже умеет?

Что такое "доплер"? Это изменение частоты... Т.е. скорости выборки из буфера. Меняется всего лишь сэмплинг.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 16:13 
https://en.wikipedia.org/wiki/Doppler_effect

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 16:58 
Чел, что ты хотел показать этой ссылкой?

... is the change in the frequency ...


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 12-Ноя-25 17:42 
Погоди, ща он тебе ссылку на "разницу" звучания 16 бит и 24 бит ещё скинет, плюс статья о том как "жизненно необходимо" дома иметь карточку с дискретизацией в 96kHz.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Legionum , 09-Ноя-25 12:52 
Ну ты же не помогал проекту, поэтому все получилось медленнее.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 16:00 
Мне нравятся только первые две части Старинных свитков, те что двухмерные. Все что позже, трехмерные скатились в попсу.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Lyrix , 09-Ноя-25 19:56 
Арена и Багерфол - попса, ибо двухмерка тоже в моде была. Настоящий тру это настолки по DnD :)

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 09-Ноя-25 23:08 
Настолки по DnD это буквально коммерческие поделки создаваемая корпорацией ради денег, а Computer RPG это настоящее искусство.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Соль земли2 , 10-Ноя-25 10:27 
DnD крутая система. Класс брони, спасброски. Но вроде, как закопирайчена. Иначе было бы больше игр с ней.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено _kp , 10-Ноя-25 18:18 
набросок или идея не может быль лучше законченного произведения.
Например в отличии от фильма, сценарий это фильма обычного человека вообще не заинтересует, это только для знатоков, что бы узнать, что было задумано, что вырезали, что испортили..

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено суверенный гейминг , 09-Ноя-25 20:24 
Тот скрин с зелёными холмами - чисто Зельда с первого Свича. Или те Зельды всё же покрасивее будут. Сейчас смартфоны в лучшую графику могут.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено суеверный гейминг , 10-Ноя-25 06:11 
Ассеты уж такие какие есть. Сколько движок не наворачивай а ассеты оригинала - такие какие есть.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 12:24 
> Тот скрин с зелёными холмами - чисто Зельда с первого Свича. Или
> те Зельды всё же покрасивее будут. Сейчас смартфоны в лучшую графику
> могут.

Это недоигры с недоконсолей. Зельда с гейкуба (и другие более ранние игры) сегодня очень неплохо смотрится в эмуляторе, современным консолям это недостижимо. А спеки посмотри сам, в оригинале, конечно, не очень выглядит. Примерно такая же история с играми на glide api -- сегодня они нормально выглядят по сравнению с другими играми того времени. Игры с soundblaster eax намного лучше современных, и это всего лишь примитивный звук. Так что, если игры выглядят плохо, это только заслуга разработчиков.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено _kp , 10-Ноя-25 18:23 
> чисто Зельда

В Morrowind мир не выхлоп ИИ генератора, а вручную сделан, со всеми мелочами, и сам по себе уже произведение.
А в Зельде мир однообразен, но это не плохо прикрыто его интерактивностью.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено всё сжечь , 11-Ноя-25 05:26 
Карочь, ты не играл ни в "Зов Природы", ни в "Слёзы Королевства".
Я коллекционирую игровые приставки и знаковые игры на них, если что.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 13-Ноя-25 01:59 
После того как они создав шедерв Twilight Princess скатились в соло раст эта серия для меня мертва, имхо.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 04:45 
Лучше бы картографировали всю землю в открытый мир. Хоть польза была бы от этих движков.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 10-Ноя-25 07:48 
> Лучше бы картографировали всю землю в открытый мир. Хоть польза была бы от этих движков.

Скачай себе OSM planet file, вон те геопаркеты из новости и SRTM сканы - и занимайся себе натяжкой совы^W геоданных на глобус. Хотя геоданные то как таковые уже есть, в ломовом объеме - остается только визуализацию придумать.

Просто как вы понимаете, даже в больших и относительно подробных данных типа osm - допустим как выглядит дом разрисовано очень базово. Указан его полигон. В лучшем случае число этажей. Больше там никаких деталей визуализации ессно нет. А если их сделать более подробными - вы наверное не представляете себе объем этих данных...


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено _kp , 12-Ноя-25 12:39 
В MS Fly симуляторе можно пролететь над собственной дачей, а там даже сортир нанесен.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Соль земли2 , 10-Ноя-25 10:25 
Они свой движок при этом пилят? Проще же взять Godot. Можно даже будет логику подгрузки локаций повторить на GDScript.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Tita_M , 10-Ноя-25 14:22 
Проекту, наверное, больше 10 лет и в то время не было понятно, что godot сильно разовьётся со временем, а не сгниёт как куча других отрытых игровых движков. OpenMW уже использовал готовый игровой движок первое время, вроде тот из которого Urho3D вырос, но была низкая производительность и в конце концов решили взять готовый 3D-движок OpenSceneGraph и некоторые другие сторонние модули и писать остальное самим. Сейчас уже появился VulkanSceneGraph и кто-то делает экспериментальный и не официальный порт на него, но официальных планов по переходу, на сколько я знаю, нет.

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 00:41 
> и в то время не было понятно, что godot сильно разовьётся со временем, а не сгниёт как куча других отрытых игровых движков.

Зато теперь это наконец стало понятно.


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 11-Ноя-25 01:14 
Когда начиналась рзаработка OpenMW, в 2008 году, никакого Godot ещё не релизном виде не было. В качестве рендера они взяли Ogre3D (это именно 3д движок, отвечающий только за отрисовку графики).

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


"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 13-Ноя-25 02:00 
огр это ппц, Kenshi подтверждает)

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Соль земли2 , 14-Ноя-25 10:04 
Просто для Morrowind не нужно тонкое ковыряние в движке. Бег, прыжок, фонарик, усталость, камера делаются за 2 часа в Godot по урокам. Была бы у меня неделя-две свободного времени...

"Релиз свободного игрового движка OpenMW 0.50"
Отправлено Аноним , 14-Ноя-25 16:40 
В морре нет фонарика