|
And I was on /r/linux earlier. They both seemed to steal their headline from Phoronix.
|
# ? Oct 19, 2014 00:27 |
|
|
# ? Jun 6, 2024 14:21 |
|
fletcher posted:You're on HackerNews! I know it's HN but the extremely upset comments are just totes adorbs.
|
# ? Oct 19, 2014 00:29 |
|
Ugh. There's now 80 comments pending for moderation on my blog, and most of them are trash. There are several great comments, but it feels rude to approve only those and not all of them. What should I do? I also got a clever spam comment that almost got me, because it used the same username as another commenter who previously posted something long: "Wow that was odd. I just wrote an incredibly long comment but after I clicked submit my comment didn't appear. Grrrr... well I'm not writing all that over again. Regardless, just wanted to say excellent blog!"
|
# ? Oct 19, 2014 00:44 |
|
fletcher posted:You're on HackerNews! I never really read HN much but haha wow some of those comments are retarded. "It's not perfect so it is terrible even though it was a casual post of a POC on a completely separate forum!" e: missed this. this VVV SAHChandler posted:I know it's HN but the extremely upset comments are just totes adorbs.
|
# ? Oct 19, 2014 01:04 |
|
Suspicious Dish posted:Ugh. There's now 80 comments pending for moderation on my blog, and most of them are trash. There are several great comments, but it feels rude to approve only those and not all of them. What should I do? gently caress the lovely comments, only approve the quality ones imo. That's a pretty clever idea for a spam bot though.
|
# ? Oct 19, 2014 02:42 |
|
Suspicious Dish posted:Ugh. There's now 80 comments pending for moderation on my blog, and most of them are trash. There are several great comments, but it feels rude to approve only those and not all of them. What should I do?
|
# ? Oct 19, 2014 05:31 |
|
I unironically think getting featured on HN is one of the most annoying things to happen to you. They're the most bitter, predictable loving bunch in the world. I'd probably feature someone's work on HN if I had it in for them.
|
# ? Oct 19, 2014 11:54 |
|
I read it because it's typically a good place to find new stuff. Can you recommend a less bitter place?
|
# ? Oct 19, 2014 12:42 |
|
Suspicious Dish posted:Right, I was just curious why the rasterizer was emitting pixels in columns rather than rows. Last page, but I don't think anyone answered this question. Think about what a wall looks like in perspective: What the engine in, say, Wolfenstein 3D does is cast out a ray for every column of pixels in the final viewport, and trace each one out to the first wall. This part I think you got. The key that shodanjr_gr was kind of vague about is that it uses trig to figure out how tall the wall appears to be at the point hit. It's not actually treating the wall as a surface, so it would be completely unable to figure out how to draw anything with just a ray for every row of pixels. You actually can use a row-by-row approach to render floors and ceilings. For engines that support walls that aren't all of the same height you just factor that into the calculation of the strips height and slide the rendered strip up or down to account for player height, elevation of player's position, etc. The actual game logic is all purely 2D, and any 3D-seeming logic was accomplished via unholy space magic. There's a reason raycasting was completely abandoned once true 3D got to be truly viable. For completeness, here's the tutorial pretty much everybody uses when writing babby's frist raycaster.
|
# ? Oct 20, 2014 23:59 |
|
Blue Footed Booby posted:The actual game logic is all purely 2D, and any 3D-seeming logic was accomplished via unholy space magic. Sprites in Doom, for example, have three-dimensional positions and the player has no trouble moving over or under other sprites, no space magic needed.
|
# ? Oct 21, 2014 01:25 |
|
Suspicious Dish posted:Right, I was just curious why the rasterizer was emitting pixels in columns rather than rows. Because its not a rasterizer . With (basic) ray-casted rendering you generally assume that you fire one ray for each pixel in your frame buffer, get an intersection and then shade it. By imposing some limitations into the layout of the environment (e.g. only having a single "level" in view at any time), you can guarantee that, for ever pixel in a particular frame buffer column there is only going to be one singular intersecting wall covering part of the screen, with the rest being covered by the floor and ceiling (I'm simplifying a bit here). So you can cast a ray and intersect it against a 2D spatial data structure to get the appropriate wall surface and the distance from it. With the distance you can easily calculate the "footprint" of that particular wall on the screen for that single pixel. Also the intersection gives you information that determines the mapping between the wall geometry and the underlying texture. With this information and the distance you can also calculate the texture sampling "spacing" that you require. At this point, you have all the information you need to draw the wall for that particular column, so you might as well do it. That's why pixels are (usually) emitted in a column first fashion. It probably also allows you to leverage better CPU cache coherency while doing the texturing pass. The alternative would be to "store" the intersection information for each pixel and do another pass to determine texturing but that would just waste precious bytes from your 512kB of RAM that you had at the time. PS: Doom's renderer doesn't actually work like (except for the column-major wall texture mapping) that but Wolfenstein's does shodanjr_gr fucked around with this message at 02:24 on Oct 21, 2014 |
# ? Oct 21, 2014 02:20 |
|
shodanjr_gr posted:Because its not a rasterizer . With (basic) ray-casted rendering you generally assume that you fire one ray for each pixel in your frame buffer, get an intersection and then shade it. By imposing some limitations into the layout of the environment (e.g. only having a single "level" in view at any time), you can guarantee that, for ever pixel in a particular frame buffer column there is only going to be one singular intersecting wall covering part of the screen, with the rest being covered by the floor and ceiling (I'm simplifying a bit here). So you can cast a ray and intersect it against a 2D spatial data structure to get the appropriate wall surface and the distance from it. With the distance you can easily calculate the "footprint" of that particular wall on the screen for that single pixel. Also the intersection gives you information that determines the mapping between the wall geometry and the underlying texture. With this information and the distance you can also calculate the texture sampling "spacing" that you require. At this point, you have all the information you need to draw the wall for that particular column, so you might as well do it. That's why pixels are (usually) emitted in a column first fashion. It probably also allows you to leverage better CPU cache coherency while doing the texturing pass. The alternative would be to "store" the intersection information for each pixel and do another pass to determine texturing but that would just waste precious bytes from your 512kB of RAM that you had at the time. I thought they just shot 1 ray across the middle of the screen to find where the wall was that could be seen, so on a 800x600 screen it was 800 rays for each pass. as there was no up or down in Wolfenstein so it was just how far did i go before hitting the wall....
|
# ? Oct 21, 2014 07:13 |
|
One neat thing about ray casters is that you can get cylindrical and quasi-fisheye projections for free just by changing the direction you shoot rays from the camera. Maybe not a full 360 degrees, but a little bit of distortion might be a nice effect for underwater sections or something.
|
# ? Oct 21, 2014 07:35 |
|
TheresaJayne posted:I thought they just shot 1 ray across the middle of the screen to find where the wall was that could be seen, so on a 800x600 screen it was 800 rays for each pass. as there was no up or down in Wolfenstein so it was just how far did i go before hitting the wall.... A Wolf3D-style raycaster does shoot 800 rays (or W for whatever the pixel width of your viewport is). There is no concept of "middle of the screen" when doing this recasting though, the vertical position of the pixel at which you cast the ray doesn't matter precisely because there is no "up and down" (meaning that there isn't any walls placed above other walls, multi-floor level layouts, all the walls have the same heigh, etc). The layout of the level is represented in a purely two dimensional way. steckles posted:One neat thing about ray casters is that you can get cylindrical and quasi-fisheye projections for free just by changing the direction you shoot rays from the camera. How are you handling your props and ceiling geometries? Standard 3D models?
|
# ? Oct 21, 2014 07:56 |
|
shodanjr_gr posted:How are you handling your props and ceiling geometries? Standard 3D models? No preprocessing is required so sectors can be added or removed, vertices moved, and connectivity modified at runtime. Doors could be implemented by just moving the sectors associated with them. I do have plans to implement an "instancing" system where lists of sub-sectors could be referenced in multiple places. This would mean I'd only have to model a door once, for instance, and re-use the sectors wherever they're needed, rather than including the same geometry over and over again.
|
# ? Oct 21, 2014 08:47 |
|
Thats so awesome...I've been meaning to write a raycaster since I first saw Wolfenstein but never quite gotten round to it (apart from a lovely one I wrote in AMOS when I was about 12) and I think this is the encouragement I need. The glitchier the better. Does your sector-over-sector thing allow for rotating sectors for things like doors that swing open? Does your engine support reflective walls? You could do some really mental stuff with walls/portals that modified or translated the cast ray before it carried on going, like reflections/refraction and Portal-style teleports. toiletbrush fucked around with this message at 11:06 on Oct 21, 2014 |
# ? Oct 21, 2014 11:04 |
|
I picked up a book at a fleamarket around 1996 which does a really good job of explaining all the details needed to build a raycaster.
|
# ? Oct 21, 2014 16:28 |
|
toiletbrush posted:Thats so awesome...I've been meaning to write a raycaster since I first saw Wolfenstein but never quite gotten round to it (apart from a lovely one I wrote in AMOS when I was about 12) and I think this is the encouragement I need. The glitchier the better. Dooooo iiiiiiit. It's a lot of fun, and you can get the basics working in a weekend even if you're terrible like me.
|
# ? Oct 21, 2014 20:48 |
|
toiletbrush posted:Does your sector-over-sector thing allow for rotating sectors for things like doors that swing open? toiletbrush posted:Does your engine support reflective walls? You could do some really mental stuff with walls/portals that modified or translated the cast ray before it carried on going, like reflections/refraction and Portal-style teleports.
|
# ? Oct 22, 2014 00:22 |
|
Blue Footed Booby posted:Dooooo iiiiiiit. It's a lot of fun, and you can get the basics working in a weekend even if you're terrible like me. of course you could also embedd this into your game... altbhough its a bit slow https://github.com/POV-Ray/povray/tree/3.7-stable
|
# ? Oct 22, 2014 08:13 |
|
Blue Footed Booby posted:Last page, but I don't think anyone answered this question. With this approach, you only have three surfaces you're hitting for any given column: the floor, the ceiling, and the wall. steckles's screenshots were showing more than three surfaces per column, so I assumed it was more like a traditional rasterizer.
|
# ? Oct 23, 2014 00:56 |
After pulling an extreme all-nighter, I've finally got the newest feature of my pet project complete. The project is a Visual Studio .Net application that allows you to open files and view the byte stream as if it were graphical data in a multitude of modes. These rendering modes include bit depths of 1, 2, 4, 8, 16, 24, and 32bpp. There are also various ways to interpret the byte streams, such as a flat linear image (supporting Windows, PSX and N64 RGB element arrangements) or tiled graphics from a few different video game systems (GameBoy, PSP, GBA). Before I brag about the newest feature, here are a few screenshots: The menu texture for a very handsome devil, from Persona 4. Some item textures from Zelda OOT. Monster Medal tiles from Dragon Warrior III. And now, the super awesome feature. I've made it so the program is capable of opening another process and reading its memory, using the other process' memory as the source of the graphical byte stream, and updating in real time! Technically impressive, but of much more specialized utility than opening files. I'm mostly using it to watch process' memory changing in a graphical manner, so I can find patterns in the organization of structures and other elements in memory. That didn't stop me from oggling a DOS program's framebuffer, though. There's still a few bugs to work out of the new feature, specifically the fact that it only maps the target process' memory pages upon opening it, and they may change as the program executes. Old pages may be freed and new ones may be committed, which can lead to exceptions when I attempt to read memory that is no longer there. I'm also planning on replacing that maroon bar on the right side of the form with a graphical representation of the valid memory blocks, though that could prove to be troublesome if I wanted to keep it all to-scale, considering how small some of the blocks are and how spread out they can be in the virtual memory space. Still, not a bad update for a sleepless night's work.
|
|
# ? Oct 24, 2014 12:31 |
|
Neurion posted:Awesome stuff. Now this... this I like. The thing I admire about these sort of projects is that you never know when they'll turn out to be the perfect super-useful tool for some esoteric problem you come across when working on something completely unrelated. When I am interviewing applicants for a developer job, these are the sort of personal projects that I like to see people working on.
|
# ? Oct 24, 2014 13:55 |
|
toiletbrush posted:Thats so awesome...I've been meaning to write a raycaster since I first saw Wolfenstein but never quite gotten round to it (apart from a lovely one I wrote in AMOS when I was about 12) and I think this is the encouragement I need. The glitchier the better. You totally should, they're pretty straightforward (its 2D!) but its also pretty cool (wolfenstein clone!) and you'll learn a lot about alternative rendering approaches. Reminds me I should really go back and finish my raycaster. I got the basic rendering and walking around working perfectly, and I got texture mapped walls in, but when I tried to do texture mapped ceilings I couldn't get the math right and it kept drawing the textures totally wrong. The rest of the scene looked great though if you can accept flat shaded ceilings and floors. I couldn't have been far off either...
|
# ? Oct 24, 2014 16:53 |
|
I started looking at L-systems. Starting with only a single line segment, then replacing that with a slightly thicker line segment, and if it's new, add one or two new line segments at the end of it. I also had to add a special rule to not make the trunk split off until a few cycles in. New line segment lengths and angles are slightly randomized.
|
# ? Oct 24, 2014 19:31 |
|
Neurion posted:After pulling an extreme all-nighter, I've finally got the newest feature of my pet project complete. Zaphod42 posted:Reminds me I should really go back and finish my raycaster. I got the basic rendering and walking around working perfectly, and I got texture mapped walls in, but when I tried to do texture mapped ceilings I couldn't get the math right and it kept drawing the textures totally wrong. code:
Along those lines, I totally recommend anyone interested look up Chris Hecker's old texture mapping articles. Very useful theory and it covers stuff like sub-pixel correction that can dramatically improve the quality of your results.
|
# ? Oct 24, 2014 21:32 |
|
Programmer Humor posted:I started looking at L-systems. Starting with only a single line segment, then replacing that with a slightly thicker line segment, and if it's new, add one or two new line segments at the end of it. I also had to add a special rule to not make the trunk split off until a few cycles in. New line segment lengths and angles are slightly randomized. L-Systems are so much fun. They're a great way to familiarize yourself with whatever graphics api / language that you're using.
|
# ? Oct 24, 2014 21:47 |
Tres Burritos posted:L-Systems are so much fun. They're a great way to familiarize yourself with whatever graphics api / language that you're using. They're cool because they're so trivial, but can produce such neat results.
|
|
# ? Oct 25, 2014 00:41 |
|
Tres Burritos posted:L-Systems are so much fun. They're a great way to familiarize yourself with whatever graphics api / language that you're using. Same. A → B-A-B B → A+B+A
|
# ? Oct 25, 2014 15:33 |
tef posted:A → B-A-B This should be your avatar, with something along the lines of "recurse to view avatar" beneath it.
|
|
# ? Oct 25, 2014 18:10 |
|
Centripetal Horse posted:They're cool because they're so trivial, but can produce such neat results. I just learned about these now and oh my god I can't wait to start loving with them. I have just the project too. Thank you, goons, for throwing out a topic that I can easily grasp for once. I still want to get into ML. Just all. that. math.
|
# ? Oct 26, 2014 01:00 |
|
This is my porting partner, not me, but still: Dude got Hot Tin Roof running on XB One. Apparently didn't take long at all, once the stupidity around getting it working as a devkit was done. (from the looks of things, Unity on XB One can't do deferred shading, or it's otherwise buggy... clearly he has a lot of work to do before it's shippable )
|
# ? Oct 26, 2014 06:58 |
glompix posted:I just learned about these now and oh my god I can't wait to start loving with them. I have just the project too. Thank you, goons, for throwing out a topic that I can easily grasp for once. Try playing with Weka to observe the behaviors of different algorithms and check out Data.gov for some datasets. Or do clustering. I love clustering. It's machine learning for people who suck at calculus.
|
|
# ? Oct 26, 2014 17:24 |
|
A new version of Awful Forums Reader is coming... And it will be
|
# ? Oct 26, 2014 19:52 |
|
Drastic Actions posted:A new version of Awful Forums Reader is coming... Ahaha the schism is upon us!
|
# ? Oct 26, 2014 20:10 |
|
pokeyman posted:Ahaha the schism is upon us! You should make a Windows Phone version of Awful.app out of spite
|
# ? Oct 27, 2014 09:23 |
|
Sereri posted:You should make a Windows Phone version of Awful.app out of spite And It'll be better than mine . This is my excuse to use the Xamarin tools I now get for free. All of the forum parsing logic is done, since it was in a PCL. Note that I'm also refactoring it to fix the mistakes and other bugs in it. So really what I need to do is UI. Which, if you look in the Glitch thread... Yeah, it'll be awhile. Drastic Actions fucked around with this message at 16:32 on Oct 27, 2014 |
# ? Oct 27, 2014 13:38 |
|
Blue Footed Booby posted:Last page, but I don't think anyone answered this question. Thank you so much for posting this, it really blew my mind on the simplicity, and I'll find time to do this. It will probably be much easier to do than some of what was described on the site, because you could use built-in image manipulations, even in Javascript.
|
# ? Oct 27, 2014 21:23 |
|
LP0 ON FIRE posted:Thank you so much for posting this, it really blew my mind on the simplicity, and I'll find time to do this. It will probably be much easier to do than some of what was described on the site, because you could use built-in image manipulations, even in Javascript. Yeah raycasters are beautifully simple. They cast a 1D line of rays, which use a 2D set of data in order to fake a 3D perspective. That's just cool.
|
# ? Oct 27, 2014 22:01 |
|
|
# ? Jun 6, 2024 14:21 |
glompix posted:I just learned about these now and oh my god I can't wait to start loving with them. I have just the project too. Thank you, goons, for throwing out a topic that I can easily grasp for once. They are great fun. In fact, I decided to roll another L-System thingamabob of my own. Pictured are a capillary/tree thing, a dragon curve, a Hilbert curve, a Koch curve, a Peano curve, a Sierpinski gasket, a non-intersecting Sierpinski gasket, and some random baloney I made up because I like even numbers and I didn't want to post seven images. The colors are because I can. In unrelated news, Chrome doesn't put a squiggly red line under "thingamabob." Edit: I'm happy to share the code if you or anyone else want it. Be warned, though, it's ugly. I changed direction about a dozen times, and there's all kinds of things in classes that shouldn't be classes, the logic is illogical, the program structure is bizarre, and I think interfaces even made a brief appearance. Also, it's written in Monkey Centripetal Horse fucked around with this message at 08:38 on Oct 28, 2014 |
|
# ? Oct 28, 2014 08:34 |