amarao (amarao_san) wrote,
amarao
amarao_san

Categories:

Алгоритм построения перспективы

(ниже мои наивные рассуждения, которые могут быть в корне неверны).

Итак, первая вещь, которую надо сделать, это определить горизонт. Если выпрямиться и смотреть прямо перед собой, то в условиях земной гравитации, линия горизонта проходит строго посреди взгляда.

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

Выглядит это так:



Так как кадр ниже горизонта, то перспектива будет направлена "вверх", т.к. точки схождения двухточечной перспективы всегда на горизонте.

Следующий вопрос: как соотносится расстояние между точками на горизонте с размером кадра и его "высотой" до горизонта?

Вероятнее всего, оно зависит от расстояния и фокусного расстояния линзы. Так же интуитивно понятно, что при нормальных условиях (пейзажный рисунок) надо рисовать с экивалентом полтинника, то есть 120 градусов FOV'а.

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

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

Вот пример:


(извините за порванные ленты, так положено)

Рассмотрим другой экстримальный вариант:



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

Из всего этого я пока что для себя всё равно не определил, как правильно выставлять точки проекции, но кое-что в происходящем я таки понял.

Впрочем, можно сказать ещё одну интересную вещь, сравнивая кубики. На втором рисунке возникает ощущение, что кубик

а) большой
б) находится у нас почти под ногами.

А вот на первом рисунке как раз ощущение, что он вдалеке, и не очень ниже взгляда зрителя.

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

Таким образом, если мы говорим про коробку перед глазами, то нам не подходит ни один из вариантов - коробка не настолько ниже горизонта (2), но и она не настолько далеко от нас (1).

tbc
Tags: drawing, перспектива
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    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.
  • 2 comments