Интервью с Haemimont Games

«МИР NVIDIA» начинает серию интервью с известными разработчиками популярных игр. Каждому из опрошенных было задано 22 одинаковых вопроса и каждый ответил лишь на те, на которые посчитал нужным ответить. Представляем вашему вниманию первое интервью: на наши вопросы отвечает сотрудник компании Haemimont Games Сергей Милойков, ведущий программист игры Tropico 3.

«МИР NVIDIA»:Расскажите о своем проекте, о графическом движке. Какие минимальные системные и рекомендуемые требования? Чем они обусловлены, необходимыми фичами, или вы ориентировались на некий уровень распространенности 3D карт? Используете ли вы специальные возможности последних поколений графических карт или ориентируетесь на стандарт?

Сергей Милойков: Проект «Тропико 3» — игра в жанре «политический симулятор/симулятор города». Характерные особенности картинки — ландшафт, большое расстояние обзора, много объектов, быстрое перемещение камеры в любую точку мира. Минимальные требования — 2,4 ГГц процессор, 1 Гб оперативной памяти, 256 Мб видеопамяти с поддержкой шейдеров 3.0. Рекомендуемые — соответственно 2,4 ГГц двуядерный CPU, 2 Гб памяти и 512 Мб видео с поддержкой шейдеров3.0. Требования продиктованы в основном желанием сделать картинку получше и воспользоваться возможностями видеоускорителей, которые так или иначе появились вместе с SM 3.0, как и фактом, что графика, созданная для SM 3.0, трудно масштабируется вниз без сильной потери качества. Хотя бы только из-за того, что у художников банально не хватает времени настроить все параметры рендера под все варианты опций и конфигураций.

Так как движок поддерживает Direct3D на уровне 9-ки — технологии последних двух его версий мы не поддерживаем, зато движок имеет возможность «подкрутить» некоторые параметры графики и воспользоваться мощностью современных карточек. Например, более качественные тени, большая зона видимости объектов, разрешение эффектов пост-обработки, количество загруженных текстур в максимальном качестве и т.д.

«МИР NVIDIA»:Значительно ли отличаются, с точки зрения программирования, видеокарты NVIDIA и ATI? Можно ли просто писать через DirectX или OpenGL и получать эффективный код для обоих вендоров? Или нужно для каждого производителя делать свои версии функций? (Как делали вы в своем проекте?).

С.М.: Наш движок работает на 99% с официальным функционалом Direct3D. Остальной 1% - это поддержка теневых карт (shadowmap) и определение глубины MSAA, где без этих отдельных функций, для каждого вендора потеря производительности достаточно чувствительна. Также поддержка SLI — специфичный для NVIDIA код.

Скорее, трудность заключалась в разработке в плане тестирования кода, из-за необходимости менять карточки и конфигурации компьютера для нахождения ошибок.

«МИР NVIDIA»:С чем связаны различия в скорости работы игр на видеоускорителях NVIDIA и ATI? То есть, одна игра работает быстрее на одной карте, а другая — на другой. Это свойство алгоритмов игрового движка или больше игровых сцен? То есть, например, в одной игре более высоко полигональные сцены, а в другой большой показатель overdraw или много полупрозрачных текстур со сложным антиалиасингом и поэтому видеоускорители, которые имеют больший fillrate, справляются лучше? («Любила» ли ваша программа какую-нибудь архитектуру?).

С.М.: «Тропико 3» рисует большое количество объектов и также много геометрии — основной bottleneck (узкое место) для GPU заключался в трансформации вертексов и использовании интерполяторов. Большое количество мелких треугольников не позволяло так эффективно загрузить пиксельный шейдер, как хотелось бы. Этому способствовало и отсутствие более агрессивного LOD-а, что связано, опять таки, с трудозатратами. В этом плане, разработка для NVIDIA отличалась одним плюсом и одним минусом — поддержка карт теней с ранних версий этих карточек помогла в разработке, с другой стороны, агрессивная аллокация (выделение) интерполяторов сказывалась плохо (т.к. у нас освещение делалось в tangent space, то немало информации передавалось из вершинного в пиксельный шейдер).

