Pull to refresh
38
0
Сергей @SergeySib

User

Send message

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

Reading time8 min
Views1.9K

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments0

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

Reading time12 min
Views3.2K

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

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

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments7

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

Reading time10 min
Views4.7K

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


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

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

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

Reading time11 min
Views8.8K

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


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

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments5

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

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

image

Предлагаю вашему вниманию перевод статьи, которая детально объясняет причину этого феномена и способ борьбы с ним.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments2

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

Reading time6 min
Views41K

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


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

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

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

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



Повествование будет вестись на примере небольшой демки, которая генерирует сцену как на картинке выше. Мы пройдём увлекательное путешествие от подготовки данных на CPU до записи значений цвета на выход фрагментного шейдера.
Читать дальше →
Total votes 52: ↑51 and ↓1+50
Comments14

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

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

image

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

Information

Rating
Does not participate
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity