Настройка видеокарты Nvidia для игр. Как настроить видеокарту Nvidia? Как настроить драйверы видеокарты Nvidia

Приветствую вас уважаемые друзья. В очередном посте мы вновь затронем тему графических процессоров, визуализации с помощью V-Ray RT и распределения вычислительных ресурсов в multi gpu системах. Как вы уже давно знаете, графические процессоры все глубже проникают в нашу деятельность и такие большие пакеты как Autodesk 3ds Max, Autodesk Maya, SideFX Houdini и другие, обращаются к ним для ускорения не только аппаратной визуализации, но и для ускорения вычислений общего назначения. Например, тесселяция геометрии с помощью OpenSubdiv или расчет динамических эффектов, а также в процессах фотореалистичной визуализации.
Немудрено, что установка нескольких графических ускорителей будет полезна в таких задачах и позволит распределить нагрузку между ними. В своих материалах я уже не раз писал о том, что использую рабочую станцию с двумя графическими ускорителями, это сделано для того, чтобы распределить вычисления между ними и одну задачу выполнять на одном GPU, а другую задачу выполнять на другом.
По умолчанию Autodesk Maya 2015 для визуализации виртуального пространства в видовых окнах, это очень хорошо, когда вы хотите отображать текстуры, использовать такие эффекты как Ambient Occlusion, освещение и тени, или аппаратное сглаживание. В таком случае, если у вас несколько графических ускорителей, Maya постарается распределить нагрузку между ними и выполнять визуализацию средствами обоих GPU.

Пример загруженности вычислениями двух GPU в процессе навигации в видовых окнах.
Но такое распределение и плотное использование графических ускорителей только для отображения виртуального пространства может снизить производительность системы в процессе одновременного запуска вычислений общего назначения, например V-Ray RT GPU. И настройка только самого V-Ray RT и определение для него графических процессоров, которые будут использованы для вычислений, не поможет решить данную проблему. Здесь может потребоваться дополнительная настройка драйвера графического процессора. Об этом я и расскажу далее в этом посте.

Пример серьезного снижения производительности системы и замедленное отображение виртуального пространства при неправильной конфигурации графических процессоров и визуализации с помощью V-Ray RT.

Конечно, первое что следует сделать, это определить, какой из нескольких GPU будет участвовать в вычислениях V-Ray RT. Это можно сделать с помощью специальной утилиты, поставляемой вместе с V-Ray for Maya. Утилита получила имя Select OpenCL devices for V-Ray RT GPU . О данной утилите я писал и рассказывал в ранних постах и видео , посвященных V-Ray RT GPU.


Утилита Select OpenCL devices for V-Ray RT GPU.
Помимо этого, вы можете вручную определить переменную среду (Environment Variable), которую, по сути, и меняет утилита Select OpenCL devices for V-Ray RT GPU.


Переменная среда VRAY_OPENCL_PLATFORMS_x64 с параметрами, определяющими, какой GPU будет использован V-Ray RT GPU.
Итак, для V-Ray RT GPU, у меня по умолчанию выбран второй графический ускоритель, не отвечающий за вывод изображения на мониторы. Обычно, им выступает NVIDIA Quadro K4000. Этот GPU достаточно производителен и обладает достаточным для моих задач объемом памяти. Как было показано на видео в начале поста, я столкнулся с серьезной проблемой, когда при одновременном вычислении V-Ray RT и навигации в виртуальном пространстве, Maya начинает неимоверно тормозить.
Но в чем плюс графических ускорителей NVIDIA Quadro, так это в достаточно стабильных и хорошо конфигурируемых драйверах. Так как Maya по своей природе отлично адаптирована под API OpenGL, а в конфигурации драйвера есть все необходимое для 3D приложений, то можно без проблем выполнить настройку под желаемое приложение.


Страница Manage 3D settings драйвера NVIDIA Quadro с открытой вкладкой Global Settings.
Первое что нам необходимо сделать – открыть NVIDIA Control Panel (Панель управления NVIDIA) и перейти в раздел Manage 3D settings (Управление параметрами 3D). На вкладке Global Settings (Глобальные параметры), выберите желаемый профиль глобальных параметров – раскрывающийся список Global presets (Глобальные предустановки). Я по умолчанию использую базовый профиль (Base profile), так как в нем используются сбалансированные настройки, которые могут быть применены для любого приложения.
Для того чтобы определить, какой из установленных в системе GPU будет использован для визуализации виртуального пространства с помощью OpenGL. Это можно сделать с помощью параметра OpenGL rendering GPU (ГП рендеринга OpenGL). Так как в моем примере используются GPU NVIDIA Quadro K2000 и NVIDIA Quadro K4000, и K2000 применяется для вывода изображения на два дисплея, а так же для визуализации виртуальных окон проекций. И как было сказано выше, для вычислений используется модель K4000. Поэтому, было решено выбрать для данного атрибута GPU NVIDIA Quadro K2000.


