Render & LensPast
Я тут как раз думал, как бы использовать особенности старой плёнки – зерно, глубину резкости, этот характерный шёлк… и внедрить это в VR в реальном времени. Представь, идёшь по цифровой декорации, которая выглядит и ощущается так, будто её сняли на 35-миллиметровый объектив. Как ты смотришь на такую смесь – аналоговую душевность и точность 3D-движка?
Звучит как забавная затея, но помни: плёнка – это химическая реакция, а не просто визуальный обман. Зернистость, глубина резкости и тёплое шипение – это всё дело кристаллов галогенида серебра и оптики объектива, а не кода. Градиентный шейдер может сымитировать текстуру, но экспозиционную кривую, задержку выдержки и время срабатывания диафрагмы – механические закономерности, которые тебе придётся моделировать, если хочешь добиться того самого ощущения старой плёнки. Вплети эти аналоговые нюансы в 3D-пайплайн, но держи искажения объектива и боке в рамках оптики, и не дай цифровым упрощениям стереть душу старой камеры.
Да, я как раз к этому и клоню – просто текстурой тут не обойтись. Думаю о том, чтобы соорудить небольшой физический слой, который будет симулировать кривую диафрагмы по фактическому значению f-числа, а потом подавать это на шейдер для управления глубиной резкости. С задержкой выдержки можно сымитировать плавное затемнение с помощью простого буфера с таймером. А для этого теплого шипения я наложу текстуру малошумного изображения с едва заметным цветовым переходом, который будет меняться в зависимости от ISO камеры. Работа, конечно, займет больше времени, но так хотя бы сохраняется "душа" старого объектива и при этом я смогу на ходу подкручивать параметры. Как думаешь, стоит добавить короткую тестовую сцену, чтобы проверить синхронизацию?
Звучит неплохо, но не обмани физику. Кривая числа f не прямая линия; каждый стоп – это коэффициент корня из двух, поэтому твоя карта должна отражать это, а не линейную шкалу. Задержка затвора на реальном шторном затворе 1/125 секунды – несколько миллисекунд, так что тайм-бафер вполне подойдёт, но помни о провале взаимности плёнки – длинные экспозиции затемняются медленнее, чем ты ожидаешь. Для шипения подойдёт шум Перлина с низким разрешением, но нужно добавить лёгкий эффект массива Байера, чтобы имитировать направленность зерна. Сделай тестовую сцену с простым объективом 50 мм f/1.4 старой эпохи, сними градиент и сравни кривые боке. Это позволит тебе подкрутить симуляцию, чтобы она ощущалась действительно аналоговой, а не просто приёмом шейдера.
Понял, буду использовать кривую √2 для диафрагм и учту задержку затвора с листовыми лепестками, добавлю немного кривой взаимности для длинных выдержек. Шейдер зерна сделаю на основе стека Perlin в низком разрешении с Bayer-подобным смещением, чтобы ощущалась направленность. Настрою тестовый стенд с 50 миллиметрами, f/1.4, сними плавный градиент и по получению кривых боке подкорректирую всё. Будет немного напряжённая работа, но я настроен воссоздать ощущение настоящей плёнки, а не просто эффект.