Dolphin, декабрь 2014: стерео 3D, оптимизация, исправления

.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;} Как обычно, разработчики снова выкладывают отчет о проделанной работе за предыдущий месяц.

Отчеты о прогрессе эмулятора Dolphin описывают не только существенные улучшения, но и небольшие изменения, которые имеют интересное влияние, изменения, с которыми связана интересная история. Этот месяц в этом плане оказался просто урожайным. В Dolphin’e обосновался новый графический прибамбас, делающий игры по-настоящему трехмерными, появилась возможность с большей точностью использовать родные джойстики приставки, реализованы очередные оптимизации MMU, графические исправления и прочие неожиданности. Что ж, с помпой проведем 2014 год, взглянув на самые значительные изменения эмулятора, сделанные в декабре.

Исправление дисковых разделов Wii

Шесть месяцев тому назад в блоге был размещен ролик, в котором, помимо прочих режимов, демонстрировалась работа Masterpieces из игры Super Smash Bros. Brawl. Это стало возможным благодаря исправлению E-ticket Service Launch разработчиком magumagu. Несмотря на то, что оно не исправляло на прямую Masterpieces, предполагалось, что исправление для дисковых разделов Wii будет портировано в течение нескольких дней.

Этого не случилось, и о коде забыли на долгое время: эмулятор продолжал развиваться без него. Наконец, появился JosJuice, который портировал эту функцию, в результате чего ее смогли внести в официальную версию Dolphin.

Теперь в дисковом браузере Dolphin, помимо первых двух, можно будет увидеть следующие дисковые разделы, но вряд ли она исправит что-нибудь еще. Для тех, кто не видел работу ES_Launch Preview и Brawl Masterpieces, повторно приводим соответствующую запись.

Добавление эпсилона проекционной матрицы для эмуляции клиппинга Gamecube

Эта несколько запутанная история связанна с созданием проблемы на ровном месте. Не будем вдаваться в подробности: многие игры, в том числе и популярные (Sonic Colors, Sonic Unleashed, F-Zero GX), отсекали объекты в проекционной матрице несколько иначе, чем того ожидал эмулятор. Поскольку Dolphin делал это менее точно, в ряде игр не прорисовывался интерфейс и видеоролики. Проблему исправили, незначительно изменив проекционную матрицу Dolphin’a, и именно так на данный момент работает клиппинг. Но в процессе исправления произошло много событий:
  1. Разработчик Donko добавляет эпсилон в проекционную матрицу, чтобы ее работа соответствовала клиппингу GameCube.
  2. Эпсилон проекционной матрицы удаляется, поскольку никто не знает, зачем его добавили, что он делает и был ли он протестирован. Вероятно всего разработчики, удалившие этот код, не сразу заметили, что в результате этого сломался ряд игр.
  3. Когда было обнаружено, что в играх серии Sonic и в других играх не работает интерфейс, в эмулятор был добавлен хак, исправляющий проблему. Он получил название «Sonic Unleashed hack».
  4. neobrain убирает «Sonic Unleashed hack», чтобы вынудить разработчиков найти нормальное решение проблемы.
  5. После долгих поисков и тестов, разработчик kayru, даже не подозревая об этом, приходит к такому же решению, что и Donko. Имея на руках результаты тестов, он возвращает эпсилон проекционной матрицы в Dolphin и тем самым проблема с играми Sonic решается раз и навсегда.

Когда Sonic Unleashed hack был убран, во многих играх исчез интерфейс

Благодаря эпсилону, меню снова обретают правильный вид

Аппаратная реализация Bounding Box в видеорежиме D3D

Разработчики crudelios и degasus переписали функцию bounding box в, соответственно, программном и OpenGL видеорежиме, но D3D режим продолжал ожидать своей очереди. Несмотря на то что в Dolphin’e больше нет режима D3D9, разработчик TinoB продолжает трудиться над ним в своей сборке. Через несколько дней после реализации bounding box в OpenGL, у него уже был рабочий вариант bounding box для D3D.

После этого degasus, наконец, смог объединить код bounding box для D3D и OpenGL в одно целое, и теперь он выглядит аккуратным и простым в работе.

Холостой цикл в цикле ГП на двухъядерных системах

Работая с двухъядерной архитектурой NVIDIA Tegra K1 Denver, Sonicadvance1 смекнул, что Dolphin в общем и целом использует оба ядра ЦП максимальным образом. По идее это плюс, да?

Несмотря на то, что Dolphin использует два ядра (с некоторыми исключениями), операционная система тоже имеет свои вычислительные потребности. Когда Dolphin по максимуму выжимал все ядра, ОС не могла выполнить свои задачи и поэтому она вмешивалась в работу Dolphin’a. Оказалось, что на двухъядерных ПК, при использовании видеопотока максимальным образом, скорость оказывается ниже, чем когда ЦП получает некоторые ресурсы для своих потребностей. Благодаря этому на двухъядерных компьютерах/устройствах можно получить 10-15% прибавку в производительности. Так как у трех – и более – ядерных процессоров уже и так есть лишний поток для вычислений, они оказываются незатронутыми этим изменением.