Страница Manage 3D settings и вкладка Program Settings.
После того, как вы выберите графический ускоритель для выполнения визуализации виртуального пространства необходимо проверить, как это отразится на индивидуальных параметрах для приложения Maya. Это можно сделать на вкладке Program Settings (Программные настройки) и выбрав в раскрывающемся списке Select a program to customize (Выберите программу для настройки) профиль Autodesk Maya Stereo .
В параметрах данного профиля проверьте, что параметру OpenGL rendering GPU (ГП рендеринга OpenGL) назначен выбранный вами графический ускоритель.
Если вы хотите максимально освободить объем памяти того GPU который будет выполнять вычисления, вы также можете изменить параметр Optimize for sparse texture performance (Оптимизировать для работы с редкими текстурами), и также назначить ему тот GPU который отвечает за визуализацию виртуального пространства.
В результате всех манипуляций с настройками драйвера, просто перезапустите Maya и можете приступать к работе. Результат описываемых выше действий можно увидеть в видео ниже.

Производительность навигации в виртуальном пространстве и визуализации V-Ray RT GPU после всех изменений.

Как видите, все достаточно просто и можно безболезненно настроить multi gpu систему для работы с различными приложениями и их функциями. Конечно, если в системе используется 3 или даже 4 графических ускорителя, это позволит еще более тонко выполнять настройку и распределение ресурсов между приложениями.

Привет всем! Сегодня очень интересная статья о тонкой настройке видеокарты для высокой производительности в компьютерных играх. Согласитесь друзья, что после установки драйвера видеокарты вы один раз открыли «Панель управления Nvidia» и увидев там незнакомые слова: DSR, шейдеры, CUDA, синхроимпульс, SSAA, FXAA и так далее, решили туда больше не лазить. Но тем не менее, разобраться во всём этом можно и даже нужно, ведь от данных настроек напрямую зависит производительность . Существует ошибочное мнение, что всё в этой мудрёной панели настроено правильно по умолчанию, к сожалению это далеко не так и опыты показывают, правильная настройка вознаграждается весомым увеличением кадровой частоты. Так что приготовьтесь, будем разбираться в потоковой оптимизации, анизотропной фильтрации и тройной буферизации. В итоге вы не пожалеете и вас будет ждать награда в виде увеличения FPS в играх.

Настройка видеокарты Nvidia для игр

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

Итак, для того, чтобы попасть в меню управления видеодрайвером, кликайте правой кнопкой мыши по любому месту на рабочем столе и выбирайте в открывшемся меню «Панель управления Nvidia».

После чего, в открывшемся окне переходите во вкладку «Управление параметрами 3D».

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

Итак, первый пункт «CUDA – графические процессоры ». Здесь представлен список видеопроцессоров, один из которых вы можете выбрать, и он будет использоваться приложениями CUDA. CUDA (Compute Unified Device Architecture) – это архитектура параллельных вычислений использующаяся всеми современными графическими процессорами для увеличения вычислительной производительности.

Следующий пункт «DSR - Плавность » мы пропускаем, потому что он является частью настройки пункта "DSR - Степень”, а его в свою очередь нужно отключать и сейчас я объясню почему.

DSR (Dynamic Super Resolution) – технология позволяющая рассчитывать картинку в играх в более высоком разрешении, а затем масштабирующая полученный результат до разрешения вашего монитора. Для того чтобы вы поняли для чего эта технология вообще была придумана и почему она не нужна нам для получения максимальной производительности, я попробую привести пример. Наверняка вы часто замечали в играх, что мелкие детали, такие как трава и листва очень часто мерцают или рябят при движении. Связано это с тем, что, чем меньше разрешение, тем меньше число точек выборки для отображения мелких деталей. Технология DSR позволяет это исправить за счет увеличения числа точек (чем больше разрешение, тем больше число точек выборки). Надеюсь, так будет понятно. В условиях максимальной производительности эта технология нам не интересна так, как затрачивает довольно много системных ресурсов. Ну а с отключенной технологией DSR, настройка плавности, о которой я писал чуть выше, становится невозможна. В общем, отключаем и идем дальше.

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

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

Заранее подготовленные кадры виртуальной реальности . Функция для очков виртуальной реальности нам не интересна, так как VR еще далека до повседневного использования обычных геймеров. Оставляем по умолчанию – использовать настройку 3D приложения.

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

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

Максимальное количество заранее подготовленных кадров . Количество кадров, которое может подготовить ЦП перед их обработкой графическим процессором. Чем выше значение, тем лучше.

Многокадровое сглаживание (MFAA) . Одна из технологий сглаживания используемая для устранения "зубчатости” на краях изображений. Любая технология сглаживания (SSAA, FXAA) очень требовательна к графическому процессору (вопрос лишь в степени прожорливости). Выключаем.

Потоковая оптимизация . Благодаря включению этой функции приложение может задействовать сразу несколько ЦП. В случае, если старое приложение работает некорректно попробуй поставить режим "Авто” или же вовсе отключить эту функцию.

Режим управления электропитанием . Возможно два варианта – адаптивный режим и режим максимальной производительности. Во время адаптивного режима энергопотребление зависит напрямую от степени загрузки ГП. Этот режим в основном нужен для снижения энергопотребления. Во время режима максимальной производительности, как не трудно догадаться, поддерживается максимально возможный уровень производительности и энергопотребления независимо от степени загрузки ГП. Ставим второй.

Сглаживание – FXAA, Сглаживание – гамма-коррекция, Сглаживание – параметры, Сглаживание – прозрачность, Сглаживание - режим . Про сглаживание я уже писал чуть выше. Выключаем всё.

Тройная буферизация . Разновидность двойной буферизации; метод вывода изображения, позволяющий избежать или уменьшить количество артефактов (искажение изображения). Если говорить простыми словами, то увеличивает производительность. НО! Работает эта штука только в паре с вертикальной синхронизацией, которую, как вы помните, мы до этого отключили. Поэтому этот параметр тоже отключаем, он для нас бесполезен.

Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий

К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.

Введение

В этом примере демонстрируется создание текстуры в OpenGL* 4.3, подчиненная область которой обновляется ядром С OpenCL™, выполняющимся на ГП Intel® Processor Graphics под управлением Microsoft Windows*. Одним из назначений такой технологии могут быть приложения компьютерного зрения в реальном времени, где необходимо запускать детектор определенных элементов изображения в OpenCL, но в реальном времени выводить готовое изображение с четко отмеченными детекторами на экран. В этом случае нужен доступ ко всем возможностям языка С ядра OpenCL, а также возможности рендеринга API OpenGL для совместимости с существующим конвейером рендеринга. Еще один пример использования такой технологии: если динамически создаваемые в OpenCL процедурные текстуры используются для рендеринга трехмерных объектов на сцене. И наконец, представьте себе постобработку изображения в OpenCL после рендеринга сцены с помощью 3D конвейера. Это может быть полезно для преобразования цветов, изменения разрешения или выполнения сжатия в определенных сценариях.

В этом примере показано обновление в OpenCL текстуры, созданной в OpenGL. Такие же рекомендации применяются для обновления объекта вертексного буфера или внеэкранного кадрового буфера, который может использоваться в автономном конвейере обработки изображений.

Расширение общего доступа к поверхностям определяется в спецификации расширений OpenCL строкой cl _ khr _ gl _ sharing . Мы также используем расширение cl _ khr _ gl _ event , которое поддерживается ГП Intel.

Мотивация

Назначение этого учебного руководства в том, чтобы ознакомить читателей с возможностью создания поверхностей, общих для OpenCL и OpenGL. Также вы сможете лучше понять работу API, соображения производительности различных путей создания текстур в API OpenGL, в частности на ГП Intel, а также разницу между таким подходом и использованием дискретных ГП.

Основной принцип

Для создания текстур OpenGL и доступа к ним как к изображениям OpenCL с наивысшей производительностью ГП Intel не следует создавать объект пиксельного буфера (РВО) OpenGL. Объекты PBO не обладают преимуществами производительности на ГП Intel. Кроме того, они создают по крайней мере одну дополнительную линейную копию данных, которые затем копируются в формат текстур, используемый в ГП для рендеринга. Во-вторых, вместо использования glFinish () для синхронизации между OpenCL и OpenGL мы можем использовать механизм неявной синхронизации, поскольку ГП Intel поддерживает расширение cl _ khr _ gl _ event .

ГП Intel® с общей физической памятью

ГП Intel® и ЦП вместе используют общую память. Их взаимоотношение показано на рисунке 1. Существует несколько архитектурных механизмов (не показанных на этом рисунке), расширяющих возможности подсистемы памяти. Например, для повышения производительности подсистемы памяти применяются иерархии кэша, сэмплеры, элементарные операции, очереди чтения и записи.

Рисунок 1. Взаимоотношения между ЦП, ГП Intel ® и основной памятью. Обратите внимание, что ЦП и ГП используют общий пул памяти (в отличие от дискретных ГП с собственной выделенной памятью, управление которой осуществляет драйвер)

Почему не следует использовать объекты пиксельного буфера (РВО) с ГП Intel

«Основное преимущество использования объекта буфера для промежуточного хранения данных текстуры состоит в том, что передача из объекта буфера в текстуру не должна обязательно происходить немедленно, если она происходит до момента, когда данные требуются шейдеру. Это позволяет осуществлять передачу параллельно с выполнением приложения. Если же данные находятся в памяти приложения, то семантика glTexSubImage 2 D () требует, чтобы перед возвратом функции была создана копия данных , благодаря чему исключается параллельная передача. Преимущество такого подхода состоит в том, что приложение может свободно изменять данные, переданные в функцию, сразу после возврата функции».

