- 10
- 302 538
Winterdev
United States
Приєднався 30 лип 2020
I make game engines and game engine accessories
Making my game clearer | Regolith devlog 3
In this video I go over the feedback that I got from episode 2 and how I implemented the changes that these true champions suggested. The main focused seemed to be making it clear what everything meant, so I cleaned up the graphics and gameplay!
Checkout the latest build: iainwinter.itch.io/regolith
Blog: https:: winter.dev
Checkout the latest build: iainwinter.itch.io/regolith
Blog: https:: winter.dev
Переглядів: 6 215
Відео
Play testing my game | Regolith devlog 2
Переглядів 3,6 тис.3 роки тому
I was pressed for time this week so didn't write a script lol. This covers what I did last week and shows where to play the game if you are interested. Play the game: iainwinter.itch.io/regolith Website: winter.dev
Finally making a game with Falling Sand | Regolith devlog 1
Переглядів 11 тис.3 роки тому
Hey its been a while! I've been working hard on coding and haven't really had anything to show, but recently I've switch gears to this project. This should be an interesting devlog because this project is quite small so progress will be extra speedy. This video covers what I've been doing since the last sand video. I hope you enjoy my ramblings lol. Website: winter.dev
Making scuffed Social Blade with Puppeteer & D3.js
Переглядів 9623 роки тому
Thought I'd share how I built a little side project I worked on last weekend. This uses puppeteer to copy the exact sub count from my studio page, then uses d3 to graph it. Check it out: winter.dev/projects/subscribers idk if this breaks tos shhh..
Making an infinite world with Falling Sand part 2
Переглядів 17 тис.3 роки тому
Last time we made a falling sand program, but it could only simulate particles inside one screen. In this video we’ll first split the world into chunks, then look at some ways to speed it up. Full article: winter.dev/articles/falling-sand-worlds Code for thread pool: github.com/IainWinter/IwEngine/blob/master/IwEngine/include/iw/util/thread/thread_pool.h Code for the Microsoft map, not sure how...
Making games with Falling Sand part 1
Переглядів 34 тис.3 роки тому
I want to get familiar with the process of releasing a game before I finish Metal Sphere Rising, so I’m planning on making a game in a month, and then releasing it on Steam or something. Then UA-cam started serving me falling sand videos and I thought that it would be cool to use that for this project, and here we are. Let’s look at how the tech behind these simulations work, and then I’ll use ...
EPA Explanation & Implementation
Переглядів 21 тис.4 роки тому
GJK tells us if there is a collision, but doesn't give enough information to respond to it. In this video I cover a supplemental algorithm called the Expanding Polytope algorithm that uses the pieces from GJK to give us this info. With it we can respond to collisions between any two convex polygons. Check out the full article: winter.dev/articles/epa-algorithm GJK Tool: winter.dev/articles/gjk-...
Dev log 1 - Level Transitions & Boss Fights
Переглядів 2 тис.4 роки тому
Trying out a new style of video. I want to use these as jumping off points for videos like I have made before. This is what I have been doing, but now will be making videos documenting the process. Other articles: winter.dev/ Intro: 0:00 Level design: 0:26 Code: 2:08 Results: 4:54
GJK Algorithm Explanation & Implementation
Переглядів 51 тис.4 роки тому
Spheres are nice and all, but there comes a time when more complex shapes are needed. One popular algorithm for testing collisions is the Gilbert-Johnson-Keerthi algorithm, or GJK for short. With it we can detect collisions between any two convex polygons. Check out the full article: blog.winter.dev/2020/gjk-algorithm/ Intro- 0:00 Sphere vs Polygons: 0:17 Supporting Points: 1:20 GJK: 3:20
Designing a Physics Engine in 5 minutes
Переглядів 157 тис.4 роки тому
Physics is a part of games that has always amazed me. I find it funny how impossible it seemed to do correctly when I was younger. While making a custom game engine, it was finally demystified! The full article: winter.dev/articles/physics-engine Full source: github.com/IainWinter/IwEngine/tree/master/IwEngine/src/physics 0:00 Intro 0:26 Dynamics 1:30 Collision Detection 4:16 Collision Response...
Too fast...
I'm having trouble adapting the dirty rectangle, 99% of particles move between the chunks (when it changes dirty rectangles to the other chunk's dirty rectangle) however there are a few particles that don't get added the rectangle so it just floats in the air. I don't know where im missing a call to the keepAlive method
why use a map when you can use a 2d array?
If your world is static a 2d array is better, but a map allows for expansion without a lot of reallocation
Uh, that's not a solar system, it's a bunch of balls floating in space. A solar system is a collection of masses orbiting a star. ._.
maybe the star is behind the camera :p
So I have a question. Can't you just have a class that handles sand chunks, and just use a vector to contain all chunks and have a function to convert world coordinates to a position in the vector. This might be a bit biased as I am doing the same thing but my world is not infinite.
You could but you would have to reindex the array every time a new chunk is added so you'd end up basically with just a map.
@@Winterdev I've done a bunch of stuff, and I implemented dirty rects and chunks. Movement between chunks and the dirty rects work. And while I can simulate more particles the simulation is still pretty slow. I have an 800 x 600 windows. And each sand particle is the size of a pixel. Dirty rects work by each chunk maintaining an update list and containing each particles old position and possible new position(s). I don't really know where I went wrong. Are there any suggestions you can make? Is this just because I haven't multithreaded it, or perhaps something I messed up in the code?
I'm confused on the part where you reverse the distance and normal if the face is facing toward the origin. There is an edge case where if I have two cubes that are aligned on two axes and they collide, reversing the normal seems to be causing problems giving me the wrong normal. That's because the smallest normal becomes largest normal I guess, but I don't want to just cut the code out without understanding why it was there to begin with.
Can you explain why 3:06 for SphereToPlane you pass a *tb Transform pointer as Plane Transform struct ? I cannot find this part of engine on github?
What is the best way to resolve 20k objects' collisions?
you need board phase with some spatial hashing
This makes me feel like a "Welcome back, to the SandPond saga. Let's get started."
Good video, and I could understand it. But... However... Why are you speaking as fast as possible without any space between your sentences?
Where were you back in 2013 when I was writing my Terraria world analysis software that depended on computing biome extents using these algorithms... Thank you for such a clear explanation. This is amazingly informative and very useful.
looks really cool! you gonna release it on steam soon?
How did you tackle the rotation problem? That’s something I’ve been trying to solve on my own for quite some time!
a software rasterizer :)
This is SO cool
Wow. Thank you very much for this video!❤
how do you handle updating the dirty rect if two particles want to occupy the space but only one gets chosen?
its based on the final list of submitted moves
Don't you also need the full set of contact points?
yeah but only when you do angular velocity which this doesn't handle
When you say that you iterate the direction D. How you do that? How many directions you use? Which values?
Please dive deeper into the maths behind the implementations.
are u still there? beacause there is not any video while two year
Pretty neat but a little info and code on optimisation would have been really good.
I tried to download the code from and GitHub and tried to run the build file but it throws some errror
It might not be stable, floating point comparisons <-
To implement the EPA, do we need to have all the possible Minkowski difference points?
Nope just the last simplex from gjk and the support function
That... explains a lot... A while back, was trying to figure out why all the collision detection stuff was reactive to objects clipping together. Apparently, this is the norm. I wonder if I can make it more proactive. Maybe with a raycast?
;)
Pretty sure there is an error in formula @2:20. We want max(D*A - D*B) => max(D*A) - min(D*B) => max(D*A) - (-max(-D*B)) => max(D*A) + max(-D*B). This is using the identity that min(f(x)) = -max(-f(x)). I think you just merged the minus signs on accident. What are your thoughts? Am I missing something?
thought the same thing. I also think, that this is an error.
...Is collision detection between primitives really as simple as separate functions for each possible interactions between all the different shapes? Is there not a better, more easily extended way to do this?
I changed it to be a table of function pointers later on which was much easier to work with. I don’t like the double dispatch at all looking back
Very interesting... thanks
i love you
came back after 3 years to this channel, looks like you still going strong. looks very nice :)
This can benefit so much from ECS
Or cuda depending on the algorithm and data structure
Ugh. Too. Much. Math. I think i’ll just stick to iterating over my edges to find an overlap
been a while, wanted to say this looks really cool and would love to see more of it
I miss your videos!
Great video! But I have a question, how did you do the graphycs of the video? Like the dynamics title and those trancitions. I want to do videos like this, but I don't know how to make them visually apealing
A saga perhaps?
Thank you
I might sound silly but can we have a python version of this😅
nay you should try it ;)
how do you construct your vector3 union/struct/class?
It’s just 3 floats and you pass it x,y,z or it defaults to 0,0,0
The Cherno sent me here.
Don't forget quadtrees!
How to find direction in supporting point?
excited for the next devlog
Hello Winterdev. Thanks for the great Video. When checking what faces to delete you check if the normal of the triangle and the supportpoint are in the same direction. This only works for some cases. Since you want to check if the support point is on one side of the triangle you want to use the supportpoint relative to the triangle. So the check would look like this if (SameDirection(normals[i], support-polytope[faces[i*3]])
Just found this comment and it solved the issue I was on for hours, thanks a lot!
Wow!! Thank you for the easy explanation.!!!
Not to be a jerk but I think it would be valuable to clarify that this is really the sub-variant of the traditional GJK algorithm (GJK-SAT). As well as this, the number of cases in three dimensional space actually expands to considering all regions rather than just the faces of the simplex. I hate to be rude but I spent way too long figuring this out when attempting to implement this myself. Gino van den Bergen's 'Colllsion Detection in Interactive 3D Environments' documents the GJK as well as Gino's EPA rather extensively, and I think the full distance minimization implementation is insightful for those just figuring this stuff out. Either way, this video does a fantastic job explaining the essence of the support function and the configuration space obstacle. I can't wait to see what else you're up to!
The resource you mentioned has almost 300 pages.
Winterdev: Codes a physics engine in 5 minutes, provides glimpses of classes but doesn't provide the source code Me: Can I see the full source code, so that I can run and experiment with it? Winterdev: NOOOOO, don't you know how much TIME and hard work went into this??? How can you put such high expectations on me???
It’s in the article :p github.com/IainWinter/IwEngine/tree/master/IwEngine/src/physics
@@Winterdev Thank you, and sorry for the harsh comment, I just see a lot of bait on YT nowadays, trying to give ppl the false sense they've learned something when they've just made eyecandy for viewers
It is the first example of well defined problems with this kind of physics mechanics. Loved the way you explained them <3
great video ! Unfortunatly the full article is down :c