Publish @AND, @Joker: Fun with polarizers

Дима Андреев из Visceral Games и Сергей Макеев из mail.ru рассказывают про домашние эксперименты с поляризаторами – как можно посмотреть на составляющие освещения реальных объектов отдельно друг от друга. Physically based rendering – модный тренд в реалтайм-графике: материалы и варианты их применения становятся все сложнее, и мысль о том, что вместо ручной настройки для каждого случая можно положиться на физическую корректность, очень притягательна.
Но для этого надо понимать, как эта физика освещения устроена и как работает в жизни.

В посте интересные картинки и отсылки к статьям, к прочтению рекомендуется.

People in this conversation:
Boris Batkin Add
i press buttons for living. u can call me god
Sergey Makeev (Joker) Add
Mail.ru games – Technical Director (Client).
Previously: Akella, 1C.
Freelance: Gaijin, IceHill, DAT
Alexey Vlasov (_All) Add
Skyfallen, Mail Ru, Arktos Entertainment Art Director
Personal Site http://all.scan3d.ru/
CV
Dmitry Andreev (AND) Add
DeadSpace 3 rendering @ Visceral Games, ex.LucasArts, ex.10Tacle Studios Belgium, ex.Burut CT.
http://and.intercon.ru
Ivan Gavrenkov Add
Работал в CREAT Studios, потом в Японии в tri-Ace, Square-Enix. Сейчас в Sony Santa Monica.
Pavel Nakaznenko (Crio) Add
Programmer (Xbox 360, PS3, PC)
at Darkside Games Studio
http://dtf.ru/person/cv.php?id=835

AND: Вчера наконец-то дошли руки до “поиграться с поляризаторами”. Джон Хобл про подобное писал как-то. Ну вот я натырил очков их IMAX 3D (есть еще с Real3D). Один ставил на источник света, другой вертелся на камере. Результаты, конечно, очень интересные. Пока еще не все отфильтровал. Но из сюрпризов (того чего я не ожидал) два. 1 – листья растений имеют красноватый спекуляр (обычно только металлы окрашивают спекуляр). 2 – кожа (черная) и резина (автомобильные покрышки) диффузного компонента вообще не имеют. Т.е. он полностью черный. Все освещение спекулярное (единичное отражение)
еще выяснил что Macbeth/x-rite color checker и prospec 18% gray card спекулярят достаточно сильно. Так что с ними аккуратно нужно, особенно на солнце. Ставить под углом немного чтобы отражало от камеры.

_All: Я когда пилил стартап про тридесканирование надо было получать текстур без спекуляров. Тоже много смотрел всякого через поляризаторы различные.
хороший урок для понимания того как в реальности работает освещение. одно дело читать про это и смотреть формцлы и совсем другое когда увидеть самому:)
занимательная физика короче…

AND: ага… я бы артистам сильно рекомендовал….

Joker: что то я туплю, а зачем второй на источник света ставить?

AND: а иначе не убрать спекуляр от не ровной поверхности. Т.е. если поверхность ровная (почти нет бампа) то достаточно фильтр только на камеру надеть. Так например с поверхности воды можно убрать отражение или с поверхностей где детали не различимы.
а в общем случае нужен поляризованый источник света чтобы вторым поляризотором на камере убрать первичные отражения.

Joker: ага, понял – прикольно
надо на наших артистах испробовать :)

AND: а еще прикольно с RealD 3D очками. Нужно две пары. Одни надеваешь а черег другие фонариком светишь. И одним глазом только diffuse (половина на самом деле) а другим другая половина diffuse + половина specular. (половина интенсивности)
у RealD 3D круговая поляризация, поэтому там поворот фильтра не влияет. Но на некоторых поверхностях может цвет менятся.

Joker: у меня вроде даже валяются RealD две пары очков, нужно срочно в IMAX сходить :)

AND: RealD покатят. Они правда маленькие. Но с ними тоже прикольно. IMAX овские они больше и них линейная поляризяция. Они для фильмов (как бы хуже) потому что чуть головой крутнул и вторая картинка лезет. Но они фазу не сдвигают – не меняют цвет.
Если фотки делать то лучше линейный (IMAXовский).

Joker: RealD очки я так и не нашел дома, зато нашел старый DVD плеер с экраном :)
разобрал экран, вытащил поляризационную пленку, а для объектива купил поляризующий фильтр (через пленку качество не очень хорошее)
свет пускаю через пленку и фоткаю с фильтром, первый пробный результат:
https://dl.dropbox.com/u/4736419/test/diffuse.jpg
https://dl.dropbox.com/u/4736419/test/specular.jpg
https://dl.dropbox.com/u/4736419/test/result.jpg
в предыдущий раз запорол баланс белого, продолжаю эксперименты
https://dl.dropbox.com/u/4736419/fire_truck/diffuse.jpg
https://dl.dropbox.com/u/4736419/fire_truck/specular.jpg

AND: ты в линейном пространстве вычитание-то делаешь?

Joker: да, вычитание в линейном пространстве, как вот тут http://filmicgames.com/archives/233

AND: кстати физику у него не читай. Там не совсем правильно …. (про электроны)

Boris Batkin: а можно ещё “сумму”?

Joker: http://dl.dropbox.com/u/4736419/fire_truck/truck_result.jpg
вот сумма

AND: что-то не правильно у тебя там….
этот трак там где красный – это пластик или крашеный метал?

Joker: почему неправильно?
имхо просто спекуляр не везде отфильтровался через поляризационный фильтр, там плоскости совсем уже под разными углами

AND: вот на той картинке которая _specular помимо спекуляра много красного осталось. Очень много. Если это простой пластик то не должно быть там красного вообще. Если _specular это то что raw с фильтром – то еще верю (т.е. из него diffuse нужно вычитать).
на другой (с наушниками) смутило что оно уходит в синий.

Joker: вот я тоже удивлен, что так много красного
это с вычетом картинки

AND: странно. а попробуй одну поверхность под прямым углом
эту красную

Joker: ага, я так и хочу. взять плоскость и с ней пробовать
сегодня до дома как доеду попробую
что то странно выходит
либо я делаю фотки неправильно, либо спекуляр от пластика != цвету источника (как это принято делать)
https://dl.dropbox.com/u/4736419/materials/Scissors/diffuse.jpg
https://dl.dropbox.com/u/4736419/materials/Scissors/specular.jpg
https://dl.dropbox.com/u/4736419/materials/Scissors/combined.jpg
в принципе, результат похож
http://filmicgames.com/Images/PolarizedDiffSpec/scissor-diff.jpg
http://filmicgames.com/Images/PolarizedDiffSpec/scissor-spec.jpg
http://filmicgames.com/Images/PolarizedDiffSpec/orig-spec.jpg
тут я взял галогеновую лампу, засунул её в коробку, в коробке прорезал дырку и закрыл её поляризационным фильтром
потом в темной комнате фоткал и вычитал в линейном спейсе
у меня не разу не получилось, что бы от пластика отраженный свет был хотя бы примерно только цветом источника
под ножницами пластиковая плоскость, ручки у ножниц прорезиненны

AND: спекуляр от пластика == цвету источника – это факт. У всех диэлектриков так. Я могу представить что под касательными углами фильтрует не так, но под прямым углом все должно быть правильно. Я на эти пластики насмотрелся. Без камеры даже, просто с вонариком и очками если смотреть. Не меняется у них цвет спекуляра.
У металлов меняется, причем свет спекуляра меняется в зависимости от угла. Т.е. под одним углом один цвет, под другим – другой. У золота и бронзы это сильно заметно. У хрома, алюминия и серебра не сильно заметно (приктически не видно разницы).
может у камеры не линейный респонс. Откалибровать нужно. И не JPEG а линейный TIFF какой-нибудь использовать.
я еще со своими тестами буду разбираться. У меня что-то тоже не так. С листьями. Предполагаю что из-за jpegа как раз. Домой приеду буду еще разбираться.

_All: у тебя камера зеркалка?

