Сад Zen Photon Garden с любопытным названием выиграл в апреле Mozilla Web Workers Dev Derby. Теперь Mozilla взяла интервью у программиста Мики Элизабет Скотт и раскрыла некоторые внутренние механизмы.
Zen Photon Garden (ZPG) — это весело играть, но он производит большее впечатление, когда вы знаете, как он работает. Это своего рода двухмерное моделирование трассировки лучей с изюминкой. В обычном луче трасса трасса начинается от камеры и возвращается к источнику света. В ZPG луч света начинается от источника и проходит от края холста. Пользователь может размещать на пути света разные материалы, чтобы создавать интересные узоры. Вся идея в том, чтобы быть интерактивным и интересным. Вы можете изменить материал, который вы помещаете на пути, задав его коэффициент отражения, пропускание и диффузию. Все дело в том, чтобы поиграть со светом и создать красивые формы.
На уровне реализации пул рабочих потоков управляется для рисования путей, сохраняя при этом отклик пользовательского интерфейса.
«Внутренний цикл дзен-фотонного сада довольно специализирован. Для каждого светового луча мне нужно проследить его путь, пересекая его с объектами в сцене, и каждый сегмент этого пути визуализируется путем рисования сглаженной линии в 32-битный буфер накопления с высоким динамическим диапазоном. После отслеживания группы этих лучей буфер с высоким динамическим диапазоном отображается на 8-битное изображение на канал в соответствии с текущими настройками экспозиции камеры, и это изображение обращается на холст.
Эти сглаженные линии должны быть быстрыми и очень качественными. Например, любые ошибки в однородности яркости линии повлияют на гладкость окончательного изображения. Чтобы получить необходимое мне сочетание скорости и точности, этот алгоритм рисования линий реализован на чистом JavaScript пулом потоков Web Worker. Этим пулом необходимо тщательно управлять, чтобы приложение могло рисовать с высокой пропускной способностью, когда вы оставите его в покое, но оно все равно могло реагировать с небольшой задержкой, когда вы интерактивно добавляете объекты в сцену «.
Когда вы опробуете программу, вам нужно изменить экспозицию, перетащив ползунок вверх и вниз, чтобы увидеть лучшие эффекты. Попробуйте расположить «зеркала» так, чтобы они отражали свет друг на друга.
Внимание к деталям, кажется, было ключевым компонентом в обеспечении хорошей работы приложения, и вы можете узнать больше о проблемах в исходном интервью.
Также убедитесь, что вы ознакомились с другими программами в том же Dev Derby Challenge — все они заслуживают изучения.