Reminds me a bit of lenticular holograms? But also, a funny analogy to the Heisenberg uncertainty principle. While that’s about arbitrary non-commuting operators, for position versus momentum it turns out to be about the 1/sigma that the Fourier transform does to the width of a Gaussian. But my point is: it is a constraint between spatial and temporal resolution, in some sense. Radiance cascades represent a spectrum of tradeoffs between spatial and angular resolution, right?
@Alexander_Sannikov2 күн бұрын
i guess it is an analogy in mathematical sense, but i don't see how it's analagous in terms of physics
@SonNguyen-ew6nh3 күн бұрын
how to implement it in c++. Can you show step-by-step?
@ArtificialDjDAGX14 күн бұрын
Could it be possible to combine this with a destructible environment? Like, precalculating all of the static and destructible objects as "transparent" models, so that no matter how they're destroyed, they render in a way that makes them accurate even if you were to noclip into them?
@p014615 күн бұрын
bro has probably save us
@theshadowcultАй бұрын
Can we get puddles and water to run the characters through in poe 2 with this? I'd probly spend hours just doing that over and over :D
@StanislavMarchevsky2 ай бұрын
Для одной 2D картинки обычно используется трилинейная фильтрация 4 соседних пикселя * 2, с соседнего мипмапа (8 texel fetch). В этом случае нужно блендить между собой 4 соседних пикселя внутри текущего кубмапа * 2 (соседний мипмап кубмапа) * 4 соседних кубмапа * 2 (столько же соседнего каскада). Получается 4 * 2 * 4 * 2 = 8 * 8 = 256 тексельфетчей. Вроде и много, с другой стороны, всего в 8 раз больше обычной трилинейной картинки. Прикольно, надо брать)
@StanislavMarchevsky2 ай бұрын
А, ну разве что, чтоб дойти до самого дальнего каскада, надо проитерировать ближайшие.
@Alexander_Sannikov2 ай бұрын
нет, оно не так работает. каждый каскад -- это одна выборка в четырёхмерном пространстве. четырёхмерное -- потому что 2д выборка по пространству и 2д по направлению. в самой наивной реализации с четырёхлинейной интерполяцией (это как билинейная-трилинейная-четырёхлиненая) это 2^4=16 выборок на каскад. мипы с этой техникой использовать смысла нет, потому что максимально эффективно память используется на фиксированном отдалении камеры, поэтому запекается один соответствующий этому направлению мип. однако, в пространствах высокой размерности есть гораздо более эффективные методы интерполяции -- вместо 2^N мультилинейной интерполяции, можно использовать симплекс-интерполяцию, для которой нужно N+1 выборок. это становится особенно полезно для интерполяции в многомерных пространствах N>5.
@StanislavMarchevsky2 ай бұрын
@@Alexander_Sannikov 🤔 Ага, слегка понял, на если уж докапываться - то уже у шейдертое) Кстати, ведь из-за больших пустых областей можно хорошо сжать текстуру, сделав её размер пропорциональным не объему, а приблизить к количеству вокселей вблизи поверхности, что пропорционально площади поверхностей запекаемой сцены. Ещё любопытно, что каскады - это и GI probes, и как reflection cubemap-ы в одном) Интересно, а для достижения шероховатости можно ли обойтись без мультисемплинга или шума? 🤔 Я как-то носился с мыслью о GI, только думал запекать в сферические гармоники (через Фурье). Потом подумал, что это сложно и передумал) Короче, спасибо за видео, познавательно)
@Alexander_Sannikov2 ай бұрын
@@StanislavMarchevsky в идеале да, объём информации должен скейлиться пропорционально площади, а не объёму. в PoE2 каскады используются для SSAO, SSGI и для screenspace reflections. glossy reflections приближённо реализуются семплингом из низких каскадов (у которых угловое разрешение ниже, чем у высоких). диффузный GI собирается из нулевого каскада (с самым низким угловым разрешением) в SH1 сферические гармоники.
@StanislavMarchevsky2 ай бұрын
@@Alexander_Sannikov доволен, что думал в правильном направлении :D Буду подглядывать, что у вас интересного) 🤨
@StarContract2 ай бұрын
Hi Alexander, did this demo make it into the Legit repository? Would be nice to see how it's implemented.
@Alexander_Sannikov2 ай бұрын
no, but we now have lots of shadertoy implementations like this one www.shadertoy.com/view/4ctXD8
@StanislavMarchevsky2 ай бұрын
Какая крутая концепция.
@Capewearer2 ай бұрын
Блин, эти шейдер-боллы смотрятся максимально красиво. Какое уравнение освещения используете, не подскажете? Особенно красивые хромированный голубой и медный.
@Alexander_Sannikov2 ай бұрын
самый убогий в мире GGX IBL, реализован максимально совместимым с "Real Shading in Unreal Engine 4". разве что фейковый specular occlusion (на основе ambient occlusion) добавлен.
@Capewearer2 ай бұрын
@@Alexander_Sannikov да ладно вам скромничать, 99% комментирующих ваши видео (включая меня), не смогут даже этого реализовать. Возможно, у меня просто фетиш на зеркальные поверхности, но глазу приятно.
@Capewearer2 ай бұрын
Самое интересное, что техника изобретена еще в 2008 году, как вы сами указываете. То есть множество подобных оптимизаций могли быть реализованы ещё тогда, и, таким образом, можно было бы, например, побороть вечную проблему рендеринга больших массивов травы в играх. Я в курсе вашего решения через предрасчитанный raymarching, но, как я понял, сделать сложные шейдеры вроде расходящихся в разные стороны травинок, будет сложно, если не невозможно.
@Capewearer2 ай бұрын
Насколько эта техника масштабируется на большие расстояния? Является ли таковая исключительно screen-space?
@Alexander_Sannikov2 ай бұрын
никак эта техника не масштабируется. она в light space, а не screenspace. ещё у неё нет никаких вторичных теней. это был мой первый опыт реализации одной и самых базовых техник.
@suslikan___0012 ай бұрын
хотелось бы сделать это для Unity или Unreal Engine, но это слишком сложно для меня :/
@GTGTRIK2 ай бұрын
How does it look on a convex shape?
@CodeParticles2 ай бұрын
@Alexander_Sannikov, Hello sir this is very mind blowing to me. Is there any way you have a tutorial on how the equations and bi-directional reflective distribution works? I've been tinkering with PBR which I assume is very antiquated now? I'm utterly fascinated and I use OpenGL C++ for my particle demos and side projects.
@Alexander_Sannikov2 ай бұрын
This demo uses the standard GGX BRDF and a full PBR pipeline. The difference compared to conventional renderers is that instead of calculating it for every pixel every frame, it pre-calculates it into radiance cascades and then just reads the results every frame.
@modus_ponens2 ай бұрын
I have never understood holograms, but as you said it, wave equations are reversible, and that with your illustration, it made perfect sense.
@ChristianKahler3 ай бұрын
Hi, great work! How do you render the parabolic cube maps and what pixel resolution do you start with? Looks already very high at the lowest level and you render all cube maps in realtime?
@Alexander_Sannikov3 ай бұрын
@@ChristianKahler maps are path traced offline. the total resolution of all cascades combined into a single image was something like 4k x 4k lowest cascade probe resolution is something like 4x4
@ChristianKahler3 ай бұрын
@@Alexander_Sannikov Thanks for the info! So for realtime we need something more simple? I was just wondering how path of exile 2 does this step? ;-)
@Alexander_Sannikov3 ай бұрын
@@ChristianKahler this demo demonstrates the fact that the data inside of RC is completely decoupled from the way you acquire it. Path tracing this takes minutes, but once it's baked into RC, I can render it in realtime in one millisecond. PoE2 uses screenspace raymarching to fill the data in cascades, so it's much faster to get the data. But the way the data is stored is mostly the same.
@maximeduchalet46623 ай бұрын
oh god you also play noita you are next level dude
@mcchickengrip4233 ай бұрын
isnt this the tech path of exile 2 will use? :O wow amazing work
@djmips3 ай бұрын
This is rather unique. Would be a fun virtual toy
@SaidMetiche-qy9hb3 ай бұрын
أنت تذكرني بإبن هيثم ممكن تكون إبن هيثم الروسي هههه
@SaidMetiche-qy9hb3 ай бұрын
Science is so sweet
@attractivegd95313 ай бұрын
modern time wizard
@spencer__3 ай бұрын
First time feeling inspired by a genius novel idea since Carmack
@ewerybody3 ай бұрын
I'm just blown away by how FLAMEY this looks!! 😍 from a VFX perspective I'd see the flames form from sprite sheets and flipbooks but these seem to form by the space BETWEEN the particles! Super interesting!!! :O
@Alexander_Sannikov3 ай бұрын
cheers. i often like to design continuum shaders to look like they're made of particles, just to confuse vfx artists :D
@datgame4 ай бұрын
Infinite Detail!
@HazzyDevil4 ай бұрын
This is phenomenal ❤ Is this demo available somewhere? Like GitHub or something?
@Merthalophor4 ай бұрын
looks georgious!
@Merthalophor4 ай бұрын
What I gather: We're "storing" in some way how the 3d model looks like if viewed through a plane from any angle, without keeping the 3d model. The most obvious way to do that is to store for each pixel of the plane what the pixel would look like if viewed from every angle. We could store, say, 200 different angles, which would mean that we have to store for _every_ pixel 200 different colors. Then, when rendering, we could check what angle we're looking at a pixel, then linarly interpolate between the colors associated with similar angles. What this paper shows is that this is not necessary, and we can make the image still look decent while storing much less information. The key idea is that while we want to store a _few_ angles for _every_ pixel, we only need a _few_ pixels that store a _lot_ of angles. So for example, we could store 4 angles for _every_ pixel - then have a separate map that stores 8 angles for every 16th pixel - then another map that stores 16 angles but only every 36 pixels, and so on. By cleverly interpolating this information, we get a really life-like image, while only storing a fraction of the information (and, conversely, while only having to _calculate_ a fraction of the information, if running in real time).
@Alexander_Sannikov4 ай бұрын
the really important part is that the tradeoff of spatial:angular density is only possible for a given distance range. that's why RC stores radiance intervals, because they capture light coming from a certain distance range.
@Merthalophor4 ай бұрын
@@Alexander_Sannikov Distance... from the object being rendered? If you moved away from the plane the quality would decrease?
@hnlo4 ай бұрын
Great work! I'm really interested to find out how to encode the radiance cascade data into a texture, can you give me some pointers?
@Alexander_Sannikov4 ай бұрын
this is explained in the paper
@wlatol65124 ай бұрын
Александр, недавно ютуб начал рекомендовать ваши видео, а затем подкаст с вами в роли гостя и видео с экзайл кон'а. Очень вдохновляет! Интересно ваше мнение, может ли быть эта новая технология с каскадами полезна для рассчета поведения жидких и газообразных сред? Или если заглянуть еще глубже - для приблизительного, но быстрого рассчета каустик?
@Alexander_Sannikov4 ай бұрын
У нас на сервере есть деятель, который использует RC для спектрального расчёта плазмы. Если цель -- считать каустики, то это можно сделать гораздо проще (и эффективнее).
@jeremyashcraft20534 ай бұрын
Really clever stuff! I know PoE 2 will be shipping with this lighting technique, and I can't wait to see it in action!
@Ray_Gun_lol4 ай бұрын
I dont think this is half life guys
@mmilerngruppe4 ай бұрын
нихуя не понял, но очень интересно
@GameDevGeeks4 ай бұрын
this was done 6 years ago and game engines still suck at doing this
@Alexander_Sannikov4 ай бұрын
poe2 has a much stronger GI than this
@perkele19894 ай бұрын
This, without denoiser, is absolutely perfect for particle fx, gunfire, explosions etc. where things happen fast or you dont notice details so much. Fantastic work, as always!
@fruitygranulizer54026 күн бұрын
haha this is kinda like looking at an f22 raptor and saying "this is perfect for short interstate flights!" this, to some extent, solves global illumination which has been an ongoing research topic for decades. it would be overkill to use radiance cascades for tiny particle fx. explosions, however, you're right,
@perkele19894 ай бұрын
you didnt even touch the roughness slider :( please, go into more tehcnical detail about how this works ! graphics programmer in me is amazed
@Alexander_Sannikov4 ай бұрын
now I also wonder what that slider did, because it makes no sense :D
@perkele19894 ай бұрын
The halflife refs are clearly due to your phenomenal HL voice and production quality
@Stimes4 ай бұрын
Make a fork of blender and try to implement it in blender !
@Stimes4 ай бұрын
Make a fork of blender and try to implement it in blender !
@JamesAidanKing4 ай бұрын
yea i dont know what any of this is but it looks cool
@avotini44004 ай бұрын
А где нота "ку"?
@Alexander_Sannikov4 ай бұрын
как это где? на 0:47, на седьмом ладу. у меня все ходы записаны!
@Visigoth_4 ай бұрын
Cool video (Game Dev)... YT sees my interest in "digital volumes" and recommended this.
@melody37414 ай бұрын
This is the first time I have ever comprehended these, because everyone else basically just called it black box. Thank you!!!
@codymitchell41144 ай бұрын
Absolutely gorgeous rendering
@greypsyche52554 ай бұрын
Why does this look pixelated/low res compared to 2D?
@johngddr528813 күн бұрын
you need another exponent dimension of x^3 for 3D space instead of 2d. So, it'll look more blocky and take more processing power.
@skicreature4 ай бұрын
Your mention of the accuracy of penumbras makes me wonder if this same technique could be modified in the calculation of radiation dose calculation in radiation therapy. Basically we do a bunch of complex ray tracing or kernel convolutions to perform dose calculations in radiation therapy and calculate the interactions based on a fluence maps from particular angles. For us however reflectivity isn't so important. Mostly we just have attenuation (simple calculation), and a couple different types of scattering interactions (much more complex requiring monte carlo interactions). However, our accuracy in dose calculation tends to decrease at the edge of beams (at the penumbra) as the calculation becomes most difficult there with scattering interactions beginning to dominate over the attenuation interactions.
@Alexander_Sannikov4 ай бұрын
@@skicreature people are already applying RC to a bunch of non-light radiative transfer processes. any process where energy is propagated in rays is suitable.
@LoraHannike4 ай бұрын
digital hologram, finally great work! keep it up
@Alexander_Sannikov4 ай бұрын
i have a video on actual simulated holograms. check my community page to see what it looks like.
@LoraHannike4 ай бұрын
@@Alexander_Sannikov I will <3
@LukeGeaney4 ай бұрын
Subbed - found your channel via the SimonDev video on radiance cascades then your ExileCon video :)
@TheAncientLich4 ай бұрын
your perf graph widget is awesome. I’ll look it up in your github, cheers!
@alegthephilosopher44294 ай бұрын
Гениальный фильм, гениальная музыка. Что больше всего меня удивляет - как мог Данелия вовлечь во всё это таких актеров и сделать такой фильм. Ну и музыка - нет слов.