Joker: нет, но скоро зеркалкой пофоткаю
я тут подумал и мне кажется в самом методе получить спекуляр есть ошибка, вот к примеру:
имеем плоскость из пластика идеально желтого цвета (255, 255, 0), т.е. на фотографии с отфильтрованным спекуляром будет (255, 255,0)
потом делаем вторую фотографию со спекуляром (без фильтра) освещенную белым светом, получим отраженный белый свет (255, 255, 255) и если вычесть одно из другого (как я делал и как filmicgames пишет) то получится синий
и тут видимо нужно делать сильно under exposure при съемке, иначе всегда будем из белого вычитать в ярких местах и получать просто инвертный цвет
что собственно у меня и получается
ну и плюс остальные огрехи (баланс белого, фильтр не все отфильтровал, не зеркалка, jpg формат и т.д.)

AND: да…. нужно чтобы клиппинга не было. Более того, 8-bit не достаточно там. И если уходит в тень где появляется шум то тоже будет плохо. Идеально нужно делать серию underexposed кадров и усреднять их в линейном пространстве и как минимум в 16 битах. Это уже если совсем совсем придераться :)
А я вот пытаюсь найти что-нибудь очень черное и не отражающее чтобы все обернуть. У меня такое подозрение что на каких-то моих тестах там амбиент от подолка или стены отражает. Либо действительно спекуляр такой.

_All: ну вот и у меня возникла такая же мысль…

Joker: очередной безуспешный подход получить чернобелый блик с цветных пластиковых объектов :)
снимал в raw, вычитал в линейном, съемка практически сверху, лампа сверху, баланс белого выставлен, все вручную, старался сделать underexposured и все равно блик цветной :)
https://dl.dropbox.com/u/4736419/phototest/diffuse.jpg
https://dl.dropbox.com/u/4736419/phototest/specular.jpg
https://dl.dropbox.com/u/4736419/phototest/combined.jpg
у меня уже закончились варианты, почему он цветной
вот исходники фоток raw, если кому интересно
https://dl.dropbox.com/u/4736419/phototest/src/CIMG6808.DNG
https://dl.dropbox.com/u/4736419/phototest/src/CIMG6810.DNG

AND: ты уверен что тот поляризатор который у тебя на камере не круговой?
DNG – это прямо из камеры? или уже через Photoshop прошло?
хотя все выглядит правдоподобно. Не синий он вроде. Вот виду только что очень шумное оно. Там где шум вычитание не работает.
Попробуй поставить ISO на минимум что есть и делать большую выдержку. Если не хватит – то усреднять.
Потому что при увеличении оно идет сине-зелеными пятнами.
еще как вариант уменьши картинки перед тем как делать вычитание (это шум немного уберет). Раза в 4 их.

Joker: на фотиках который стоит его называют “циркулярный поляризационный светофильтр”
но там стоит обычный линейный поляризатор а потом пластинка, которая линейно поляризованный свет превращает в циркулярно поляризованный – что бы оптика фотика чувствительная к поляризации света работала :)
так, что отличия по идее нет в фильтрации
DNG это прямо из камеры