«МИР NVIDIA»:На сколько показательны тесты видеоускорителей в используемом повсеместно наборе наиболее популярных игр для всех игр? А так же насколько уместно проецировать результаты тестов в 3D-шутерах на RPG от третьего лица и стратегии (Показательны ли популярные тесты для производительности вашей игры?).

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

«МИР NVIDIA»:С чем связано увеличение нагрузки на CPU при увеличении разрешения? Верно ли, что это увеличение детализации моделей, чтобы они не казались угловатыми, требует больших мощностей CPU для анимации, отсечения невидимых примитивов, построения теневых объемов и т.п.? (Был ли в вашей игре такой эффект?).

С.М.: Такого эффекта у нас не было, ибо это скорее следствие от различных оптимизаций графики, которые работают на CPU и зависят от разрешения — отсечение суб-пиксельных частиц, использование occlusion culling, который приближённо растеризирует геометрию на CPU — у нас в «Тропико 3» это не использовалось из-за специфики сцен (occlusion не помогал в общем случае).

«МИР NVIDIA»:Уже очень долго идет процесс переноса расчётов на шейдеры GPU, сначала это было T&L, отсечение. Считается ли сейчас анимация моделей на GPU? Что в первую очередь остается в плане 3D-движка для расчетов на CPU? (Что вы считали на GPU, помимо T&L?).

С.М.: Основной момент, когда определяются с перебросом расчетов на GPU, является выбор основной карточки, на которой ведется разработка и настройка визуальной части проекта — есть ли достаточно свободных GPU-мощностей или всё брошено на графику. И когда добавим сюда тот факт, что большинство PC-разработчиков стремятся поддерживать платформу послабее, чтобы расширить свой потенциальный рынок, то переброс расчетов на GPU остается немного в стороне.

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

«МИР NVIDIA»:За последние годы видеоускорители стали «интеллектуальными», сами используют методы отсечения невидимых примитивов, как то, иерархический z-буфер. Насколько они эффективны? Можно ли сейчас просто запихнуть все треугольники в видеоускоритель и он все сам нарисует? Во времена первых 3D-игр, (серия Quake и Unreal) использовались изощренные методы уменьшения рисуемых треугольников, bsp-деревья и т.п. Насколько это теперь актуально?

С.М.: Отсечение пикселей EarlyZ/EarlyStencil — отличнейшая штука! Даже без отдельного прохода, для создания буфера глубины сцены, можно отсортировать объекты и ускорить рендеринг. На некоторых сценах примерная отрисовка ландшафта давала ускорение. А вот запихнуть все треугольники — это миф. Всегда будет эффективнее отрезать невидимое на CPU, если, конечно, это просто сделать. И вместо рисования невидимой геометрии, которую ускоритель будет отсекать — рисовать видимую, тем самым делая картинку игры качественнее.

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

Про LOD также важно понимать, что кроме оптимизации и более быстрой отрисовки, он дает намного более качественный антиалиасинг, чем карточки когда либо смогут посчитать — т.е. он улучшает качество отображения далеких объектов. У нас для сцены использовалось quad-tree, вдали растительность рисуется спрайтами, мелкие объекты исчезают, а у ландшафта 4 геометрических и 2 текстурных уровня детализации — без всего этого отрисовать сцены размером в 2 квадратных километра, где 40 тысяч объектов, было бы невозможно.

«МИР NVIDIA»:Одно время была такая ситуация, примерно во время кризиса P4, что узким местом системы являлся процессор, который не мог «загрузить» видеоускоритель и для увеличения fps в играх, прежде всего требовалась топовая модель CPU. На сколько сейчас GPU процессорозависимы? Верно ли, что для топовой видеокарты обязательно нужен топовый процессор? Или процессоры перешагнули некий критический уровень производительности и можно взять недорогой процессор и мощную видеокарту. Имеется в виду игры с акцентом на графику, по стилю типа Quake и Doom. То есть, где нет специальной нагрузки на процессор помимо графики.

