Обновить
37
0
Сергей @SergeySib

Пользователь

Отправить сообщение

Вычисление касательного базиса налету

Время на прочтение8 мин
Количество просмотров2.2K

Этот пост написан автором в далёком 2013 году как дополнение к статье из 2006 года. Тем не менее, предпосылки к отказу от хранения предрассчитанных касательных справедливы и в 2022, а вывод формул изложен понятно и без излишеств. В наше время расчёт касательных для каждого пикселя обычно работает быстрее чем их выборка из буфера вершин. Давайте же разберёмся как из интерполированной нормали, координат вершины и текстурных координат сделать правильный базис касательного пространства прямо во фрагментном шейдере.

Читать далее

Нормали и обратное транспонирование, часть 3: внешняя алгебра над сопряжённым пространством

Время на прочтение12 мин
Количество просмотров3.8K

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

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

Читать далее

Нормали и обратное транспонирование, часть 2: сопряжённые пространства

Время на прочтение10 мин
Количество просмотров6.1K

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


Но некоторые вопросы были заметены под ковёр.

Читать дальше →

Нормали и обратное транспонирование, часть 1: внешняя алгебра

Время на прочтение11 мин
Количество просмотров11K

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


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

Читать дальше →

GLSL: Центр или центроид? Или когда шейдеры атакуют

Время на прочтение5 мин
Количество просмотров6.3K
Дорабатывая шейдер для готовящейся к выходу игры, я столкнулся с неприятным артефактом, который проявляется только при включении аппаратного MSAA. На скриншоте ландшафта видно несколько чересчур ярких пикселей. Значения цвета в нескольких из них было настолько велико, что после наложения блума они превратились в разноцветных «призраков».

image

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

Что не так с std::visit в современном C++

Время на прочтение6 мин
Количество просмотров45K

Сигма-тип и вы


Давайте поговорим о простой, но мощной концепции в программировании — сигма-типах.

Сигма-тип (тип-сумма, меченное объединение) может содержать значения одного и только одного из нескольких типов. Например, рассмотрим настройки в INI-подобном файле конфигурации. Пусть каждая настройка может быть строкой, целым или булевым значением. Если бы мы хотели сделать свою библиотеку на C++, мы бы написали что-то вроде этого:
Читать дальше →

Процедурная растительность на OpenGL и GLSL

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



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

Direct3D vs OpenGL: история противостояния

Время на прочтение13 мин
Количество просмотров52K
По сей день в Интернете можно встретить споры о том, какой же графический API лучше: Direct3D или OpenGL? Несмотря на свой религиозный характер, такие словесные баталии приносят полезный результат в виде неплохих исторических обзоров развития аппаратно-ускоренной графики.

image

Целью данного поста является перевод одного из таких экскурсов в историю, написанного Джейсоном МакКессоном (Jason L. McKesson) в ответ на вопрос «Почему разработчики игр предпочитают Windows». Этот текст вряд ли отвечает на поставленный вопрос, но историю развития и противостояния двух самых популярных графических API он описывает очень красочно и довольно подробно, поэтому в переводе я сохранил авторскую разметку. Текст написан в середине 2011 года и охватывает промежуток времени, начинающийся незадолго до появления Direct3D и до момента написания. Автор оригинального текста является опытным разработчиком игр, активным участником StackOverflow и создателем обширного учебника о современном программировании 3D-графики. Итак, предоставим слово Джейсону.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Красноярск, Красноярский край, Россия
Дата рождения
Зарегистрирован
Активность