@@JordHaj Actually I believe GPT-4 is a greater teacher than Sebastian because you can ask it about anything, it can explain code for you, why you got an error and even fix the errors for you. It can explain in many different ways too if you just ask! 😊 It can also read documentation and lead you through problems step by step too!
@@Danuxsy What is the point of making a ray tracer in less than 5 minute using GPT-4, while you can use already created one ? Sabastian is learning and doing every single thing in this series, you can't imagine how much information he get out of this. For example In this video only, he learned how to perform doing random numbers, how to do communication between CPU and GPU to send mesh information, How to render meshes in ray tracer, How to calculate intersection between sphere and triangles, he learned about probability with normal distribution and uniform distribution, He did very useful visuals to check his work and equation. He did a really amazing work. It's not comparable with doing it using GPT-4.
It always sounds like Sebastian is explaining all this cool stuff with a massive smile on his face. Like you can just hear it in his voice. And his happiness make me happy in a way. I love your work, keep it up :D
It’s just the Scandinavian accent. It’s especially strong for Danish people, who often sound like they are smiling. Evidence for this is that I thought Lague was Danish before I checked the channel info, originally just to check if he might be Scandinavian. This accent results in a “happy” register in English. That being said it requires some level of happiness or concerted effort to sound like this. I assume it’s a bit of both.
@@user-bo5vr1ib6i never mind then. it was anecdotal evidence and even when I posted it I had this nagging feeling that it might be a totally spurious connection. Thanks for the correction.
That probably means a lot of testing that we don’t see. I’m a Java backend developer and writing some simple endpoints for say a Spring Boot server means first write the code that handles a request and then a bunch of tests which usually takes a large portion of the time.
He also gives the impression that he's pretending to come up with these ideas on the fly, together with the testing we don't see, it just becomes more of an ASMR parody. People worry about AI not attributing their creations to human generated training data and here we have a 1M+ YT channel blathering on as if he didn't lift shader code from open source projects like Blender or a million other places or even inspiration from any source. Sure, okay Sebastian - what have you woke up and just randomly thought of to code today? lol
@@thom1218 Maybe you didn't watch the video, but he clearly gave us the name and images of the books he read, and he clearly said that he borrowed code from others, whether it be from stackoverflow, or blender. So no, he didn't wake up with these ideas. He's spend quite some times studying and writing code. Hence why he barely uploads.
I've made a raytracer in c++ as well , it isn't as easy as he shows , he just shows the concept and how the code works he puts a lot of effort than he shows.
That technical difficulty during the FOV part in the intro had me in stitches, unapologetically showing that even though we have the lofty goal of ray tracing we can still have something so trivial trip us up. I just love how incredibly informative as well as entertaining Sebastian is
I love how relaxing and inspiring your videos are. I’m always getting a humble„No big deal“ vibe, which pushes me to never be too proud of my achievements but accepting them as the next step but not the last. Thanks for your hard work! Very appreciated ❤
Hey Seb, I just wanted to appreciate the extra effort you take to code/setup your visualisations that aren't part of the project but enrich your explanations substanially. Animations, concise statements, music, all of it sparks my sometimes diminishing love and passion for programming. Thank you.
100% Agree. This must be lots of extra work, but even when I'm only understanding a fraction of the code & concepts (I quite enjoy being so lost tbh!) the animated examples and explanations give me something to grip into. I just had a horrible morning btw, and this vid has calmed me down soooo much. Also the images are beautiful!
It's amazing how I am entertained both by a gentleman like Sebastian, with his calm and warm voice, and by characters like The Code Bullet, his cursing and his madness. Different Content Creators, united together with many others by the passion for coding. ❤ thanks
Sebastien is Lawful Neutral, Coding Train is Neutral Good, and Code Bullet is Chaotic Neutral. We need to find the Neutral Evil coding channel to have the minimal alignment axes representation. It would be amazing to fill out a full 3x3 grid of coding youtubers, but I am not sure if there are that many.
I love how you walk through stuff like this. You get the audience to ask, "What is the next natural step?" and give them the breathing room to think of an answer. Then you show them what you came up with and sort of hint at why it is a useful concept more generally without saying it explicitly. Your videos are simply fantastic at getting people (specifically me) to think through complex problems in small rational steps. Bravo. Keep it up!
Incredible video ! I usually have a hard time understanding these more complicated aspects of computers, games, renderers, basically technical stuff, and while it still is a struggle, your videos make these so much easier to comprehend or at least visualize. This 40min vid felt like a 20min one with how well everything was presented. Incredible stuff, as always ! And these renders are really cool looking !
If you would like some more knowledge about some of the topics in here like matrixes, shaders and general redering I would recommend reading the Free pdf book. LearnOpenGL. The first chapter goes quite in detail.
Would highly suggest adding a bounding volume hierarchy to your little renderer! Makes a world of difference in performance. Also if you really want to get into the advanced features of a path tracer, try implementing multiple importance sampling with next event estimation!
Congratulations Sebastian, you are hereby certified crazy for doing all your animations inside Unity. You may add that to your CV for future job applications.
I love your stuff. Your visuals are so clean and satisfying. You also have perfect concise explanation that are still very informational and in deapth. Honestly you are probably my favorite codeing/dev channels. Also, really good at getting me inspired to do similar projects for fun.
I wrote some kind of ray tracer 2 years ago, but for sound sources in a reflecting (reverbing) room. Like a 3D sound simulator. I just tried to figure out everything by myself without any knowledge - and of course i stumbled over some of problems i weren't able to solve by myself. It's really nice to see this video and how you came to every single of my problems and then showed how to solve them :)
Absolutely glued to the screen. You produce some of the best balance of technical and visual teaching/adventuring I've ever seen, video after video, and this was by far my favorite! Wonderful work :)
This was a super fascinating watch. Ray trace rendering was always one of those things I just accepted to be magic, but this broke things down in a way that was really incredibly easy to follow. Really great video.
I swear because of these types of videos i am learning again why i love to work in this field and how much I just love the sheer wonder and fascination of making math look good. I was grinning the whole time like an idiot during the reflections part and its also partly the fault of the video, because your videos are so well done and cinematic, I could watch them all day and just leave them running in the background
I specialised in physically-based rendering during my master's degree, had to do a whole ray-tracing project very similar to this so was very nice to revisit some of the theory along with such wonderful visualisation. Your presentation of the ideas at play here is an absolute joy and your code is pristine as ever - always a pleasure to see what you're working on, thanks for the great content! :)
is this how ray tracing is implemented (bounce around till you reach light source) or people use phong's shading (calculate shadow and reflected ray) to get ray traced results??
This is just a frivolous ammount of liquid GOLD! Wh-what the hell? I have been following you for a long time, but this Render Coding was AMAZING! I think it's been five years since I started modeling for a living in 3D and I, of course, understand how ray tracing works, but this level of detail was beyond my expectations, I learned a lot today! Thank you very much!!
Running a butter smooth code means a lot of testing and tons of bug fixing that we don’t see. He goes through these issues to create 40min~ long videos for us
A quick note about the rejection method you used for the random direction originally, while it is true that about half of the time it will find a good candidate, so on the CPU it would only run on average less than 2 times, on the GPU threads are done in groups of 32 (NVIDIA) or 64 (Intel, AMD), and the threads in one of these groups can only continue once all of them does. I did some tests and that results in 6 or so iterations before exiting on average on 32 thread systems.
This is amazing. Filled with detail and excitement as you explain, it makes as I want to do it as well. Although could as well be a tutorial, it seems so entertaining and interesting watching what would happen. I subscribed and would like to follow and enjoy while you talk of the capabilities to accomplish. I did not know it could do so much, the programs. Thank you for making this and explaining along the way.
The reason that normal distribution is spherically symmetric is because when you multiply the distribution functions for x, y, and z, you get something like e^(-x^2 - y^2 - z^2) = e^(-r^2), which only depends on the distance from the origin.
Impressive to say the least. You're able to take complex subjects and turn them into easy to understand lessons that are also beautiful works of art. Really enjoyed this
13:00 You want to create points using a distribution in (x,y,z) that is only a function of (x^2 + y^2 + z^2) = r^2 (that means it has no dependence on direction, which means the points will be evenly spaced across the surface of a sphere). If we take x, y, z separately, the resulting distribution f(x, y, z)dx dy dz = f(x)dx \* f(y)dy \* f(z)dz (this is because the three are independent (because we calculated them separately), so the probability of finding our output position in the range (x, y, z) -> (x+dx, y+dy, z+dz) is equal to the probability of finding x in that range, times the probability of finding y, in that range, times the probability of finding z in that range. Like how the probability of flipping a coin and getting heads three times is the probability of getting heads once, times the probability of getting heads once, times the probability of getting heads once) Intuitively, it seems that we should take x, y, z from the same distribution (because it's independent of direction, we can't treat different directions differently). Applying these, we see: f(r^2) = f(x^2 + y^2 + z^2) = f(x^2)\*f(y^2)\*f(z^2) What type of function is defined by f(a+b) = f(a)\*f(b)? An exponential. So we find our distribution must be f(r^2) = exp(-r^2), which is a normal distribution. I hope that helps, if I have explained anything badly please say so!
Was just watching the new 2Blue1Brown video "Why π is in the normal distribution (beyond integral tricks)" and it basically explained this. Very interesting.
I noticed he did the same thing in the defocus code at 33:00, realistic/"ideal" lens blur tends to follow a gaussian curve, would that mean you'd want your ray distribution from the single pixel in the camera to follow a similar curve?
I think I remember someone doing a straight poisson distribution lookup to a table of pre-calculated coordinates for some of these ray directions. I think the idea was to get solid randomness cheaply as you were looking them up instead of calculating them. It was a disk and for better randomness you could just keep rotating the disk. (for say different ray hits or frame numbers) I didn't do this myself but its a memory of something that might have happened. :D
This is the exact kind of thing that I love about programming. I recently made my first pathfinding program in pygame (using Sebastian's A* video), and seeing it work was the best feeling. I feel like making a game would give you that every once in a while, but with little experiments the whole goal is to get a single system working well.
As someone who does a lot of technical programs especially like this on Scratch, I love this content for two reasons. 1. It teaches you how to do everything and it is detailed. 2. It gives me ideas for demo scenes for when I share my code.
13:01 The spherical symmetry is because the joint probability of multiple independent Gaussians e^(-x^2) looks like e^(-x^2) * e^(-y^2) = e^(-x^2-y^2) = e^(-r^2) which only depends on the radius and so is spherically symmetric. So Gaussians are useful here because they exploit the group structure of exponents to recover the radius just by being multiplied together. Thanks for this video, it was very satisfying to see you build a raytracer from scratch with much more success than I ever had! I would love to see a continuation of this with denoising, importance sampling, SDF support (fractals 😍), or any of the other features you mentioned at the end
I am blown away by this video. You made not only one of the best ray tracing explanations I've seen, but a really cool engine as well! I'd love to see this become a series, maybe touching on performance improvements and code optimization as well.
Hey man just wanted to post a comment to express my love for your videos. Im currently in school studying software development but my love for programming and technology goes beyond that. I'm not the smartest guy and I'm not going to pretend to understand everything you do or say. But man I've learned ALOT. So far the most fascinating thing you taught me is the HOW math is actually used in creating all sorts of things. I've always heard that math is important but I never got an explanation for why or how. I appreciate and love everything you do and I hope you continue making videos like this for a long time. Much love ❤
You have a great understanding of code and programming concepts, and you're able to explain them clearly and effectively. You have a knack for debugging and solving complex issues and your attention to detail and ability to write clean and efficient code is impressive. I take you as an inspiration.
this is amazing!!! it's so cool how each step builds up to a good-looking ray tracing implementation despite all of them seeming relatively simple compared to how complicated rt seems as a whole. you're really good at explaining things! i understand how it's ray tracing works much better now, thank you :)
Thank you for producing such a quality work, I have never ever seen someone that explains something which is directly illustrated with a game engine like you! Coding Adventure = Masterpiece. 👏🏼
안녕하세요.학교 도덕수업 선플달기 프로젝트를 하고 있는 중학생입니다. Sebastian Lauge님께 감사하다는 말을 전하려 글을 쓰게 되었습니다. 이 시리즈는 제가 코딩할때 많이보는 시리즈 중 하나인데요.흥미로운 주제들이 많아서 많이 찾아보고 있습니다 원래 이런 시뮬레이션들은(특히 유체) 기술이 정형화 되어 있을지도 않을 뿐더러 또 자료도 많이 없고 중학생인 저한테는 많이 어려웠지만 영상을 몇번씩 돌려보며 어떻게든 배우려 했던 것 같아요. 진짜 자료 없을때는 엄청 고생했는데 진짜 이 영상 덕분에 어떻게든 할 수 있었던 것 같아요 Sebastian Laugue님의 완성된 결과물을 보면 진짜 하나의 예술작품같아서 coding is beutiful이라는 오픈프로세싱의 프레이즈가 딱 맞아떨어지는 것 같습니다. 앞으로도 좋은 영상 올려주시길 바랍니다.
Very impressive results! And the approach you took on the depth of field effect is really clever! One thing I'd suggest looking into is avoiding branches - particularly if statements and loops that run a different number of times for each pixel. You can use compound assignments in a lot of these cases, even in cases where you conditionally want to leave variables unchanged. The reason for this is that GPUs are optimized for running the same code millions of times with different numbers. They have thousands of cores that are all being handed the same instructions, and if there's a branch, that means the GPU has to discard the results from a lot of its cores and re-do the process again for the other paths the shader code can take. Even if writing branchless code means your GPU is doing more work per pixel, you might end up with a net improvement in performance just because your GPU isn't re-doing the same work several times to handle branches in your code. The RandomDirection function at 12:00 and the new one at 12:50 are a perfect example of this: the first version is, on average, much cheaper, but runs some random number of times before it exits and thus forces the GPU to do a large number of re-dos. The version based on a gaussian distribution is more computationally expensive but lets the GPU get all of its results in one shot, so it's faster. I have a fair bit of experience writing compute shaders in HLSL (and some graphics-related ones with GLSL) and it's often a night-and-day difference. With lots of nested conditions like you have here I wouldn't be surprised to see hundred-fold improvements in performance if you write your code with this in mind. If you'd like some help with this, feel free to shoot me a reply :)
splendid video! I dont know what it is, but everytime you speak Sebastian, i imagine you having the utmost smirkiest of smiles on your face as if you're feeling the maximum superiority flowing through every cell of yours :D
I don't think the basics of the algorithm would be much different, you just cut off the ray after collision and make a new one with same properties starting from the end of the portal, it would be laggy as hell though because of how much more information the renderer needs to account for
Sadly it's way less complicated to do this than most things you see in this video (sad as in it's gonna be trivial in math so that it'd barely be a minute in the video, at least in coding it). It's gonna work the same as perfect refraction or reflection, which we already got.
Ray casting instead of ray tracing, which only proves I took computer graphics courses about a decade ago. Ray tracing is the accepted name of the process (e.g., RTX4080). I am making this the year I restart my CG journey. You actually provided a lot of great debugging ideas,. I remember debugging being one of the main hurdles in the courses I took a decade ago. Glad to see you reference the Peter Shirley books as I will use then when I get started.
@@GnuSnu Einstein: My comment were based on his utube post in which (if you are paying attention) the code is on display in addition to the 'pretty pictures'.
It's all ray tracing. There's so many variants it's pointless to try to assign one name to one variant. It all comes down to the maths of calculating intersections between rays and geometry. RTX-based ray tracing is simply hardware-accelerated ray tracing. In other words, the hardware assists in doing the maths of tracing the rays. It's still ray tracing with it's done with dedicated hardware or not.
@@clonkex In CompSci the formal term is ray casting, but ray tracing is the term used. Actual true ray tracing is performed in optical design as rays are traced through an optical system.
This seems like a great way to try out materials that aren't physically possible. - What does a material look like if light always bounces away directly along normal vectors? - Vampire materials -- they're invisible in mirrors (only show in first bounce) - Reverse vampires -- invisible when viewed directly (ignored as a 1st bounce), but show up in reflections
Dear Sebastian, your channel's a delight, With knowledge gained, my mind takes flight, Your game dev tutorials, top notch indeed, But other topics, left unexplored, I concede. Yet the quality of content, I must profess, Is unparalleled, leaving me impressed. So keep on creating, keep on sharing, Your passion for learning, ever daring. Thank you for all that you've done, For inspiring us to learn and have fun. May your channel continue to thrive, As we journey on, to grow and thrive.
Man, this is by far my favorite channel on RU-vid. The stuff you create is always so cool and interesting, and the quality is just out of this world. I honestly wouldn't be surprised if you spent significantly more time coding the visualizations of what your code does than writing the actual code, but that effort really pays off in the final video.
I have never understood a thing of what you have done - but I have watched a lot of these videos. They are super great to watch to just get a wash of 'I'm still learning' as an adult
I cannot imagine how much work it is to write the storyline, code everything, take it apart again to "live" good for the video while perfectly narrating. You are one of my favorit tubers and I always have to restrain myself to not share your video with everyone I know! (Though I have shared them many times anyway)
This was such an educational video and the end results so amazing! I now better understand the concepts of specular and diffuse reflections. Thank you, Sebastian, for doing this!
I've been secretly hoping these videos and topics have all been related to some hidden project. Imagine if once he's done enough of them, a new series starts "Making my own game engine" and then he just starts building things from scratch again.
Amazing video. I bet when you look at the views graph throughout the video you just see a straight line because we all are glued to the display watching without a breath uniformly ❤
I absolutely love how exploratory and educational every one of your videos are. Every video is so well put together and your explanations are clear. I don't think there's been a single video that you've made that hasn't taught me anything new.
Please! hear this out: when Sebastian tried averaging the pixels over multiple frames, he got really blurry results with moving objects. (Progressive Rendering) But If he stores the ray trace data to a list (per screen pixel), and then averages that, he will get the same effect. But then he should have each frame's data gradually lose the influence it has in it's pixel, until the oldest data has no influence, and is discarded. I think the effect this will have is: Decent real-time ray tracing, and easy motion blur!
I LOVE your content. Incredible attention to detail. I've had similiar projects in my head, projecting my ideas, and the pipeline of stuff. I really need to kick this off. Hats off to your content. Its magical.