Joker: да ISO было и так на минимум, выдержка 0.3 секунды или 0.2 (забыл), если больше делать выдержку то в фотке со спекуляром цвета клампаются :(

AND: вот то что у меня. diff – это чистый дифуз. spec – чистый спекуляр (после вычитания). comb – то что в сумме (финальная картинка).
https://www.dropbox.com/s/krhknyuf3a518xr/img_7303_comb.jpg
https://www.dropbox.com/s/hc5ej0y57h85nzf/img_7303_diff.jpg
https://www.dropbox.com/s/wcy3u3rytba6qth/img_7303_spec.jpg
только зря я на белый лист это все разложит. Т.к. там он отражает. Но то что под прямыми углами лежит – все ок.

Boris Batkin: а зачем вы всё это делаете, кстати?

AND: это я как раз из линейных TIFFов делал которые напрямую из RAWов писались. С Jpegом были проблеммы. У листиков получался красноватый спекуляр. Они там обычно tone curves делают, так что sRGB to Linear не совсем linear
другие не знаю зачем. А я делаю ради интереса и для рефернсов под следующий проект.

Boris Batkin: я не про это. я про то, зачем эти фотки вообще надо? дизайнерам казать?

AND: для референсов, для интереса, для понимания как оно вообще должно быть

Boris Batkin: понял. прикольно очень, когда есть настоящий референс.

AND: да. Тем более под новые проекты там все linear lighting, energy conservative и т.д. вот интересно втыкать туда как бы реальнае данные.
а то обычно там как-то от балды получается

Ivan Gavrenkov: А диапазон есть желание сохранять? Мы тут пробовали тест сделать. В освещение забить какие-то (якобы) реальные значения, сделать decay обратно пропорциональным квадрату расстояния и убрать все фейковые филл лайты и амбиент.
Может у кого-то оно и уже так, но мы только-только добрались.

AND: да и нет. Сложный вопрос.

Ivan Gavrenkov: Почему да, и почему нет?

AND: хммм… (думаю как так сказать чтобы тут во флейм не разосралось)
первая проблема это HDR. Я лично против этого HDR в играх по нескольким причинам. Оно не работает автоматически. Если кто фотографией занимаются то знают что это задница. То тут у тебя солнце пересвечено, то в тенях нихера не видно и т.д. Это все конечно потому грамотно руками в фотошопах выпремляется но не автоматически. При это глаз все это видит нормально (совсем по-другому как камера).
Точно так же в фильмах. Все делается руками вплодь до освещения. Т.е. супер яркое солнце – это желтая лампа с интенсивностью 1 а небо – это синяя лампа с интенсивностью 0.5 например. Все покадрово ручками выпрепляется в зависимости от того что хочется видеть. Raw footage выглядит как гавно во многих случаях.
Потом это проблему придумали в играх. А давайте делать HDR и потом это как-то тонмэмить, хотя проблема совсем не решена и даже для оффлайна. (на сиграфе пока еще ничего толкового не родили)
все глобальние операторы кривые, какие-то как-то работают при определенных условиях, но не в общем случае
тоже самое с балансом белого
это если делать все совсем правильно
это не значит что модели освещения не должны или не могут быть реалистичными. Это скорее как в фильмах. Все раелистичное кроме HDR.

Crio: а вот я не в теме про HDR, а есть уже какие то техники которые действительно работают как сетчатка глаза?
т.е. с периферийной частью плохо видящей при большой освещенности, но хорошо при малой, и центральной, которая наоборот + движущиеся объекты?

AND: есть, но результаты они выдают не реалистичные. Т.е. они это в диапазон впихивают но это не выглядит реалистично.

Crio: я просто на твое замечание про необходимость выправлять руками подумал что тут как раз за счет колбочек и палочек природа сама все вырулила

AND: там скорее локальная адаптация идет. Частично exposure за счет зраска, кастично локальная адаптация и разные из варианты.

Crio: Ну я когда читал pilot’s handbook там объяснялось за счет выделения вещества разница и световые пятна существуют

Ivan Gavrenkov: эммм, да и вообще, откуда эта идея, что то, что мы “видмим” непрерывно связано с тем, какой сигнал на сетчатке?
То есть это может и доказано, но мне не очевидно.

Crio: ну оттуда что есть изображения, полученые через глаз на плоскость
да и умственный эксперимент провести не сложно, я думаю
в случае человека

Ivan Gavrenkov: Это как же?
Надо глаз от мозга отделить получается.

Crio: не надо
ты же знаешь что ты видишь
и можно взять живой глаз
и получить изображение на просвет
если тоже самое что ты видишь, значит работает так же

Ivan Gavrenkov: Я не очень понимаю. Какой просвет? После того, как свет попал в глаз он трансформируется в какие-то там импульсы.
Нужно отрезать глаз, пока импульсы не искажены, раскодировать – и тогда мы получим то, что видит глаз.

Crio: нене
вобщем на сетчатку проецируется некоторое изображение, так?

Ivan Gavrenkov: Да.

Crio: вот ты проецируешь это изображение не на сетчатку, а на лист бумаги хотябы

Ivan Gavrenkov: Эээ, ну это же совсем не то! Это все равно, что глаз как линзу использовать.

Crio: о том и речь
говорить о достоверности можно если проецированное отличается по твоему визуальному восприятию не сильно от того, что ты видишь в свой глаз :)

