Вышла папира от азиатских коллег, где ребята исследовали нейронный паф гайдинг, но через von Mises-Fisher (гауссианы). Посылали на Сигграф ещё в прошлом году, но тогда не прошло.
Паф гайдинг - это когда мы пытаемся направлять пути света в паф трейсинге так, чтобы они шли туда, откуда в итоге приходит больше излучения. Это делается для того, чтобы Monte Carlo сходился быстрее и было меньше шума.
Проблема: нам по сути нужно запоминать radiance field и уметь из него семплировать, что приводит к проблеме выбора базиса для распределения.
Рассматривают на примере оффлайн рендера, из-за ряда технических ограничений, но предлагают онлайн алгоритм обучения распределений.
Паф гайдинг - это когда мы пытаемся направлять пути света в паф трейсинге так, чтобы они шли туда, откуда в итоге приходит больше излучения. Это делается для того, чтобы Monte Carlo сходился быстрее и было меньше шума.
Проблема: нам по сути нужно запоминать radiance field и уметь из него семплировать, что приводит к проблеме выбора базиса для распределения.
Рассматривают на примере оффлайн рендера, из-за ряда технических ограничений, но предлагают онлайн алгоритм обучения распределений.
👍1
Одна из главных фишек заключается в том, что они полагаются на анизотропные гауссианы (могут быть вытянутыми), что позволяет лучше аппроксимировать падающий поток света довольно эффективно и понять, куда же нам следующий лучик кидать.
На самом деле я уже 2,5 года назад попробовал реализовать такую же тему вместе с коллегами из МГУ, но сразу в рамках реал-тайм паф гайдинга для Falcor. Что меня и привело далее к стажировке в Intel (не реализовалась из-за ожидания визы) и PhD в KIT. Полезно порой кодить "простые" гипотезы 😊
Мы сделали всё то же самое, только с изотропными гауссианами, но уже в реал-тайм.
Мы сделали всё то же самое, только с изотропными гауссианами, но уже в реал-тайм.
🔥3
Проблема - шумы и то, что гауссианы это unordered set. Какая-то MLP из-за spectral bias будет неплохо предсказывать эти гауссианы, если поставить очень низкий learning rate... А если же мы хотим быстрой сходимости, подключив там instant-ngp (high-frequency learnable encodings/embeddings) и обойдя тем самым spectral bias, то у нас всё ломалось 😔😔😔.
Гауссианы разъезжались в край и ничего не сходилось(((
Гауссианы разъезжались в край и ничего не сходилось(((
Также была (да и всё еще частично есть) проблема в том, что эти нейронки надо вызывать в отдельном кернеле, что убивало идею эффективного megakernel паф трейсинга.
Но так или иначе схема рабочая, как показывают авторы этой статьи, но только если мы в оффлайне и можем позволить себе медленную сходимость и wavefront path-tracing (не megakernel, почему он медленный). Но точно не стабильную из-за шумов, и жаль, что эту проблему они не разрешили.
Но так или иначе схема рабочая, как показывают авторы этой статьи, но только если мы в оффлайне и можем позволить себе медленную сходимость и wavefront path-tracing (не megakernel, почему он медленный). Но точно не стабильную из-за шумов, и жаль, что эту проблему они не разрешили.
проблему инженерную с megakernel имхо можно разрешить и мы сейчас похожим занимаемся... но вот с обучением нестабильным, как у меня так и у моих коллег а также одного дипломника которого я ввёл, пока ничего не получилось из "простого" и красивого
пишите если будут идеи 👌
пишите если будут идеи 👌
Вышла интересная статья на основе Generalized Triangle Strip для реал тайм декомпрессии meshlet-ов. Много логичных инженерных оптимизаций и стоящими за ними меш-шейдеров с активным использованием бинарных wave instructions.
В реальности ребята добиваются 3-4х компрессии. И в отличие от конкурентных работ типа Nanite в UE5, они генерят итоговые треугольники на лету без кэширования в глобальную память.
В реальности ребята добиваются 3-4х компрессии. И в отличие от конкурентных работ типа Nanite в UE5, они генерят итоговые треугольники на лету без кэширования в глобальную память.
Жертвы по скорости рендера и в правду адекватные, если забыть про Reuse Packing. Имхо и его имплементация радикально сложнее из-за префикс сама, и экономия по памяти копеешная, и перф снижает сильно (в особенности на видеокартах зелёных 😁. ну может поленились норм имплементировать/нет нужных инструкций)
This media is not supported in your browser
VIEW IN TELEGRAM
Transforming a Non-Differentiable Rasterizer into a Differentiable One with Stochastic Gradient Estimation
Ребята из Интела предложили оригинальную комбинацию Stochastic Gradient Descent с инженерным подходом к определению того, какие конкретно параметры сцены реально влияют на значение каждого пикселя, для оценки градиентов
Таким образом можно легко сделать большинство рендер-движков дифференцируемыми, что они и показали на примере Unity
Ребята из Интела предложили оригинальную комбинацию Stochastic Gradient Descent с инженерным подходом к определению того, какие конкретно параметры сцены реально влияют на значение каждого пикселя, для оценки градиентов
Таким образом можно легко сделать большинство рендер-движков дифференцируемыми, что они и показали на примере Unity
Добились высокого перформанса, даже обойдя nvDiffRast по производительности, ценою ограничений:
- не работает с трассировкой путей, вторичными градиентами (тени, отражения)
- многократное рассеивание света для PBRного объемного рендера тоже минус
- обучение нейронок внутри рендера также отваливается
но всё равно оч круто для практического использования
- не работает с трассировкой путей, вторичными градиентами (тени, отражения)
- многократное рассеивание света для PBRного объемного рендера тоже минус
- обучение нейронок внутри рендера также отваливается
но всё равно оч круто для практического использования
https://fxtwitter.com/i/status/1780979464706343062
даже проверили на мобилке через Юнити. пример с кодом также обещают выкатить, но с виду оч. легко повторить)
даже проверили на мобилке через Юнити. пример с кодом также обещают выкатить, но с виду оч. легко повторить)
🧵 Thread • FxTwitter
Eric Heitz (@eric_heitz)
By implementing our method in @unity, we can achieve fully cross-platform differentiable rendering, running even on low-end mobile phones:
