Jason Doucette
Jason Doucette
  • 383
  • 286 462
Nvidia GeForce 4090 GPU, 100 Million points, X-Fractal
2024-06-16. Nvidia GeForce RTX 4090 Laptop GPU running on my Alienware m18 R2.
The fractal is my own design, which I call "X-Fractal". It's a 3x3 cube where any face of the cube is an X (5 dots). The center dot is missing; all other dots are the faces. The fractal is recursive, where each dot is the same shape. There are 7 levels of recursion of that, making for over 100,000,000 dots!
For fidelity to avoid artifacts, I am rendering to a smaller pixel grid, then upscaling it. This has no impact on speed, but makes it easier to see the dots when there are less of them. It starts at 8x8 size and drops to 1x1 size, on a 1920x1080 resolution back buffer. The final video has been upscaled to 4K to help UA-cam maintain fidelity again.
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 also much more ugly and harder to discern. Then I update the camera position matrices, and away we go.
Camera motion attempts to stay close to the action. I have some improvements here that I'll add for the next videos. But the quick jump is kind of cool (probably a lot smoother on my 480 Hz monitor than 60 Hz UA-cam though!), so I left it in for this one.
This is all to answer: How many can a GPU do? :)
Back in the 90's, the demo scene would often ask the viewer "how many dots?" or state "X number of dots" and showcase a stunning display of rotating or dots in motion. HeartQuake by Iguana (1994) showed 24,000 dots in 320x200 x 256 VGA Mode-X. I even programmed my own highly optimize pixel writer to get 70,000+ at the VGA framerate (70 Hz) on a decently fast 486.
Hardware:
I bought my Alienware m18 R2 with the 4090 GPU the first day Dell made it available, on January 23, 2024.
- NVIDIA GeForce RTX 4090 16GB GDDR6 (laptop version)
- 14th Gen Intel Core i9 14900HX (24-Core, 36MB L3 Cache, up to 5.8GHz Max Turbo Frequency)
-- 16 E-Cores, and 8 P-Cores (hyperthreaded) = 32 V-Cores total
- 64 GB: 2 x 32 GB, DDR5, 5200 MT/s, non-ECC, dual-channel
- 18" FHD+ (1920 x 1200) 480Hz, 3ms, ComfortView Plus, NVIDIA G-SYNC + DDS, 100% DCI-P3, FHD IR Camera
- AlienFX RGB backlit Alienware CherryMX ultra low-profile mechanical keyboard
- 4 TB, M.2, PCIe NVMe, SSD
Playlists:
--------------
- Xona System 8: ua-cam.com/video/PqFQv60p-0E/v-deo.html
- Nvidia 4090: ua-cam.com/video/ZRrEumzRjRI/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
Переглядів: 103

Відео

Pseudo 3D Road - VGA - Full Tilt - play-through, 2 crashes
Переглядів 311Місяць тому
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
Переглядів 222Місяць тому
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
Переглядів 242Місяць тому
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.
Переглядів 3172 місяці тому
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.
Переглядів 3663 місяці тому
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.
Переглядів 5137 місяців тому
2023-11-18. Real-time generation of a recursive fractal, computed on the CPU for the fractals, colors, and 3D transforms: rotation & perspective. No GPU used here except to show the pixels. DISCOVERY In the middle of generating a Menger sponge fractal, using a recursive generation, I ended up making this fractal. I cannot find existing work that replicates this, so I believe I've invented a new...
Game Dev Engine #13. Fractal: Iterated Function System.
Переглядів 4137 місяців тому
2023-11-05. IFS (iterative function system) producing fractals using the chaos game: Order from Chaos. Inspiration: My prior video, "order from chaos" produced the Sierpinski Triangle in 2D and 3D. I recalled the IFS (iterative function system) method of producing fractals. Specifically, the Barnsley fern. It is reminiscent of the 1994 graphics demo: Verses by Electromotive Force, showcasing an...
Game Dev Engine #12. Order from Chaos: Sierpiński Triangle.
Переглядів 5078 місяців тому
2023-10-14. The creation of the Sierpiński Triangle can be done in many ways. One of the coolest is the use of random (chaotic) input, and developing order. The algorithm could not be more simple: 1. set 3 origin points (or 4 if you're in 3D). 2. initialize a point (to anything, but to avoid artifacts, start at one of the origin points). 3. move 50% the distance to one of the origins (randomly ...
Game Dev Engine #11. Maze Generation.
Переглядів 4988 місяців тому
2023-10-07. I've been busy implementing a components system that includes a player & weapons ownership model along with physics, but it's not ready to showcase yet. My brother mentioned creating a maze generation program, which I had on my todo next list for simple showcase projects. What you see is a basic back-tracing maze generation method. I first learned of this algorithm from C. Regena fr...
Game Dev Engine #10. Dynamic Pixel Zoom.
Переглядів 6739 місяців тому
2023-09-02. Xona System 8 is a game development engine written using the MonoGame framework. This showcases the engine's response to Windows WM_SIZING events to dynamically change the backbuffer, and update the pixel scaling factor (in 3 different scaling methods), to showcase our low resolution screen, which continues to update, to the final canvas. This includes maximizing and minimizing the ...
Game Dev Engine #9. Font Animation.
Переглядів 6559 місяців тому
2023-08-23. Showing off the font animation system with a cast of larger fonts. The low resolution pixel screen is 3x3 pixel size within 1920x1080 full resolution. This is higher resolution than I want to go with the inspiration of this engine, but these larger fonts demanded more resolution. I seriously considered not uploading this video, since I already demonstrated fonts but I thought the an...
Game Dev Engine #8. Font Kerning.
Переглядів 49610 місяців тому
2023-08-17. Showcasing the custom pixel fonts and variable width & kerning font rendering abilities of my "Xona System 8" engine. All fonts you see are designed and drawn by me. Most are from scratch. Some are inspired: pigpen cipher (7x7 secret code) with numbers extension by Thomas Hunter II, Defender (4x5 2 width computer), Space Quest 3 (5x5 sq3), Brandon James Greer (4x4 bold), Super-C (7x...
Game Dev Engine #7. Mouse Pointer.
Переглядів 57811 місяців тому
2023-07-19. Showcasing mouse control via pointing and multi-button clicking. The mouse has many methods of providing input, so I will be making a few small games to showcase the various methods. The windowing system is already showcasing click & drag, but I figure showing it within a game actually shows its use in a game development / usability setting. The windows are part of the engine, where...
Game Dev Engine #6. Mouse Input.
Переглядів 56511 місяців тому
2023-07-03: Showcase of the mouse input in a brick breaker game, using left/right motion and its buttons to fire and release the caught ball. The engine is providing the input to be directly used by the game, that is instantiated within a window. The engine is also providing frame rate independent update loops. I didn't intend to make it into a full game, but I felt I had to design some levels,...
Game Dev Engine #5. Keyboard Input.
Переглядів 643Рік тому
Game Dev Engine #5. Keyboard Input.
Game Dev Engine #4. Window Refresh Bug.
Переглядів 612Рік тому
Game Dev Engine #4. Window Refresh Bug.
Game Dev Engine #3. Window Input System.
Переглядів 623Рік тому
Game Dev Engine #3. Window Input System.
Platformer #37 - New Art, Quick Play, 4 of 4
Переглядів 503Рік тому
Platformer #37 - New Art, Quick Play, 4 of 4
Platformer #36 - New Art, Quick Play, 3 of 4
Переглядів 414Рік тому
Platformer #36 - New Art, Quick Play, 3 of 4
Platformer #35 - New Art, Quick Play, 2 of 4
Переглядів 410Рік тому
Platformer #35 - New Art, Quick Play, 2 of 4
Game Dev Engine #2. Future Crew tribute. 360° Subscribers.
Переглядів 667Рік тому
Game Dev Engine #2. Future Crew tribute. 360° Subscribers.
Platformer #34 - New Art, Quick Play, 1 of 4
Переглядів 428Рік тому
Platformer #34 - New Art, Quick Play, 1 of 4
Game Dev Engine #1. A New Beginning.
Переглядів 793Рік тому
Game Dev Engine #1. A New Beginning.
A.I. High Resolution Texture Design (Wave Function Collapse #9)
Переглядів 1,7 тис.Рік тому
A.I. High Resolution Texture Design (Wave Function Collapse #9)
A.I. High Resolution Texture Design (Wave Function Collapse #8)
Переглядів 1,1 тис.Рік тому
A.I. High Resolution Texture Design (Wave Function Collapse #8)
A.I. High Resolution Texture Design (Wave Function Collapse #7)
Переглядів 6 тис.Рік тому
A.I. High Resolution Texture Design (Wave Function Collapse #7)
A.I. High Resolution Level Design (Wave Function Collapse #6)
Переглядів 1,4 тис.Рік тому
A.I. High Resolution Level Design (Wave Function Collapse #6)
3D Polygon Engine #9 - Multiple Materials, NanoSnake Physics
Переглядів 478Рік тому
3D Polygon Engine #9 - Multiple Materials, NanoSnake Physics
Test Drive 1, IBM PC, EGA, Lamborghini Countach: 115,704 pts
Переглядів 253Рік тому
Test Drive 1, IBM PC, EGA, Lamborghini Countach: 115,704 pts

КОМЕНТАРІ

  • @binkbonkbones3402
    @binkbonkbones3402 2 години тому

    Is there any reference for how to achieve that soft almost blurry or fuzzy look that seems to smooth the terrain out, or is that just a result of the color and resolution?

  • @bocilkamatian-of9it
    @bocilkamatian-of9it 6 годин тому

    Scariest bug in the world

  • @KenshirouLuke
    @KenshirouLuke День тому

    No code, no useful indications. Pointless video.

    • @JDoucette
      @JDoucette День тому

      I appreciate the feedback. I hear you. I should name it "Arena Shmup Demo", since the name "MonoGame Tutorial" is misleading to viewers -- though it is technically correct: the video really did come from a tutorial I gave two engineers in real-time on how to create a simple MonoGame game framework. (The object pool code is actually not even finished and would be embarrassing to share in its given state -- and you're right, it's difficult to even show off what it accomplishes over not having it.) Nonetheless, I made a decision to upload anything I work on. I have certainly thought about make true tutorials, since I give them ad-hoc all of the time anyway -- and even sharing them with the MonoGame developers for their own website. But it is a non-trivial undertaking to do it "officially" and professionally. However, I think a 30 minute video chat in real-time, that is recorded as-is, may work.

  • @charleschandrablazinger6515
    @charleschandrablazinger6515 24 дні тому

    17:24 Welp, Player 1 got pushed down by traps.

    • @JDoucette
      @JDoucette 24 дні тому

      Yup, that was a pretty close one!

  • @SchnurriTV
    @SchnurriTV 24 дні тому

    im working on a heavily modified version of WFC, which i call WWFC-GC (Weighted Wave Function Collapse with Global Constraints) and i randomly found this video. Oh my gawd bro what made you use this algorhythm to draw bowser XDDD i dont even wanna think about if you actually applied the default socket technique and had to make custom sockets for every pixel hehheheehheh this is what i call dedication! hell yea!

    • @JDoucette
      @JDoucette 23 дні тому

      Hey, I would love to see the output of your algorithm. Yeah -- I have a bunch of videos where the input image are existing textures, and in this case, characters! It's fun to see. So -- the socket technique you refer to -- I presume you mean the connection allowance logic. I didn't make anything custom; the logic for this is extracted from the input image itself!

    • @SchnurriTV
      @SchnurriTV 23 дні тому

      @@JDoucette Ah, yea i could imagine that making indiviudal socket IDs for every pixel would probs be quite impossible. Tho with extracing the logic from the image itself, it does look hella funny. its as if an AI had alzheimers and were to draw bowser from memory lol. I also adore the visuals in your videos btw. My project is a procedual town/village generator. It uses all kinds of algorythms already, that being the good old perlin noise for town/village outlines, L-Systems to generate street networks (had to heavily modify that one as well to actually produce realistic looking networks) and plots (this is my own creation) to identify pieces of land, on which buildings can be placed. Now I'm using WFC to decide, what kind of buildings are supposed to be placed on the plots. For example, a school shouldnt be next to a factory. A market should only be placed on larger plots, a playground should be placed next to housing-blocks, but if there is a playground nearby already, it shouldnt. A church should be placed somewhere near houses, but more than 1 church per town/village doesnt make any sense. So yea.. thats why my plan is the WWFC-GC and now that i think about it, it also has local constraints, so the name should actually be WWFC-W-GALC (Weighted Wave Function Collapse with Global and Local Constraints) lol. I will defently show it off, once everything works :)

    • @JDoucette
      @JDoucette 22 дні тому

      @@SchnurriTV Yeah -- exactly -- it seems like an AI is trying badly to remember what he looked like and is just coming up with some random stuff. I know this is not what WFC is supposed to be for, but once I saw the outcome and found it funny, I had to share.

    • @JDoucette
      @JDoucette 22 дні тому

      @@SchnurriTV Your plotting algorithm is interesting. Long ago, I made a city plotting algorithm for a overhead view game where you could control cities and take over other cities -- kind of like Civilization, but more focused on numerous cities that already exist. I made local constraints (cities shouldn't be too close) and notice patterns -- the constraint cause strands or streams or lines of cities in various angles, since the constraint was too rigid. I had to explicitly code to avoid that (literally look for a pattern, and reject). This simple algorithm worked wonders. Why am I telling you this? I think because your WFC is overkill for what you need. While you limit 1 church per town, so you keep global constraints, the local constraints (playgrounds being close to X or not close to Y) can be solved with a less strict algorithm than WFC. WFC is so strict it causes problems, like the hand in Bowser wrecking havoc causing the images to be constrained to it. Without WFC, and with some less rigid constraint, you could get your plotting exactly how you want, but never too logically consistent from town to town -- the variance will be desirable.

    • @SchnurriTV
      @SchnurriTV 21 день тому

      @@JDoucette Oh what you are explaining is really interesestig and i can really imagine how it would look in my head. Especially with the cities being built in a line, due to the constraints sort of telling em to do exactly that. hmm yea, i already thought so that the algorythm i'd be working on would really just use WFC as a sort of inspiration, while in reality working qutie diffrently. The good part is, is that the shapes, distances and roadnetworks are made by the other algorythms i meantioned (perlin, L-systems, plots). Rn the towns and villages look as if you were looking at a town in google maps in street view, not sattlite view. those already have a lot of variance, so wfc shouldn't produce too predictable looking things, when it decides, what building should be placed. Tho I guess I'll only know once I've implemented it. I will def keep ya updated 👍 thanks for the heads up!

  • @marcusflint2907
    @marcusflint2907 26 днів тому

    I wonder if its possible that an open world game can be made with a similar pseudo 3d look. Like world made with super scaler graphics.

    • @JDoucette
      @JDoucette 26 днів тому

      I was just watching "Ross's Game Dungeon: OutRun Clones" and they mentioned the same thing. While I've never thought about open world, since by its nature, these pseudo 3D engines are "pseudo" where you cannot wrap the turn back around on itself ever. However, I have thought about recreating the road portion of an open world -- meaning as long as you stay on the road, and its junctions, you can go anywhere. I believe this is fully possible.

  • @bubu5908
    @bubu5908 26 днів тому

    How did you do the sprite rendering? Wouldn't that need a z buffer?

    • @JDoucette
      @JDoucette 26 днів тому

      Indeed it does! So I'm using the GPU here. The individual voxels are rendered with their own Z-value when sent to the GPU, and I have the Z-buffer on. Now the trick is the sorting of sprites -- I made my own pixel shader to not impact the Z-buffer when touching alpha=0 see-through pixels in the sprites, so I get an extra advantage of not worrying about sprite render order.

    • @JDoucette
      @JDoucette 26 днів тому

      In full software, like my original VGA engine, I wouldn't have used a Z-buffer. I'd use what I did with my pseudo 3D scanline road engine did, except per column instead of per-screen: store the hill tops, and their Z. Now when I render a sprite, render columns, look at the hilltops of that column, decide which two the sprite is between, then assume that's the screen bottom. No Z-buffer checks per-pixel required; it's just a simple range check, then hammer out the sprite pixels. This, of course, requires rendering sprite back to front.

    • @bubu5908
      @bubu5908 26 днів тому

      @@JDoucette Thanks for your answer. As I'm writing a software renderer, I already have some sort of 1D Y buffer for each column, because I draw from front to back to not have massive overdraw. So you would simply check the sprite height and Z against that Y buffer and it's Z value? You said rendering the sprites from back to front, without a per pixel Z buffer. Wouldn't this lead to overdraw when I render sprites above each other? I have to try this approach.

    • @JDoucette
      @JDoucette 25 днів тому

      @@bubu5908 Your 1D Y buffer per column, front to back rendering, is how I handle it as well. In a pure software renderer, this has the natural ability to give you hill-tops. Every time you don't render a pixel, it's behind a hill top -- remember those, and their Z value. Each sprite should render column-wise, and pretend the next-closest hill top measured in Z compared to the sprite is the sprite's min Y render pixel -- it's just a range check before you plot the entire column of that sprite.

    • @JDoucette
      @JDoucette 25 днів тому

      @@bubu5908 Without Z-buffer, you do back to front for sprites (front to back for terrain), over draw for sprite pixels, but never rendering "behind" already rendered terrain. So the terrain remains zero overdrawn. Sprites will have overdraw.

  • @adrikriptok7225
    @adrikriptok7225 26 днів тому

    Hi, man! Have you ever tried to add water reflections to voxel terrains?? Couldn't find it in your voxel videos (or in youtube in general). I've been trying for a while, but just can't get it to work right (specifically when Y-shearing is applied to fake look up and down). I know some expansion of Comanche added that effect in the early 90s, so it can't be that hard.

    • @JDoucette
      @JDoucette 26 днів тому

      I have never tried to do water reflections, but I have thought about it since I made the original VGA Mode-X engine back in 1995/1996. I recall that Comanche did it in their second version of the engine. Off hand, y-shearing to fake up/down look shouldn't impact -- since even if the camera direction changes, the light arriving at it doesn't. You'd only want that effect in the case if desiring an effect even though in reality it doesn't occur (kind of like lens flare), which means you need to decide the effect that you want, and then code it. Get it right before shearing, then implement an adjustment with it to drive towards you desire.

    • @JDoucette
      @JDoucette 26 днів тому

      These days, with faster CPU/GPU, we can do one better than Comanche -- reflection and refraction! So we'd need heights below the water, and the water height itself. That would be more complex -- a mixture of water color, the underwater terrain, and the sky!

    • @adrikriptok7225
      @adrikriptok7225 24 дні тому

      @@JDoucette I think I've figured it out. The code was kind of correct, but the curvature caused problems. Y-shearing wasn't the issue, but when the horizon reached negative Y values, it exacerbated the problems. The column shearing to simulate the roll-axis wasn't helping either. I'm not completely sold on the effect yet, but I think it can work for now. They're not 'real' reflections, of course, since it's all software rendering. I'll just wait, hoping that someday someone who knows more than I do will make a tutorial on how to do it correctly.

    • @JDoucette
      @JDoucette 23 дні тому

      @@adrikriptok7225 Looks like Comanche 2 simple reflected the sky. It would be more difficult to reflect the terrain, and refract the terrain (based on angle and depth of water), and also reflect the in-game object sprites. If you have an example of what you accomplished, I'd love to check it out. Maybe you can figure it out and make that tutorial yourself! :) One piece of advice is to ignore the shearing for fake rotation and camera pitch; just let that rendering whatever you have already calculated into your buffer. This will simplify things.

    • @JDoucette
      @JDoucette 23 дні тому

      @@adrikriptok7225 Also, take a quick read of Shawn Hargreaves' article "MotoGP: road reflections" -- he accomplished reflection by taking the resultant image and just inverting the whole thing. It was a good enough approximation! You should feel free to make some hacks, since even the Y shearing is a hack for camera pitch and roll.

  • @NeotronicGames
    @NeotronicGames 28 днів тому

    Lets make a game using this engine!

    • @JDoucette
      @JDoucette 28 днів тому

      Yessssss! Let's do it! =)

  • @POGRetroModernGaming
    @POGRetroModernGaming 29 днів тому

    Beautiful ❤

    • @JDoucette
      @JDoucette 29 днів тому

      Thank you. I like this video more than the future ones, since it has the element of random placement, without look so perfect. I removed that since I was making things more mathematical to test various perspectives, but for aesthetics, I need to bring this design back.

  • @joeyarcade5865
    @joeyarcade5865 Місяць тому

    I always wondered what the first Doom game would have looked like if id software decided to build the whole game upon the voxel engine from Commanche. It prolly would have been the Far Cry of 1993.

    • @JDoucette
      @JDoucette Місяць тому

      I developed this engine in 1995/96, once I got access to assembly language. I wanted to produce a rail shooter like Space Harrier with it. I figured the blocky artifacts of jumping from one voxel to another during motion, when up close, wouldn't work well with the clear distinction of depth & reality that a ray caster with walls gives you. The engines are similar in terms of casting, so someone had developed Doom + Voxel height in one engine in the mid 90's -- I cannot seem to find it now. There is disparity in the level of solidity, as I mentioned before. But yes -- it could've been the Far Cry of the early-to-mid 90s for sure. Another issue is that Doom's sectors/portals via doors allowed for optimization so you could limit what you need to draw far away. Voxel terrain also has this ability "if you're smart" -- but it is nuanced. If you're sitting in front of a mountain, chances are you cannot see the ocean behind it, so stop calculating it. But if you climb a large hill, near but not at the top, you can see large structures / trees that sit on the other side.

  • @whoshotdk
    @whoshotdk Місяць тому

    Your work is impressive! I particularly like the consistent UI you've got going on, and this project I really like because I'm currently learning how to implement this algorithm myself. It's surprisingly easy until.... sprites. Any chance you could offer some tips on projecting the sprite to the correct position on screen? Maybe I need to use similar/extend the code from the terrain renderer? Or should I try for a separate "divide-by-z" method? Keep up the great work, thanks!

    • @JDoucette
      @JDoucette Місяць тому

      Thanks so much! It's funny how consistency actually helps quite a bit -- the UI is pretty basic, but I like it as well. I've been itching to get back to this but am working on another project right now. So... do you have a voxel algorithm already implemented? I'd love to see your progress!

    • @JDoucette
      @JDoucette Місяць тому

      Sprite locations: First, simplify your problem. Assume there is no Y (height). Then you have a flat plane. Now, assuming that your voxel ray caster is correct perspective (it should move faster on the edge columns than in the middle -- if you're not doing this, you have a distortion, which is fine, but only fine if you intended it & understand it, since your sprites have to match!), the sprite is just ahead of you (Z distance), and sideways in X (left/right). If this gets complicated, simplify again! Assume no camera rotation for now.

    • @JDoucette
      @JDoucette Місяць тому

      Now, that's a simple Inverse Z: The delta in X from center is just inverse Z. Same with Y in fact -- if you have a flat plane, make it constant. Once you go back to having voxel heights, and your sprites have Y, use the sprites' Y coordinate. Now when you rotate your camera, you just gotta rotate the sprites as well... as you know, the character doesn't turn -- the world turns around you! Aren't you special! ;) Hope this helps!

    • @whoshotdk
      @whoshotdk Місяць тому

      @@JDoucette Thank you so much for the info and taking the time to reply! My trig skills are that of a pre-schooler but I am going to tackle this slowly and make it work. Might need a few days. I actually have several versions, starting with a straight up copy/paste from s-macke to my much more inefficient, but my own, code. I generate a normal/slope map too, so I have running water. Which sounds neat but really isn't much of an improvement over your own or any other implementation. Once I've got the sprites cracked, I intend to create a basic moon-lander game or similar. It'll be in Javascript, web-based, so I could send you a link at some point. I'm pretty certain it won't be an improvement over your own implementation though :D Thanks again!

    • @JDoucette
      @JDoucette Місяць тому

      @@whoshotdk That, my friend, sounds like an awesome little game to showcase the terrain! I've always wanted to make a Lunar Lander game, and I actually did in GW-BASIC way back in the day, called "IO Lander", named after Jupiter's moon. I had never imagined using my voxel tech for a lander game! I wish you luck, and I sure hope to see it!

  • @dan4515
    @dan4515 Місяць тому

    youtube compression did not like this one

    • @JDoucette
      @JDoucette Місяць тому

      It sure did not! :) Random noise from the lack of mipmaps and all of that aliasing are hard to compress. I'd like to do 2 things: 1. record in 4K from now on, since even these pixelated graphics need some help with extra data. 2. more importantly: use mipmaps, but not the GPU generated mipmaps; I want to control the jump to the next mipmap level and draw that mipmap texture myself -- just like the old school Sega System 16 days where sprites could only scale 2x, therefore, by hardware requirement, everything that scaled had mipmaps.

  • @TheProtectorate-yq7vi
    @TheProtectorate-yq7vi Місяць тому

    Is everything 2D? I know the sprites are, but what about the actual road/environment?

    • @JDoucette
      @JDoucette Місяць тому

      Everything is both 2D and 3D. Sprites are 2D images, but they are processed in full 3D -- they have an X, Y, and Z component. The road is not so much 2D, since every single scan line (every row of pixels) is an individual object that has X, Y and Z -- which is why it's so smooth with the curves, hills, and bends. However, everything is really only 2D, with a scaling component. Just as the 2D sprites can only ever be viewed from the front (they cannot spin around, even if they go around a sharp turn), the scan lines also cannot "turn". They are always flat to the camera. You never see the road from the sideview, even if it appears that the road turns 90 degrees. Therefore, you're basically seeing a 3D image of something that is representation a 3D road. The output is true 3D, but the object you're seeing is a road that ONLY moves into the distance, and NEVER turns. The turns are fake: The road (and objects with it) are basically strafing (sliding left and right), doing so more extreme for tighter turns.

    • @TheProtectorate-yq7vi
      @TheProtectorate-yq7vi Місяць тому

      @@JDoucette Fascinating. Thank you for the detailed explanation. I absolutely love this.

    • @JDoucette
      @JDoucette Місяць тому

      @@TheProtectorate-yq7vi That's awesome to hear! :) I see your channel is about all kinds of retro goodness. My heart is still in these games and these retro style engines. I bounce around a lot, as you can see with my videos, but I've wanted to make a racer out of an engine like this since I saw Pole Position in the arcades and tried to make an engine like it (and eventually succeeded in GW BASIC!) Someday it will be a real game and not just a demo!

  • @Xonatron
    @Xonatron Місяць тому

    This shows up as being published 2 days ago too.

    • @JDoucette
      @JDoucette Місяць тому

      Figured so. It should have warned me that these would all appear in my feed. It doesn't make sense since they were publicly published a decade ago.

  • @Xonatron
    @Xonatron Місяць тому

    It shows up as being published 2 days ago.

    • @JDoucette
      @JDoucette Місяць тому

      Ok, thanks for checking.

  • @julianmunoz7836
    @julianmunoz7836 Місяць тому

    Are you using old hardware?

    • @JDoucette
      @JDoucette Місяць тому

      This would have been on a AMD 200 Hz but it would have run at a decent framerare on a 486. I don't recall how I recorded this. I should run it again on modern hardware with DOSBox and upscale it to 4K so that you can see more than a blur!

    • @Xonatron
      @Xonatron Місяць тому

      @@JDoucette I think they are asking because it's blurry. It shows up as being published 2 days ago, even though this is from over a decade ago.

    • @JDoucette
      @JDoucette Місяць тому

      @Xonatron Yes, I realized that after the fact. This is why I lost a couple of subscribers because it looks like I'm putting out low quality content. Like you said, it's a decade old, and in fact from mid 1990s. I should upload new quality versions. It wasn't my intention that these appear as published since I published them a long time ago. I changed to unlisted last year and just reverted it now.

  • @toonz9971
    @toonz9971 2 місяці тому

    Awesome!

    • @JDoucette
      @JDoucette 2 місяці тому

      Glad you liked! :)

  • @Xonatron
    @Xonatron 2 місяці тому

    It's awesome how their feet stay aligned.

    • @JDoucette
      @JDoucette 2 місяці тому

      I know -- we always thought this was such a great design. You need to have them move in quantum steps for this to happen, otherwise, you need many frames of animation.

  • @BluntEversmoke
    @BluntEversmoke 2 місяці тому

    This needs to become a mechsim engine.

    • @JDoucette
      @JDoucette 2 місяці тому

      Is mechsim a particular game that has abilities to be modded? I'd love to know more. You have me researching this now. In any case, I would love to finish even a simple game with this engine -- it's been a childhood dream of mine since I first saw Pole Position / Out Run / Rad Racer.

    • @BluntEversmoke
      @BluntEversmoke 2 місяці тому

      ​@@JDoucettemost modern games are moddable, earlier ones may or may not be. Mechsims as in, Mechwarrior, Earthsiege and Starsiege, Heavy Gear, Titanfall, also Terra Nova: Strikeforce Centauri if you are willing to stretch it. Giant robots fighting each other and, possibly, other vehicles and infantry as well.

  • @Y1001
    @Y1001 2 місяці тому

    You and your bro are kings

    • @JDoucette
      @JDoucette 2 місяці тому

      That's a wickedly nice comment. Thank you so much for sharing. Curious if you do any game/graphics/retro development yourself?

    • @Xonatron
      @Xonatron 2 місяці тому

      Ha, wow, amazing compliment!

  • @Xonatron
    @Xonatron 2 місяці тому

    And your effects are reminiscent of the demoscene. It's basically a demo effect. With the music, it just works.

    • @JDoucette
      @JDoucette 2 місяці тому

      I was thinking exactly the same thing. I just wanted the windows to disappear to show the isometric background, like I do every time, but there are too many for manual movement. I already have a window animation intro, and thought I should just make them disappear in some kind of cool exit pattern -- explosion, or sine wave, or something. This ended up being the first thing I tried. It showcases the "next effect" transition akin to so many demoscene demos. I just happened to find decent music to add.

    • @Xonatron
      @Xonatron 2 місяці тому

      @@JDoucette These patterns could be enemy patterns in a shmup game.

    • @JDoucette
      @JDoucette 2 місяці тому

      @@Xonatron Yeah, that's true. It some sense, it reminds me of the modern Galaga game, but I think that game failed since it didn't really give you a way to appreciate the patterns that they created. The original Galaga afforded a lot of appreciation in simply watching the waves form. There's a lot to be said of that design.

    • @Xonatron
      @Xonatron 2 місяці тому

      @@JDoucette Oh yeah, I forgot about that game. It was too pattern oriented. Not enough empowerment to the player. More strategy and the placement of your drones.

    • @JDoucette
      @JDoucette 2 місяці тому

      @@Xonatron I had forgotten about it too, until I started thinking about sin wave patterns of enemies. It was called Galaga Legions.

  • @Xonatron
    @Xonatron 2 місяці тому

    This is awesome. I don’t think I’ve ever seen anyone do this before.

    • @JDoucette
      @JDoucette 2 місяці тому

      Yes, I've never seen this before. It may be interesting to show which ones are mirrors or copies or inversions of others, and eliminate them. Then eliminate ones that are not interesting and zoom in on the remaining.

  • @insight8226
    @insight8226 2 місяці тому

    THANK YOU, MASTER !!!

    • @JDoucette
      @JDoucette 2 місяці тому

      You are too kind. Glad you enjoyed!

    • @Xonatron
      @Xonatron 2 місяці тому

      Amazing, isn't it?!

  • @ButcherTTV
    @ButcherTTV 2 місяці тому

    Awesome! This stuff is so interesting.

    • @JDoucette
      @JDoucette 2 місяці тому

      Thanks! I agree. Sometimes I think I made these videos too long, and I should have at least sped them up. But I think there's value in seeing how it works in a slow enough speed to witness how the collapsing actually works.

  • @djaccount5458
    @djaccount5458 3 місяці тому

    Could you write how calculate sprite position on screen in mode7 / infinity plane?

    • @JDoucette
      @JDoucette 3 місяці тому

      Sprites locations would be defined 1st: by the point on the Mode 7 plane that the sprite stands on, then 2nd: take into account the sprite size to match this position. Sprite size is simply scaled 1/2 size if 2x distance -- inverse proportion from camera. So the real trick is to find out where is the point? To do that: rotate the sprite (point) position so that it's relative to your camera. Now, it's simple 3D math -- the same you are using to compute your Mode 7 calculations!

    • @JDoucette
      @JDoucette 3 місяці тому

      In short: Xscreen = Xworld / Zworld Yscreen = Yworld / Zworld

    • @djaccount5458
      @djaccount5458 3 місяці тому

      @@JDoucettethx :) ua-cam.com/video/Boad3tioH3o/v-deo.html

  • @adrikriptok7225
    @adrikriptok7225 3 місяці тому

    Looks pretty cool, man! Nice to see you're back!

    • @JDoucette
      @JDoucette 16 днів тому

      Hey thanks! I missed your comment until just now. I've been "off the grid" for a bit, but I work on my engines/games/demos every day. I have also been prototyping some possible commercial products, so I haven't been able to showcase anything recently. I am trying to make more time for my own projects though. I usually want something substantial before I upload, but maybe should lower the bar a bit. :)

  • @ohfacts
    @ohfacts 3 місяці тому

    Have you considered raytracing the lighting? Since you're raycasting for detecting voxels anyways

    • @JDoucette
      @JDoucette 3 місяці тому

      Yes, I have considered that. In fact, I have a non-real-time version of this engine that did exactly that. Search for "Xona eScape" for a link on my company (Xona Games) webpage for a preview. This was before the days of pixel shader GPUs, which would be awesome for real-time lighting. The height/color maps I am using have the lighting baked in, but I'd love to shade them in real-time. Not because I want the sun to move (as cool as that is), but to allow for real-time modification of the terrain! :)

  • @Xonatron
    @Xonatron 3 місяці тому

    Thinking about warps in maze games. Made me think of a torus shaped universe (wraps vertically and horizontally). Which is video games. Visually the entities wouldn’t see the curvature though so they’d see repetition.

    • @JDoucette
      @JDoucette 3 місяці тому

      I was thinking about how to visualize that in this demo. If you did it how it would physically work, it'd be like Manifold Garden where you see an infinite number of maze repeats... if you zoomed out enough to see. I plan on having such zooms, and this is information overload. It distracts from the simplicity of the maze.

    • @JDoucette
      @JDoucette 3 місяці тому

      An alternative is to only show one maze at a time... it seems to be the only logical solution to avoid all of the repetition noise. You could fade one out as the new one fades in. You could also handle the tunnel as it's own thing... sort of like Salt and Sanctuary, when you enter a house, the world fades out and the internals fade in. It is a very nice effect. Imagine the warp tunnel being that house.

    • @JDoucette
      @JDoucette 3 місяці тому

      You just made me consider a new idea... a one screen game typically requires the warps to have the same X or Y coordinate on both ends. But if they are unlinked, as in Downland, then you could have a warps that send you into another unaligned part. Or, perhaps as in Downland, it could just be another screen/maze.

    • @Xonatron
      @Xonatron 3 місяці тому

      @@JDoucette That could be phase two for this type of game, where you add exploration.

  • @elvinmateo6408
    @elvinmateo6408 3 місяці тому

    very cool =0

    • @JDoucette
      @JDoucette 3 місяці тому

      Thank you! Glad you enjoyed :)

  • @mikail1376
    @mikail1376 3 місяці тому

    Dlm game pon kene kacau 😭

    • @JDoucette
      @JDoucette 3 місяці тому

      Ha ha! I had to translate this. Looks like it's Javanese for "The game is messed up" :D :P

  • @insight8226
    @insight8226 3 місяці тому

    VERY COOL

    • @JDoucette
      @JDoucette 3 місяці тому

      Thank you, my friend. This reminds me -- I have some neat updates for this that I've been meaning to toy around with and upload -- since it's so dynamic, you can really make it do some cool things by not letting it stay so stable.

    • @insight8226
      @insight8226 3 місяці тому

      @@JDoucette, I am trying to implement moving along 3D Catmull-Rom path as in the Rollercoaster, but hurt with quaternions :) Move Along and Rotate the box around this path and rotate the scene and camera position at the same time - it is very hard

    • @JDoucette
      @JDoucette 3 місяці тому

      @@insight8226 Ah yes, you're definitely looking for something like a spline, from which you can take the derivative of, to know the angle and direction for anything along that path. Catmull Rom are cubics, so this should be possible.

  • @Xonatron
    @Xonatron 4 місяці тому

    I think this game is awesome as just a simple, pure game.

    • @JDoucette
      @JDoucette 4 місяці тому

      I was thinking about making some old TI-99/4A remakes for the Global Game Jam 2024 -- such as SuperChase, The Attack, Tombstone City, etc. I think all of these old games have an element of fun, even though they are simple -- because of their dynamic interactions. A lot of that was a novelty at the time; even seeing a maze.

    • @JDoucette
      @JDoucette 4 місяці тому

      Despite these things no longer being novelties... there's no reason you cannot use this as a base foundation upon which to build something more fun. It just has to have something new. I actually have a Game Design Document just on ideas for SuperChase, which is essentially a maze game (just not "find the goal"). Even a maze running game could have many environments (maze types), levels, progress items to help you achieve your goal.

    • @JDoucette
      @JDoucette 4 місяці тому

      I replay Plants vs. Zombies every now and again, and even though it's probably the best tower defense game as-is, the game still has many mini-games through the main play through, then 20 more as side-games you can play, another 20 more puzzles (mini-games), and an unlock system meta-game (basically RPG). It's designed very well. Let alone the character (literally the characters in the game) that it has.

    • @Xonatron
      @Xonatron 4 місяці тому

      @@JDoucette That would have been really cool. We should have Xona Engine ready to do that for next year.

    • @JDoucette
      @JDoucette 4 місяці тому

      @@Xonatron I could have used it in its state almost as-is. Simply starting a new project within it helps showcase what I demand for ease. I have found myself wanting a simple GameObject class, and even a 3D version of it -- which I had made before, called a Sprite. Ideally whatever you want quickly should be effortlessly available.

  • @LeoOno
    @LeoOno 4 місяці тому

    Ohh so i imagine this is the 3D engine you were talking about! very neat! another cool game to try writing would be Star Fox :) ?

    • @JDoucette
      @JDoucette 4 місяці тому

      Yes! Please don't laugh too much. I never toyed with 3D with XNA or MonoGame before, and it's quite nice. You immediately get into ownership issues of CPU and GPU and updates. Quite amazing for something so simple.

    • @JDoucette
      @JDoucette 4 місяці тому

      Star Fox would be awesome. Silpheed would be more simple and easier, and possibly a better arcade game, though less impressive. But I do love that Tetris level... 😊

  • @LeoOno
    @LeoOno 4 місяці тому

    ohhh this is so cool!!!

    • @JDoucette
      @JDoucette 4 місяці тому

      Heh. What you are seeing is my attempt to remove true perspective and add the false perspective of most racing and driving games of the pseudo 3D era... specifically Out Run. It is hard to model since it uses a basic look up table, though I approximated it. See the prior video. But it ruined the distortion for curves and hills! Now, I need a generic solution for all of this, which is much harder. Easier is to simply support one perspective style and ignore all others!

  • @sBitSwapper
    @sBitSwapper 4 місяці тому

    Dude you are putting in an astounding amount of work on this project. Keep it up!!

    • @JDoucette
      @JDoucette 4 місяці тому

      Thanks so much! That means a lot that you notice. I have to get some more videos made soon. I have more tech in the pipeline to show off. Then need to refocus onto some more simple game development to showcase the components made. One step at a time!

  • @TLM250
    @TLM250 4 місяці тому

    I do respect the fact that player 1 opted to keep the fire gun instead of picking up the spread shot gun as a lot of players tend to do. The fire gun in this game is actually more powerful than the spread shot.

    • @JDoucette
      @JDoucette 4 місяці тому

      Thanks. That player would be me! Whenever my twin brother and I played we would always use the Fire and Spreader. We played with the game enough to see that the spreader had 10 shots maximum on screen and two players had 16 shots maximum. We figured out rapid fire Fire or the charge blast Fire were super powerful when used correctly. Also the Fire spray can hit enemies through walls!

  • @raiden1860
    @raiden1860 5 місяців тому

    Wonderful! Is this 3D Catmull-Rom?

    • @JDoucette
      @JDoucette 5 місяців тому

      No, it's just 2D Catmull-Rom, but 3D would be a neat idea! I'm making a "point cloud" engine for showing off fractals in 3D, and I'll have to keep this in mind.

  • @MenkoDany
    @MenkoDany 5 місяців тому

    Looks like Jason stopped working in it :/ Maybe open-source?

    • @JDoucette
      @JDoucette 5 місяців тому

      Thanks for your interest Menko. Development is only paused while I work on the Xona System 8 engine -- which is a high level engine that will support what I call "sub-engines" such as my voxel terrain, 3D road, tiled side-scroller, raycaster, etc. I'm thinking about making it use the Voxel engine first... I have great interest, and have been creating a Game Design Document for a game that will use this voxel engine. I am getting there in baby steps as I find time.

    • @MenkoDany
      @MenkoDany 5 місяців тому

      @@JDoucette I'm just happy you're still alive! :D

    • @MenkoDany
      @MenkoDany 5 місяців тому

      @@JDoucette What are your opinions on zig/jai/odin/rust?

    • @JDoucette
      @JDoucette 5 місяців тому

      @@MenkoDany That is a very kind thought! Yes, still alive and I have high hopes for this engine. I didn't want to upload videos simply of new terrain without any new features, and I didn't want to program new features before the "sub-engine" was incorporated into my "Xona System 8" game dev engine.

    • @JDoucette
      @JDoucette 5 місяців тому

      @@MenkoDany Hmm. Well, I had to use ChatGPT to tell me what each of those are (except for Rust, so I presumed the rest were programming languages too), which is awesome, since it's just a single question, instead of multiple web searches. I have zero experience with all of them. I know of Jonathan Blow's language, and it gives me interest, but in realistic terms -- I am just a creator of mathematical/logical art, and computers and languages are just a tool. I love programming, I love math, both just for doing logic -- so I am not ignoring their intrinsic value. But for producing a product, you have to view them as tools, to make your own tools, to make your own products.

  • @JDoucette
    @JDoucette 5 місяців тому

    Update - Fines: contractor GLY Construction = $25,000, Northwest Tower Crane Service = $12,000, Morrow Equipment = $70,000. Two lawsuits = $150,000,000 awarded to families of the deceased and people injured.

    • @Xonatron
      @Xonatron 5 місяців тому

      $25,000 you meant? So those are fines and I wonder who is paying the $150M?

    • @JDoucette
      @JDoucette 5 місяців тому

      @@Xonatron yes, $25k. I fixed it. The Wikipedia page on the accident has some details but not much. It links to references.

  • @duality4y
    @duality4y 5 місяців тому

    this is really nice, but where is the AI

    • @JDoucette
      @JDoucette 5 місяців тому

      Thanks, Duality. A.I. is used really loosely here... basically it's the idea of the core concept of the algorithm itself, which is mimicking how a human would "design" something they are drawing or "rendering"... which is: If you were painting such a design, for a texture or a level design, or combination, you are using what's already drawn to better drive forward the design further. The stuff that naturally (is most easily added) is what you can do first -- in some sense, this is how a partial design can "design itself". The algorithm follows this. There is randomness for sure, just as in natural design, and there is inspiration from the seeded image, but the flow of creation is all about taking the part that is most "solid" (or least variable) given its possibilities, and it attacks and settles that part first. In this sense, given it is mimicking the way a human would do it, it's A.I. However, given people don't think calculators or chess engines are A.I. (at least not today), I doubt anyone would agree with me... even though this algorithm it is very human like. That's a long way of saying "it's not A.I.". Or maybe I should have said "the A.I. is in the algorithm". ;)

  • @Xonatron
    @Xonatron 5 місяців тому

    I was just watching this again last night, and it looks awesome. Clean, clear pixels and super smooth. It would be great to make a game out of this. I was also thinking we should upscale our captures to 4K for UA-cam, to make them extra clear.

    • @JDoucette
      @JDoucette 5 місяців тому

      Once I have a few more components made in Xona System 8, I should be able to support the many "sub-engines" that we have made -- 3D raycast, Pseudo 3D road, 2D tile based parallax scrollers, voxel terrain -- and the "non-engine" (simply an arena). I was actually thinking about programming "The Attack" as a game module, to then be used by both the 2D tile and 3D raycast engine; it would be kind of neat to show off how the engine (and the game itself) can be used for two different renderers.

    • @JDoucette
      @JDoucette 5 місяців тому

      I was thinking the same re: 4K. I'll have to start using my 4K monitor to output from my laptop, just to upload in 4K. Some of my 1920x1080 uploads have never happened since I know the quality is just going to be bad with UA-cam compression (see the 3D Polygon engine for an exactly -- BTW, that's another "sub-engine" that could be supported).

    • @JDoucette
      @JDoucette 5 місяців тому

      I supposed I could upscale the recorded 1920x1080 videos -- I used OBS Studio & VirtualDub2 to do this with the Test Drive recordings, but it ruined the video & audio sync. I believe what I've noticed is that any large audio gap ends up being cut out -- which is just weird. I didn't notice until after the uploads. Every one of them has that problem.

    • @Xonatron
      @Xonatron 5 місяців тому

      @@JDoucette I have done it with recordings of Quake, and it maintained the pixels from the original recording (which is compressed) maintaining the pixels. I'll post a link next comment in case spam filter catches it.

  • @lethaldosegame
    @lethaldosegame 5 місяців тому

    those stairs/arches at 1:48 are cool tho

    • @JDoucette
      @JDoucette 5 місяців тому

      Yeah, it reminds me of the old aqueduct systems!

  • @lethaldosegame
    @lethaldosegame 5 місяців тому

    MARIOIRAM AR RIOIRAMARIO I O O

    • @JDoucette
      @JDoucette 5 місяців тому

      Ha ha, I can hear the commercial now!! :D

  • @erictsang0
    @erictsang0 5 місяців тому

    the one at 7:00 i find super fascinating! i want to somehow use this to produce levels for some game that i am working on but like most projects i start, there is a 99% chance that it will never be finished. watching your VFC videos are fascinating and inspiring :D thanks for sharing them!

    • @JDoucette
      @JDoucette 5 місяців тому

      Hey Eric. Thanks for taking a look. Once I understood the limitations of this algorithm, after testing many textures -- limitations due to the restrictions of the rules, in how it is never allowed to break them for even a single pixel (perhaps something that could be altered!) -- I started looking for NES game textures that would have a better chance at producing something nice -- figuring their limited color palette would give the algorithm freedom. Procedural texture generation was this project's original goal. That texture you like is from an NES game, Darkman.

    • @JDoucette
      @JDoucette 5 місяців тому

      Level design is one of WFC's ideal usages... and it doesn't even have to be that complicated. You can make the input texture a few colors, and then let it spit something out, then you can do a 2nd pass yourself to turn the result into the level you want. In other words, let the algorithm do the high level design, and then handle the details (or even fix-ups) yourself! I wish you luck on your game... if you make any progress on it, I'd love to see it.

  • @IngoKoch
    @IngoKoch 5 місяців тому

    Would you mind sharing how you got to the height and color maps? Would love to incorporate them in my own voxel engine.

    • @JDoucette
      @JDoucette 5 місяців тому

      Certainly! They are all from the original Nova Logic games that used their VoxelSpace algorithm. So that's a good term to search for others doing similar work. Some of the maps are available from the page: s-macke VoxelSpace.

    • @JDoucette
      @JDoucette 5 місяців тому

      Please let me know what you end up with. I'd love to see your progress.

  • @kesor6
    @kesor6 5 місяців тому

    Would also be interesting to see how this works at completing the void around pre-seeded structures. For example, drawing a horizontal crossing wavy road in a forest using one WFC, and letting the second WFC generate the forest around that road with random clearings.

    • @JDoucette
      @JDoucette 5 місяців тому

      I think I understand -- so the void filling in your case may just be forest and trees, but not roads. Where it is filling the emptiness of an image that is mostly filled with pre-drawn roads.

    • @JDoucette
      @JDoucette 5 місяців тому

      The main reason I programmed this was I thought it could provide me a way to generate tiled textures that wrap correctly -- not just one texture to itself, but to various texture tiles. If you see my platformer game videos, some of the newer art has multiple square textures drawn at random, and they all match each other, regardless of how they are placed. This is quite a limitation. I had to do that by hand... so I wanted an algorithm to help me. While I never got that far, the idea was to seed it with the edges, and let it fill the insides.

  • @kesor6
    @kesor6 5 місяців тому

    This is great! I wonder if something similar can be done with audio, cutting up a musical piece into tiny segments and then stitching them back together with a WFC.

    • @JDoucette
      @JDoucette 5 місяців тому

      Oh wow. Interesting thought! If we split up music into separate tracks, and deal with each one individually (just for simplicity), then we have a 1D Wave Function Collapse, which is essentially just what note can follow others. But the 1D pattern to match can be large -- just like the 2x2 or 3x3 or 4x4 patterns I showcase -- so it can enforce several prior notes enforce a limit of what can follow. Maybe this is enough to possibly compose a decent riff?

    • @JDoucette
      @JDoucette 5 місяців тому

      If we added the other tracks, with additional rules, we'll have 2D Wave Function Collapse. This can enforce the various tracks are still in sync. Maybe this second dimension has to be less like space, and more like multi-dimensional -- since you sort of want every track to be aware of every other one... I guess that could be done with simple 2D, as long as the pattern is enough to cover all -- but you may want those track interactions to be less dependent on each other.

  • @punpcklbw
    @punpcklbw 6 місяців тому

    That's some great variety of typefaces. What format you're using for the fonts?

    • @JDoucette
      @JDoucette 6 місяців тому

      Thanks for the kind words. Because these are pixel fonts, they are stored as basic PNG files, which are non-lossy (exactly / accurately stored). The visible pixels are RGBA = 255, 255,255,255 and the empty pixels are 0,0,0,0. This way I can load them directly in my texture system in my engine (Xona System 8, which is based on the MonoGame framework, based on XNA), and render them exactly as is. This also allows me to make anti-aliased fonts simply by drawing see-through pixels, like RGBA = 255,255,255,127, for 50% alpha (127/255).

  • @punpcklbw
    @punpcklbw 6 місяців тому

    Great to know that you are paying attention to accurate kerning of bitmap fonts. This can make much difference when drawing italics or serif fonts! I've been making various bitmap fonts since early 2000s and got a collection of those made from scratch; many of them are variable width. So far I've come up with a simple kerning scheme that allows to add extra space to a character or nudge it from its default position. I guess you are running an algorithm that analyses characters in a font and generates a n*n table with kerning pairs. This may benefit from using a special "do not enter" value for font pixels, a second transparent color that prevents dashes and other characters from creeping in too far.

    • @JDoucette
      @JDoucette 6 місяців тому

      This spawned from me being annoyed at a single pixel spacing of my smaller fonts, such as "LY" not fitting together, and some numbers like "17". Now, it works for all of the nice expected things as you mentioned -- italics, serif, and even exotic mixtures of symbols and letters.

    • @JDoucette
      @JDoucette 6 місяців тому

      I immediately ran into problems -- symbols creeping too far in (like a period hiding completely under "T.". So I disallow any character from being 100% enclosed in another; it will always peak out at least 1 pixel. Further, I look 2 characters behind, to make sure T Period Quote --> T." don't overlap, where the period isn't large enough to separate the T and the quote.

    • @JDoucette
      @JDoucette 6 місяців тому

      You are correct - the algorithm is basically NxN compares, and it ensures whatever pokes into another character has no overlap, and no pixels touching, as it protrude inward. Since my fonts are PNG format, I could use an unseeable color like RGBA = 1,1,1,1 (out of 0..255) for the "do not enter", but I've found this unnecessary. However, I do notice that the kerning is aggressive in minimizing space. This is fine for small pixel fonts, but once they get larger, I feel it's too aggressive at times.

    • @JDoucette
      @JDoucette 6 місяців тому

      P.s. I would love to see your collection. Anywhere you have it on display? I've been trying to think how I can showcase my fonts. Blog? Instagram? Maybe a custom channel just for fonts? I have about 50 made. I'd say most are amateur. None get into any exotic. Simplicity and readability for retro style games are my thing.

    • @punpcklbw
      @punpcklbw 6 місяців тому

      ​@@JDoucette You've got a nice selection and artistic style. I've read that some of the fonts you didn't make yourself. I can recognize the Heretic/Hexen font, maybe a few others I can't remember what game they were taken from. Whether they are amateurish or not also depends on the character repertoire. If you decide to include upper and lower case letters, ligatures and diacritics, support ISO, VGA or some other codepage that is a superset to ASCII, this can put your fonts to another level.