Включение Block-Linking в MMU

В последнее время игры, использующие MMU, получают много внимания. Эти два изменения значительно ускоряют игры с MMU, благодаря использованию ранее отключенных функций. skid_au и magumagu установили, что хоть одни части Block-Linking и Fastmem не могут работать с MMU, другие вполне могут. После того, как они были реализованы должным образом, игры с MMU получили огромное ускорение в работе.
 

Родная поддержка официального адаптера джойстиков GameCube для Wii U
 

C момента анонса этого адаптера, он стал одним из самых перспективных аксессуаров для Dolphin. Когда он вышел, он стал дефицитом. Помимо этого он вполне ожидаемо не работал на ПК. Благодаря реверс-инженерингу, через несколько дней адаптер заработал на компьютерах, а драйверы уже были в процессе написания.

Для работы джойстиков GameCube с различными эмуляторами, включая и Dolphin, существует ряд программ и драйверов. Но разработчик skidau решил с ними не связываться.

Он добавил родную поддержку для адаптера джойстиков GameCube, а это значит, что после его установки, все, что требуется для его работы – подключить его в USB разъем, а дальше Dolphin его автоматически определит. С помощью адпатера джойстики GameCube будут работать аналогично приставкам GameCube и Wii. Ушли в прошлое неправильные мертвые зоны, перепутанные тригеры: теперь все будет работать как на приставке, без лишних движений. К счастью в игре F-Zero GX реализована визуальная калибрация, с помощью которой можно сравнить, насколько точно работают различные джойстики:
 

Джойстик на приставке

Джойстик от Xbox 360 и рядом не стоял

Адаптер Mayflash's GC to USB не так уж и плох

Но родная поддержка очень точна

На данный момент единственная проблема – добыть этот адаптер.

Исправление записей EFB в OpenGL

Данная проблема – результат недосмотра. Считывания EFB – это когда игра считывает пиксель или пиксели из фреймбуфера, для получения информации из него. В режиме OpenGL Dolphin их кэширует, чтобы ускорить их работу, и именно благодаря этому Wi-Fi меню из Super Smash Bros. Brawl может работать на нормальных скоростях в OpenGL.

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

Нет, это не Тетрис

После исправление записи EFB, загрузочный экран снова корректно отображается

Убрав кэширование записей в EFB, все встало на свои места. Но на этом проблемы не оканчиваются, и никто не знает их причину. В D3D кэша записей EFB нет, поэтому в нем эта проблема никогда не наблюдалась. Но у него есть свои неполадки, связанные с записью во фреймбуфер, и никто не знает, отчего они происходят. Они могут быть как незначительными, так и порой весьма странными.
 

По неизвестной причине, в режиме D3D загрузочный экран не растягивается до самого низа экрана

Режим D3D решил усилить накал цензуры в игре Sims, вырезав заодно почти всю комнату

Унификация Line-Width/Point-Size

В начале этого года разработчик Armada651 решил попытаться вернуть поддержку 3D в Dolphin (об этом ниже). Ввиду этого ему пришлось пройтись по D3D и OpenGL видеорежимам и внести изменения в принцип их работы. Одним из необходимых нововведений стала реализация унифицированного генератора шейдерной геометрии в режимах OpenGL и D3D.

Звучит малообещающе, но в действительности это открыло возможность уравнять оба видеорежима. Раньше OpenGL имел прямую поддержку line-width/point-size в API, но эти функции были устаревшими, поэтому они работали неправильно. С другой стороны, D3D никогда не поддерживал эти функции и поэтому в 2011 году был найден иной способ решения проблемы. Nolan Check реализовал шейдер геометрии, который конвертировал эффекты line-width/point-size в полигоны, не представляющие сложность для D3D.
 

Старые функции OpenGL не могли правильно прорисовать point-size снежинки

Шейдер геометрии D3D без труда справляется с line-width радаром и снежинками

С появлением унифицированного шейдера геометрии, все, что нужно было сделать Armada651 – переконвертировать старый алгоритм под новый шейдер геометрии. Теперь OpenGL и D3D используют один и тот же метод генерации эффектов, использующих line-width and point-size. Это упрощает обнаружение и исправление багов; сама унификация тоже искоренила некоторые ошибки.
 

Здесь был Вася буксирный трос

Благодаря более точному методу прорисовки line-width, борьба с этими махинами больше не выглядит странной

Поддержка стереоизображения (3D стереоскопия)

Ни для кого не секрет, что при подготовке к новой особенности Dolphin’a был проделан огромный труд над «внутренностями» эмулятора. Шейдеры были переписаны, видеорежимы обновлены; был выполнен значительный пласт прочей работы. Как и в случае с возможностью увеличивать разрешение, мы рады представить поддержку стереоскопического 3D изображения.

Пользователи, давно пользующиеся эмулятором, могут помнить эту особенность в ее старой ипостаси – когда она поддерживала анаглифное 3D и NVIDIA 3D. Они также могут помнить, что она работала не очень хорошо, вызывала кучу проблем и в целом не стоила потраченных на нее усилий. Для своего времени эта поддержка стереоизображения была крутой, но у нее был ряд важных недостатков:
  1. Поддержка NVIDIA 3D управлялась драйвером, и поэтому ее нельзя было подогнать под нужды Dolphin’a.
  2. Анаглифное 3D лишает игры большинства цветов и четкости. Игроки скорее предпочтут высокое четкое разрешение размытому 3D.
  3. В то время был недостаток знаний о том, как работает 3D. В старой реализации стерео 3D в видеорежиме D3D9, в нем ощущался недостаток глубины, а в OpenGL она вообще как таковая отсутствовала.
  4. В прошлом включение стереоизображение делило частоту кадров напополам: кадры разделялись для каждого глаза, и в итоге это было равнозначно включению пропуска кадров (frame-skipping).
Унифицированный генератор шейдерной геометрии, реализованный Armada651, решает многие эти проблемы. Благодаря шейдеру геометрии, Dolphin самостоятельно может управлять стереоскопией, не полагаясь на драйвер. И в отличие от старого варианта, новый стереорежим не убивает частоту кадров, качество цвета или еще что-нибудь. Его можно использовать с большинством других улучшений, без всяких побочных эффектов. 3D не поддерживается лишь в одном случае: в тех играх, в которых для работы требуется включение RealXFB.

Высокая совместимость – это всего лишь побочный продукт скрупулёзной и грамотной реализации стереоизображения. Она полностью превосходит старые хаки. 3D поддерживается как в OpenGL, так и в D3D, а это значит, что активировать стереоскопию можно на любой операционной системе, способной запускать Dolphin: Windows, Linux, Mac, и даже Android! Любой монитор/телевизор, поддерживающий режим Side-by-Side и Top-and-Bottom, сможет работать без дополнительных настроек. И даже несмотря на то, что NVIDIA 3D по особому взаимодействует с мониторами 3D Vision, у Dolphin есть особый режим, который позволяет эмулятору работать с NVIDIA 3D и пересылать изображение на соответствующее оборудование. Тем самым достигается большая совместимость. Ну а для тех, кто не хочет тратить большие средства, или просто для любопытствующих, было добавлено более качественное анаглифное 3D: оно поддерживает глубину и прочие особенности нового режима стереоскопии.
 

Некоторые игры просто созданы для 3D

Стереоизображение было бы бессмысленным, если бы сами игры не становились лучше от него. То, что они создавались без учета 3D, еще не означает, что они не выглядят с ним потрясающе.

Невозможно описать словами те дикие ощущения, которые испытываешь, играя в F-Zero GX в высоком разрешении, со стереоскопией и с безупречными 60 кадрами в секунду. Визуальная феерия от гигантских трасс, имеющих настоящую объемность, действительно поражает. Очаровательный платформер Super Mario Galaxy 2 постоянно изумляет своими огромными галактиками, свободно парящими сквозь космос словно метеоры. В Metroid Prime игрок берет на себя роль Самус Аран и исследует зловещий мир планеты Таллон IV, так, словно он присутствует там лично. Ну а The Legend of Zelda: The Wind Waker? Одна из самых красивых игр на GameCube; ее яркий мир практически идеально переносится в 3D.

0

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

  1. Miha_xXx
    Miha_xXx от 11 января 2015 11:24
    3D это хорошо, но как бы его настроить на мониторе от LG, которые предлагают юзать софт от TriDef
    Видимо придётся ждать чересстрочный режим в самом Dolphin
  2. Sawanaga
    Sawanaga от 18 января 2015 14:53
    А может ли мой пони летать   много ли ресурсов требует стереоизображение?
  3. d1x0d3on
    d1x0d3on от 1 февраля 2015 17:33
    а как дела обстоят с нынешними системными требованиями?
  4. d1x0d3on
    d1x0d3on от 1 февраля 2015 17:39
    хм, а ведь хорошо идет. потестил обитель зла первый - по сравнению с теми ревизиями, когда я проходил его в позапрошлом году - картинка стала четче, да и звук почти не хрипит. наверное, оптимизировали даже как то, что нынче не так сильно грузит проц
  5. d1x0d3on
    d1x0d3on от 1 февраля 2015 17:44
    эх, всё равно 2 фпс теряются. жаль(
Добавить комментарий

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