Обратите внимание, что смысл этого вызова API заключается в общем доступе между памятью приложения (т. е. памятью ЦП) и ГП, а не в общем доступе между двумя API, каждый из которых выполняет свой поток команд на одном и том же устройстве и одной и той же физической памяти, как показано на рисунке 1.

Использование объектов PBO на самом деле приводит к снижению производительности на устройствах, где используется общая физическая память. Во-первых, объект РВО - это дополнительная промежуточная область, что означает увеличение объема памяти, потребляемого приложением. Во-вторых, данные в РВО хранятся в линейном виде, а если данные требуются в сегментированном виде, как, например, в текстурах OpenGL или в изображениях OpenCL, то приходится преобразовывать данные в нужный формат. И наконец, копирование между двумя API занимает определенное время, что также отрицательно сказывается на производительности приложения.

В случае общего доступа с дискретным ГП использование объектов РВО вполне целесообразно: можно запустить передачу DMA, работающую асинхронно по отношению к ЦП. Без РВО семантика OpenGL требует синхронной записи и дожидается возвращения результата, что также снижает производительность. В нашем случае нет передачи данных из ЦП в подсистему памяти ГП.

В каких случаях можно использовать РВО при общем доступе к поверхностям?

Существуют сценарии, когда имеет смысл применять объекты РВО. Например, если не существует подходящего формата поверхностей, совместимого с OpenGL и OpenCL согласно таблице 9.4 в спецификации расширений OpenCL. В этом случае можно создать РВО и предоставить к нему общий доступ для API, связанных с общим доступом к буферу. Тем не менее старайтесь избегать таких сценариев, чтобы не допустить снижения производительности, о котором было сказано выше. Если это необходимо, см. пример Максима Шевцова, ссылка на который приводится в разделе справочных материалов.

Синхронизация между OpenCL™ и OpenGL*

Во время выполнения важно добиться наивысшей производительности OpenCL и OpenGL. В спецификации сказано следующее:

«Перед вызовом объектов clEnqueueAcquireGLObjects приложение должно убедиться в завершении всех отложенных операций GL , располагающих доступом к объектам, указанным в mem _ objects . Чтобы сделать это с сохранением переносимости, можно выполнить и дождаться завершения команды glFinish для всех контекстов GL с отложенными ссылками на эти объекты. В разных реализациях могут быть доступны более эффективные методы синхронизации. Например, на некоторых платформах может оказаться достаточно вызвать glFlush , или же синхронизация может быть неявной внутри потока, или могут быть поддерживаемые данным поставщиком расширения, позволяющие разграничивать поток команд GL и дожидаться завершения каждой части в очереди команд CL . Обратите внимание, что в данный момент единственным методом синхронизации, поддерживающим перенос между различными реализациями OpenGL , является glFinish ».

Для наибольшей переносимости, согласно спецификации, нужно вызывать glFinish () , но это блокирующий вызов! На ГП Intel будет эффективнее использовать неявную синхронизацию или объекты синхронизации между OpenCL и OpenGL с расширением cl _ khr _ gl _ events . Подробнее это будет описано ниже. Использование неявной синхронизации не является обязательным. В образце кода содержатся закомментированные фрагменты, которые можно задействовать, если нужно использовать неявную синхронизацию.

Обзор общего доступа к поверхностям для OpenCL и OpenGL

Сначала опишем этапы, необходимые для поддержки общего доступа к поверхностям при инициализации, выполнении и завершении работы. Затем более подробно опишем API и синтаксис языка. И наконец, мы расскажем, как можно развить эти идеи, чтобы охватить другие форматы текстур, выходящие за рамки данного примера. Мы используем общедоступную библиотеку freeglut для управления окнами, а также библиотеку glew . Использование этих библиотек является стандартной практикой в образцах приложений OpenGL, поэтому мы не будем описывать их подробнее.

Инициализация

  1. OpenCL:
    1. Создайте контекст, передающий соответствующие параметры устройства.
    2. Создайте очередь на устройстве и контекст, поддерживающий обмен данными между OpenGL и OpenCL.
  2. OpenGL: Создайте текстуру OpenGL, доступ к которой нужно предоставить для OpenCL.
  3. OpenCL: С помощью дескриптора OpenGL, созданного на шаге 2, создайте общую поверхность посредством расширения OpenCL.

Шаги 1 и 2 можно поменять местами. Шаг 3 должен следовать за шагами 1 и 2.

Запись на общую поверхность в OpenCL

  1. Заблокируйте поверхность для монопольного доступа OpenCL.
  2. Запишите на эту поверхность через ядро C OpenCL. При работе с данными текстур необходимо использовать функции чтения или записи изображения и соответствующим образом передавать изображение.
  3. Разблокируйте поверхность, чтобы предоставить OpenGL доступ к ней на чтение или запись.

Шаги 1, 2 и 3 должны следовать в указанном порядке.

