Здравствуйте, коллеги.
Недавно встала задача сделать красивый свет от накладных точечных светильников на потолке (светильники здесь ). Я понимаю, что по правильному делается это с помощью каустики. Расчёт каустики, как известно процесс длительный и с подводными камнями. Для визуализации пользуюсь короной, и что бы не ждать месяц для приемлемого результата, решил упростить процесс. Я решил, что можно просчитать каустику для одного светильника в картинку - сферическую проекцию. И спроецировать это дело на окружение. Рассчитать картинку не сложно, да вот беда! Как потом заставить эту картинку светиться направленными лучами из одной точки в разные стороны по сфере? Испробовал кучу вариантов и все из них давали неудовлетворительный результат. Пришёл к выводу, что необходимо создать файл светимости IES для источника света на основе полученной мною карты проекции каустики. В интернете сведений по этому вопросу не нашлось. Всё, что мне удалось накопать это генераторы IES (на пример здесь ). И понеслось...
ВНИМАНИЕ!!! Сложный материал. Для упрощения выполняемых действий, спустя некоторое время, по материалам этого урока, мною был создан скпипт для 3dsMAX. Однако данный материал применим к любым 3D пакетам. Поэтому, если у Вас нет 3Дмакса, он для вас может оказаться полезным.
Как превратить карту сферической проекции в IES?
Наткнулся я в поисках на то, как этот делается с реальными светильниками (здесь - там есть ). И это натолкнуло меня на мысль, что нужно получить светимость каждого пикселя и забить это значение в IES файл.
Метод, разработанный мною, довольно сложен и где-то может может быть улучшен. Буду рад предложениям. А пока изложу так, как оно есть сейчас.
Нам потребуется из приложений: 3d приложение, визуализатор с возможностью расчета каустики, графический редактор, блокнот, 16-ричный редактор с возможностью 10-ричного представления информации, табличный процессор.В моём случае это: 3dmax, Vray, XNView , Notepad , Hex Editor Neo , Excel.
Постараюсь описать как можно подробнее, что бы не возникало вопросов. В конце я выложу ссылки на сцену и готовый IES
Берём светильник по ссылке pro или этот free . Я возьму free.
Я попробовали просчитывать карту короной и виреем. Виреем оказалось быстрее (намного быстрее Vray-2минуты, Corona-2часа). Опишу как делал я:
- открываем светильник в максе; выраниваем, для удобства, в начало координат;
- Сбрасываем настройки виреея по умолчанию (сменить рендер на другой и вернуть вирей). отключаем коррекции гаммы в настройках Customize -> Preferences -> Gamma/LUT. Работаем в линейном пространстве.
- Настраиваем сам рендер. СМ СНИМКИ ЭКРАНА
- Разрешение рендеринга 361х181 пикселей (будем рассчитывать светимость с шагом 1 градус начиная с 0 градусов, в итоге +1).
- на место лампочки вставляем источник света (ИС) для генерации каустики. VrayLight сфера диаметром 1мм, яркостью 50люмен. В опциях источника света ставим галочку Invisible, убираем Affect specular и Affect Reflections;
- Правой кнопкой мыши -> Vray Properties -> Caustics subdivids = 5000.
- из геометрии оставляем только стекляшку, остальное удаляем;- в центр ИС добавляем любую камеру. Располагаем её горизонтально и на виде сверху влево. Нам надо что бы она имела сферическую проекцию. В настройках рендера вирей мы уже сделали соответствующую пометку;
- Туда же в центр ИС добавляем сферу. Сфера должна быть не очень большая, чуть больше самого светильника (у меня радиусом 150мм). Сфере переворачиваем нормали модификатором Normal и назначаем матовый белый материал;
- для стекляшки создаём новый материал VrayMtl. Делаем его полностью прозрачным и по желанию меняем коэффициент IOR. Например у хрусталя 2.0. Это влияет на рисунок получаемый после прохождения света через материал.
В итоге стцена выглядидт вот так:
Рендерим вид из камеры. Минуту считается каустика и потом в лёт это дело выводится нам во фреймбуфер. Пока идёт просчет можно убрать отображение в sRGB во фреймбуфере.
Сразу тут же можно скорректировать уровни. Открываем панель цветокоррекции во фреймбуфере, Ставим галочку Levels и двигаем белые области до появления засветки. Темные области не трогаем.
Красота! Можно попробовать другой IOR в материале стекла. Например 1,5:
Подбираем картинку, которая наиболее нам нравится. По мне более контрастная будет лучше смотреться, поэтому оставляем коэффициент 1,5
Сохраняем изображение. Хотелось изначально использовать 32бит EXR или на крайний случай 16бит PNG или TIFF, но не нашел способа извлечения от туда численных данных на каждый пиксел. Если у кого есть идеи может высказать в комментариях. А пока используем 8-бит на цвет BMP. И открываем в XNView (или фотошоп, да в чём угодно).
Операции простые: нам надо повернуть картинку против часовой стрелки, отразить картинку по горизонтали и перевести в градации серого:
Сохраняем и ...
Переходим к следующему этапу:
Открываем Free Hex Editor Neo (16-ричный HEX) редактор. Ссылку на бесплантую версию я давал в списке программ вначале урока, но она имеет ограничения после окончания триального периода в 14 дней, поэтому при необходимости можно прошерстить по торрентам и найти полную версию. Я пользуюсь триальной.
Открываем наш файл BMP
Видим и ужасаемcя!!! Что с этим делать?
А ТЕПЕРЬ ВНИМАНИЕ!!!
В начале файла идёт служебная информация, потом таблица цветов, а потом само изображение. Нужно немного прокрутить вниз. Таблицу цветов легко определить визуально. Она выглядит алфавитом. сначала латинским, потом кирилическим. Начало таблицы видно на снимке сверху с восклицательных знаков. Кончается таблица на последней букве нашего с вами алфавита :) сразу после точки идёт картинка. (на снимке экрана внизу выделено начало нашей картинки).
Примечание: Если код выглядит по другому, то возможно BMP'шка не была переведена в градации серого.
Зажимаем левую кнопку мыши и выделяем вниз до конца. Далее меню Правка -> Копировать как... -> справа в появившейся панели забиваем все поля как показано на рисунке.
Важно! Количество колонок равно ширине нашего изображения (181) + 3 байта = 184. Если размер изображения будет другой, то нужно будет пересчитать.
Жмём копировать, открываем NotePad и втcавляем. У нас получился набор десятичных чисел, перечисленых построчно через запятую. Нам надо закинуть это в Excel и отрезать 3 последних столбца (184 - 3 = 181) Что бы получить ширину изначального изображения. Для этого жмём Правка -> Заменить (Ctrl+H). И меняем (,) на (;). Сохраняем результат в Файл CSV
Открываем CSV в Excel ищем последние 3 столбца. Они должны содержать одинаковые числа по столбцам. Удаляем их.
Выделяем все ячейки и форматируем их в числовой вид с 1 десятичным знаком. Это нужно по спецификации IES, что бы числа выглядели не целыми.
Перед сохранением пробегаем взглядом по границе таблицы. Убеждаемся, что таблица имеет размеры 181 ячейки по горизонтали и 361 по вертикали. Смотрим последнюю строку. Там могут быть лишние несколько значений. Их надо удалить (видимо зависит от программы которая создавала BMP. Потому как после фотошопа там было лишних 2 значения, а после XnView ничего лишнего не было)
Открываем этот файл обратно в блокноте и выходим на финишную прямую. Теперь жмём Ctrl+H и заменяем точку с запятой на пробел. В начало файла надо вставить заголовок IES (копируем с браузера, только удаляем лишние пустые строки). Должно получиться так:
IESNA:LM-63-1995
[TEST] 1
[DATA] 17.03.2016
[MANUFAC] Novotech
[LUMINAIRE] Cubic_369596
[LAMP] Galogen_42W
TILT=NONE
1 625 1 181 361 1 2 0 0 0
1 1 42
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
В конце приведённого заголовка перечисление углов, по которым будут перечислены значения яркости. У нас в первой строке от 0 до 180 (всего 181 значение), во второй строке от 0 до 360 (всего 361 значение). Следующей строкой должны идти наши данные. Полное описание внутренностей IES фала можно прочитать в спецификациях . Там можно настроить размеры и форму источника света, а также световой поток. У нас размер нулевой, световой поток 625 люмен. (Взято от сюда )
Теперь сохраняем этот файл с расширением *.IES и готово!!!!!!!!!!!!
Как обещал выкладываю ссылки на скачивание готового IES.
Скачать мой файл для сравнения можно отсюда . Сценка для просчёта каустики здесь
Тестируем IES в сцене:
Берём снова светильник. Вставляем туда источник света и смотрим, что получилось:
Визуализирую я в короне. Стандартный короновский свет может использовать IES, но почему-то отображается только нижняя полусфера. Поэтому беру стандартный фотометрический источник света и настраиваю его на работу с короной
Правда пришлось подкорректировать яркость светильника до 10 люмен. Иначе он получался безумно ярким.
Результат:
Сравним с "честным" просчётом каустики:
И с просчётом без эффектов:
КРУТО!!! Время просчёта такое же как при использовании обычного источника света без использования каустики. Конечно по началу кажется, что это слишком сложно. Но это только по началу. После того как разберёшься всё делается за 10 минут. Оно того стоит!
Вот пример как выглядит в реальной комнате:
PS: В конце я решил попробовать просчитать в вирее без обмана. Результат схож с просчётом IES. И время приемлемое. Но в реальныз сценах не так всё радужно. Время рендеринга существенно удлиняется при увеличении источников света. Ведь на каждый светильник будет испускаться соответствующее количество фотонов. И как они лягут на сложную геометрию предсказать сразу сложно. Поэтому потыкаться в таком случае предстоит как бы не дольше.
А также решил запустить просчёт в короне на ночь. Немного пошаманил с настройками: Увеличил количество сэмплов за проход. Поэтому количество пассов реально должно быть для такого просчёта в несколько раз больше. Результат такой:
К сожалению макс повис во время как я пытался сохранить картинку ("Не отвечает" на скриншоте) и я не смог сохранить её должным образом. Но результат понятен: 6 часов рендеринга на 2-х машинах в распределённом рендеринге и результат всё равно зашумлённый. Я понял, что у короны слабое место - расчёт каустики от маленьких источников света. Он как бы не может быстро нащупать этот источник и сэмплы попадающие на светильник редки и очень яркие.
Благодарю за внимание. Удачных рендеров!