- 390
- 344 807
Jason Doucette
United States
Приєднався 30 тра 2006
Hello. I'm Jason. I'm a retro indie game developer.
Co-founder of Xona Games, "Empower the Player" philosophy -- with my twin brother, Matthew.
My games: Score Rush, Decimation X, X2, X3, Duality ZF. Some available on Xbox and PlayStation.
I make retro games with a focus on Gameplay & Empowerment.
I make my own custom game engines from scratch. Some written in assembly and machine language.
My first game (7 years old) used hardware sprite using v-sync automotion.
My innovations & technologies have resulted in 5 patents. My best inventions are not patented.
I have had two world records in number theory.
I solve Rubik's cubes (15 seconds), sometimes race cars (and go-karts, R/C cars).
I occasionally work at high tech companies (Amazon, Oracle) making cell phones, AAA games, and clouds.
Co-founder of Xona Games, "Empower the Player" philosophy -- with my twin brother, Matthew.
My games: Score Rush, Decimation X, X2, X3, Duality ZF. Some available on Xbox and PlayStation.
I make retro games with a focus on Gameplay & Empowerment.
I make my own custom game engines from scratch. Some written in assembly and machine language.
My first game (7 years old) used hardware sprite using v-sync automotion.
My innovations & technologies have resulted in 5 patents. My best inventions are not patented.
I have had two world records in number theory.
I solve Rubik's cubes (15 seconds), sometimes race cars (and go-karts, R/C cars).
I occasionally work at high tech companies (Amazon, Oracle) making cell phones, AAA games, and clouds.
Nvidia GeForce 4090, Butterfly Effect - Chaos Theory, Strange Attractor
2024-11-10. The butterfly effect is the concept that small changes in initial conditions can lead to vastly unpredictable variations in future outcomes. Its origins are from chaos theory. While a system may be deterministic, you cannot predict the outcome. The name arrives from the idea that a butterfly’s wings flapping in one part of the world could set off a chain of events leading to a tornado in another. This emphasizes the sensitivity of initial conditions, where minor inputs can create significant, cascading effects over time.
BUTTERFLY vs ASTEROID
I've never liked the butterfly wing example, since I feel it's intuitive that the few air molecules that are impacted are silenced so quickly. You have to stretch the imagination that some few molecules happen to be at the breaking limit of impact several times over. I believe a better example is that of an asteroid. If an asteroid misses Earth, we are fine. If it hits Earth, civilization could end. The required force to deflect this asteroid diminishes the further away it is -- since a small change in trajectory today becomes a larger and larger distance over time. You could imagine the asteroid is so far away that perhaps a single molecule bumping it is just enough to miss Earth a million years later.
STRANGE ATTRACTOR
Lorenz Strange Attractor is a weather pattern model of 3 differential equations. While it represents a 2D slice of the weather, since we are tracking 3 variables, we can draw the results in 3D space.
𝑥 - convective motion / rate of flow.
𝑦 - temperature difference horizontally.
𝑧 - vertical temperature variation.
The system modeled is based on these three parameters:
σ (sigma): Prandtl number, relates to fluid’s viscosity.
ρ (rho): Rayleigh number, drives the convective motion.
β (beta): Geometric factor related to physical properties.
INITIAL CONDITIONS
ρ = 28, σ = 10, β = 8/3.
x = 0.1
y = 0,
z = -0.025 .. +0.025 -- evenly spaced for all 12 particles.
The variance is in the z value only, with a total variance between both extremes of 0.05. This may seem like a lot -- it is only 50% of the size of the starting value of x. However, as you can see in the animation, the camera must zoom out a lot to have a view of the entire attractor. Its size:
x: approx -20 to 20
y: approx -30 to 30
z: approx 0 to 50
COLOR
There are 12 particles. Each colored evenly spaced around the hue of color wheel: all 3 primary and all 3 secondary colors, along with 6 colors in-between them.
RENDERING
Each particle has its own vertex buffer. Vertex shaders color them differently -- from the fully saturated colors, then fading to monochromatic, then fading to black. They are rendered as lines, single pixels thick. Post-processing in the pixel shader enlarges them. Z-buffer is not taken into account during post-processing, so it may appear at times that a distant line is overwhelming a near line.
ARTIFACTS
The oddity in coloring is not video compression artifacts. It's from the post processor not using z-buffer, and enlarging background lines to have a "voice". Also, there's a bug, noticeable as flicker in the circle close-up: while I do render all vertices, they are lines; two adjacent vertex lists have no joining line!
CAMERA CONTROL
Real-time capture of me manually controlling a 6 DOF camera with an Xbox controller. There are several aids to make this controllable. Thumbstick massaging slows sensitive input corrections. Half-life deterioration helps keep momentum. Acceleration limits removes "jerk" (sudden acceleration changes). It is still very hard to control accurately in this case -- to show close-up views of the nearby particles, then zoom out to show the whole fractal. I find there is a charm with the motion being real-time controlled.
PLAYLISTS
- Xona System 8: ua-cam.com/video/PqFQv60p-0E/v-deo.html
- Voxel: ua-cam.com/video/uadGU-stF-w/v-deo.html
- Ray Cast: ua-cam.com/video/SkaPYZOKPQg/v-deo.html
- Graph-All: ua-cam.com/video/kLSc7bZW2Bs/v-deo.html
- Scroll Shmup: ua-cam.com/video/l9bIYkZepPo/v-deo.html
- Road: ua-cam.com/video/rA4g4VX7ys8/v-deo.html
- Arena Shmup: ua-cam.com/video/VKjiuq437t0/v-deo.html
- Wave Function: ua-cam.com/video/ngctVd9VK8I/v-deo.html
- 3D Polygon: ua-cam.com/video/0Qq_euAMP48/v-deo.html
- GW-BASIC: ua-cam.com/video/QMQJ7o8e-GI/v-deo.html
WEBSITES
- GitHub: github.com/JDoucette
- Blog: thefirstpixel.com
- Studio: xona.com
AUDIO
BTS Prolog by Kevin MacLeod
Licensed under Creative Commons Attribution 4.0.
creativecommons.org/licenses/by/4.0/
BUTTERFLY vs ASTEROID
I've never liked the butterfly wing example, since I feel it's intuitive that the few air molecules that are impacted are silenced so quickly. You have to stretch the imagination that some few molecules happen to be at the breaking limit of impact several times over. I believe a better example is that of an asteroid. If an asteroid misses Earth, we are fine. If it hits Earth, civilization could end. The required force to deflect this asteroid diminishes the further away it is -- since a small change in trajectory today becomes a larger and larger distance over time. You could imagine the asteroid is so far away that perhaps a single molecule bumping it is just enough to miss Earth a million years later.
STRANGE ATTRACTOR
Lorenz Strange Attractor is a weather pattern model of 3 differential equations. While it represents a 2D slice of the weather, since we are tracking 3 variables, we can draw the results in 3D space.
𝑥 - convective motion / rate of flow.
𝑦 - temperature difference horizontally.
𝑧 - vertical temperature variation.
The system modeled is based on these three parameters:
σ (sigma): Prandtl number, relates to fluid’s viscosity.
ρ (rho): Rayleigh number, drives the convective motion.
β (beta): Geometric factor related to physical properties.
INITIAL CONDITIONS
ρ = 28, σ = 10, β = 8/3.
x = 0.1
y = 0,
z = -0.025 .. +0.025 -- evenly spaced for all 12 particles.
The variance is in the z value only, with a total variance between both extremes of 0.05. This may seem like a lot -- it is only 50% of the size of the starting value of x. However, as you can see in the animation, the camera must zoom out a lot to have a view of the entire attractor. Its size:
x: approx -20 to 20
y: approx -30 to 30
z: approx 0 to 50
COLOR
There are 12 particles. Each colored evenly spaced around the hue of color wheel: all 3 primary and all 3 secondary colors, along with 6 colors in-between them.
RENDERING
Each particle has its own vertex buffer. Vertex shaders color them differently -- from the fully saturated colors, then fading to monochromatic, then fading to black. They are rendered as lines, single pixels thick. Post-processing in the pixel shader enlarges them. Z-buffer is not taken into account during post-processing, so it may appear at times that a distant line is overwhelming a near line.
ARTIFACTS
The oddity in coloring is not video compression artifacts. It's from the post processor not using z-buffer, and enlarging background lines to have a "voice". Also, there's a bug, noticeable as flicker in the circle close-up: while I do render all vertices, they are lines; two adjacent vertex lists have no joining line!
CAMERA CONTROL
Real-time capture of me manually controlling a 6 DOF camera with an Xbox controller. There are several aids to make this controllable. Thumbstick massaging slows sensitive input corrections. Half-life deterioration helps keep momentum. Acceleration limits removes "jerk" (sudden acceleration changes). It is still very hard to control accurately in this case -- to show close-up views of the nearby particles, then zoom out to show the whole fractal. I find there is a charm with the motion being real-time controlled.
PLAYLISTS
- Xona System 8: ua-cam.com/video/PqFQv60p-0E/v-deo.html
- Voxel: ua-cam.com/video/uadGU-stF-w/v-deo.html
- Ray Cast: ua-cam.com/video/SkaPYZOKPQg/v-deo.html
- Graph-All: ua-cam.com/video/kLSc7bZW2Bs/v-deo.html
- Scroll Shmup: ua-cam.com/video/l9bIYkZepPo/v-deo.html
- Road: ua-cam.com/video/rA4g4VX7ys8/v-deo.html
- Arena Shmup: ua-cam.com/video/VKjiuq437t0/v-deo.html
- Wave Function: ua-cam.com/video/ngctVd9VK8I/v-deo.html
- 3D Polygon: ua-cam.com/video/0Qq_euAMP48/v-deo.html
- GW-BASIC: ua-cam.com/video/QMQJ7o8e-GI/v-deo.html
WEBSITES
- GitHub: github.com/JDoucette
- Blog: thefirstpixel.com
- Studio: xona.com
AUDIO
BTS Prolog by Kevin MacLeod
Licensed under Creative Commons Attribution 4.0.
creativecommons.org/licenses/by/4.0/
Переглядів: 407
Відео
Nvidia GeForce 4090, Chaos Theory, Lorenz Strange Attractor, 50 Million Dots
Переглядів 21928 днів тому
2024-10-27. Chaos theory. Solution in the Lorenz attractor using: ρ (rho) = 28, σ (sigma) = 10, and β (beta) = 8/3. 50,000,000 time step iterations, each drawn as a dot, with a time step of 0.0000125. CHAOS THEORY Edward Lorenz attempted to recreate a simulation of weather patterns by modeling 12 variables (temperature, wind speed, etc.). He failed to recreate the simulation due to rounding of...
Nvidia GeForce 4090, Icosahedron Crystal, 125 Million points
Переглядів 451Місяць тому
2024-10-20. The regular icosahedron is one of the Platonic solids. It has 20 faces, each an equilateral triangle, made from 12 vertices. This is a rendering of a point cloud based on these vertices. Each vertex has a unique color that was procedurally generation using evolution theory to find maximum human perception difference. The point cloud is made by planes defined by 3 random vertices, LE...
Nvidia GeForce 4090: Chaos Game: Dodecahedron, 125 Million points
Переглядів 415Місяць тому
2024-10-12. Fractal generation using the Chaos Game algorithm, using a 20-point Dodecahedron as the native control points. CHAOS GAME Chaos Game starts with a random location, and iteratively picks a random control point, and moves towards it. Typically, the motion is 50% of the distance from the current location to the control point. In this case, it moves 70% of the way. Also, an additional c...
#8 Amazing Morphing Asymptotic Sine Graphs
Переглядів 2123 місяці тому
August 14, 2024. Rendering at 1920x1080, which makes the lines rather hard to see, even with the upscaling to 4K. Next time, I'll stick with larger pixels, or try rendering thicker lines (which is non trivial to look "right" in all directions). I was in the middle of creating a bunch of interesting sine wave graphs along with other trigonometric functions, and found a video: "Sine graphs but th...
Wall Running, Map View, DOOM + DOOM II, E1M2 (Rerelease, Aug 9, 2024)
Переглядів 1223 місяці тому
Aug 9, 2024. Another example of the glitch that allows wall-running in DOOM DOOM II for the PC Steam version I downloaded August 9, 2024. Showcased is Doom 1, E1M2. It is especially noticeable in overhead map view. Auto-run is turned on by default, and I am not executing a run input. With auto-run, you become accustomed to this running speed. You will then notice that you can "wall run" even fa...
Wall Running in DOOM + DOOM II, E1M9 (Rerelease, Aug 9, 2024)
Переглядів 1403 місяці тому
Aug 9, 2024. I found a glitch in the physics engine that allows wall-running in DOOM DOOM II, in the PC Steam version I downloaded August 9, 2024. I am playing Doom 1, E1M9 (Episode 1, Mission 9, which is the hidden level found whose exit is found in E1M3). The game has auto-run by default, which is nice. Though game purists will notice that it's for power players only (most of us today, since ...
#7 Amazing Morphing Wave Functions: Sine, Grid, 3D, Perspective, Rotate
Переглядів 1,1 тис.3 місяці тому
August 3, 2024. This video showcases the same equations as the prior, except the result is not rendered as a graph where the solution is zero. Instead, the actual result is converted into a prismatic color spectrum approximately covering all values from -1 to 1, where it fades to black beyond that range. While it's harder to see the beauty in the equation solutions, it does show a nice color gr...
#6 Amazing Morphing Equations: 3D Perspective, Grid, Rotate, Complex Sine
Переглядів 5183 місяці тому
July 28, 2024. Showcasing an array of fascinating equations, each morphing into the next. I lined up the equations to be mostly incremental changes from prior to produce a flow and also make interesting morphing patterns. The finale is my invention of the 3D formula which makes all 3D graphics on a 2D screen possible the Holy Grail of 3D graphics changed into a 2D equation. Many of the equation...
Nvidia GeForce 4090, X-Fractal (Vicsek), 100 Million points
Переглядів 3995 місяців тому
2024-06-16. Nvidia GeForce RTX 4090 Laptop GPU running on my Alienware m18 R2, to showcase the number of dots it can draw in real-time a classic demoscene effect from the 1990s VGA days. MILLIONS OF DOTS 105,000,000 dots uploaded to the GPU with a vertex buffer, colors included. (I know bandwidth would be better to ignore the color, but it's not very attractive and harder to discern.) I only up...
Pseudo 3D Road - VGA - Full Tilt - play-through, 2 crashes
Переглядів 6617 місяців тому
Jason playing through the game in full using DOSBox. UPDATED in MonoGame (XNA) in 2021: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV My playlists: - Voxel: youtu.be/watch?v=XCVWEuhCCDM&list=PLjnbT4UISq0bQF1g85tE9jTrKfEtdRYlY - Road: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV - Ray Casting 3D: youtu.be/watch?v=zjswXUTMP2o&list=PLjnbT4UISq0YcFtRFj...
Pseudo 3D Road - VGA - Full Tilt - engine test #2
Переглядів 4027 місяців тому
Testing out the Full Tilt engine. UPDATED in MonoGame (XNA) in 2021: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV My playlists: - Voxel: youtu.be/watch?v=XCVWEuhCCDM&list=PLjnbT4UISq0bQF1g85tE9jTrKfEtdRYlY - Road: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV - Ray Casting 3D: youtu.be/watch?v=zjswXUTMP2o&list=PLjnbT4UISq0YcFtRFjFQqK0g6ONNCtrvY - S...
Pseudo 3D Road - VGA - Full Tilt - engine test #1
Переглядів 4307 місяців тому
Testing sprite scaling and road rendering. UPDATED in MonoGame (XNA) in 2021: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV My playlists: - Voxel: youtu.be/watch?v=XCVWEuhCCDM&list=PLjnbT4UISq0bQF1g85tE9jTrKfEtdRYlY - Road: youtu.be/watch?v=ck5ALX11YU4&list=PLjnbT4UISq0bnfd1RC3M4PgTgkmhlkikV - Ray Casting 3D: youtu.be/watch?v=zjswXUTMP2o&list=PLjnbT4UISq0YcFtRFjFQqK0g6ONN...
Game Dev Engine #16. Elementary Cellular Automaton.
Переглядів 5567 місяців тому
2024-03-31. Showing all 256 rules of Elementary Cellular Automaton. The rules are all 2^8 ways (8 coming from 8 total ways to combine 3 binary digits) of propagating a 1-dimensional array of cells. Rule 90 is interesting in that it appears to produce random output, and is also visible in nature! Some patterns also result in the Sierpiński triangle. I really want a way to close the windows of th...
Game Dev Engine #15. Munch Man. Sprite Scalar.
Переглядів 5728 місяців тому
2024.02.29. Munch Man (A.K.A. MunchMan) is a TI-99/4A computer game made during the Pac-Man craze. This is not what it looks like, but I'll be editing it to be more like that original solid state cartridge which was one of the best sellers back in the day. Munch Man started out as a dot muncher, and was changed to lay down a chain to fill the maze, rather than eat dots to empty the maze to avoi...
Game Dev Engine #14. X-Fractal Recursion.
Переглядів 674Рік тому
Game Dev Engine #14. X-Fractal Recursion.
Game Dev Engine #13. Fractal: Iterated Function System.
Переглядів 594Рік тому
Game Dev Engine #13. Fractal: Iterated Function System.
Game Dev Engine #12. Order from Chaos: Sierpiński Triangle.
Переглядів 670Рік тому
Game Dev Engine #12. Order from Chaos: Sierpiński Triangle.
Game Dev Engine #10. Dynamic Pixel Zoom.
Переглядів 860Рік тому
Game Dev Engine #10. Dynamic Pixel Zoom.
Game Dev Engine #4. Window Refresh Bug.
Переглядів 777Рік тому
Game Dev Engine #4. Window Refresh Bug.
Game Dev Engine #3. Window Input System.
Переглядів 785Рік тому
Game Dev Engine #3. Window Input System.
Platformer #37 - New Art, Quick Play, 4 of 4
Переглядів 653Рік тому
Platformer #37 - New Art, Quick Play, 4 of 4
Platformer #36 - New Art, Quick Play, 3 of 4
Переглядів 552Рік тому
Platformer #36 - New Art, Quick Play, 3 of 4
Platformer #35 - New Art, Quick Play, 2 of 4
Переглядів 550Рік тому
Platformer #35 - New Art, Quick Play, 2 of 4
❤
lol you inspired me to make a voxel space engine of my own
Yes!! Please start one and share! I'd love to see your progress! :) Do you have any other graphics projects?
Wow , I was browsing old youtube before:2007 and I found this, this the most impressive thing i found yet :)
That's awesome! Thanks for the complement, and welcome to yesteryear! I think I uploaded this not too long after UA-cam was a thing. I guess you were looking to see some of the first videos ever uploaded... crazy thing is that this tech is from 1995, so even 2006, when I uploaded it, was a decade later.
thank you for the asteroid example, really put the idea into perspective, crazy!
Glad you enjoyed it. I think it's the easiest example to consider. Once you grok that, you can start to consider more complex examples. I still think the butterfly example is far fetched, since it requires many, many "just at the edge of impact" cases -- like those comedy movies where one funny act leads to another, leading to another -- all of which are "winning the lottery" chances.
A reasonable complex case is our Solar System: the planets are chaotic. It's not clear that some of them, and some of the moons, including our own, may be ejected from the Solar System even before the Sun runs out of energy. It's only known to be stable for at least 100 million years -- but not necessarily for the remaining 5 billion of the Sun's life.
Very very cool visualization.
I will try another one with shorter particle lengths. I could probably show more particles and have it still be readable.
I'd like to also show what happens if the particles start in any area of the 3D cube -- though it may be harder to view. The parameters themselves - sigma, rho, beta - could change, which may be interesting to explore.
These are pretty great, Jason. Does it look interesting for the particles to leave shorter trails, or does it make it hard to appreciate the resulting pattern?
That's good insight, Vince. I suspect it will look nicer when shorter. They started very long, and I continually shortened them. But I didn't go shorter until I felt it was too far -- so I will try that in the next video.
🤯
amazing engine
Thank you. This terrain is actually my favourite out of the whole bunch for showcasing.
Better keep a close eye on textbook publishers to make sure they don't steal your video to use as cover art.
Ha ha, thank you my friend, I will keep an eye out!
Nice work. ❤
Nice work! ❤
Wow, this is amazing. You can explore these "formulas" and I have not seen anything like this before.
I know -- I randomly came across a Veritasium video on the butterfly effect, and it shows this strange attractor, and even explains it quite quickly (a 2D slice of fluid dynamics, where 3 variables are being tracked, which you can plot in 3D), and how it came about it (trying to replicate a simulation, which failed to replicate, so he thought the computer was broken, and then simplified the math up until this simple 2D slice while trying to find the "bug" -- having found chaos theory instead). Anyways, the video shows a few angles, and even explains a few variations well. But I've never seen anyone show the equations in detail, up close, like this before.
LOVE the showing the 3 principal axes as a plane with dots! Q. Is there a reason one of the plane axes isn't fulling showing? i.e. Right side @2:55
@MichaelPohoreski Thanks! It gives far more context, especially when spinning and zooming around an abstract (though based on physical) graph. A. Are you watching in low resolution? The planes are always visible for me. I only draw 3 of the 6 sided cube. I suppose I could draw all 6?
@MichaelPohoreski Or I could draw the planes and axes where they actually exist... the ranges of X, Y, and Z are between -20..20, -30..30, and 0..50 respectively.
@@JDoucette Nope 4K. Ah, it is just a bad perspective. I rewound a few seconds and counted the actual dots. They are are all there. False alarm of user error. =P
@@JDoucette Not sure if drawing all 6 edges of the cube would help? I don't believe so. Worth a shot to test if it adds or subtracts from the main image.
@@MichaelPohoreski I bet I know what happened re: bad perspective and dot counting. I have the FOV very wide. When you have even a large FOV like Doom 1993 at 90°, the dot pattern of squares will make an alignment at 45°, which is not normally seen, so you're not used to processing it. Go wider FOV, and more patterns arise. It's similar to the Golden Ratio being the most irrational number, and the "Tree Gaps and Orchard Problem" (search Numberphile for a great video). I think too many of these patterns at such a wide FOV is hard to process when you're not used to them, and also had no context that the FOV was wide to begin with, so you didn't expect to see them.
This could be the next 3Blue1Brown ... just need to add some explanation in a follow up video ;-)
Well now. That's quite the compliment!! Does this mean I have to actually go out and learn what this is actually doing? :P I have a detailed description heavily based on other sources, which I reworded to suit my own understanding, but found that I had to leave it largely as-is. I think I need to make a few more of these simulations, and read a bit more, to truly grok it.
For this simulation -- just as 3B1B would likely dive into explanations -- I would love to show the limits and how this works. Starting from different parameters, and seeing which ones being chaotic, and which one settle down. I am not sure how to covey that much information -- but it could likely be done. Perhaps even showing only those that become chaotic.
This demo shows 50,000,000 dots. If you pause at the right time, you can see how close they are. I'm not even drawing lines between the dots! This could be rendered as lines with 1/100th or 1/1,000th the amount of vertices and still have the same fidelity. So I could really draw a lot of content at the same time.
@@JDoucette Yes. :-)
Nice! I subscribed because of my brief interest in old racing games, and now here you are, sharing my long-time interest in math and physics.
I will return to the retro pixel pseudo 3D racing game engine eventually! :) I am happy you are enjoying these videos as well!
Beautiful!
Thank you!
This is awesome.
I have a bunch of additional ideas for this same shape. Using a Sierpiński triangle between the 3 nodes for each plane. Or using the point cloud I have here, but biasing it towards the edges of the triangles in each plane. That could be done in 3D, not just planes, as well, with 4 points per sub-object.
It's very pretty
Why thank you! :)
Absolutely beautiful! Ignoring the Z-buffer is a nice touch. Reminds me of Monte Carlo approximations.
Thank you! I felt it is Monte Carlo to some degree, since the triangular slices through the solid are not rendered as planes, but as a point cloud of possibilities. Though there is no progression of each point to the next -- every point is independently generated -- so it may not fit the true definition.
Make this a screensaver
That, my friend, is a great idea. This kind of road scenery can be generated forever. The artwork, not so much, so that would repeat a lot. But the road twists and turns could last hours even manually created, not even procedurally.
POINT DEPTH SORTING: I saw a comment (since deleted), so I am sure others had similar thoughts: "... there is a point depth sorting issue ... points that should be in front seem to be displayed in back ... could just be a UA-cam video compression issue." Not UA-cam's fault! I am rendering them this way, as single pixels, depth-sorted. Then a post-processor enlarges them into circle. So what happens to depth sorting? The depth data is not present in the rendered texture, so it just combines the colors. Points grouped together in the distance are more dense (on 2D display), thus consuming more of the color-combination -- thus points further away seem more "powerful" to visibility. The effect is kind of cool, so I wanted to capture it before I do away with it. I plan to add depth-buffer storage to use during post processing in my next video. :)
where do I go to try it out?
I don't have it available as a demo. I've considered releasing the source code, but it's not a user friendly app at this time, and it's still in development. I wonder if I could release it on the web. It would need some work to be usable.
Cool! Thanks for the detailed description too, very interesting technically!
Thanks! The classic chaos game example is the Sierpiński triangle, which is 2D, 3 control points, and you move halfway to the randomly chosen point each iteration. It's a surprise to get beautiful order from chaos. But once you think about it, it makes sense: If you can peer into the future, by starting with the entire answer/result (Sierpiński triangle), take all points, and then move them all halfway to any of the 3 source points, you can imagine that you'll end up with the 3 sections that build the whole. It's not so simple to imaging if you start messing with the parameters and adding restrictions. :)
im no expert but dig the technique/look, i love the flower fields
Thanks for the note. I appreciate that. And this is with my terrible pixel art drawings (first time drawing flowers!) and all of the flickering aliasing (I want to add mip-maps, and handle when they invoke, but the GPU seems to want to control that itself). So it can be much, much improved. In any case, I agree with the sentiment -- these infinite fields of flowers are amazing, and I've wanted to see it done ever since Out Run pulled it off back in 1986 in the arcades...
@@JDoucette are you talking about the grainyness of the flowers in the background when they come/move forward with the image? I guess that could be nicer but it doesn't matter, the overal crispyness and smoothness/speed of the image coupled with the vast sea of flowers is what gives it charm
@@tnmrvc Yes, that's exactly what I meant. I also think I could "fill" the voids more on very steep hills (where you can see gaps in the flower lines). But, agreed, this is nit-picking, and the general aesthetic is what I love as well. I really have got to make a game out of this... :)
I still think the pseudo 3d effect looks DECENT even today personally.
Yes, for sure. I think pixel density has to be respected to really pull it off, but sprites could look flat even in 320x200 resolution, so the way it's presented matters a lot.
Is there a top level? Does the game have an end?
There is no top level. I played the game until the score wrapped, and noticed I was getting more 1UPs than I was losing, so I considered the game beat. If you search "Xona Parsec" you'll find a great page of amazing facts about this game. This caused fans from around the world to write in with details I didn't know. See the section at the bottom "Fan Feedback: Parsec Cannot Be Wrapped Indefinitely?" -- there appears to be two reasons for a Kill Screen: 1. sprite automotion using 1-byte -128..+127 causes the speed to wrap and enemies fly in the wrong direction, and 2. the larger enemies appear closer and close on each level, so perhaps eventually they are too close (though you can position your fighter to be in front of them before they appear, but that's unwieldy due to the slow acceleration of the starship).
Someone should make a ROM hack that allows you to start on any level, and see what happens. I suspect all data is stored in bytes, except for the score (though the last two digits are always 0, so they are not stored). This would mean the levels will wrap after 0..255 or there would be some oddity if it were a signed byte, -128..+127. Either way, it should reach 0 then 1 again. Outside the unlikelihood of surviving enemies that fly across the screen too quickly, I wonder if there are any actual game crushing bugs for a true kill screen.
One thing you could do with these is try weighting the different tiles; giving them similar frequencies to the rate they show up in the original might make the result look closer to the original, compared to how examples like at 7:27 and 9:12 tend to get dominated by the crisscrossing lines and have very little blank space.
Thanks for the idea. I actually have this coded already, several months ago, but not showcased due to artifacts that are caused ... but I should showcase it anyway, just to show off what happens in a trivial attempt to maintain density. The attempt to reach the density desired causes the natural flow of art generation "spreading" to mix with anxiety (yes, I'm going full A.I. in my description) that it may miss the mark, so it immediately rectifies it. This is bad. It causes a lot of activity mapped to the dynamic growth of the art -- what does that mean? Imagine that the resultant image's density hasn't been decided yet (because it hasn't), and it only has the simple view of the next few pixels (because that's how it works), so it tries to solve any discrepancies with those pixels -- right then and there. This means as soon as you get too much white, the very next pixel has to be black -- it just has to be, (unless blocked by lack of a pattern, but that only stops it for a few pixels). Now finally we have enough black. Oops, too much black! Now the next pixel has to be white. It just has to be. Back and forth. If algorithms could feel, this one would be looking for a vacation.
@@JDoucette That sounds like you’re weighting things in terms of the total number of them generated. You don’t need to do that; you can just have the chances of each one being picked during a collapse be weighted by its original frequency. For example, if there are twice as many blocks of feature A as feature B in the source, and a collapse can be either A or B, pick A 2/3 of the time and B 1/3 (like by putting two As and a B in a group and picking one at random). That should more or less get the distribution you need without falling afoul of the gambler’s fallacy. It may get a little messier with the various orientations a tile can be in (where different tiles can map to one feature), but it looks like you have that handled already.
@@KnakuanaRka Yes, you are quite right -- me trying to meet the goal, but trying to meet it too quickly, is the problem with my algorithm. Your suggestion on the chances of being picked is nice, because it's more like true randomness, vs. even forced distribution -- which are surprisingly different. However, this also has issues -- since it's a dynamic system, it can get into modes where there are simply no other choices (or few choices) ... so you just never really get a chance to choose the colors you need. It's like a 6-sided dice, for the 6 colors you expect to see, each 1/6th of the time: suddenly a 3 is rolled, which only allows a 4 or 5 from there. Even if 4 and 5 both then allow all 6 colors, that 3 will cause you to get the 4 and 5 more often than the rest. Yet, I still think this may be better than my original algorithm. I will make a note of this to try.
@@KnakuanaRka Following my thoughts above -- I think I can get out of this "oh no, I have to pick 4 or 5 AGAIN" mess by another means: The choice of the location of next pixels I should draw to. There are 2 steps: 1. pick the spot that has the least options (sort of like, "oh crap, choices are limited here, let's settle it before something else happens and reduces the choices to zero"), and 2. decide what pattern to collapse to in that spot. We were focused on step 2 in our discussion. How about focusing on step 1 as well: I don't HAVE to pick the worst case (least option location). I could pick from the bottom 10% of least option locations... then poke around at a few of them, which opens the options up, and then do your "pick A 2/3 of the time and B 1/3" with much more freedom.
@@JDoucetteYeah, sounds like that might help in terms of ensuring you can get closer to the wanted proportions. Or weight them depending on the amount generated like you said, but make it a smaller factor combined with the expected proportions I mentioned (to make it less sensitive), and see if you can find different ways to measure the proportions (like see what the difference in proportions would be compared to expected if all the remaining features were filled in proportionally to expected) so that it doesn’t veer hard to one side over a tiny difference.
This video really inspired me about a week ago right before i should've gone to bed, I'm glad i stayed up though as i drew some sprites, which eventually turned into a new breakout game on my website, with a level editor and a bunch of level packs! written in rust of course haha. thank you very much for the inspiration. i'm gonna record a quick little showcase video and put it on my channel now
One of the coolest things about making games/demos and sharing is seeing the inspiration it creates for other people. Thanks for letting me know about it, since it really adds value to the work I do.
I just checked out you video (I'll post a comment there shortly) and your game demo. That is so cool. So yeah, you made enough of a GUI to get things moving! :) -- very nice that you have an editor. Most indies, including myself, don't take this step first. The sprites and graphics are very reminiscent of my own minimalistic single-color pixel-art game. I'm glad that I am not alone in liking this very minimal art style -- as I've been wanting to make some more demos out of my Xona System 8 engine like this.
@@JDoucette I'm really glad you liked it! inspiration is a great thing and I'm very glad you could inspire me to make it. I was very inspired by many things from your game as they were just such good ideas, like the powerups and general overall aesthetic. im really excited to make more projects, maybe a nice gui system one day! haha
@@jumbledfox2098 Apologies, have been busy. A few things stand out that make me happy about this. One is that this very simple art style actually has promise, which means I can throw together quick demos that focus on gameplay and see if they are fun, while literally making 1 color art. Second, is that the power up systems here are really just a focus on gameplay and cool-factor -- again possible since the game comes together quickly with a simple backend engine and no real art. Working from first principles, you can make even a pong / breakout / arkanoid clone into a fun game. You may not have noticed, but the ball speed always gradually increases, even if you get the slowdown. This may also be a fun 2-player game.
@@jumbledfox2098 And yes, make that GUI !!
We could make a demo out of this. I could do the music.
A demo based on amazing transitions.
I agree. Demos were always about interesting effects and the transitions between them. And obviously with the music.
@@Xonatron It reminds me of the blog post "The importance of transitions" by Shawn Hargreaves --- where he quotes Johnny Christmas -- "the secret to making a game feel polished and professional lies in the transitions".
@@JDoucette 100%.
out of curiosity, how do you transition between each graph? the effect is really neat
Thank you. You may want to look at my other videos for similar examples. I morph using a smooth-step interpolation (similar to a sine wave) between the two graphs. Each graph is weighted based on the interpolation. If I clicked through more graphs before the morph is finished, it also morphs those graphs at the same time (I do this at the very end, where I run through 4 equations at once to return to the 3D graph before fade out -- which gives the very strange morph effect where you can still sense the y=x line from 3 or 4 equations back). The individual equations are multiplied by the percentage morph value (0..1) and added. I don't even ensure the sum of the weights is 1 (it always is between 2 graphs, but not if a 3rd or 4th is involved), since math is math, and it naturally has... solutions. :)
Great stuff!
Thanks Vinny! Just trying things out! :)
it should be possible to port the renderer to the gpu, right ? that way you'll probably be able to crank up the resolution of these graphs to at least 1080p (even tho the pixelated look has a charm to it)
Indeed, you are correct sir. I have been pondering that. This video is 1920 x 1080, where as my others are not (because I love the pixelated charm look, and also because it helps with video compression). Thus, this was a test. I upscale to 4K (pixel perfect) to help with compression artifacts.
GPU would help in numerous ways: Even a 32 CPU core beast is no match for thousands of GPU cores. It could render higher resolutions, render the lines more accurately (more sample points to avoid missing a solution), render the line more aesthetically (more sample points to thicken the line, and to do so in all directions). It has one issue, that it's not as abstract as my CPU model which allows me to render/morph 2+ equations at once. There are workarounds for this obviously, but it sort of has to be hacked in.
@@JDoucette it depends on how you're approaching the algorithm, but it does sound like something that'd be a perfect fit for a fragment shader, it sounds very doable (maybe even a shadertoy for that matter !)
@@dottedboxguy Yes, absolutely! I already have a basic proof of concept running in ShaderToy I made a while back, for one of my older Graph-All videos ("#5 Multi-Core Complex Equation Real-Time Render"). Let's see if I can link to it here: shadertoy.com/view/cscXRr It is under my account, JasonD.
It has the IDKFA soundtrack.
@Xonatron You can choose between the original and this remix. It's pretty cool. Every song is remixed making it interesting to play through all of the levels again.
So yeah. I found this and thought it was a bug in the new Doom I + II ReRelease -- but apparently "wall running" is a known thing from the original game, and it's called "wallrunning". Welcome to 1993. I guess there were so many motion-stopping wall glitches that I just never got near them when I played the crap out of this game back in the 90's, so I had no idea.
i've written a few comments on your videos now, i'm excited to see your responses to them haha, but GOD your work is just so inspiring!! the amazing aesthetic, the whole thing, it's just brilliant. it's really making me want to make something similar, so thank you <3 another point - how do you handle window creation and UI elements? i'm used to making immediate mode UIs as, well, they're just so simple, one function called button() or whatever in the main loop and it just works, however they're rather difficult for making nice layouts unless you get clever (which i certainly do not haha). I'm just wondering how each one stores its maze canvas and all that stuff. i'd love to hear more
You probably noticed the aesthetic improving each video -- a simple backdrop to the text to make it stand out, and the shadows on the windows are oh so easy, and recommended by viewers, and it was on my list, but it's just a matter of getting to it. When I make an improvement, it stays for all time; so it's nice to always be improving a little thing here and there, as you get on with the main work.
As mentioned in another video comment, I just wanted to align text and images for presentation, so I made some rectangle struct, and then spaced them out next to each other -- and I thought these should just be windows. Then the stuff inside the window can align itself to its window, and windows can align themselves. It's about ownership. But once you have a window and it can draw itself, then its X,Y coordinate can change. Each window has its own render target (texture) so even the components that draw to the window just believe it's the entire universe. The window manager will draw them, and ask them to update, but each window just does its own thing.
So yeah -- no immediate mode UI. Just a list/array of Windows, and the manager is in the main update/draw loop in the game system. Each frame, components are asked to update, then draw. The window manager is the only thing the game system touches (in this context). It hands off calls for update/draw to each window that was created. Each window has its own render target, so when each window calls its own things (see the example games I've made) to update/draw, like simple Sprites, it does so to the render target already set by the window manager. Thus these little games just are basic sprite movement/draw code, and they have no idea they exist in a window (other than its size info is made visible).
This is also why it was trivial to have windows own other windows. In my case, I did this just like Win32 did, to allow for status bars, title bars, etc. -- since I didn't want each window to have to maintain its own view style, and font. Therefore, you can generate a window that has 2 windows inside of it: the title and the canvas. The games live in the canvas window.
@@JDoucette aaah, that's very wise and nicely done! i'm excited to make another UI system now haha
i remember writing a minesweeper game, which was all well and good, but the hard part was making it look nice! i wrote a custom immediate mode UI system, which while intentionally limited (no windows within windows, a 'draw_text()' call has only one colour, etc etc, didn't want it to go out of scope) was a rather leviathan task haha. I rewrote it a good 3 or so times from the ground up. I started off with just a button, then made a menubar at the top of the screen out of these buttons, added dropdowns to it, and then eventually popup windows with their own buttons, text, and number fields. I certainly cut some corners though... the window type (the options window, the winning and losing popups, the one that asks if you "REALLY want to quit?" when you press x) is just an enum, and then i had a switch statement that ran for every windows update loop depending on it's type to draw the right elements... not proud of that one haha. My text renderer didn't have any nice kerning, all it had was a wide bitmap of each character, and a hashmap (that I manually wrote hahaha) with each character's width. Feel free to check it out (jumbledfox.github.io/minesweeper ) i've been skimming through your videos and they're really really inspiring me to make more projects. thank you!
Nice, just played your MineSweeper game. It works well, and looks great. I'll always love the low resolution, pixel art, and pixel fonts. I hear you on the complexities of programming UI components. It can be done quickly, hacky, and good enough for a pet project, but not enough for broad consumption. Once you start to do it right, it becomes its own project. But then, if you need good UI components for multiple projects, doing it right is the only way to fly. The windows style programming you see in Xona System 8 is literally from me trying to do 2D layouts for presentations, and after fumbling with hacks and finally making ownerhship boxes -- I realized, "hey, wait, this is just Windows ... lemme just do that."
This font kerning started with Step 1. generic fixed width font, and then Step 2. at least measure the widths and remove empty vertical lines (most indie games do this, and it's super easy to handle programmatically), and the biggie Step 3. proper kerning (with no regard for aesthetics -- just the assumption that unneeded space is bad, which suffices) -- this is very hard since you have to fit, but not touch, the characters, and even characters beyond them! My favourite example is probably in the following video Font Animations -- where you have lowercase "r", then period ".", then a quote character """: the period nestles into the r and the quote, and the r and the quote will now touch. You have to prevent that, along with nestling too far into a character.
Love this --> "they're really really inspiring me to make more projects." Keep it up! :)
it looks so amazig! the breaking is so juicy haha i love it. i tried making a platformer but collisions and physics got way too hard for me to implement :c
I just had a look at your platformer, I think it would be great. Physics is hard -- though I did this overnight in a game jam, and thought I rocked it, it has one of those Super Mario Bros. 1 jumping backward through a brick to get to the Minus World collision bugs, and it even has a movement bug where you can moonwalk. It's astonishing how difficult it is to get perfect working code for moving a rectangle in a world of tiles that are smaller than it.
I spent so much time improving the art for this little demo, and yet uploaded almost all of my videos (except for the last 4 with "New Art") of this platformer with the old crappy art that was thrown together for a game jam -- it really upsets me. :P
@@JDoucette it really is shocking how hard something that sounds so simple can be! i think you really knocked it out of the park as it looks very responsive and snappy. especially for overnight! plus, those bugs give it charm haha. perhaps you could hide a minus world easter egg
@@jumbledfox2098 Ha ha, of all of the easter eggs I've thought about, making a Minus World was never one of them -- but that's an epic idea. For the responsiveness -- there is no acceleration other than gravity, so it's very much like Mega Man where you immediately change direction. I also did not implement variable jump heights, so in this sense, it's like Contra -- it would be harder to implement variable height, but not too hard. I appreciate the kind words though!
Holy crap! Knew it was only a matter of time before Xona was running Doom!
Xona has been running Doom since 1993! :) It was the most immersive game I had ever played. Full screen, no HUD, stereo headphones, all lights off, middle of the night, and face super close to a large (I believe 15" at the time) monitor. I was only getting 4 hours of sleep a night back then.
I was going to delete this video, and upload another -- since the E1M2 outside showcases great for this wall running, both in Third Person view, and in the overhead map view. But not now that you left a comment. :)
@Halleluyah83 -- regarding your comment "В какой программе всё это сделано?" -- it was made in C# using MonoGame platform, which is a cross platform version of Microsoft's XNA. The program and rendering is my own software.
For some reason your comment was deleted -- it's hard to tell from what source.
really good
Thanks! Glad you enjoyed. I need to get the curves working, to really show this off, but it's not so trivial (as you can see!)
If anyone has ideas for aesthetic color palettes, please let me know. I'll give them a shot!
inspired by your work. i've been exposed to a new world! can't wait to try this out for myself.
That's so nice to hear! If you have any neat equations you invent or discover, please let me know. I'll likely record more morphing videos, and try out variations that are interesting.
Duuuuuuude.... We need to talk, I have crazy material for you....
"Hey man I added your absolute value idea" "Okay, cool, I che-" "Oh yeah and I also redefined how pixels work on a meta level" I can't wait until LSD simulator hits Steam
Now I have to add new color palettes. More funky equations. Slower transitions. Transitions between multiple equations at once. VR play. Multi user parties / dungeons. ... Oh wait... what was I doing again? ... something about graphs ...
how is the skybox texture drawn here? Same algorithm as for terrain but with no heights?
Great question. The skybox is drawn like Doom 1993 does it. It's a 2D texture. Each screen column represents an angle 0..360 degrees around the player, which maps on a column in the 2D texture. This slice is drawn to the screen for the skybox. This means the angle is correct, but its view distortion is not -- as you rotate around, things stretch and enlarge near the screen edge, and the skybox should do the same, but it does not, just like in Doom. Doom's distortion was more pronounced, even though both Doom and my voxel engine has 90 degrees horizontally, Doom being 4:3 aspect ratio is showing more FOV vertically, which you can see the lack of distortion of the skybox not matching the extreme distortion of the foreground.
In terms of rendering without overdraw, it also holds correct. So, you're correct that the algorithm is the same in some sense, since once I get to the end of the terrain in the distance, all I have left is to fill the skybox pixels, and that's exactly what I do. Any pixels hidden by terrain are not processed. Only visible pixels are processed.
So cool to see it with color now! It really scratches the itch in my brain that loves this stuff.
The coloring adds another dimension, as the prior video was only showing the value of the solution, where it is zero, thus it was really just a slice of the full data. But strangely, while the coloring can be more beautiful in terms of vibrancy and perhaps more data and more motion, the original solution-only video seems more "pure". Ultimately, equations are usually for solving the solution. With this extra info, the coloring is basically an offset, so you could also render this as a height in a 3D terrain. Then the real solutions are the minima and maxima values in the equation, which is the derivative of what you see here -- like where a ball would fall and rest in the slopes of the terrain. These would just be points. I'll have to consider if I could use my voxel engine to showcase the terrain. In the meantime, I think this shows some nice colors. :)
This certainly has an Evaldraw feel because of the color mapping and seamless transition from one formula to another. However, this leaves a question: are the equations displayed being compiled to machine code by the engine (like Evaldraw does), or were they pre-compiled in advance (together with the morphing animations)? I also wonder if the morphing process is automatized or designed by hand, as it doesn't look like simple interpolation.
Great observations and great questions! I've always loved the EvalDraw color mapping, though I've arrived at my own versions, I tended to be awestruck at the vibrancy of the colors in EvalDraw. The transitions likely feel like EvalDraw since users of the tool are so used to immediate compilation and immediate full-window output that accepts animation. I had chatted with Ken Silverman back in the day about specific optimizations for such equations (since X and Y are often constant) to be optimized/compiled away, but he correctly didn't care since the tool doesn't need them -- it's better to be generic that optimized for specifics (and today, GPUs would eat this up!)
The equations being displayed are compiled to machine code, and the equations displayed are being rendered as strings from the original codified equations -- which is why you see silly parenthesis placements, where humans would understand order of operations. The equations are pre-compiled at program start-up, for run-time speed.
Morphing is automated (though even I was a bit awestruck at the results appearing contrived). It is abstraction; my application can run many equations simultaneously at once -- even more than 2 -- allowing the morphing process to take place on them all. Notice at the end, I "back up" 4 equations from the y=x to the 3D perspective rotation. All of these equations are being morphed at the same time, which is why the 3D perspective result looks a little strange (and very cool) before it settles -- something I wanted to show off more, but I have to skip through equations quickly (and never let them settle) to achieve.
The morphing idea came to me in a flash -- "Hey, I am dealing with equations LEFT = RIGHT, and just as I can change this into LEFT - RIGHT = 0, I can do any equation manipulation that I want. Why not LERP two at the same time?" -- all I needed to program was the abstraction to allow a real-time function pointer call (run for each pixel) to allow an abstraction to a morphing function that calls 2 or more equations at once, each with its own "t" value = 0..1, modified for smooth-step (or sine wave, even), sum them up, and find the result. When doing more than 2 equations at once, I don't even need to worry that the total "t" of all equations is 1.0. Math is just math! Show the result! :)
Jason, dude, this is freakin' nuts! Truly amazing demo!
Thanks for the kind word, Shuey! I love how this one turned out. The morphing was so neat, that I had to spend time to find a series of equations that really showcase a sense of progression. I'll be making a few more of these! :)
As a casual fan of hyper-dimensional geometry, I loved seeing the solutions shift as T changed. The finale is just *chef's kiss*. One question: I noticed that the 2 "planes" in the finale seemed to move in opposite directions. Is there anyway to adjust them for the 2001: A Space Odessy experience? My first thought is an absolute value thrown in somewhere, but then you started rotating the whole thing and I'm not sure how that would hold up. I hope my input pushes your content into the algorithm; you definitely deserve the recognition for your efforts. Very impressive!
Very neat that you compared this to hyper-dimensional geometry since the equation really is 2D, yet shows as 3D, which is, of course, what all 3D graphics and artists and cameras must do to get that 3D reality onto a 2D image. I also love your comment on the finale! :) Made me smile a lot. I purposely designed it that way, so I'm glad it "popped".
Yes, using absolute value would definitely work to make both the top & bottom of the 3D grid move in the same direction, which can also work for the rotation version -- you just have to throw in the abs() function in the correct spot. You want the rotation, based on the starting (x,y) to happen first, then use the abs(y) for the Y values, to flip the bottom to the top (the fact that it has already been rotated is fine; we're now in a new coordinate plane at this point). I'll showcase it in my next video! :)
I implemented your absolute value idea in my latest video #7! It worked, even with rotation. The new equations: sin(x * 5.0 / abs(y)) * sin((5.0 / abs(y)) + t * 8.0) sin(xrot(x,y,t) * 5.0 / abs(yrot(x,y,t))) * sin((5.0 / abs(yrot(x,y,t))) + t * 8.0)
Thats gorgeous graphics programming. Great job.
Thanks so much Steven. I appreciate the comments. Scan-line 3D roads will never be boring for me! I kind of want to throw in some old-school voxel terrain on the sides... that's on my back burner.