amarao_san

Category:

Цилиндрическое (5)

Итак, с рисованием цилиндра разобрались. Я поэкспериментировал в набросках — большая ось 2D эллипса всегда перпендикулярна 3D-линии центральной симметрии цилиндра. Вероятнее всего, она же — 2D линия симметрии, но это надо проверять.

А вот дальше я поймал себя на большой ошибке. Я начал делать долгий рисунок — и чуть-чуть не совершил её.

Если сам цилиндр после рисунка вопросов не вызывает, то его тень — очень даже. Причём речь не столько про тень, сколько про место касания цилиндром поверхности.

Вот так вот выглядит наивная ошибка:

Цилиндр — Blender'овский рендер, тень — честно подрисованные штрихи в Inkscape. Основа наивной ошибки — тень начинается от самой нижней точки "поверхности". На переднем плане — это низ эллипса, на заднем — точка перелома с боковой стороны на задний эллипс.

Эта ошибка становится более режущей глаз, если у нас усиливается проекция и ракурс.

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

Из того, что описывающий параллелепипед потерял свободу вращения вытекает то, что в общем случае большая ось 2D эллипса не параллельна ни одной из сторон 2D-параллелограма. А мы легко можем показать, что цилиндр касается плоскости снизу в точке, которая лежит в середине (3D-середине) нижнего ребра (основной аргумент — симметрия фигуры). Поскольку 3D-середина в проекции оказывается не в центре 2D-середины границы параллелограмма, и не параллельна большой оси эллипса, это вызывает сложность с тенью. По понятным же причинам тень начинается из прямой "под" цилиндром" (прямой соприкосновения цилиндра и плоскости).

Я буду называть линии, проходящие через точки соприкосновения цилиндра с поверхностью под углом в 90° "нормалями соприкосновения".

Так вот, в 2D (в условиях проекции) передняя и задние нормали соприкосновения (передний и задний эллипсы) не параллельны.

Это приводит к тому, что спереди и сзади начало тени (относительно самого края эллипса в 2D) начинаются в разных местах. Сама тень при этом подвергается проекционному искажению ровно так же, как и любые другие прямоугольники.

Попробуем это исправить:

Уже лучше. Однако, тень (мы предполагаем точеченый источник света на бесконечности, строго посредине цилиндра) имеет странную форму.

Почему? Потому что я использовал штрихи одинаковой длины. Размер тени не зависит от формы фигуры в тени, она зависит только от формы фигуры, которая заслоняет свет (и фигуры, на которую тень падает, но это следующий вопрос).

При том, что форма тени неверная, начало и конец тени — верные. Можно даже объяснить как найти начало тени. Как только мы определили направление света, тень должна уйти "под" цилиндр и продолжиться (пусть даже и воображаемо) дальше как прямая. Задав угол тени мы автоматически задали точку, в которой она заканчивается — это там, где линия тени является касательной к эллипсу.

А угол тени не является произвольным. В IRL с множеством источников света и переотражениями лучше ориентироваться на "что глаза видят", но для идеализированной ситуации, которую я описываю, угол тени равен углу проекции (горизонтальным линиям схождения).

Вот так вот выглядит тень "идеализированного точеченого источника света" — ровный прямоугольник (у меня свет не в бесконечности, так что он слегка расширяется). 

Я не знаю, баг blender'а это или реальная физика, но я в жизни "ушек" у тени не видел.

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


Разумеется, если источник тени под углом, мы получаем фигуру с эллипсами:


Большая ось в этом случае совпадает с линиями схождения, так же как и прямая, проходящая через центры этих эллипсов (она уходит в левую точку схождения, туда, куда сходятся линии цилиндра и его тени).

Среди всего этого основное, что нужно запомнить — тень у цилиндра "начинается" не от точки пересечения оси эллипса с эллипсом, а от передней линии описывающего параллелепипеда (точнее, его боковой грани). 

Error

default userpic

Your IP address will be recorded 

When you submit the form an invisible reCAPTCHA check will be performed.
You must follow the Privacy Policy and Google Terms of use.