Анизотропная фильтрация нужна для повышение четкости изображения 3д объектов относительно камеры (персонажа, машины и т.д). Выставляем значение Application-controlled (Управление от приложения) - это означает, что приложение будет автоматически выбирать нужный режим анизотропной фильтрации или же фильтрация управляется в самом приложении (программе, игре), чем выше значение фильтрации, тем четче будет изображение.
Для каждого приложения данный параметр можно настроить отдельно (вкладка программные настройки), получив более высокое качество, если приложение не поддерживает или некорректно обрабатывает анизотропную фильтрацию.
Antialising Mode (Сглаживание - режим) - ставим значение Application-controlled (Управление от приложения)
Очень важный параметр, включения режима сглаживания дает возможность избавления от эффекта лесенок на трехмерном объекте. Выставляем значение Application-controlled (Управление от приложения). - это означает что приложение будет автоматически выбирать нужный режим сглаживания или же сглаживание будет управляется в самом приложении (программе, игре), чем выше значение сглаживание, тем меньше эффекта лесенок будет изображение, тем ниже будет производительность приложения, тем меньше будет кадров в секунду.
Для каждого приложения данный параметр можно настроить отдельно (вкладка программные настройки), при этом вам станет доступен пункт Antialising Setting (Сглаживание - параметры), где вы сможете вручную задать уровень сглаживания от 2х до 16х. Даже если приложение не поддерживает сглаживание, это будет делать за него сам драйвер видеокарты.
Vertical sync (Вертикальный синхроимпульс - значение Force off (Отключить)
Вертикальная синхронизация кадров, через вертикальный синхроимпульс синхронизируется количество кадров в секунду с частотой обновления вашего монитора, тем самым убирая некий эффект "разрыва картинки" (на экране это будет выглядеть, например, при резком повороте камеры, будто верхняя часть экрана чуть уехала в сторону, по отношению к нижней), при быстрой смене кадров. При этом, за частую сильно падает FPS (кол-во кадров в секунду), оно не столь значительно падает, только если у вас монитор обновляется с частотой выше 100-120 Гц в секунду, но даже при такой частоте все равно FPS снижается на 10-15%. Ставим значение Off (Выкл), тем самым отключая ненужную вертикальную синхронизацию. На производительность влияет негативно.
Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий
К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.
В этом примере демонстрируется создание текстуры в 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® и ЦП вместе используют общую память. Их взаимоотношение показано на рисунке 1. Существует несколько архитектурных механизмов (не показанных на этом рисунке), расширяющих возможности подсистемы памяти. Например, для повышения производительности подсистемы памяти применяются иерархии кэша, сэмплеры, элементарные операции, очереди чтения и записи.
Рисунок 1. Взаимоотношения между ЦП, ГП Intel ® и основной памятью. Обратите внимание, что ЦП и ГП используют общий пул памяти (в отличие от дискретных ГП с собственной выделенной памятью, управление которой осуществляет драйвер)
«Основное преимущество использования объекта буфера для промежуточного хранения данных текстуры состоит в том, что передача из объекта буфера в текстуру не должна обязательно происходить немедленно, если она происходит до момента, когда данные требуются шейдеру. Это позволяет осуществлять передачу параллельно с выполнением приложения. Если же данные находятся в памяти приложения, то семантика glTexSubImage 2 D () требует, чтобы перед возвратом функции была создана копия данных , благодаря чему исключается параллельная передача. Преимущество такого подхода состоит в том, что приложение может свободно изменять данные, переданные в функцию, сразу после возврата функции».
Обратите внимание, что смысл этого вызова API заключается в общем доступе между памятью приложения (т. е. памятью ЦП) и ГП, а не в общем доступе между двумя API, каждый из которых выполняет свой поток команд на одном и том же устройстве и одной и той же физической памяти, как показано на рисунке 1.
Использование объектов PBO на самом деле приводит к снижению производительности на устройствах, где используется общая физическая память. Во-первых, объект РВО - это дополнительная промежуточная область, что означает увеличение объема памяти, потребляемого приложением. Во-вторых, данные в РВО хранятся в линейном виде, а если данные требуются в сегментированном виде, как, например, в текстурах OpenGL или в изображениях OpenCL, то приходится преобразовывать данные в нужный формат. И наконец, копирование между двумя API занимает определенное время, что также отрицательно сказывается на производительности приложения.
В случае общего доступа с дискретным ГП использование объектов РВО вполне целесообразно: можно запустить передачу DMA, работающую асинхронно по отношению к ЦП. Без РВО семантика OpenGL требует синхронной записи и дожидается возвращения результата, что также снижает производительность. В нашем случае нет передачи данных из ЦП в подсистему памяти ГП.
Существуют сценарии, когда имеет смысл применять объекты РВО. Например, если не существует подходящего формата поверхностей, совместимого с OpenGL и OpenCL согласно таблице 9.4 в спецификации расширений OpenCL. В этом случае можно создать РВО и предоставить к нему общий доступ для API, связанных с общим доступом к буферу. Тем не менее старайтесь избегать таких сценариев, чтобы не допустить снижения производительности, о котором было сказано выше. Если это необходимо, см. пример Максима Шевцова, ссылка на который приводится в разделе справочных материалов.
Во время выполнения важно добиться наивысшей производительности OpenCL и OpenGL. В спецификации сказано следующее:
«Перед вызовом объектов clEnqueueAcquireGLObjects приложение должно убедиться в завершении всех отложенных операций GL , располагающих доступом к объектам, указанным в mem _ objects . Чтобы сделать это с сохранением переносимости, можно выполнить и дождаться завершения команды glFinish для всех контекстов GL с отложенными ссылками на эти объекты. В разных реализациях могут быть доступны более эффективные методы синхронизации. Например, на некоторых платформах может оказаться достаточно вызвать glFlush , или же синхронизация может быть неявной внутри потока, или могут быть поддерживаемые данным поставщиком расширения, позволяющие разграничивать поток команд GL и дожидаться завершения каждой части в очереди команд CL . Обратите внимание, что в данный момент единственным методом синхронизации, поддерживающим перенос между различными реализациями OpenGL , является glFinish ».
Для наибольшей переносимости, согласно спецификации, нужно вызывать glFinish () , но это блокирующий вызов! На ГП Intel будет эффективнее использовать неявную синхронизацию или объекты синхронизации между OpenCL и OpenGL с расширением cl _ khr _ gl _ events . Подробнее это будет описано ниже. Использование неявной синхронизации не является обязательным. В образце кода содержатся закомментированные фрагменты, которые можно задействовать, если нужно использовать неявную синхронизацию.
Сначала опишем этапы, необходимые для поддержки общего доступа к поверхностям при инициализации, выполнении и завершении работы. Затем более подробно опишем API и синтаксис языка. И наконец, мы расскажем, как можно развить эти идеи, чтобы охватить другие форматы текстур, выходящие за рамки данного примера. Мы используем общедоступную библиотеку freeglut для управления окнами, а также библиотеку glew . Использование этих библиотек является стандартной практикой в образцах приложений OpenGL, поэтому мы не будем описывать их подробнее.
Инициализация
Шаги 1 и 2 можно поменять местами. Шаг 3 должен следовать за шагами 1 и 2.
Запись на общую поверхность в OpenCL
Шаги 1, 2 и 3 должны следовать в указанном порядке.
Цикл
Эта статья посвящена общему доступу к ресурсам между ЦП и ГП. Цикл рендеринга использует простой проход через программируемый шейдер вертексов и пикселей для создания текстурной карты для двух треугольников, образующих вместе четырехугольник. Этот четырехугольник не занимает полный экран, чтобы был виден цвет фона.
Завершение работы
В этом разделе приводятся подробные сведения об этапах, описанных в предыдущем разделе.
Инициализация
Не все реализации OpenCL поддерживают общий доступ к поверхностям OpenCL и OpenGL, поэтому сначала нужно определить, есть ли вообще в системе нужное расширение. Мы последовательно перебираем платформы, чтобы найти строку расширения для платформы, поддерживающей общий доступ к поверхностям. Внимательное изучение спецификации показывает, что это расширение платформы, а не устройства. Затем мы создаем контекст, который нужно будет опросить, чтобы определить, какие из наших устройств в контексте поддерживают общий доступ к контексту OpenGL.
Этот пример поддерживается только на ГП Intel, но можно без особых усилий реализовать поддержку и других ГП. Нужное нам расширение - cl _ khr _ gl _ sharing . Вот соответствующий фрагмент кода. char extension_string; memset(extension_string, "
Вопрос одного из пользователей
Доброго времени суток. Можно ли как-то повысить производительность видеокарты NVIDIA (GeForce), то бишь увеличить FPS? Видеокарта у меня уже довольно старая, а запустить парочку игр - желание не преодолимое ...
Здравствуйте!
99% вопросов по поводу производительности видеокарты задают любители игр. Именно в играх, если видеокарта устарела и не тянет, вы начнете замечать притормаживания, картинка дергается, идет рывками, и играть становится очень не комфортно.
Чтобы увеличить количество FPS (это кол-во кадров в секунду, чем выше этот параметр - тем лучше!), выдаваемое видеокартой, можно прибегнуть к разным способам: разогнать видеокарту, уменьшить качество графики в настройках игры, задать оптимальные параметры драйвера видеокарты (с прицелом на производительность ). Вот о тонкой настройки видеокарты, я и напишу пару строк в этой статье...
Примечание! Возможно вам будут интересны следующие статьи по теме:
Важная заметка!
Многие пользователи трактуют и понимают понятие "производительность" совсем по разному. В этой статье я буду отталкиваться от параметра 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 в играх, нужно задать следующее:
Замечание! Некоторые режимы и параметры, перечисленные выше, могут отсутствовать в ваших настройках (либо называться несколько иначе ("трудности" перевода )). Все зависит от модели вашей видеокарты и версии драйвера (пример, как выглядит эта вкладка, показан на скриншоте ниже).
Панель управления NVIDIA: глобальные настройки
После введенных настроек не забудьте их сохранить, в некоторых случаях желательно перезагрузить компьютер, и только потом переходить к тестам (замеру FPS). Довольно часто производительность видеокарты вырастает существенно: до 15-20% (согласитесь, что без разгона и каких-то не было рискованных дел - ускорить на такой процент, весьма не плохо)!
Важно! Картинка в игре может несколько ухудшиться. Но такова плата: видеокарта начинает работать быстрее, экономя на качестве (ведь фильтры и сглаживания мы все отключили...). Но хочу заметить, что обычно, картинка хоть и становится хуже, но далеко не на столько, чтобы серьезно помешать вам приятно провести время за любимой игрой...
Программные настройки
Если у вас тормозит какая-то конкретная игра (а с остальными все в норме) - то есть смысл изменять не глобальные параметры, а параметры для отдельно взятого приложения! Дабы в настройках NVIDIA для этого есть специальная вкладка. Таким образом, с низким качеством графики у вас будет запускаться какая-то одна конкретная игра, а не все.
Сами параметры в этой вкладке нужно задавать аналогично тем, которые я приводил чуть выше.
Панель управления NVIDIA: программные настройки
Чтобы ускорить работу игр на вашем компьютере, дополнительно посоветую следующее:
На этом у меня всё, за дельные советы и дополнения - отдельное мерси. Удачи!
Производительность любой видеокарты можно увеличить не только изменением аппаратной части, но и программной. В первом случае речь идет о ее разгоне, однако это может плохо закончиться для самой карты. Поэтому изменение программного обеспечения как является самым оптимальным вариантом. Он позволяет "безболезненно" для чипа повысить его производительность. Но перед тем как настроить видеокарту Nvidia, нужно точно узнать ее модель.
Определить модель используемой в системе видеокарты можно разными способами. Самый простой из них:
Также точно определить модель позволит программа Aida64. Она распространяется платно в интернете, но есть и бесплатная версия с урезанными функциями. Нам бесплатная версия вполне подойдет. Скачайте ее с официального сайта и установите. Запустите, и во вкладке "Графический процессор" будет указана модель вашей карты.
Перед тем как настроить видеокарту Nvidia, обязательно нужно установить соответствующий драйвер. Мы узнали модель нашей графики, поэтому теперь сможем скачать для нее нужный драйвер. Обязательно качать его нужно с официального сайта. Где, выбрав раздел "Поддержка", необходимо кликнуть на "Драйверы". Там нужно указать "Тип продукта" (в нашем случае GeForce), операционную систему, а также серию и семейство. Все это мы знаем из названия видеокарты, которое только что определили.
Скачиваете драйвер и устанавливаете его - в этом нет ничего сложного. Как минимум, если ранее стоял неправильный или устаревший драйвер, то новое программное обеспечение уже может повысить производительность вашей графики.
С установкой нового драйвера автоматически устанавливается программа настройки. Там мы можем изменять параметры, выбирать режим работы видеокарты в играх или при просмотре видео и т. д. И если не знаете, как правильно настроить видеокарту Nvidia, то эта программа обязательно поможет.
Обычно центр управления Nvidia открывается с рабочего стола. Жмем правой кнопкой по рабочему столу и выбираем "Панель управления Nvidia". Там нам необходимо выбрать пункт "Управление 3D-параметрами". В этом разделе находятся ключевые такие как фильтрация текстур, буферизация, синхронизация и т. д.
Самый первый параметр называется "Анизотропная оптимизация", и при его активации повышается четкость 3D-объектов. Чем выше будет значение фильтрации, тем будет выше четкость объектов в приложении 3D (игре), однако это будет требовать немного больше ресурсов графики. Обычно данный параметр настраивается в самой игре, однако можно его отключить в настройках видеокарты, и тогда он будет игнорироваться в играх.
Стоит отметить, что фильтрация текстур хоть и оказывает влияние на производительность, но небольшое. Другие параметры влияют сильнее.
Трилинейная оптимизация - эту опцию нужно установить на значение "Выкл". Ее выключение позволяет драйверу понижать качество трилинейной фильтрации, и это оказывает хорошее влияние на увеличение производительности. Данная фильтрация представляет собой более совершенный вариант билинейной. Но отключение этой опции скажется на визуальной составляющей игры или другого 3D-приложения.
Также обращаем внимание на опцию Она имеет настройку: 2x, 4x, 8x, 16x. Чем выше будет значение, тем более естественно будут выглядеть текстуры в игре. Но, как уже поняли, более высокое значение предполагает больший ресурс графики.
Тройная буферизация - одна из разновидности двойной буферизации. Технология позволяет избежать или, как минимум, уменьшить количество артефактов графики. Стоит установить значение этого параметра на "Выкл", чтобы слегка увеличить производительность.
В опции "Фильтрация текстур" будут доступны варианты выбора "Качество" и "Производительность". Выбираем "Производительность" - это снизит качество фильтрации текстур, но прибавит в скорости обработки.
Это самые основные настройки, которые позволяют добиться более высокой скорости обработки данных видеокартой. Есть и второстепенные:
После того как настроить производительность видеокарты Nvidia удалось, все изменения нужно сохранить. Сразу отметим, что на разных моделях видеокарт эти настройки могут называться или выглядеть немного по-разному, также количество опций для выборки может быть больше или меньше. Однако идея в целом заключается в том, чтобы отключить указанные выше технологии.
Да, качество картинки в играх сильно упадет, но чем-то приходится жертвовать. Пользователи, которые знают, как настроить видеокарту Nvidia GeForce, никогда не отрубают все опции сразу. И вы тоже сразу не отключайте все указанные выше параметры. Испытывайте их по одному и смотрите, насколько сильно поднимается FPS в игре, исчезают ли "фризы" и "тормоза". Если после отключения двух-трех параметров вы сможете добиться нормальной работы игры без зависаний, то отключать остальные параметры в ущерб графике не стоит.
Теперь вы знаете, как правильно настроить видеокарту Nvidia, и сможете это сделать самостоятельно.
Привет, меня зовут Тони Элбрект (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 нужно рендерить гораздо больше, чем модель и текстуру персонажа. Давайте рассмотрим этапы, составляющие рендеринг следующей сцены:
В конце мы размываем тени, чтобы придать им красивую плавную границу (вместе с недавно добавленной оптимизацией , повышающей частоту кадров). В результате мы получаем текстуру, которую можно наложить на статичную геометрию для получения эффекта теней.
Заметьте, что тени миньонов и туман войны заползают на края сцены. Рендерер Ущелья призывателей (Summoner"s Rift) не рендерит динамических теней для статичной геометрии. Поскольку основной источник света не перемещается, мы запекаем тени статичных сеток на их текстурах. Это даёт художникам больше контроля над внешним видом карты, а также позволяет повысить производительность (не требуется рендеринг теней статичных сеток). Тени отбрасывают только миньоны, башни и чемпионы.
Каждая анимированная сетка состоит из скелета (каркаса из иерархически соединённых костей) и из сетки треугольников (см. выше изображение Гарена). Каждая вершина каждого треугольника привязана к одной-четырём костям, поэтому при перемещении костей вершины перемещаются с ними как кожа (skin). Поэтому их называют «сетками со скиннингом». Наши талантливые художники создают анимации и сетки для всех объектов, а потом экспортируют их в формат, который загружается в League при запуске игры.
На изображениях выше показаны все кости сетки Гарена. На изображении слева показаны все его кости (с названиями). На изображении справа голубым показаны выбранные вершины, а жёлтыми линиями показаны связи с костями, управляющие их положением.
Шейдеры сеток со скиннингом не просто рисуют сетки со скиннингом в буфер кадра, они также рендерят в другой буфер их отмасштабированную глубину, которую мы позже используем для отрисовки контуров. Кроме того, шейдеры скиннинга выполняют расчёт отражений Френеля, излучаемого освещения, вычисляют отражения и изменяют освещение для тумана войны.
Контуры создаются получением отмасштабированной глубины из предыдущего этапа и её обработкой оператором Собеля для извлечения грани, которую мы рендерим на сетке со скиннингом. Эта операция выполняется отдельно для каждой сетки. Также существует метод возврата, использующий буфер шаблонов для графических процессоров, которые не могут выполнять рендеринг нескольких объектов одновременно.
Вот кадр без воды и травы, просто статичная фоновая геометрия и несколько сеток со скиннингом.
Заметьте, что тени травы уже являются частью текстуры статичного рельефа и не рендерятся динамически. Затем мы добавляем траву:
Пучки травы на самом деле являются сетками со скиннингом. Это позволяет нам анимировать их при прохождении по ним персонажей и придать приятное колыхание от ветерка в Ущелье призывателей.
Для усиления эффекта воды (он может быть слишком слабым) я сохранил прозрачность воды и проигнорировал геометрию под ней. Это подчеркнуло эффекты воды, чтобы мы могли лучше учитывать их в анализе.
Выделив всю рябь как «проволочные» каркасы, мы получим:
Теперь мы чётко можем видеть эффекты воды по берегам реки, а также вокруг камней и кувшинок.
При нормальном рендеринге и анимации вода выглядит следующим образом:
Если мы рассмотрим только частицы (отключив всю фоновую сцену), то получим следующую картину:
Отрендерив треугольники, составляющие частицы, фиолетовыми контурами (без текстур, только геометрию), мы получим следующее:
Если отрисовывать частицы нормально, то мы получим более знакомый вид.
Изображение слева - это миньон до FXAA, а справа - после сглаживания. Заметьте, как сглаживаются края объекта.
После завершения прохода FXAA мы выполняем проход гамма-коррекции, позволяющий отрегулировать яркость сцены. В качестве оптимизации мы недавно добавили эффект снижения насыщенности экрана смерти в проход гамма-коррекции , что позволило избавиться от необходимости замены всех шейдеров текущих видимых сеток для вариантов смертей, у которых раньше насыщенность снижалась отдельно.
И мы получаем полностью отрендеренную сцену. Во всей сцене содержится около 200 000 треугольников, 90 000 из них используется под частицы. 28 миллионов пикселей отрисовываются за 695 вызовов отрисовки. Чтобы в игру можно было играть, вся эта работа должна выполняться как можно быстрее. Чтобы достичь 60 и более кадров в секунду, все этапы нужно пройти менее чем за 16,66 миллисекунд. И это только расчёты на стороне графического процессора: вся игровая логика, обработка ввода игрока, столкновения, обработка частиц, анимации и отправка команд на рендеринг тоже должны выполняться за это же время в центральном процессоре. Если вы играете с 300 fps, то всё происходит меньше чем за 3,3 миллисекунды!