Bloom ?

Има ли някаква техника за постигане на bloom ефект без post-processing ? Не че е скъпа операция, просто ми е интересно дали има имплементация на физичните закони, които създават ефекта :) До колкото разбирам, причината е в лещата - с нашата fmiray леща може ли да се постигне ?

Comments

Ами след като искаш да е

Ами след като искаш да е прецизно всичко, трябва да определиш каква е причината за появата на bloom ефекта. Защото той може да се постигне по различни начини. По-често срещаната причина за появата му, при днешните (почти) съвършени обективи, е зацапване или замъгляване на челната леща на обектива (най-често се получава от образувания конденз по обектива на фотоапарата след като го преместиш от студено на топло място). Образуваните миниатюрни капчици върху лещата пречупват входящите лъчи и ги отклоняват от очакваната траектория, като се получава нещо подобно на отклоненията при грапавите отражения, само че тук профилът е различен. Докато при грапавите отражения, отклонявахме лъчите случайно вътре в някакъв конус (като разпределението е равновероятно в целия конус), то тук разпределението е силно концентрирано в средата на конуса и пада прогресивно към краищата, т.е. има формата на нормално разпределение.

Как можеш да симулираш този ефект? Трябва да се прави модификация на getScreenRay() по подобие на сегашния DOF ефект, само че, няма да се променя началната точка на лъчите, а ще се променя леко само посоката им, като голяма част от отклоненията ще са съвсем леки, а по-малката част ще са по-големи (така че да симулираме нормалното разпределение). Това, като ефект, много ще прилича на 2D postprocessing ефекта за bloom, с разликата, че ще се включат и някои лъчи "извън" нормалния кадър, т.е. "blur"-а ще може да "опипва" и пиксели извън границите на кадъра.

Друг оптически феномен, който също може да бъде виновник за bloom-a може да бъде сферичната аберация на обектива. При съвременните обективи, този вид аберация е най-старателно избягвана, защото тя вкарва общо замазване на всички пиксели и цялостно влошаване на рязкостта. При достатъчно силна сферична аберация, резултатния кадър е цялостно размазан (но не точно както със Gaussian Blur), като му придава едно отнесено и замаяно настроение, което понякога е търсен артистичен ефект, и се нарича Softfocus ефект (вижте статиите във Wikipedia по въпроса). При Softfocus обектив, bloom-а присъства доста силно. Нашата цел е да симулираме обектив, в който има достатъчно сферична аберация за bloom, но не чак толкова силна, че да причинява softfocus. За целта, може да симулираме трасиране на лъчи от сензора на камерата през единична леща, която не е нито сферична, нито правилна асферична (с последното имаме предвид такава леща, която ще фокусира картината точно, без никаква сферична аберация). Трябва ни настройваем параметър, който интерполира между двата типа леща и така може да изберем точно колко сферична аберация да вкараме в изображението. Предполагам това ще е доста трудно да се реализира на практика - дори не знам с какви формули се описват асферичните лещи при съвременните обективи.

Soft-focus

Между другото, като си заговорихме за софт-фокус, аз взех че имплементирах софт-фокус камера (т.е. камера с много силна сферична аберация). Имитира се фото-сензор, пред който е разположена леща (самата леща представлява CsgInter на две сфери с подходяща големина). Промените ги има в последната ревизия на fmiray, а ето и един скрийшот как изглежда рендер с тази камера:

softfocus

Изглежда дефокусирано, но всъщност не е това проблема (колкото и да настройвах разстоянието от сензора до лещата, по-остро изображение не можах да получа; замазването е изцяло заради сферичната аберация).

Още малко материали по

Още малко материали по софтфокус темата:

Тук направих едно клипче, което илюстрира как влияе на фокуса местенето на лещата пред камерата. В случая се ползва леща с convexity 0.28, която се мърда от стартово разстояние 1.5 до крайно 2.4. Картината изглежда най-добре около 2.0, но пак е трудно да се нарече изцяло на фокус:

:: Moving Lens ::

Освен това добавих симулация на бленда при SphericalLensCamera. Блендата се симулира като кръгла диафрагма, разположена между лещата и сензора. Не се симулира затъмняването на цялата картина при свиването на блендата (т.е. камерата се държи както нормалната, от гледна точка на светоекспозиция):

:: Meshes blurry @ f/11 ::

Вижда се ефекта и смисъла от диафрагмата тук: в центъра, изображението е доста рязко. Подобно е положението и при истинските обективи (които винаги дават най-рязка картина в центъра), макар и при тях сферичната аберация да е намалена до доста ниски нива.

Ето и как изглежда boxed.fmiray с подобни настройки: Boxed@f/5.6

Един друг експеримент, целящ да имитира Defocus Control (в случая е настроен да прави "пръстенчета", вместо "кръгчета"):

:: Defocus Control ::

И накрая просто една голяма безсмислена картинка :) - GI Test @ 1920:3000paths.