Ivan Gavrenkov: Нее, я не про это. Как линза глаз несложно устроен, я думаю – не зря же и операции делают и очки.

Crio: и кстати про сигналы – есть вроде уже искусственные глаза

Ivan Gavrenkov: Нее, так не пойдет. Ведь то, что ты спроецируешь на бумажку – это тоже потом глазами будешь оценивать “похоже или нет”. Тут никак не обойтись без вырезания глаза.
Я как член команды год оф вор (специалистов по вырезанию) это говорю.

AND: Вот есть хорошая книга кому интересно Color Vision: Perspectives from Different Disciplines (http://www.amazon.com/gp/product/3110154315/ref=oh_details_o00_s00_i00). Сборник самых важных пейперов по злазам, мозгам и т.д. с популярными комментами для тех кто не в теме.
От вырезания глаз и лог сигналов толка много не будет. Что интересно но большая часть функций сетчатки это предварительная обработка изображение и его сжатие.
Да да. То что выходит из глазного нерва это сжатая информация. Что-то вроде 10:1 или 100:1. Точных цифр я не помню.
Очень оно похоже на wavelet. Типа есть низкое разрешение которое не сжато. Другое прохоняется через highpass фильтр, предварительно регулируется локальный баланс белого и уровень. Потом это еще кодируется как-то странно. Трансформится во что-то наподобе YCbCr. Но синий канал мало того что очень сильно заблюрен, на и еще идет с намного большей задержкой.
Если бы не было там компрессии то диаметр глазного нерва был бы равен диаметру самого глаза
далее это все уходит в мозг и начинается декомпрессия. Сначала приходит в LGN. Который до сих пор не знают что делает. Но из него это уходит намного больше нервов в V1. И в него тоже что-то приходит много из других участков.
Потом начиная с V1 и дальше по иерархии все это плавно интегрируется в то что мы видит. Очень похоже на wavelet опять же.
Там же есть ресейрчи на тему “как выглядит синий цвет”. И там все тоже не просто. Есть кусок мозга который за это отвечает специально + фактор культуры. Там изучали племена какие-то у который в обиходе не используются цвета. При этом у них проверили витчатку и отделы мозга соответствующие. И выяснили что глаза цвета видели, нижние отделы (V1, V2…) тоже видели. Но высокоуровневый отдел был намного меньше чем у нас. Потому что они видемо не сильно на цвета внимание обращали. Как следствие они не могут их различить.
слепому можно только сказать что синий – это то что имеет такую-то частоту колебаний. А в общем случае мозгу нужны лейбле. Я смотрю на что-то и говорю – вот это синий, ты смотришь на тоже самое и говоришь ок, это синий. И с того момента мы знаем что вот то-то – это синий.
Короче, кому интересно – читайте книгу

AND: это я как раз из линейных TIFFов делал которые напрямую из RAWов писались. С Jpegом были проблеммы. У листиков получался красноватый спекуляр. Они там обычно tone curves делают, так что sRGB to Linear не совсем linear

Joker: может быть из за сложной поверхности я фильтр повернул неправильно, я поворачивал пока блики яркие не пропали

AND: а обе картинки с фильтром были сделаны?

Joker: да, обе с фильтром
фильтр на 90 градусов поворачивал
что бы получить с бликами картинку

Joker: трак целиком пластик – везде

_All: http://scan3d.ru/public_downloads/Temp/PolarBug.jpg
появились косячки мелкие.
хотя может это отражение вспышки…

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

Joker: это отражение, я специально делал что бы оно пыщило
что бы блик было виднее
там баг в другом, что часть бликов через фильтр пробралась :)

AND: не… нужно без вспышки снимать. Либо вспышка единственный источкик света и на неё фильтр надевать

Joker: так и было, она единственный источник и с поляризационным фильтром

_All: ну вот да мне второй мыслью это и пришло.

  • http://www.facebook.com/sim0nsays Simon Kozlov

    Test message