Dolphin, февраль 2015: исправление текстурных палитр, упрощенная сетевая игра, увеличение скорости

.fez {width:640px;} .pict {text-align:center; margin-left:10px; margin-bottom:8px; padding-bottom:8px; padding-top:12px; width:250px; float:right; font-style:italic;} .cnt {text-align:center;} .left {padding-top:3px; padding-right:5px;} .topleft {padding-top:8px; padding-right:5px; text-align:right; vertical-align:top;} .pictw {text-align:center; margin-left:10px; margin-bottom:8px; padding-bottom:8px; padding-top:12px; color:#444444; width:280px; float:right; font-style:italic; } .pad {padding-top:4px; text-align:center; } Примета заядлого эмуляторщика: если на календаре замаячила одинокая единичка – жди нового отчета о проделанной работе над Dolphin’ом. Поэтому сразу переходим к делу:

На форумах и в социальных сетях часто появляются темы с вопросом: «когда же выйдет официальная версия Dolphin»? За последний год случилось столько изменений, что просто голова идет кругом: значительно повысилась скорость работы ядра эмулятора, на порядок улучшилась его точность; у сотен игр повысилась оценка качества эмуляции и т.д. Многие пользователи по традиции рекомендуют последние сборки, а не официальную версию Dolphin 4.0.2.

Но официальная версия – это не только самые последние и лучшие функции: она также должна быть по максимуму стабильной и практичной. Да, последние сборки имеют высокую скорость и точность, но они также имеют и целый ряд проблем; когда они будут решены, тогда можно будет и подумать об официальной версии. По факту многие люди все еще пользуются старыми версиями, и мы не хотим попасть в очередную ситуацию, когда разрекламированные особенности в эмуляторе не работают как надо. Dolphin 4.0 нас научил тому, что лучше лишний раз перестраховаться, чем потом рвать на себе волосы и выпускать исправленные сборки.

Мы понимаем, что все ждут следующую оф. версию, но при наличии стольких критических проблем, сейчас не самое подходящее время для ее выхода. Несмотря на то, что у каждой проблемы есть свой куратор, работа над многими из них сейчас не ведется – все-таки Dolphin разрабатывается на добровольных началах. Ряд проблем можно решить, потратив немного времени на поиск и конкретизацию причины неполадки. А что же пользователи? Они должны продолжать искать ошибки в эмуляторе и сообщать о них разработчикам. Особенно сейчас, когда появляется столько улучшений.

Удаление хаков и опций VBeam speedhack, Enable BAT, Disable EFB Copies

Мы прощаемся с тремя давними функциями эмулятора. Одни из них помогали обойти баги, другие же по идее повышали точность эмуляции, хотя на практике это оказалось не так. Так что помянем их незлым тихим словом.

VBeam speedhack

Эмуляция VBeam имеет долгую историю. В ЭЛТ-телевизорах изображение передается в чересстрочной развертке: сначала показываются нечетные поля изображения, затем идет гашение, потом показываются четные поля и т.д. Приставка запускает прерывание, когда растровое поле достигает определенных точек. Некоторые игры используют их в качестве таймингов. Естественно, Dolphin должен эти тайминги эмулировать, но если он присвоит им неправильные значения, зависящие от таймингов игры перестанут работать. Но если Dolphin их эмулирует неправильно, то модификация таймингов может исправить эти игры!

Со временем разработчик skidau сделал эмуляцию Vbeam точной и беспроблемной. Начиная с ревизии 3.5-1249 она стала работать на постоянной основе. Уже тогда планировалось удалить этот хак, но некоторые игры имели проблемы с Accurate VBeam и им требовался спидхак, поэтому его оставили, переименовав в «VBeam speedhack». Когда причина неполадок была найдена (за это благодарим разработчика Fiora), удаление «VBeam speedhack» стало лишь вопросом времени.

Enable BAT

Преобразование адреса блока – это базовая функция блока управления памятью, более известного как MMU. BAT – это, по сути, регистры в MMU, позволяющие задать способ доступа к памяти. На словах выглядит многообещающе, но реализация этой функции в Dolphin имела одну незначительную загвоздку: она совершенно не работала и ничего не делала, при этом в случае активации она снижала быстродействие на 10%! Разработчик magumagu ее удалил по итогам подготовки к полноценной эмуляции BAT MMU.

Disable EFB Copies

Здесь все просто. Эта опция требовалась лишь двум играм: Resident Evil Code: Veronica X и Tomb Raider: Anniversary. После того как neobrain доделал пиксельный конвейер обработки (Pixel Processing Pipeline), обе игры стали работать, как положено. А удалить опцию сподобились лишь сейчас.

Примечание: опция «EFB copies to Texture» была переименована в «Store EFB Copies to Texture Only». Чтобы активировать «EFB copies to RAM», нужно убрать галочку с «Store EFB Copies to Texture Only».

Исправление коррекции сдвига пикселя

Исправление этого бага почти год назад, казалось, приблизило нас к пониманию одной из особенностей GameCube. Можете себе представить, что нелепая ошибка породила серьезную проблему, которая почти год никому не попадалась на глаза?

Несмотря на внешний вид, бомба все равно взрывается, когда счетчик достигает нуля

Эта проблема была давно исправлена galop1n в отдельной ветке, но никто на нее не обращал внимания

Так что же вызвало эту проблему? Маленькая ошибка в коде:

o.pos.xy = o.pos.xy - vec2(1.0/12.0 / viewport_width, 1.0/12.0 / viewport_height)

Не программисты вряд ли ее заметят, поэтому вот правильный вариант:

o.pos.xy = o.pos.xy - o.pos.w * vec2(1.0/12.0 / viewport_width, 1.0/12.0 / viewport_height)

Оказывается, в исправлении никогда не вычислялась перспектива, и поэтому весь результат оказывался неправильным. Большинству читателей юмор будет не понятен, но все программисты, занимающиеся 3D графикой, уже должны валяться под столом от смеха.

Исправление хэширования в последнем байте

Разработчик mimimi с огромным рвением изучает принцип кэширования текстур в Dolphin’e. И хоть от этого у него рано или поздно поедет крыша, Dolphin все равно останется в выигрыше.

В Metroid Prime 3 присутствовала одна проблема: верхняя левая часть экрана постоянно переключалась между родным (1x) и пользовательским разрешением. Эту проблему можно было бы легко исправить, если бы она не проявлялась лишь на некоторых компьютерах.

В итоге причина, вызывавшая баг на некоторых ПК, была обнаружена и исправлена. Dolphin неправильно работал с последними байтами результата хэширования CRC32: в конце хэша считывался один лишний байт и на выходе получался мусор. Он вызывал несовпадение, в результате чего копия фреймбуфера воспроизводилась из памяти. Когда Dolphin воспроизводит копию EFB из памяти, он это делает в родном разрешении (1х). Так как участок копии EFB находится в верхней левой части экрана, при ошибке кеширования эта часть теряла разрешение.
 

Верхний левый угол экрана работает в низком разрешении

Теперь он корректно масштабируется

Данный баг не появлялся при использовании опции «Store EFB Copies to Texture Only», поскольку она игнорировала хэширование. Вполне возможно, что это изменение также исправило другие эффекты, имевшие проблемы с апскейлом. Будем надеяться, что у mimimi получится найти остальные баги, связанные с хэшированием текстур.

Чтение диска после задержки

Это изменение исправляет побочную ошибку. Оно устраняет зависания в некоторых играх, а также исправляет поломанный звук в Resident Evil 3. Небольшое изменение тайминга не должно сыграть роли для пользователей, но если у вас были проблемы, связанные с дисковыми таймингами, это исправление может вам помочь.

Декодирование копий EFB, использующихся в качестве текстурных палитр

В прошлом месяце появилась частичная поддержка текстурных палитр без необходимости наличия копии EFB в памяти. Это стало значительным прогрессом, но это было далеко не полноценное исправление: в некоторых случаях частичная поддержка вызывала серьезные проблемы в играх.

Когда разработчик magumagu взялся за декодирование копий EFB, используемых в качестве текстурных палитр, все опасения отпали сами собой. Что же в итоге вышло? Для правильной работы миникарты в одной из самых требовательных игр Dolphin, The Legend of Zelda: Twilight Princess, больше не нужны опции «EFB to RAM» или «Safe Texture Cache». Более того, карта теперь может отрисовываться в повышенном разрешении!
 

Вот так миникарта выглядит в родном разрешении. При отключении опции EFB copies to RAM, еще до исправления, здесь отображался мусор

Теперь миникарта не только отрисовывается в повышенном разрешении, она еще и не требует EFB copies to RAM; благодаря этому существенно снижается нагрузка на ПК

Но это еще не все. Благодаря изменению, Twilight Princess еще и стала быстрее работать!
 

От данного исправление выигрывает не только Twilight Princess: игры серии Tony Hawk Pro Skater, использующие текстурные палитры для теней, теперь могут работать без «EFB copies to RAM». Для правильной работы компьютеров наведения в Rogue Squadron 2 и 3 также больше не требуется опция «EFB copies to RAM». Кроме того, все эффекты с текстурными палитрами, которым требовалась эта опция, теперь могут работать в повышенном разрешении. Всегда приятно совместить и повышение скорости, и исправление графики.

Благодаря разработчику degasus, который портировал это изменение в видеорежим OpenGL, данное нововведение больше не имеет нежелательных эффектов. Очень многие игры использовали эту особенность приставки, поэтому сейчас как раз подходящее время проверить свои любимые игры на предмет работы с опцией «EFB copies to texture».

Исправление Titantron в игре WWE12

Это значительное событие, поскольку эта была последняя известная проблема, вызванная обновлением пиксельного конвейера обработки. Само исправление заключается всего лишь в уменьшении погрешности округления на уровне драйверов видеокарты. Так как Titantron сам по себе имеет много ошибок, для иллюстрации исправления используется игра TMNT.
 

Читатель уже, наверное, догадался, что этих линий здесь не должно быть

Несмотря на то, что в TMNT и WWE12 проблема исчезла, никто не знает, как правильно ее исправить

Отвязка .ini файлов от регионов

Как только пользователи воспользуются данным изменением, его преимущество тут же станет очевидным. В Dolphin включен набор .ini файлов, содержащих стандартные настройки для каждой игры; каждый такой файл содержит идентификатор игры. При запуске NTSC версии Super Smash Bros. Melee, Dolphin ищет файл настроек GALE01.ini. PAL версия имеет файл GALP01.ini, а NTSC-J – GALJ01.ini. Даже если все эти файлы содержат одинаковые настройки, они все равно будут иметь три разных версии. Если в.ini файл вносится изменение, то тогда исправлению подлежат все три файла.

Так как Dolphin способен запускать тысячи игр различных регионов, становится очевидно, что что-то может ускользнуть из виду (а ведь еще есть игры, не внесенные в базу Dolphin’а).

Теперь после отвязывания .ini файлов, эмулятору больше не нужно иметь несколько копий настроек для каждого региона. Это не только упрощает систему .ini файлов, но и значительно облегчает жизнь разработчикам.

Использование Faster Check Gatherpipe from JIT

Очередной случай из серии «Почему до этого никто не додумался?»: разработчик magumagu значительно ускорил работу эмулятора, воспользовавшись более быстрой функцией checkgatherpipe.

Это относительно небольшое изменение имеет большое последствие: почти все игры получают прирост производительности в максимум девять процентов. Да, да, здесь нет ошибки.
 

Асинхронизация некоторых событий ГП

Многие особенности приставок GameCube и Wii крайне тяжело поддаются эмуляции из-за аппаратных различий. В нашем случае EFB (фреймбуфер) делится между ГП и ЦП. Благодаря этому оба процессора могут быстро получать к нему доступ. В настольных компьютерах дела обстоят иначе, поэтому даже современные киловаттные ПК могут испытывать сложности с эмуляцией игр, которые используют определенные аппаратные особенности GameCube/Wii.

Асинхронизация событий позволяет Dolphin ставить события ГП в очередь, а не блокировать их. Это дает серьезные преимущества в играх, которые производят запись в EFB для отображения некоторых эффектов; особенно это касается экранов загрузки.

На практике это означает, что скорость работы экранов загрузки в игре 007: Agent Under Fire возрастает с 2 vps до 50 vps. В 25 раз! На другие игры это необходимое изменение влияет не так сильно, но это очередное движение к тому, чтобы игры работали без хаков.
 

Примечание: Асинхронизация не подразумевает потерю точности. В данном случае это означает, что Dolphin не мешает ПК заниматься прочими делами во время накапливания очереди записи в EFB. Еще одно: для измерения скорости использовались единицы VPS, поскольку экраны загрузки статичны.

Реализация транзитного сервера UDP для сетевой игры

Так как на GameCube и Wii встречаются одни из самых популярных игр с мультиплеером среди всех приставок, поддержка сетевой игры в Dolphin стала огромным плюсом. Можно вспомнить следующие отличные мультиплеерные игры: Mario Party, Super Smash Bros., Mario Kart, F-Zero, Bomberman, Kirby Air Ride, Tales of Symphonia и т.д.

А если сюда еще добавить игры из Виртуальной консоли, то тогда выход в сеть напрашивается сам собой.

Одна из жалоб на Dolphin касается реализации сетевой игры через прямое подключение (peer to peer): игрокам нужно пробрасывать порты и вручную пересылать IP адреса. Плюс этого метода заключается в максимальном уменьшении задержки, особенно при игре вдвоем. На пути соединения нет серверов, которые могли бы выйти из строя и вызвать разрывы. Разработчик Ziek взял некоторые изменения из старой ветки dualcore-netplay, которые упрощали соединение друг с другом, а также внес ряд новшеств. Теперь пользователи могут соединяться через транзитный сервер, тем самым избегая необходимости пробрасывания порта на роутере; в результате те, кто не имеют доступа к своему роутеру, могут воспользоваться сетевой игрой. Изменения можно свести к следующему списку:

Преимущества транзитного сервера
  1. При использовании транзитного сервера не нужно находить свой IP адрес. Эмулятор сам делает все что нужно через свои коды. Это поможет обладателям динамических IP адресов, поскольку теперь не нужно будет определять свой IP адрес при каждой сетевой игре. Просто, быстро и легко;
  2. Настройка транзитного сервера открывает возможность для хостинга своего собственного сервера. Исходный код открыт, поэтому пользователи могут делать все что угодно;
  3. Задержка остается прежней. Все, что делает транзитный сервер – соединяет пользователей, а сама игра, как и раньше, работает через прямое подключение. В будущем, возможно, получится уменьшить задержку и при игре в режиме трех-четырех человек;
  4. Пробрасывание портов больше не требуется! Для работы сетевой игры большинству роутеров больше не нужна проброска портов (правда, фактор фаерволов никуда не делся). Несмотря на очень высокую совместимость, устранение проблем со всеми роутерами не гарантировано;
  5. Предыдущий вариант прямого подключения никуда не делся, поэтому по желанию пользователи могут продолжать его использовать;
Поскольку транзитный сервер был настроен после того, как данное изменение было внесено в основную ветку, интерфейс все еще настроен на работу с прямым соединением. Если пользователи хотят воспользоваться транзитным сервером, то в окошке сетевой игры они должны нажать на кнопку, расположенную в верхнем правом углу (по умолчанию она имеет значение Direct), и выбрать пункт Traversal. В строке traversal server нужно указать адрес stun.dolphin-emu.org, в port – 6262. На этом все. Как говорится, приятного вам онлайна. В будущих сборках это все будет указано в .ini файле.

Требования сетевой игры остались такими же, как и прежде: в играх GameCube с сохранениями, карты памяти должны быть синхронизированы, Wii NAND должны быть синхронизированы, а некоторые настройки (например, разгон ЦП приставки) должны быть либо синхронизированы, либо отключены.

Разработчики, вложившие свои силы в эти улучшения, надеются, что любителям сетевой игры это большое обновление придется по душе!

Приключения Зельды, мамы и двух эмуляторов

Ранее эта тема уже поднималась: работа Dolphin и эмуляторов Game Boy Advance в режиме соединения GBA <-> GCN. И хоть затея с эмулятором Higan провалилась, skidau взялся разрабатывать улучшенную реализацию этой особенности в эмуляторе VBA. Когда она будет доделана, мы сообщим о ней больше информации, но сейчас речь пойдет о другом.

Тестирование связки GBA <-> GCN может быть крайне скучным и сложным занятием: нужно следить за несколькими эмуляторами, джойстиками, настройками и прочими мелкими деталями. Один из наших тестеров, занимающийся игрой The Legend of Zelda: Four Swords Adventures, хотел записать процесс мультиплеера для данной статьи. Чтобы это сделать, он попросил свою маму взять на себя управление вторым Линком. Поначалу планировалось, что демонстрация ограничится 30 секундами, но контрольным зрителям она настолько понравилось, что видео было залито без редактирования.
 
+4

Комментарии 6

  1. CyberMan
    CyberMan от 4 марта 2015 14:22
    нунифигасебе, я жду больше новостей по реализации GCN<->GBA
  2. Metalslayer1976
    Metalslayer1976 от 5 марта 2015 04:05
    Спасибо за замечательный статью.
  3. centaur1982
    centaur1982 от 5 марта 2015 22:13
    Для кого то сеть самое сложное понятие и его подключение,  чтобы играть друг друга)
  4. nikabosmit
    nikabosmit от 5 марта 2015 23:26
    Спасибо! Очень интересное чтение!
  5. Miron
    Miron от 14 ноября 2015 05:41
    Ух как я давно тут не был! Все развивается прогрессирует)
  6. metalslayer
    metalslayer от 5 декабря 2015 16:27
    Это старая новость, здесь более ничего не происходит
Добавить комментарий

Оставить комментарий