Рубрика «рендеринг»

Рендеринг текста: насколько сложным он может быть? Оказывается, невероятно сложным! Насколько мне известно, буквально ни одна система не выводит текст «идеально». Где-то лучше, где-то хуже.

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

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

Мы обсудим темы, которые не объединяются в рамках какой-то единой концепции, это просто вопросы, с которыми мне пришлось столкнуться за несколько лет работы над рендерингом текста в Firefox. Например, не будем слишком подробно обсуждать проблемы сегментации текста или управления различными текстовыми библиотеками для конкретной платформы, поскольку этим я не слишком интересуюсь.
Читать полностью »

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

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

image

Визуальный стиль моей находящейся в разработке игры LAUNDRY GAME (да, это бессовестная реклама) основан на больших чётких пикселях в 3D. Я обожаю 3D в низком разрешении. Мне задавали много вопросов о том, как я это сделал, поэтому я решил написать туториал.

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

Дополнение 1: умный парень Пит Брисбёрн отправил сюда скрипт на случай, если вам не понравится трюк с «quad в небе» (этапы 4-6)!
Читать полностью »

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

В первой части настроим FreeType и напишем простой рендерер символов в консоли.

Современный рендеринг текста в Linux: часть 1 - 1

Вот что мы будем писать. А вот и код.
Читать полностью »

image

Часть 1. Молнии

В этой части мы рассмотрим процесс рендеринга молний в Witcher 3: Wild Hunt.

Рендеринг молний выполняется немного позже эффекта занавес дождя, но всё равно происходит в проходе прямого рендеринга. Молнии можно увидеть на этом видео:

Они очень быстро исчезают, поэтому лучше просматривать видео на скорости 0.25.

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

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

[Первая и вторая части.]

Трассировка лучей на GPU в Unity — Часть 3 - 1

Сегодня мы совершим большой скачок. Мы отойдём от исключительно сферических конструкций и бесконечной плоскости, которые трассировали ранее, и добавим треугольники — всю суть современной компьютерной графики, элемент, из которого состоят все виртуальные миры. Если вы хотите продолжить с того, чем мы закончили в прошлый раз, то воспользуйтесь кодом из части 2. Готовый код того, что мы будем делать сегодня, выложен здесь. Давайте приступим!

Треугольники

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

Во-первых, нам нужно иметь возможность определять, пересекает ли луч треугольник, и если да, то в какой точке. Очень популярный (но совершенно точно не единственный) алгоритм для определения пересечений луча с треугольником был предложен в 1997 году джентльменами Томасом Акенин-Меллером и Беном Трембором. Подробно о нём можно прочитать в их статье «Fast, Minimum Storage Ray-Triangle Intersection» здесь.
Читать полностью »

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

Unity: отрисовываем множество полосок здоровья за один drawcall - 1

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

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

Метод, к которому я в результате пришёл, немного отличается от всего того, что я видел у других, и не использует вообще никаких классов UI (в том числе и Canvas), поэтому я решил задокументировать его для общества. А для тех, кто хочет изучить исходный код, я выложил его на Github.
Читать полностью »

image

Предисловие

После выхода последней игры из серии «Метро» я потратил несколько часов на изучение её внутренней работы и решил поделиться тем, что может показаться интересным с технологической точки зрения. Я не буду проводить подробный анализ или изучать дизассемблированный код шейдеров, а покажу высокоуровневые решения, принятые разработчиками в процессе создания игры.

На данный момент разработчики ещё не рассказывали об использованных в игре техниках рендеринга. Единственным официальным источником информации является доклад с GDC, который нельзя больше найти нигде в Интернете. И это досадно, ведь игра работает на очень интересном собственном движке, эволюционировавшем из предыдущих игр серии «Метро». Это одна из первых игр, в которых используется DXR.

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

Первые шаги

На поиск среды, способной работать с этой игрой, у меня ушло несколько дней. Протестировав несколько версий RenderDoc и PIX, я остановился на изучении результатов трассировки лучей с помощью Nvidia NSight. Я хотел изучать рендеринг без функций raytracing, но NSight позволял исследовать подробности и этой функции, поэтому я решил оставить её включённой. Для всего остального рендеринга вполне подошёл PIX. Скриншоты сделаны с помощью обоих приложений.
Читать полностью »

Джои Ленц из Naughty Dog подробно рассказал нам об освещении в UE4: о значениях, источниках, световой температуре, освещении в PBR, ресурсах, по которым можно изучать освещение, а также обо многом другом. На официальном сайте Джои polyplant.co есть множество полезных советов о работе с освещением.

Энциклопедия освещения художника Naughty Dog - 1

Про PBR

PBR (physically-based rendering, основанный на физике рендеринг) благодаря использованию замеренных данных реального мира предоставляет удобные средства для создания материалов/освещения с предсказуемыми, неизменными результатами при разных условиях освещения. Для студий разработки игр это означает, что их художники могут тратить меньше времени на итерации создания контента и его переработку для создания «корректного» внешнего вида в разных уровнях. В свою очередь, это экономит студиям деньги. На освоение PBR художникам, привыкшим к старым методологиям, потребуется какое-то время. Иногда сложнее всего им избавиться от привычки добавления в albedo-текстуры информации об освещении/затенении. Однако как только они освоятся с этим рабочим процессом, то быстро понимают, что им гораздо проще управлять, чем традиционными средствами рендеринга текстур.
Читать полностью »

Несмотря на рост производительности устройств, веб становится всё более требовательным к памяти и процессору. Правильный рендеринг и умное распределение ресурсов по вкладкам — важная часть решения этой проблемы. Константин Крамлих посвятил своё выступление на конференции «Я Frontend» алгоритмам, которые улучшают производительность и экономят ресурсы как в проекте Chromium, так и в Яндекс.Браузере.

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

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

— Меня зовут Костя, я руководитель группы разработки внутренних компонентов в команде Яндекс.Браузера. В Браузере я чуть больше пяти лет, занимался разными вещами: от всего декодирования в браузере, всех HTML5-видео, до отрисовки, рендеринга и других подобных процессов.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js