Цикл

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

Завершение работы

  1. Очистка состояния OpenCL
  2. Очистка состояния OpenGL

Подробные сведения об общем доступе к поверхностям OpenGL и OpenCL

В этом разделе приводятся подробные сведения об этапах, описанных в предыдущем разделе.

Инициализация

  1. OpenCL:
    1. Выдайте запрос, чтобы определить, поддерживаются ли расширения; завершение и выход, если не поддерживаются.

      Не все реализации OpenCL поддерживают общий доступ к поверхностям OpenCL и OpenGL, поэтому сначала нужно определить, есть ли вообще в системе нужное расширение. Мы последовательно перебираем платформы, чтобы найти строку расширения для платформы, поддерживающей общий доступ к поверхностям. Внимательное изучение спецификации показывает, что это расширение платформы, а не устройства. Затем мы создаем контекст, который нужно будет опросить, чтобы определить, какие из наших устройств в контексте поддерживают общий доступ к контексту OpenGL.

      Этот пример поддерживается только на ГП Intel, но можно без особых усилий реализовать поддержку и других ГП. Нужное нам расширение - cl _ khr _ gl _ sharing . Вот соответствующий фрагмент кода. char extension_string; memset(extension_string, "

  • Перевод

Привет, меня зовут Тони Элбрект (Tony Albrecht), я один из разработчиков новой команды Render Strike Team под управлением Sustainability Initiative в League of Legends . Моей команде поручили внести усовершенствования в движок рендеринга LoL , и мы с радостью принялись за работу. В этой статье я расскажу, как движок работает сейчас . Надеюсь, она заложит хороший фундамент, на основании которого я позже смогу рассказывать об вносимых нами изменениях. Эта статья станет для меня хорошим предлогом самому поэтапно изучить процесс рендеринга, чтобы мы, как команда, полностью понимали, что же происходит внутри.

Я подробно объясню, как LoL выстраивает и отображает каждый отдельный кадр игры (не забывайте, что на самых мощных машинах это происходит более 100 в секунду). Рассказ в основном будет техническим, но я надеюсь, что его легко будет усвоить даже тем, кто не имеет опыта в рендеринге. Для ясности я пропущу некоторые сложные моменты, но если вы захотите узнать подробности, то напишите об этом в комментариях [к оригиналу статьи].

Сначала я немного расскажу об имеющихся у нас графических библиотеках. League должна работать как можно эффективнее на широком диапазоне платформ. На самом деле, сейчас Windows XP является четвёртой по популярности версией ОС, в которой запускают игру (популярнее только Windows 7, 10 и 8). На Windows XP ежемесячно играют в десять миллионов сессий игры, поэтому для сохранения обратной совместимости нам нужно поддерживать DirectX 9 и приходится использовать только функции, которые он предоставляет. Также мы используем сопоставимый набор функций OpenGL 1.5 на машинах с OS X (скоро положение изменится).

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

Рендеринг для начинающих

В большинстве компьютеров есть ЦП (центральный процессор) и ГП (графический процессор). ЦП выполняет логику и вычисления игры, а ГП получает данные треугольников и текстур от ЦП и отображает их на экране как пиксели. Небольшие программы ГП, называемые шейдерами, позволяют влиять на способ выполнения рендеринга. Например, можно изменить способ наложения текстур на треугольники или дать ГП команду выполнять расчёты для каждого тексела в текстуре. Таким образом, мы можем просто накладывать текстуру на треугольник, добавлять или умножать несколько текстур на треугольнике, или выполнять более сложные процессы, такие как рельефное текстурирование, расчёт освещения, отражений или даже высокореалистичных шейдеров кожи . Все видимые объекты рисуются в неотображаемом буфере кадра, который отображается только после завершения всего рендеринга.

Давайте рассмотрим пример. Вот изображение Гарена (Garen), состоящее из 6 336 треугольников, составляющих «проволочный» каркас и сплошную бестекстурную модель. Эта модель создана нашими художниками и экспортирована в формат, который движок League может загружать и анимировать. (Заметьте, что у Гарена неплоское затенение: это ограничение приложения, используемого для исследования рендеринга).

Эта модель без текстуры не только скучная, но и не отображает узнаваемого Гарена. Чтобы вдохнуть в Гарена жизнь, нужно нанести текстуру.

Перед загрузкой текстуры Гарена хранятся на диске в виде файлов DDS или TGA, которые сами по себе выглядят как сцена из ужастика. После правильного наложения на модель у нас получится вот такой результат:

У нас уже начинает что-то получаться. Шейдер, рендерящий наши сетки со скиннингом, не просто наносит текстуру, но мы рассмотрим это позже.

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

Этап рендеринга 0: туман войны

Прежде чем начинать прорисовку частей сцены, нужно сначала подготовить туман войны и тени (у-у-у, «туман и тени», как зловеще!). Туман войны хранится центральным процессором как сетка размером 128x128, которая потом масштабируется до квадратной текстуры 512x512 (подробнее об этом можно почитать в статье «A Story of Fog and War»). Затем мы размываем эту текстуру и наносим её для затемнения соответствующих областей игры и мини-карты.


Этап рендеринга 1: тени

Тени - неотъемлемая часть 3D-сцены. Без них объекты будут казаться плоскими. Для создания теней, которые выглядят, как отбрасываемые миньоном или чемпионом, нам нужно рендерить их из точки источника света. Расстояние от источника света до отбрасывающего тень персонажа хранится для каждого пикселя в компонентах RGB, и мы обнуляем компонент альфа-прозрачности. Это можно увидеть ниже. Слева у нас есть поле высоты теней в RGB осаждаемой башни, миньонов и двух чемпионов. Справа у нас есть только компонент альфа-прозрачности. Эти текстуры обрезаны для более чёткого отображения деталей теней - миньоны внизу, башня и чемпионы - наверху.


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

Этап рендеринга 2: статичная геометрия

Имея подготовленные текстуры тумана войны и теней, мы начинаем отрисовывать в кадре остальную часть сцены. В первую очередь статичную геометрию (она называется так, потому что неподвижна). Эта геометрия сочетает информацию тумана войны и теней со своей основной текстурой, что даёт нам следующую сцену:

Заметьте, что тени миньонов и туман войны заползают на края сцены. Рендерер Ущелья призывателей (Summoner"s Rift) не рендерит динамических теней для статичной геометрии. Поскольку основной источник света не перемещается, мы запекаем тени статичных сеток на их текстурах. Это даёт художникам больше контроля над внешним видом карты, а также позволяет повысить производительность (не требуется рендеринг теней статичных сеток). Тени отбрасывают только миньоны, башни и чемпионы.

Этап рендеринга 3: сетки со скиннингом

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

Каждая анимированная сетка состоит из скелета (каркаса из иерархически соединённых костей) и из сетки треугольников (см. выше изображение Гарена). Каждая вершина каждого треугольника привязана к одной-четырём костям, поэтому при перемещении костей вершины перемещаются с ними как кожа (skin). Поэтому их называют «сетками со скиннингом». Наши талантливые художники создают анимации и сетки для всех объектов, а потом экспортируют их в формат, который загружается в League при запуске игры.


На изображениях выше показаны все кости сетки Гарена. На изображении слева показаны все его кости (с названиями). На изображении справа голубым показаны выбранные вершины, а жёлтыми линиями показаны связи с костями, управляющие их положением.

Шейдеры сеток со скиннингом не просто рисуют сетки со скиннингом в буфер кадра, они также рендерят в другой буфер их отмасштабированную глубину, которую мы позже используем для отрисовки контуров. Кроме того, шейдеры скиннинга выполняют расчёт отражений Френеля, излучаемого освещения, вычисляют отражения и изменяют освещение для тумана войны.

Этап рендеринга 4: контуры (очерчивание)

По умолчанию очерчивание для сеток со скиннингом включено, что обеспечивает более чёткие контуры. Это позволяет выделить сетки со скиннингом на фоне, особенно в областях с низким контрастом. На изображениях ниже очерчивание отключено (слева) и включено (справа).


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

Этап рендеринга 5: трава

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

Вот кадр без воды и травы, просто статичная фоновая геометрия и несколько сеток со скиннингом.

Заметьте, что тени травы уже являются частью текстуры статичного рельефа и не рендерятся динамически. Затем мы добавляем траву:

Пучки травы на самом деле являются сетками со скиннингом. Это позволяет нам анимировать их при прохождении по ним персонажей и придать приятное колыхание от ветерка в Ущелье призывателей.

Этап рендеринга 6: вода

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

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

Выделив всю рябь как «проволочные» каркасы, мы получим:

Теперь мы чётко можем видеть эффекты воды по берегам реки, а также вокруг камней и кувшинок.

При нормальном рендеринге и анимации вода выглядит следующим образом:

Этап рендеринга 7: декали

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

Этап рендеринга 8: особые контуры

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

Этап рендеринга 9: частицы

Следующая стадия - одна из самых важных: частицы. Я уже писал о частицах в этой статье . Каждое заклинание, бафф и эффект - это система частиц, которую нужно анимировать и обновлять. В рассматриваемой нами сцене не так много действия, как, например, в командном бою «5 на 5», но всё равно здесь довольно много отображаемых частиц.

Если мы рассмотрим только частицы (отключив всю фоновую сцену), то получим следующую картину:

Отрендерив треугольники, составляющие частицы, фиолетовыми контурами (без текстур, только геометрию), мы получим следующее:

Если отрисовывать частицы нормально, то мы получим более знакомый вид.

Этап рендеринга 10: эффекты постобработки

Итак, базовые части сцены уже отрендерены и мы можем придать ей немного больше «блеска». Делается это в два этапа. Сначала мы выполняем проход сглаживания (anti-alias, AA). Он помогает сгладить зазубренные края, делая весь кадр более чётким. В статичном изображении этот эффект почти незаметен, но он сильно помогает в устранении «мерцания пикселей», которое может возникать при перемещении высококонтастных граней по экрану. В LoL мы используем алгоритм сглаживания с быстрой аппроксимацией Fast Approximate Anti-Aliasing (FXAA).

Изображение слева - это миньон до FXAA, а справа - после сглаживания. Заметьте, как сглаживаются края объекта.

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

Этап рендеринга 11: урон и полоски здоровья

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

Этап рендеринга 12: интерфейс

И, наконец, отрисовывается интерфейс пользователя. Все тексты, значки и предметы отрисовываются на экране как отдельные текстуры, перекрывая всё, находящееся под ними. В анализируемом нами случае на отрисовку интерфейса потребовалось примерно 1 000 треугольников - около 300 на мини-карту и 700 - на всё остальное.

Собираем всё вместе


И мы получаем полностью отрендеренную сцену. Во всей сцене содержится около 200 000 треугольников, 90 000 из них используется под частицы. 28 миллионов пикселей отрисовываются за 695 вызовов отрисовки. Чтобы в игру можно было играть, вся эта работа должна выполняться как можно быстрее. Чтобы достичь 60 и более кадров в секунду, все этапы нужно пройти менее чем за 16,66 миллисекунд. И это только расчёты на стороне графического процессора: вся игровая логика, обработка ввода игрока, столкновения, обработка частиц, анимации и отправка команд на рендеринг тоже должны выполняться за это же время в центральном процессоре. Если вы играете с 300 fps, то всё происходит меньше чем за 3,3 миллисекунды!

Зачем выполнять рефакторинг рендерера?

Теперь вы должны представлять сложности, связанные с рендерингом единственного кадра игры League . Но это только сторона вывода данных: то, что вы видите на экране - это результат тысяч вызовов функций нашего движка рендеринга. Он постоянно изменяется и эволюционирует, чтобы лучше соответствовать современным потребностям рендеринга. Это привело к тому, что в базе кода League сосуществуют разные формы кода рендеринга, потому что нам нужно учитывать новое и поддерживать старое оборудование. Например, Ущелье призывателей (Summoner’s Rift) выполняет рендеринг немного иначе, чем Воющая бездна (Howling Abyss) и Проклятый лес (Twisted Treeline). Существуют части рендерера, оставшиеся от старых версий League , и части, которые пока так и не раскрыли весь свой потенциал. Задача команды Render Strike Team - взять весь код рендеринга и произвести его рефакторинг , чтобы весь рендеринг выполнялся через один и тот же интерфейс. Если мы хорошо выполним свою задачу, то игроки совершенно не заметят разницы (кроме, возможно, небольшого увеличения скорости в разных моментах). Но после того, как мы закончим, у нас появится отличная возможность вносить одновременные изменения во все игровые режимы rendering Добавить метки

Вопрос одного из пользователей

Доброго времени суток. Можно ли как-то повысить производительность видеокарты NVIDIA (GeForce), то бишь увеличить FPS? Видеокарта у меня уже довольно старая, а запустить парочку игр - желание не преодолимое ...

Здравствуйте!

99% вопросов по поводу производительности видеокарты задают любители игр. Именно в играх, если видеокарта устарела и не тянет, вы начнете замечать притормаживания, картинка дергается, идет рывками, и играть становится очень не комфортно.

Чтобы увеличить количество FPS (это кол-во кадров в секунду, чем выше этот параметр - тем лучше!), выдаваемое видеокартой, можно прибегнуть к разным способам: разогнать видеокарту, уменьшить качество графики в настройках игры, задать оптимальные параметры драйвера видеокарты (с прицелом на производительность ). Вот о тонкой настройки видеокарты, я и напишу пару строк в этой статье...

Примечание! Возможно вам будут интересны следующие статьи по теме:

  • ускорение видеокарты AMD -
  • ускорение видеокарты IntelHD -
  • как узнать и повысить FPS в играх - несколько способов:

Тонкая настройка драйвера видеокарты NVIDIA // для повышения производительности

Важная заметка!

Многие пользователи трактуют и понимают понятие "производительность" совсем по разному. В этой статье я буду отталкиваться от параметра FPS (именно в нем мерить производительность). Чем выше FPS - тем выше производительность!

Чтобы измерить текущее количество FPS в вашей игре - рекомендую воспользоваться программой FRAPS (о ней я рассказывал в этой статье: ).

Задайте в настройках FRAPS кнопку для показа количества FPS - и в верхнем углу экрана, после запуска игры, вы увидите значение этого параметра. Кстати, рекомендую его запомнить, чтобы сравнить с показателем, который будет после нашей настройки видеокарты...

В левом углу экрана FRAPS показывает желтыми цифрами количество кадров в секунду - то есть FPS!

Как войти в панель управления NVIDIA

Первое, что нужно сделать - это войти в панель управления и настроек NVIDIA (GeForce). Сделать это можно разными путями: например, самый простой, это щелкнуть в любом месте рабочего стола правой кнопкой, и во всплывшем контекстном меню выбрать нужную ссылку (см. скриншот ниже).

Как войти в панель управления NVIDIA // GeForce - Способ №1: с рабочего стола

Еще один способ - это зайти в панель управления Windows, затем открыть раздел "Оборудование и звук" , в этом разделе должна быть заветная ссылка (см. скрин ниже).

Способ №2 - через панель управления Windows // панель управления NVIDIA

Если такой ссылки на настройки NVIDIA у вас нет - то вероятнее всего у вас просто не установлены драйвера. Многие пользователи, например, после установки Windows вообще не обновляют драйвера, и пользуются теми, что установила сама Windows... В принципе, ничего плохого в этом нет - просто вам будут недоступны многие функции, в том числе и тонкая настройка видеокарты.

утилиты для поиска и обновления драйверов -

Быстрая настройка NVIDIA с упором на производительность

В панели управления видеокартой откройте раздел "Параметры 3D/Регулировка настроек изображения" , далее поставьте ползунок в режим "Пользовательские настройки с упором на производительность" и двиньте его до конца в левую часть (см. показательный скриншот ниже).

После чего сохраните настройки и попробуйте запустить игру снова. Как правило, даже такая простая настойка помогает поднять количество FPS.

Глобальные параметры

Гораздо более продуктивно настроить видеокарту поможет раздел "Управление параметрами 3D" , где все основные параметры можно задать в ручном режиме.

Для повышения FPS в играх, нужно задать следующее:

  1. Анизотропная фильтрация : влияет на производительность видеокарты очень сильно, поэтому ее отключаем.
  2. Сглаживание прозрачности : помогает сделать в играх более качественную картинку воды (например). Ресурсов "ест" прилично, поэтому так же отключаем. Да и вообще, все сглаживания можно отключить !
  3. Тройная буферизация : выключаем;
  4. Вертикальная синхронизация (V-Sync) : параметр, в некоторых играх, влияет очень сильно на количество выдаваемых кадров, поэтому выключаем;
  5. Включить масштабируемые текстуры : нет;
  6. Ограничение расширения : выключаем;
  7. Режим управления электропитанием : ставим режим максимальной производительности;
  8. Максимальное количество заранее подготовленных кадров : 1;
  9. Ускорение нескольких дисплеев/смешанных ГП : Режим однодисплейной производительности;
  10. Фильтрация текстур (анизотропная оптимизация по выборке): выключаем;
  11. Фильтрация текстур (отрицательное отклонение УД): привязка;
  12. Фильтрация текстур (качество): ставим ползунок на производительность;
  13. Фильтрация текстур (трилинейная оптимизация): выключаем;
  14. Фильтрация текстур (анизотропная оптимизация фильтрацией): выключаем;
  15. Вертикальный синхроимпульс : ставим адаптивный;
  16. Потоковая оптимизация : выключаем;
  17. PhysX : ЦП.

Замечание! Некоторые режимы и параметры, перечисленные выше, могут отсутствовать в ваших настройках (либо называться несколько иначе ("трудности" перевода )). Все зависит от модели вашей видеокарты и версии драйвера (пример, как выглядит эта вкладка, показан на скриншоте ниже).

Панель управления NVIDIA: глобальные настройки

После введенных настроек не забудьте их сохранить, в некоторых случаях желательно перезагрузить компьютер, и только потом переходить к тестам (замеру FPS). Довольно часто производительность видеокарты вырастает существенно: до 15-20% (согласитесь, что без разгона и каких-то не было рискованных дел - ускорить на такой процент, весьма не плохо)!

Важно! Картинка в игре может несколько ухудшиться. Но такова плата: видеокарта начинает работать быстрее, экономя на качестве (ведь фильтры и сглаживания мы все отключили...). Но хочу заметить, что обычно, картинка хоть и становится хуже, но далеко не на столько, чтобы серьезно помешать вам приятно провести время за любимой игрой...

Программные настройки

Если у вас тормозит какая-то конкретная игра (а с остальными все в норме) - то есть смысл изменять не глобальные параметры, а параметры для отдельно взятого приложения! Дабы в настройках NVIDIA для этого есть специальная вкладка. Таким образом, с низким качеством графики у вас будет запускаться какая-то одна конкретная игра, а не все.

Сами параметры в этой вкладке нужно задавать аналогично тем, которые я приводил чуть выше.

Панель управления NVIDIA: программные настройки

Чтобы ускорить работу игр на вашем компьютере, дополнительно посоветую следующее:

На этом у меня всё, за дельные советы и дополнения - отдельное мерси. Удачи!




Top