The first 500 people to use my link will get a 1 month free trial of Skillshare: skl.sh/acerola11241 ! #ad Simpler video today, it's also my birthday sooooo you better have watched the video all the way through
@kaidaluck64810 күн бұрын
Happy birthday
@subbu_creates10 күн бұрын
I watched it all the way through and happy birthday
@alphared733010 күн бұрын
Just as i was making a project using procedural generation! Happy Birthday aswell
@cogwheel4210 күн бұрын
Happy birthday. Thanks for the gift! wait...
@AikaterineG10 күн бұрын
Happy birthday
@davidequattrocchi508310 күн бұрын
but Acerola, I wanted to complain in the comments that the title, thumbnail and premise was just an excuse to trick all of us into learning fundamental parallel programming techniques... and you did that yourself
@ultimaxkom87289 күн бұрын
Common Acerola rabbit hole trap W
@JesusPlsSaveMe5 күн бұрын
@@ultimaxkom8728 Where are you going after you die? What happens next? Have you ever thought about that? Repent today and give your life to Jesus Christ to obtain eternal salvation. Tomorrow may be too late my brethen😢. Hebrews 9:27 says "And as it is appointed unto man once to die, but after that the judgement
@ReggieVdz5 күн бұрын
ngl for about 10 minutes I thought to myself "but acerola what does this have to do with minecraft"
@antekpaztek4 күн бұрын
this video is NOT about minecraft
@paulregener70162 күн бұрын
Boy am I glad I clicked on this video in Calc-II doing sequences and series. Made all the homework I did make a ton of sense.
@diskpoppy10 күн бұрын
But Acerola, just so you know this "theoretical" completely random version of Minecraft you just described near the beginning of this video does officially exist! It's how the worlds are generated in Minecraft 4k, a Java Applet version of Minecraft that fits in merely 4 kilobytes! You could use a screenshot of that version for purposes of illustrating this concept, not just reusing the same 2d 2-color white-noise image! That, and acknowledging this obscure version of Minecraft would make the relevant portion of this video at least 20% cooler.
@SZvenM10 күн бұрын
Probably my favourite bit of minecraft trivia ever
@sullumeent10 күн бұрын
nobody mentions the mlp reference
@gilly_the_fish9 күн бұрын
@@sullumeent Good
@nullpoint33466 күн бұрын
@@sullumeent That would be in Minecraft 40k, so that it can filter out the cringe.
@JesusPlsSaveMe5 күн бұрын
@@SZvenM Where are you going after you die? What happens next? Have you ever thought about that? Repent today and give your life to Jesus Christ to obtain eternal salvation. Tomorrow may be too late my brethen😢. Hebrews 9:27 says "And as it is appointed unto man once to die, but after that the judgement
@GameDevBox10 күн бұрын
BUT Acerola
@penewoldahh10 күн бұрын
BUT Acerola,
@errorstudioz10 күн бұрын
But GameDevBox
@7EEVEE10 күн бұрын
"but aceROLLaaa..." remember chinese is a tonal language.
@GameDevBox10 күн бұрын
@@errorstudioz 😅😂😂
@GameDevBox10 күн бұрын
@@7EEVEE yeah exactly 😂
@merlumina10 күн бұрын
as a programmer and textile artist who loves the connection between the two, learning that a group of threads is called a warp made me very happy
@isodoubIet10 күн бұрын
Ohh so that's where the name comes from
@iansanford65449 күн бұрын
Modern computer programming has its roots coming from the Jacquard Loom in 1804, a weaving machine that used punch cards to control the fabric patterns. We've come a long way from punch cards on a loom, to ENIAC to PCs to smartphones, but the weaving DNA is still there in little places.
@RedFoxtail269 күн бұрын
Makes me wonder if something relevant is known as a "weft" 👀 (if not, it could be a cool name for a program that uses multiple warps, as it "weaves" between them)
@Roxor1287 күн бұрын
Only in Nvidia land. AMD calls it a "wavefront". Dunno about Intel, though.
@marcomoreno67487 күн бұрын
@@Roxor128 Intel calls it
@RobLang10 күн бұрын
Every time you mock a web dev, there's an embedded algo dev laughing at your 0.6ms, hardware abstraction layer, operating system, high level language and bounded problem space.
@Acerola_t10 күн бұрын
good thing my first real job was embedded systems
@RobLang10 күн бұрын
@@Acerola_t algo dev against silicon?
@overloader79009 күн бұрын
@@RobLang Against radio enthusiasts doing their signal processing with just copper wire and some iron rods
@hyperon_ion94239 күн бұрын
@@overloader7900Why make a computer to measure the change in voltage when I can just make the metal magically do it for me? (Please don't make me do circuit analysis)
@orestes_io9 күн бұрын
@@Acerola_t mic drop
@LordOfDegeneracy10 күн бұрын
But Acerola, I would have clicked on the video even if it just said "Fundamental Parallel Programing Techniques"
@cat478 күн бұрын
with the dearrow browser extension, the title is "Parallel Algorithm for Finding an Axis Aligned Bounding Cube of a Set of Points"
@LordOfDegeneracy8 күн бұрын
@@cat47 the dewhat
@Levi1440p10 күн бұрын
but acerola,
@melon_powa5 күн бұрын
minc eraft
@SystemSearcher10 күн бұрын
I swear most of the time inbetween these two videos was spent not on figuring out the algorithm itself, but on figuring out how to tie this neat solution to a problem you have to a gaming topic. Not even a bad thing, it's just funny to me.
@Acerola_t10 күн бұрын
most of the time was spent trying to come up with an analytical solution to the bounds problem such that i wouldnt have to waste 0.6ms on a bounding box calculation
@b_dawg_1710 күн бұрын
but @@Acerola_t , it would be worth it for a snickerdoodle 😂
@Anklejbiter10 күн бұрын
@@Acerola_twhy spend 30 seconds running some code when you could spend 8 hours failing to make it run in 29? Programming 101
@apelsin909410 күн бұрын
@@AnklejbiterYou fool, it's called optimization
@collin455510 күн бұрын
@@Acerola_t Now if that doesn't capture the vibe of half of (my more interesting) workdays
@func_e10 күн бұрын
i love learning college level maths from a white guy who says "dogshit" at least twice in each video. Mr. Rola is my favorite teacher
@adissentingopinion84810 күн бұрын
TBH engineering has a lot of multidisciplinary problems that have the distinction of "this is ass, so here is an ass-reducing function and related ass-heuristics". It often boils down to something along the lines of "O(n^k) |k>1 is dogshit for a sufficiently large n" inb4 xkcd
@bartolomeus4419 күн бұрын
This is so based, I wish college professors were inspired by edutainment youtube. It doesn't stop being science when you don't use confusing scientific lingo and boring ass Powerpoint slides.
@alloounou69005 күн бұрын
I am he recipient of two cheeks of ass ass I have read and heard the phrase simultaneously. A full moon. A 360 degree angle. The pie has been pi'd and deemed delicious.
@S41L0R10 күн бұрын
if u think about it our entire universe is procedurally generated
@yaoitiddieexpert148610 күн бұрын
or its entirely predictable. who can say
@sirel3310 күн бұрын
can we try again with a better seed
@S41L0R10 күн бұрын
@@yaoitiddieexpert1486 true and real
@wozniakowski121710 күн бұрын
so the point about it sucking stands
@JaxiPaxified10 күн бұрын
@@yaoitiddieexpert1486 or is both
@SX_710 күн бұрын
Interestingly, original Elite used procedural generation with a set seed to generate massive (especially at the time), yet always the same universe, using only the modest hardware they had available
@duncansnowden685710 күн бұрын
Came here to say the same thing. Originally, proc. gen. was used to mitigate memory and storage constraints, not to create variety or “randomness”. Mike Singleton's “Midnight” series is another impressive example from the '80s.
@HumanityAsCode9 күн бұрын
I think games still use proc gen to save memory and disk space like with the foliage example or when placing trash in a city setting.
@RAFMnBgaming8 күн бұрын
specifically it was several set seeds, The possibility space for Elite's procgen was a lot bigger than what it shipped with, the Devs just picked out the seeds for 8 generated "sectors" that worked better than average and made that the play space of the game
@HildeTheOkayish7 күн бұрын
Another advantage of using a set seed is that it is easier to create good results. You can adjust your generation to work really well on just a select few seeds, and if it looks bad on other seeds then that is fine because no one is using those anyway
@codahighland4 күн бұрын
River Raid did the same thing.
@DKarkarov10 күн бұрын
But Acerola you forgot The Elder Scrolls 2: Daggerfall! Your advert this time has convinced me you need to do your own skillshare course, on how to give a cat a belly rub. Thanks for another banger video Mr. Rola!
@gumballegal10 күн бұрын
Shortening Acerola to Mr. Rola is such a unfortunate thing in Portuguese
@ibrahimkuyumcu26499 күн бұрын
He's a foo.
@dan202v98 күн бұрын
@@gumballegal hehehehe pinto
@jktech21177 күн бұрын
TES df is semi-procedural. the world above is procedural and they selected the structures that would be in the world from lots of trial and error generations (specially towns). the only thing truly procedural in the game are the non-quest dungeons. TES arena on the other hand is almost fully procedural, so much so there are even a sort of farlands there where tiles turns into complete random ones when you reach there. im making a procedural game that is inspired on TES arena.
@DKarkarov7 күн бұрын
@jktech2117 so it is important to note I was mostly just playing off Acerolas own joke. That said, the vast majority of daggerfall is procedurally generated. Every town that is not required for the story is procedural. They just generated a series of towns they "liked" and only allowed the final version to pick from a limited set of "approved" maps that were procedurally created. The reason a side dungeon in that game can have insane layouts, rooms you can't even enter, and have quest objectives spawned into said un reachable rooms is because it is all procedural. Even the world map was just the procedurally generated seed they liked the most. If it isn't directly tied to the main plot, it was procedural. And 98+% of that games content has nothing to do with the main story.
@ByteNekos10 күн бұрын
5:36 NOOO HE SAID THE LINE
@fizzipop10 күн бұрын
the brainrot is setting in 😔
@xXMangoXx_10 күн бұрын
I audibly laughed out loud thank you
@sirsamiboi9 күн бұрын
I audibly went "NOOOOO" 😭🙏🗣️‼️🔥
@ByteNekos9 күн бұрын
@@sirsamiboi sameeeee 😭😭😭😭😭😭
@H_Is_A_Letter_That_Is_Cool3 күн бұрын
add that to the list of phrases that have been just destroyed
@angryybot636710 күн бұрын
That Terraria analogy is fun because there is a "secret" seed that makes you spawn in the underworld
@SolunaStarlight10 күн бұрын
oh there's more than one lol
@ToyokaX9 күн бұрын
There's a seed that combines multiple other ridiculous seeds too.
@killer13iii10 күн бұрын
As a programmer who wanted to make games but ended up working on document management software, I realy enjoy you content and the free knowledge.
@gagaxueguzheng10 күн бұрын
As far as I've heard, game dev can be pretty horrible because of the workload and stress. The good thing is that if you don't make your hobby to your job is that you can keep your hobby.
@thezipcreator10 күн бұрын
@@gagaxueguzheng I think that really depends on the studio; smaller indie studios tend to have that problem less than big AAA ones.
@killer13iii10 күн бұрын
I understood the AAA studios problem when I applied for a one long time ago, that's why I ended up where I am. Programming games is way cooler though.
@theRPGmaster8 күн бұрын
Very similar situation here. I'm still pursuing my goal of making games, but industrial software pays the bills.
@HuneeBruh3 күн бұрын
@@thezipcreatorthat’s what happens when you make games for profit and not for fun
@andythedishwasher111710 күн бұрын
Hey man, web developers are jealous of you for having time to play with these things. Not our fault web requests are polluted with a billion terrible frameworks. Actually wait, yeah it is. Well it wasn't my idea is what I'm saying.
@seapickels908710 күн бұрын
2:45 "tame the chaos of your ball hair with todays sponsor, manscaped"
@_cruentus9 күн бұрын
11:48 as a web developer: As long as its using tailwind 4, the newest version of react in astro islands deployed to vercel edge written exclusively by chatgpt o1-preview, yea 400 ms is probably ok
@UnknownUser-wf5kr2 күн бұрын
fachchinesisch
@Squirrelsquid7 күн бұрын
But, Acerola, I can't believe I watched the whole sponsored segment. The cat petting was enticing. No idea what was advertised, but I need to pet my cats now.
@I.____.....__...__10 күн бұрын
1:05 "Why use procedural-generation that isn't random?" - Ask farbrausch about _.kkrieger,_ a 96KB UE3-style FPS. 😒
@SianaGearz8 күн бұрын
Actually even the presented example Minecraft is deterministic by design except the very first step, seed generation. A given seed and a given version of the generator is always supposed to generate the same world.
@gerphunkle588110 күн бұрын
“Chaos Control” This is gonna be a good one.
@strangebird59746 күн бұрын
Ok, so this was a bait and switch. I, like many others, probably clicked this video because I and we were interested in an argument about procedural generation. We didn't really get one that went beyond very surface level. I guess you acknowledge this at the end, so, ok. The programming talk was probably interesting, but I was a little checked out, waiting for the video to return to the topic at hand. A little in vain. (Though, sure, the programming stuff sounded interesting, so I'll bookmark that for later, I guess.) (I probably won't.) But the topic of the video and your brief foray into a criticism of procedural generation and the subsequent work trying to tackle procedural generation, as you construed it, made me think of a distinction that I think would be interesting - interesting in regards to what I was mislead to believe was the topic of this video, not so interesting perhaps in regard to this video's actual topic (I dunno, something about algorithms for particle boundaries, something something): That is, you show Dwarf Fortress along a lot of other video game titles. But Dwarf Fortress utilizes a key difference in its procedural generation that distinguishes it from the other titles, as far as I know; and distinguishes it from your particle example, I think. Namely, DF uses a stepwise or iterative procedural generation where the initial random output is then acted upon by a set of rules that align with something we could find comprehensible, namely the history of the world plays out; this results in the randomness we encounter having an actual history and backstory in the game. This would be like if Minecraft, instead of procedurally generating the end result of a world randomly, procedurally generated millions of years of tectonic activity. You might say that this is just procedural generation with extra steps (literally!), but yes, that's what distinguishes it - because that's what makes procedural generation bad in the outset - that it lacks history and thus meaning (or rather comprehensibility) (and ok, authorial intent, I'll grant that). But in an iterative generational process like this, you are more likely (I think?) to end up with unique flukes in the world - whereas most procedurally generated content is all rather same-y. Think of the geology of Earth: you might think that everything sort of exists everywhere in terms of geology; but that's not the case. Earth's geology abounds in rare and unique biomes, where the history of things happening in a geological timeframe came together just in the right way to create something marvellous. So, I guess this long-winded comment is my qualified "yes" to procedurally generated content - if we take a cue from Dwarf Fortress and do it right. And also, that was a clever way to make us watch the ad. Not that I was watching the ad or listening to it much.
@bagodrago5 күн бұрын
Me once again realizing Acerola tricked me into listening to another programming fundamentals lecture unrelated to the premise of the video
@bagodrago5 күн бұрын
kzbin.info/www/bejne/Z3fLgKKtiNpll9E
@marcozanella985010 күн бұрын
9:20 Perhaps I'm too optimistic, but I think you are looking for is collecting semantics. If you start from the initial axis aligned bounding box, apply the first transformation to it (rather than to the points), evaluate the result, apply the second transformation, apply a widening operator to its output and the first result to get a bounding box big enough to accomodate both (that's the collecting part) and repeat for all the transformation, you should get the minimum sound AABB. If you know the transformations in advance, but not the order in which they are applied, it's a bit more involved and you may need to play around with widening and narrowing operators, but still doable, especially because this procedure can be done "at compile time" instead of "at runtime".
@___echo___10 күн бұрын
but acerola
@Mikolaj.Michon10 күн бұрын
its so hard to grasp how insanely fast GPUs actually are
@Mukna13210 күн бұрын
To be fair, each gpu thread is actually very slow in comparison to a cpu thread. It just has much more throughput than a cpu that gives it its 'speed'
@lukajk10 күн бұрын
*at certain things
@pacifico49999 күн бұрын
To be fair he used an absolutely terrible algorithm on the CPU
@neopalm20509 күн бұрын
9:21 by chance, I've actually worked on this before. I can't give you the minimum, but I can give you a relatively okay enclosing region. The largest translation has sone length l, and each scale factor scales by a factor of r at most, with r < 1, so a geometric series can give that the absolute farthest that you can get from the origin is l/(1-r). It's possible that this sphere is too large, but it will definitely not be too small. I was working with 2D rep-2-tiles though, so I didn't need to worry about it being too big, and this was plenty.
@NotKnafo5 күн бұрын
i was pissed at your criticism at first glance after watching the video im only pissed for being click baited
@HinojoGaming10 күн бұрын
I got clickbaited into learning and I loved it
@AlanStryman10 күн бұрын
But Acerola,
@laeianimation10 күн бұрын
On another note, I just started to watch Kizumonogatari and I thought to myself: "where have I seen this editing style before?"... now it all comes together!
@NostraDavid210 күн бұрын
Wave Function Collapse is (IMO) the king of procedural generation, but only for 2D. For 3D you need to dig into Grammers for procedural general. I know a guy called Paul has been working on that. He also did Model Synthesis, the predecessor of what is now Wave Function Collapse.
@gege029810 күн бұрын
i wouldnt call it "The King" but it's defo a really neat tool. there was a neat paper about "nested" wfc for content generation, you'd make a high level mask of the expected level structure and use wfc to build the specific areas. also some real interesting autoencoder approaches where the machine learns to "intuit" what vectors describe interesting/feasible levels
@jakubstaniszewski30410 күн бұрын
Could you share a name of the paper with autoencoder? @@gege0298
@mtarek20059 күн бұрын
Minecraft does have both 3d and 2d generation, including the 2d surface biome map, the 2d heightmap, the 3d cave carving, ores and 3d cave and nether biomes, 2d and 3d feature placement depending on surface or cave/nether features
@bloodgoa1399 күн бұрын
It really depends on the problem you're trying to solve. WFC wouldn't work for minecraft while fractal noise wouldn't work for townscaper (which does use 3D WFC btw!). Also depending on the use-case, it can be quite hard to keep WFC from generating undesirable outputs.
@RAFMnBgaming8 күн бұрын
@@mtarek2005 I think how minecraft jigsaw structures work is WFC-adjacent
@bahamutbbob8 күн бұрын
8:20 My favorite part of this is when you can see a modern game drawing in the void when you turn the camera.
@butlazgazempropan-butan11k8710 күн бұрын
0:20 There's no Rock and Stone, so you wont be coming home
@Ikedude89 күн бұрын
Having worked on something similar, a couple of thoughts: 1. You can use subgroup min/max to avoid having to use groupshared memory (and the associated barriers). I found this to be a big speedup specifically on an iGPU. With Vulkan you can use specialization constants to make the local size match the subgroup size (or just hardcode it to 32 for Nvidia hardware 🤷♂) 2. Each thread can load more than one number (say ~8) and do a sequential min before you do the subgroup min. The overhead of launching each group means it can be more efficient to do more work per group with less groups. 3. You can do it all in one dispatch by taking the subgroup min and then using atomic min/max. You'd need to play with the "values reduced per thread" to get the most benefit here since contention on a single global could be slower but it really depends on how atomics are supported on the particular hardware. 4. Why not combine the rough simplified point generation and extent calculation into one pass? If you're not using the points otherwise you can avoid a bunch of memory traffic by never writing them out and just having each thread generate some points while keeping track of the min/max, subgroup min/max, and then atomic min/max.
@WeedL0ver10 күн бұрын
5:35 is a copyright infringement
@Redman991010 күн бұрын
Good, I don't like IP.
@GODofTimewaste29 күн бұрын
I'm out of the loop; please elaborate.
@WeedL0ver4 күн бұрын
@@GODofTimewaste2 look up "Thick of it-KSI"
@UnknownUser-wf5kr2 күн бұрын
Thick Of It is the hit song by KSI
@Redman99102 күн бұрын
@@UnknownUser-wf5kr Ah... Now I get it. Still don't like IP tho.
@RoyalArthurio7 күн бұрын
Thanks for the video and this is great but when procedurally generating infinite worlds on a grid you need to think outside-in, not inside-out. Which coincidentally is exactly what minecraft does. It generates the large picture first and then refines the details. So essentially if you have an entity that spans multiple grid nodes (chunks) you don't generate the entity first and then figure out the bounding box. You generate the "bounding box" first and then subdivide that to generate the details of the entity. So when you start your generation from any random grid node you end up with the same result for each node. Then you don't have to confine your entities to the bounds of a single grid node. You can generate the bounds and shapes of your entities and features on an abstract level and then it doesn't matter which direction you approach them from. For example minecraft will make the same mountain and the same underground dungeon regardless of whether you approach it (and generate it) from north or south. For this to work the algorithms need to be completely deterministic. There's no real randomness at all. It's all deterministic pseudo random based on input parameters including a seed. The seed determines the variant and the pseudo randomness branching off from that (and other input parameters) creates the chaotic complexity. Jitteriness implies either non psedo randomness or a time dimension / input parameter. This is incompatible with procedural generation. You either need to at least be able to generate an initial state deterministically. If you bring a time parameter into the generation logic then you need to regenerate or mutate everything that has already been generated accordingly in real time to stay in sync with any new chunks to be generated so they can match up. Not impossible but many things considered static and final without a time dimension become dynamic and require additional logic to reconcile when mutating especially if the generation logic can interact with player made changes.
@domdru296710 күн бұрын
Since you don't need a precise solution, you could get away using probability. Take N random particles, calculate min/max bounds for them. This is similar to what you did, but you could get away with way less points using probability. Calculate average X,Y and Z distances between them and expand your box by that average up and down. If you really want to avoid clipping, scale that average by a %. I don't remember the name of this method, but I've read about it and usually use it to calculate min/max for height maps. I usually get away with about 10-100 points. Your data is probably a bit more complicated but i bet you could get away with about a 1000 random particles.
@gogauze10 күн бұрын
This is one of the 3 places I was going to start for an analytical solution. Especially because, if one does exist, it might just fall out of looking at iterations of each equation at extreme ends of the solution spectrum.
@orfeasliossatos10 күн бұрын
(edit, I misread the original poster) This is precisely an unbiased statistical estimator of the maximum of uniform random variables! Also, the solution to the German Tank Problem. (previous comment, true but irrelevant to OP's comment) I wanted to bounce off this answer with a quick theoretical justification about using the average here. Markov's inequality says that the probability of a positive random variable being K times larger than its expectation is less than 1 over K. So if you model the distance from the origin as a random variable whose distribution matches that of the current state of the fractal, and you want less than 1% of the particles to be outside the box, then make the box K=100 times larger than an (estimated) average distance from the origin. But actually Markov's inequality is relatively conservative so you're probably be fine with much smaller values of K. An alternative way of doing this could to directly use a statistical estimator of the maximum. Numberphile has a video titled "The clever way to count tanks" that gives a fun introduction ot the topic.
@domdru296710 күн бұрын
@@orfeasliossatos German Tank Problem! That's where I learnt it. Been using it for years and completely forgot how I know about it. Now I remember counting tanks in school. To add one more thing. You are right saying this is for uniform random variables. That's why I would probably scale the bounding box by more than an average to be safe. Those shapes don't look exactly uniform.
@theultimateevil343010 күн бұрын
Procedural generation that affects the gameplay (e.g. Minecraft map) goes hand in hand with gameplay features that are specifically there to mitigate bad random outcomes. You can place & remove blocks in Minecraft, build and dig walls in Rimworld, fill lakes in Factorio, etc. which greatly improves the experience in sandbox-type games. That's what bothered me in Satisfactory -- its map is not procedural, and the game does not allow you to modify it, punishing you for picking a wrong place for your factory each time, constraining the space when you scale it, etc. -- as a result, the game felt like garbage. The only solution in Satisfactory was to build the factory up in the sky since there is no terrain here. Procedural generation has started as "algorithms generating the content", but there is much more to it from the game design standpoint.
@mnxs10 күн бұрын
> "the game felt like garbage" Tbh, this just sounds like cope for your skill issues. (Yes, I said that. If you want to dish out harsh and unreasonable criticism, expect to get pushback.) Satisfactory is happy to give you either option of placement - either you can work with the terrain (which requires planning and having developed some skill in laying out factories), or just build atop/around it. There's no gameplay downside to choosing the latter, only possibly aesthetics and your sense of "realism". In other words, you're getting your panties in a bunch over something insubstantial. Chill out.
@b_dawg_1710 күн бұрын
@@mnxs I was gonna comment here… but I think you got this one covered lol
@theultimateevil343010 күн бұрын
@@mnxs This limitation serves no purpose and doesn't enhance gameplay in any way, and could've been avoided if they went with procedural, saw how the said limitation affects the gameplay in general cases and not in some niche situations, and added some workarounds that could have improved the game even in places where there are no such problems. Minor inconveniences build up after you sink in a few hundreds of hours, but they are generally ignored before that, both by players and the devs, because no dev can preemptively fix that without playing their own game for hundreds of hours as well, even then they won't fix them because they get so used to those minor inconveniences during the development. That is also why any devs need playtests, to get a fresh look on the game. And then the deadlines and the limited resources deprioritize those fixes, just so the game could be released at all, this is clearly not a silver bullet that everyone should be doing. You've completely missed my point. Any game requires the players to accept its quirks and jankyness to be able to enjoy it. I'm talking about how the methodology of Procedural can change the perspective, not about how Satisfactory sucks ass because they dared to not add the terraforming.
@rumfordc10 күн бұрын
@@mnxs nah its an inferior game and your inability to recognize why the mechanics are inferior is your own skill issue, and your reply here was your own coping mechanism. every satisfactory base ends up becoming spaghetti in the sky because its simply a poorly designed game.
@harpoonlobotomy10 күн бұрын
@@theultimateevil3430 "its map is not procedural, and the game does not allow you to modify it, (...) -- as a result, the game felt like garbage" kinda sounds like you think Satisfactory sucks ass because they didn't make it procedural with terraforming. Maybe they just wanted a fully authored game? The challenges are different, but I disagree that it's inherently worse. Because there is no terraforming you learn the map, with each new iteration you use the landscape more effectively because the limitations force you to. Because you know where resources are going to be, you can plan outposts, buildings and routes from the first foundation.
@RAFMnBgaming8 күн бұрын
My university final year project was mostly Procgen. I think the thing I learned the most from it was "if you can, just program the computer to take the steps you'd do to design something, noise sucks"
@DivjotSingh6 күн бұрын
The problem with Starfield was that it couldn't find the bounding box of boredom.
@rainboroad407513 сағат бұрын
Starbound too, maybe games just shouldn’t start with “star”
@deadlydiva10 күн бұрын
HAPPY BIRTH VIDEO
@LD-dt1sk10 күн бұрын
U think a cat will make me watch an ad?
@sparkydoggo869110 күн бұрын
new video already? i havent finished my 60th watch of the particle one yet
@moutondemocrate687410 күн бұрын
STARBOUND MENTIONNED 🔥🔥🔥 I LOVE GAMES WITH INSANE POTENTIAL THAT GET RUINED BY THE GREED OF COMPANIES 🗣🗣🗣 💯💯💯 🦅🦅🦅
@Squish_Squash10 күн бұрын
BUT Acerola! I actually love how broken the procedural generation can get in Minecraft; had a server with some friends a few years ago and we set up beside this absolutely massive mountain that had gotten sliced into and the rest of the mountain overwritten by a plains biome (kind of like the screenshot at 2:56). It was incredible. Regardless, tho, I love how you tied in a new topic like procedural generation and parallel programming techniques to your own work and real examples, it's always so fun to watch
@Lebartuu9 күн бұрын
3:37 my brain went i already watched it and have still no idea what you just said
@EmissaryofWind9 күн бұрын
It's called a warp because on a loom, the warp is the group of threads that will be going down the entire length of your fabric. Early computers were inspired by the jacquard loom and its punch card system, it's so cool to see that inspiration carried on through the names of things
@gaker19sc10 күн бұрын
8:45 but Acerola, shouldn't x=b/a, not a/b?
@Acerola_t10 күн бұрын
yeah probably
@ianmclean93825 күн бұрын
I came here to trash on procedural generators and came away with a free lesson on threaded programming and managing massive data sets
@yuu-kun346110 күн бұрын
But Acerola, if we have a thread checking for min of 2 numbers then writing that back to the local arrat... can't we just have it write the other number (which is the max) to a 2nd memory array? Would this save performance as we would dispatch half groups overall, but have double the local memory?
@tk36_real10 күн бұрын
exactly what I thought + since the video uses the "upper half" of threads just to load memory it all fits within the same buffer already used
@MiniTotent10 күн бұрын
Check the second reference. It goes into further optimizations of parallel reduction. It’s using a really old GPU but was able to outperform this example. Some other articles note that your idea is right since this is memory bandwidth bound. The really funny part is that the cpu version meets the specs he needs (>150 fps) because of caching, block, and prefetch magic. Not to mention a mid range CPU can fit the whole array in L3 cache. If you aren’t really good at algorithms use an abstraction library or just try trusting the hardware engineers. They might have optimized for your case. The real fancy parallel reduction going on here is intelligently reducing the number of elements.
@Sergeeeek9 күн бұрын
You could also use wave intrinsics on modern gpus, then you don't even need group shared memory which is still kinda slow relatively speaking.
@onogrirwin10 күн бұрын
I really love the idea of non-random procedural generation, for the purpose of saving disk space. Not something that has a place in modern game dev, but as a programmer it's super interesting.
@spacenorman862410 күн бұрын
en.wikipedia.org/wiki/.kkrieger
@PaintsAreOp8 күн бұрын
It actually is used in modern game dev. UI (especially ui animations), textures, 2d and 3d animations, splash screens are common places for non-random procedural generation. It's just then you're sacrificing rendering speed for disk space, but it allows you to do really cool things.
@PaintsAreOp8 күн бұрын
@@spacenorman8624 That game is a 20 years old tech demo where they sacrificed gameplay for nice graphics and small space. It is almost as far away from modern game dev as possible :D
@archiemcw10 күн бұрын
dinner video time omg
@Acerola_t10 күн бұрын
hi archie
@archiemcw10 күн бұрын
@@Acerola_t hiiiiii banger video goat
@73bugs218 күн бұрын
cat starts at 4:35
@megamaz1085 күн бұрын
"The problem with procedural generation" _goes on a tangent about how to keep a particle system within a bounding box for half the video_ (good video though)
@Acerola_t5 күн бұрын
the particle system is procedurally generated oh my godddddd
@fascialrufaie3 күн бұрын
@@Acerola_t But Acerola, God doesn't exist
@maimaiuwu99636 күн бұрын
So this whole video is a non-sequitur, got it. The lack of a true thesis is incredibly disappointing as well as the fact that no solutions or ideas were brought up to fix the concept that you think "sucks".
@すべてに興味を失う10 күн бұрын
0:22 You forgot to mention the greatest game of all time, *Summertime High School: A Young Man's Notes-How a New Exchange Student Like Myself Ran Into His Childhood Friend on the School Tour, Then, for Some Reason, Became Super-Popular with the Girls for His Daily Scoops on the School Photography Club Even Though He Only Takes Panty Shots, and What He Thinks as He Goes on Dates During His Summer of Island School Life.* How could you not mention *Summertime High School: A Young Man's Notes-How a New Exchange Student Like Myself Ran Into His Childhood Friend on the School Tour, Then, for Some Reason, Became Super-Popular with the Girls for His Daily Scoops on the School Photography Club Even Though He Only Takes Panty Shots, and What He Thinks as He Goes on Dates During His Summer of Island School Life!!!* (yes it's a real game)
@obsidianflight806510 күн бұрын
I know you said it's real but I want to check if it's real but I also don't want that monstrosity in my search history...
@すべてに興味を失う10 күн бұрын
@@obsidianflight8065 The game's name is quite the joke in itself! The game in question is *Natsuiro High School: Seishun Hakusho.* There are Let's Plays available on KZbin, but honestly... it might not be worth your time! Fun fact: urban legends suggest that Yandere Simulator’s creator may have drawn heavy inspiration (some might say borderline copying) from this game when designing its tropes and mechanics.
@すべてに興味を失う10 күн бұрын
@@obsidianflight8065 The game in question is *Natsuiro High School: Seishun Hakusho.* There are Let's Plays available on KZbin, but honestly... it might not be worth your time!
@pavolgocik89173 күн бұрын
I showed the video to my son and his first reaction was - why is Acerola still using a 1660?
@eliteengineer734010 күн бұрын
I watched your video TO AVOID linear algebra, not learn more of it , i hate you acerola...
@Acerola_t10 күн бұрын
unfortunately if it's not linear algebra then it's vector calc which is kind of just also linear algebra
@eliteengineer734010 күн бұрын
@@Acerola_t i wish college was like one of your videos, jokes aside, you fo fantastic work
@thesenamesaretaken9 күн бұрын
astronaut meme with text "it's all linear algebra"
@-slasht10 күн бұрын
Procedural generation is the opposite to lossless compression: When compressing (lossless) there is a minimum theoretical file size. It's obvious: if there was no minimum, you could compress to 0 (aka delete) and then get the info back perfectly. Compressing is to shorten a file while keeping the info in it intact. The file can never be shorter then the pure information in it. Procedural generation instead increases the size of a file without increasing the amount of information in it. Info humans come across in nature is never pure so we are used to it to a degree. I think that moderately diluted information can enhance a natural or even chaotic feel in a work while denser information will highlight artificiality or cleanliness. Highly diluted information might carefully be employed to highlight emptiness but at high risk of coming off as boring or generic. (Generated stuff turns out generic, more news at 5 duh)
@morais.online10 күн бұрын
1:56 Missed opportunity to make a joke about Skygrid players basically doing this exact thing
@haph208710 күн бұрын
Yeah, I was thinking that too.
@whateverrandomnumber7 күн бұрын
6:30 i see several types of random buds.
@ich_esse_betten636412 сағат бұрын
This
@bits360wastaken10 күн бұрын
But Acerola you forgot Rogue!
@NostraDavid210 күн бұрын
I've found that the programmers that play rogue are DEEP into procedural generation. Like, super duper deep. Wave Function Collapse is the tip of the iceberg deep.
@Kavukamari10 күн бұрын
they should have called it Aligned Bounding Box (Axis), not only does this allow for other types of alignment like (Vector), but it also spells ABBA
@borisoid7 күн бұрын
I love how you make videos "dark mode". Even if it means some pictures become white rectangles on black background, I much prefer this rather than being flashbanged in the middle of the night
@MissDarknSpooky4 күн бұрын
I didn't even notice until you mentioned it. Alas, I agree. I much prefer having eyesight. 😅
@sxs51210 күн бұрын
but acerola this is just a disguised video about your fractals. This barely has anything to do with procedural generation...
@mootytootyfrooty10 күн бұрын
I don't procedure I just spaghetti
@insentia842410 күн бұрын
8:25: Generally doesn't exist isn't quite correct. It's not even like it doesn't exist to the renderer, because it might still cast visible shadows. It's just invisible, nothing else. That being said, there are games where it doesn't exist to the renderer at all. And some, mostly old games, actually don't just stop the drawing, but also all logic update related stuff as well.
@NightmareCourtPictures10 күн бұрын
I’m pretty sure camera culling doesn’t render anything outside of the camera and that one of the issues with that method is that objects that should cast shadow from just beyond the frustum don’t cast shadows and you need additional logic to solve that problem. Acerola I think even has a video that goes over this.
@insentia842410 күн бұрын
@@NightmareCourtPictures Depends on the specific implementation. One way you can do it: You can use two cameras, the first one not being used by the player, that culls based on what shadows are visible in the player's view camera. The player's camera, culls anything is outside view. Since the graphics card does this, it can do both simultaneously. Afterwards you use one result to determine what to draw and the other result for which shadows to calculate. Though, depending on the complexity of your levels/scenes/whatever it might be quicker to merge the results and draw anything and calculate shadows for everything that wasn't culled by both operations.
@kenkoopa790310 күн бұрын
It's funny you mention Spelunky because it kinda doesn't do procedural generation? The levels are randomly generated, but they're assembled from artist-authored chunks with defined purposes and entrance/exit points.
@Acerola_t10 күн бұрын
i mean, randomly generated assembled lego pieces is still proc gen
@Fokkusu10 күн бұрын
@@Acerola_t you know this is funny, this means technically I'm using proc gen? unless I am mistaken, I have a level where there is a room with a door, when you press the button it has a random number generator in range, where each number is a set level with other doors that do the same, the idea is an infinite level that keeps expanding until your game crash (until I control this chaos lmao), so this is technically proc gen too? even though the rooms are authored levels done by hand
@b_dawg_1710 күн бұрын
I think those would just be the “constraints” of the model. [Minecraft worlds] are randomly generated, but they’re assembled from artist-authored [blocks] with defined purposes and [mechanics]
@mewtilation10 күн бұрын
i suddenly feel compelled to put the short-form particle content on this channel on loop on a separate monitor! thanks acerola
@petersmythe64629 күн бұрын
The problem isn't just rare failures to generate. Like if 1% of seeds spawn me in the middle of the ocean I'm just rerolling those seeds. The problem is when it creates worlds that lack depth and structure. If I make a hundred Minecraft worlds and look for the nearest river. I will NOT get 99 that have sensible, hierarchically structured watershed basins that begin as small mountain streams and waterfalls and are always converging and never diverging, exiting into the ocean, and 1 freak of nature where the spawn looks like Lake Manicougan. Instead I'm gonna get 100 generations that only bear a superficial resemblance to a river in that they are linear bodies of water you can cross. Not even one of them will even pay lip service to the structure of a real river. At most you might get some funny procedural braided streams where multiple noise layers interact or something that looks generally tree-shaped by coincidence. Right, I'm not interested in fixing rare failures of world generation. What I'm interested in is fixing the fact that procedural worlds tend to look a lot like, well, different layers of perlin noise interacting.
@ilikeshiba8 күн бұрын
If you use layers of noise for terrain you can simulate the water to make it realistic. You probably need to simulate rain (water filling empty spaces) and erosion and many other factors over quite a few iterations but you will never get the structure you’re after by any other algorithm other than a simulation of what’s actually happening, even if the model is greatly simplified.
@bennettpalmer17413 күн бұрын
I'd recommend looking into Dwarf Fortress's procedural generation - it is incredibly detailed, and does indeed run rivers from mountains towards the ocean. It also generates biomes based on temperature, average rainfall, elevation, etc. If you want to generate realistic worlds, it's genuinely incredibly impressive.
@de_soot8 күн бұрын
just a nitpick but i think in 8:45 a and b should be the other way around
@TheRumpletiltskin10 күн бұрын
YOU TRICKED ME INTO LEARNING AGAIN ACEROLA!
@BobzBlue10 күн бұрын
"But ACE-" *Turns into a game of pong
@shbeebo117610 күн бұрын
I love Acerollup (:
@fuecOHKO18 сағат бұрын
0:11 I have played (and enjoyed) literally every game he just mentioned. How is he reading my steam library??
@Xboy120710 күн бұрын
I love getting brainwashed by skillshare while watching the kitty cat 😊
@mateusvmv10 күн бұрын
Work VS Depth Work is the amount of operations a processor does, depth is the amount of steps the processor follows. Power usage, temperature, algorithmic complexity, memory usage (methinks), they are determined by work. The time taken to get the result is determined by depth (the only thing that matters really lol). The GPU might do more work overall, but the depth is lower because it does more at once.
@HidinginPublic10 күн бұрын
ALREADY INCORPORATING METAPHOR MUSIC I SEE
@VioletRM6 күн бұрын
you can't just sprinkle omori music into the middle of your videos like that out of nowhere like youre not gonna make someone cry ;-;
@alexrainbow188210 күн бұрын
Ayooo Im here early. Maybe you'll read this: Keep up the good work, you inspired me to get a lot more bold with what I try to program! I'm having a lot of fun learning coding because you showed me I don't have to make a huge finished project, I can just work on something I find interesting. Your explanations are great too.
@-Zar-8 күн бұрын
I may or may not have liked the video before it started
@MacAlmighty10 күн бұрын
Wake up babe, new Acerola video dropped
@ruzgar137210 күн бұрын
1:20 What's the game in the bottom right?
@DOROnoDORO9 күн бұрын
silent hill 2 remake i think
@greycube912110 күн бұрын
i am genuinely so upset that i will never get to meet acerola's cat
@cavemann_10 күн бұрын
Me too fam.... me too...
@ValeBridges10 күн бұрын
3:12 "... then we have to take it as an absolute certainty"
@ethanhermsey8 күн бұрын
The clickbait was unneccesary..
@Matches1st19 сағат бұрын
What are you on about
@realfries0910 күн бұрын
Hey Acerola! Really appreciate the videos and the time you put into them! They always talk about some interesting topic, and get me interested in them! You explain everything concisely and well, and I wish you the best!
@maxniftynine10 күн бұрын
Wait like MINECRAFT?!!?!?!??!?!?!!?!?!? 😃 😃 😃 😃 💀😿😭😭👴🏻
@saltedmutton726910 күн бұрын
no sorry that's something different
@augustday948310 күн бұрын
What I expected from the title: a thesis on why procedural generation can lead to boring, samey gameplay due to lacking handcrafted content that was designed specifically to be maximally entertaining. What I got: a lecture on computer science and GPU programming. I'm not complaining, but this did not go where I expected it to go. 😄
@briananeuraysem332110 күн бұрын
Under 30 second gang
@J05HY0610 күн бұрын
3 min gang defeating the "I'm first" kids
@rielco8442Күн бұрын
There is a analyticalmethod to guarantee a bounding box. Given a diagonalizable matrix A, a vector v and calling |•| the norm operator we have: |Av|
@taggerung_10 күн бұрын
SPELUNKY AND TALES OF MAJ'EYAL MENTIONED!!!!!!!!! edit: also, unfortunately spelunky does not really use procedural generation (in my opinion) beyond hand made rooms that then get picked based on the generated layout of the level.
@Pringles110 күн бұрын
Okay i was watching a bunch of videos what
@kerravon41594 күн бұрын
I dont think Procedural Generation is _inherently_ problematic. It all depends on what and how many constraints are applied to make the randomness enhance rather than detract from the game experience the Dev wants to deliver. This is where many procedurally generated games go wrong.
@gaafts10 күн бұрын
A reduction can be used without fear on any operator which is associative. (a + b) + c = a + (b + c). They’re so versatile since most operators are associative, even stuff like matrix multiply. Thank you basedrola for the PSA.
@gdclemo10 күн бұрын
Floating point addition isn't associative though.
@andrewliu659210 күн бұрын
@@gdclemo apparently if you recursively group floating point addition in such a way its error increases slower than if you just add it from front to back
@nemozinioux9 күн бұрын
14:00 Me, a game designer with surface-level of programming knowledge: "I like your funny words, magic man!"
@deleted_handle10 күн бұрын
0:15 wheree is minecraft??????
@GirlBoss6910 күн бұрын
Is literally in the thumbnail of the video...
@Lege1910 күн бұрын
I think you can calculate the maximum and minimum in a single pass. If (in the first iteration only) each thread writes back both it’s values, then the maximum and minimum are guaranteed to be in the right halves. Now you can do the rest normally, but you get to use twice as many threads, because the first iteration didn’t reduce how many numbers there were. So you get to do the same amount of work using many more threads