2021-06-16 20:11:05
Репост пользователя Антон Айзенберг:
#таксебемысль 24
про теорию представлений или зачем 3d-моделеры ссылаются на квантовую химию.
Решил тут вкусного написать, но надо как-то это упорядочить. Окей, начнем с относительно общеизвестных вещей, а 3d-графон пойдет потом.
В школьной химии нас учили заполнять электронные орбитали атомов: 1 квадратик, 1+3 квадратика, 1+3+5 квадратиков, 1+3+5+7 квадратиков, мы туда радостно рисуем стрелочки (но не больше двух на квадратик!) и с умным видом говорим про форму орбиталей, представляя себе трехмерные блямбы из учебника.
Сильно позже, - и только при условии выживания на первых курсах, и сохранения здравого рассудка на последних, - мы узнаём, что последовательность 1,4,9,16,... - это размерности собственных подпространств оператора Шрёдингера с центрально симметричным квадратично убывающим потенциалом, 1,3,5,7,... - это размерности неприводимых представлений SO(3), на которые разлагается каждое собственное подпространство, стрелочек в квадратик умещается 2 - потому что SO(3) двулистно накрывается группой SU(2), aka 3-сферой единичных кватернионов. А блямбы - это просто визуализация сферических гармоник, домноженных на какую-то радиальную функцию.
Хотя математика тут прекрасна, простому человеку, не связанному с квантовой химией или физикой, это, казалось бы, не особо нужно. Но у любой хорошей математической истории есть продолжение.
В жаргоне 3d-моделлеров и дизайнеров игр есть одно странное слово - "запекание". Попробую объяснить, как я это понимаю для чайников вроде себя самого. При отрисовке 3d-объекта на экране мы для каждого экранного пикселя определяем его цвет, для этого мы определяем какому треугольнику 3d-объекта он соответствует, какие у него барицентрические координаты, какой точке на текстурной развертке эти координаты соответствуют, и берем цвет этой текстурной точки. Если у вас была стереометрия, и была по ней пятерка, то базовую машинерию рендеринга вы поймете без труда.
То, что описано выше, - будет, конечно, полным говнищем: потому что мы не учли тени, блики и прочие очевидные элементы художественной 3d-выразительности. Чтобы добавить красоты, мы добавляем в объемную сцену свет: например, в виде бесконечно удаленного источника, то есть просто вектора. Теперь мы можем сделать наш пиксель ярче, если в точке 3d-объекта, которой он соответствует, нормаль к поверхности почти параллельна вектору света. А если эти два вектора составляют угол меньше 90 градусов, то это теневая сторона объекта, и наш пиксель нужно затемнить.
Отлично. Простое рассмотрение нормали в каждой точке дало нам базовые 3d-эффекты. Нормали можно нехитро рассчитать, тут есть два варианта. Если мы хотим рисовать угловатые многогранники, то мы просто для каждого треугольника считаем его настоящую геометрическую нормаль: векторное произведение его сторон. Если мы хотим работать с гладенькими объектами, то нужно нормали непрерывно интерполировать. Для этого мы: (1) снабжаем каждый треугольник настоящей геометрической нормалью (2) для каждой вершины рассчитываем ее "нормаль" как среднее арифметическое нормалей треугольников, которые содержат вершину, (3) для точки треугольника в качестве нормали берем барицентрическое взвешенное "нормалей" его вершин.
Математически - получается функция, заданная на поверхности 3d-объекта и возвращающая 3-мерный вектор. В первом случае - она разрывная, а во-втором - непрерывная (но не гладкая). Тем не менее, во втором случае получаются вполне сносные эффекты: шар кажется круглым, как и блики на его поверхности, хотя реально сделан из треугольничков.
130 views17:11