С.М.: Важность процессоров даже возрастает, особенно для игр, где много объектов, ибо тогда нагрузка на все «слои» программы, начиная с движка, через DirectX API и до драйвера — огромна. Тут интересно сравнить этот трёхслойный пирог с консолями, особенно с PS3, где возможен доступ к графике на самом низком уровне — даже если в начале Direct3D дает быстрый старт, с течением времени из него становится все труднее выжимать производительность. На консолях даже можно примерно на пальцах посчитать, сколько будет стоить какая-то фича, что невозможно на платформе PC. Еще нужно отметить, что все-таки производительность не есть важнейший фактор развития графических API, как бы это не казалось дико — есть ряд штук, которые мешают производительности — в частности, системы security (так называемый «дешевый» DIP DX10, к примеру) и применение более абстрактных моделей, чем это необходимо, спрятав за которыми реальное железо, уже невозможно достичь «топовой» производительности.

«МИР NVIDIA»:DirectX от версии к версии становится все больше похож на графический движок. Правда ли, что сейчас 3D-программа состоит практически из вызовов Direct3D API и основная часть вычислений производится в нем? Как вы оцениваете последнюю версию DirectX? Стала ли она практически полноценным 3D Engine и сколько ещё потребуется версий для этого?

С.М.: Графическая составляющая нашего движка — какой-то маленький процент. Из неё Direct3D — микроскопический процент. Так что, графические API сравнивать с движками нельзя, у них даже цели нет такими являться. Если же посмотреть на библиотеки, которые идут с ними — D3DX, то там есть действительно полезный функционал — Direct3D эффекты, загрузка текстур, математика.

На практике же, если нужен «топовая» производительность и гибкий функционал, то все это придется переписать.

«МИР NVIDIA»:Вообще, в последнее время происходит «глобализация» игровых и 3D движков. Много игр делаются на нескольких движках. Это объективный процесс? Имеет ли смысл сейчас фирме-разработчику писать собственный 3D Engine, когда можно лицензировать готовый полнофункциональный? Например, недавно вышла очередная версия Unreal Engine, которую скачали десятки тысяч раз. Долго ли осталось до момента, когда все игры будут использовать один-два 3D движка?

С.М.: Вопрос о написании движка — это вопрос денег. Обычно у игры есть какая-то основная фича и если она из технологической области, то её придется написать самим, независимо свой движок или лицензионный. Об остальном функционале нужно подумать — дешевле написать самим или купить. Очень зависит от того, что нужно и сколько будет стоить собственная разработка: примерно сильно влияет, где находится компания, это определяет стоимость создания движка с нуля. Тем более, движки, ориентированные на международный рынок (это про высокотехнологичные движки) имеют высокую цену. Также, идеального движка нет — купив его, надо будет инвестировать в обучение персонала, потом в доработку. Так что, иногда действительно лучше и дешевле создать свое с нуля, тем самым инвестировав в собственную технологию. Для нас это решение пришло после осознания, что достойных движков для нашего жанра, на рынке на тот момент не было (думаю, нет и сейчас, по уже другим причинам). Движок такого ранга не требует очень технологичных решений и для него важны слегка другие фичи, чем те, которые присутствуют в популярных движках, которые эволюционировали (некоторые не очень сильно), в основном, из шутеров.

«МИР NVIDIA»:Верно ли, что последние видеоускорители стали очень мощными по «raw power» и могут раскрыть свой потенциал, в первую очередь, на системах с большими мониторами от 1920x1200, в режимах с антиалиасингом и полной анизитропной фильтрацией? А в плане эффектов они не отличаются от прежних моделей? То есть, имеет ли смысл человеку с монитором, например, 1280x1024 и не фанатом фильтрации и AA, покупать новую видеокарту, такую как GTX285 и Радеоны на новом техпроцессе?

С.М.: Мощная современная карта позволяет, к примеру, делать дорогие пост-процессинг эффекты: SSAO, God Rays, Motion Blur, DOF, только благодаря своему большому филрейту. То есть, большая производительность позволяет в реальном времени считать эти давно известные эффекты, независимо от того, большое разрешение или маленькое. У нас для более мощных карточек масштабируется разрешение SSAO, God Rays, увеличивается расстояние, на котором мы рисуем объекты и выделяется больше памяти под текстуры, так как у нас динамическая подгрузка текстур в зависимости от расстояния текстурируемого объекта до камеры.

«МИР NVIDIA»:Раньше, разработчики игр были консервативны в использовании возможностей и эффектов самых новых видеоускорителей, так как ориентировались на наиболее распространённые, на тот момент, карты. То есть, выходит DirectX N, а они ещё пишут для N-2. Изменилась ли ситуация в последнее время? Легко ли в игре использовать возможности по новым эффектам новых, недавно вышедших видеоускорителей?

С.М.: Эта ситуация диктуется рынком. На сей момент, судя по рынку, следует поддерживать DirectX версии 9. Когда ускорители и операционные системы с поддержкой более новых версий DirectX получат более массовую поддержку потребителей, то разработчики, конечно, перейдут на более новые версии. Писать под более новые версии DirectX также можно, если аудитория игры более хардкорна, например, шутер, где акцент на графике.

«МИР NVIDIA»:На сколько процентов, обычно, игры используют мощности самых новых, на момент выхода, видеоускорителей? Типична ли ситуация, что на момент выхода новый GPU просто немного лучше исполняет существующие игры, но с течением времени, с оптимизацией игр для новой архитектуры и задействованию новых фич его ценность как бы растет?

С.М.: Этот эффект, скорее, относится к консолям, где с течением времени знание о работе консоли и новые приемы дают реальный прирост производительности в играх. С PC это не совсем так, ибо железо спрятано под слоями API и драйверов  и специально затачивать движок под какое-то конкретное «железо» — неэффективно.

«МИР NVIDIA»:На сколько технология SLI требует поддержки от разработчика игры? С чем связана различная эффективность этих технологий для различных игр? С особенностями игрового движка или с игровыми сценами?

С.М.: Мы поддерживаем SLI, это заняло один день, чтобы убрать зависимость кадра от прежнего и пофиксить несколько багов, т.е. сделать такое должен каждый разработчик. Тоже самое касается и поддержки стерео — в «Тропико 3» стереоэффект дал поразительные результаты.

«МИР NVIDIA»:В целом, можно ли сказать, что лучше: два видеоускорителя, объединенные в SLI или Crossfire, или один новый, более позднего поколения? Имеет ли смысл апгрейдить систему добавлением второй карточки, или всегда лучше апгрейдить на самое последнее поколение? Может ли это зависеть от игр, в которые играет пользователь. Например, если он играет, в основном, не в самые новые игры, которые не знают про новый видеоускоритель, то выгоднее дополнить систему вторым старым, как дешевый способ увеличения производительности. А если он фанат новинок, то лучше купить новую карточку?

С.М.: В последнее время, сравнительно мало аппаратных технологий качественно изменили развитии движков, т.е. получили широкую поддержку и чье отсутствие ограничит игрока. Это, например, SM 3.0, 256+ Мб видеопамяти, поддержка теневых карт. Впоследствии, ими могут стать и геометрические шейдеры. То есть, это функции доступны максимум с предпоследней версии Direct3D, и если карточка их поддерживает (хорошо), то имеет смысл только наращивать её raw power.

«МИР NVIDIA»:Уже давно, много говориться о кризисе рынка для PC и постепенного перехода игр на приставки. Но этого не произошло пока. Можно ли это ожидать в будущем? Правда ли, что для приставок программировать графику гораздо легче, так как там стандартное железо? А для PC надо иметь в виду множество вендоров и моделей видеоускорителей, что сильно усложняет разработку. Или вечное отставание приставок по уровню железа нивелирует унифицированность? То есть, оно пусть одно, но уже сравнительно устаревшее. Или же переход на приставки зависит от того, начнут ли в них ставить по-настоящему передовое железо?

С.М.: Переход на приставки — прежде всего, вопрос рынка и продаж. Многие уходят с PC из-за пиратства. Также PC — это непонятное железо, в то же время на консоли все хорошо известно и документировано, есть доступ к низкому уровню: можно гарантировать схожую графику и т.п. всем потребителям. А на PC есть разное железо, старые видео-драйверы, старые операционные системы с их особенностями. Почти все наши баги были связаны именно с такими особенностями, а не с проблемами с самой игрой. На Xbox 360, «Тропико 3» на одинаковых сценах выдавала кадры с одинаковой скоростью, с точностью до 1ms, а на соседних компьютерах разработчиков, FPS плавал. И, что интереснее, bottleneck движка был в совсем разных местах, иногда вообще скакал между GPU и CPU на почти схожих системах из-за огромной кучи особенностей, включая совсем, по идее, не влияющих на работу игр и программ.

«МИР NVIDIA»:Правда ли, что сейчас в играх почти повально используется сочетание проекционного метода для построения теней от моделей и метода теневых объемов с динамически или статически просчитанными вольюмами для теней на движущиеся объекты, модели и оружие, и от движущихся частей моделей на самих себя?

С.М.: Теневые карты (shadow maps) уже давно, повсеместно правят миром. Есть одна-две стабильные (более-менее) техники их расчёта, которые гарантируют хорошее качество. Так же, метод теневых карт хорошо масштабируется с ростом raw power, в отличии от теневых объемов.

«МИР NVIDIA»:Есть ли у существующих методов построения теней перспектива, с точки зрения построения динамического освещения всей сцены? То есть, с постепенным ростом мощности видеоускорителей их можно будет использовать для расчета всего освещения в динамике? Или потребуется применение каких-то новых методов?

С.М.: Тени отдельных объектов сейчас — более-менее решённая проблема. Следующий рубеж — это глобальное освещение (Global Illumination), в какой-то форме в реальном времени.

«МИР NVIDIA»:Как вы оцениваете технологию «Precompute Radiance Transfer», с точки зрения применения в играх? Собираетесь ли вы её использовать в будущем?

С.М.: У нас в «Тропико 3» её использование не являлось практичным из-за большого и динамичного мира и outdoor типа сцены, где такой эффект не так сильно заметен. Для шутеров это хорошая технология, из-за более статичных сцен и более высоких требований к качеству близлежащей сцены. Один из недостатков технологии, это необходимость долгого расчета PRT для уровней, что в ходе работы мешает увидеть, как изменения в уровне отражаются на освещении.

«МИР NVIDIA»:Что дают, с точки зрения разработки игр, новые видеоускорители, изготовленные на более новых технологических процессах?

С.М.: Новая мощная карта — это удобство, прежде всего, для разработчика. На ранних этапах разработки позволяет не зацикливаться на постоянной оптимизации. Делать прототипирование эффектов. В «Тропико 3» мы очень активно пользовались подгрузкой шейдеров на лету, тем самым создавая шейдеры и параллельно на лету смотрели, как изменения меняют игру. Та же система использовалась для разработки пост-эффектов. Для оптимизации и, скорее, для отлова багов, сильно помог NVPerfHUD, наверное наилучший продукт в этой области для PC.

Сергей Милойков, senior programmer on «Tropico 3», Haemimont Games.

Купить игру «Tropico 3» на OZON.ru

 / 
Лев Дымченко (lev)