8 ms·
Helion: A modern fast paced Doom FPS engine in C#
- yodon 1y agoImpressive C# performance!
- dax_ 1y agoMicrosoft has really been putting a lot of focus on improving it with each release. I love reading through the blog articles for each major release, that outline all the performance improvements that were done: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-9/ https://devblogs.microsoft.com/dotnet/performance-improvemen...
- runevault 1y agoA warning for those not in the know, the performance improvement posts famously give mobile browsers trouble because they are so massive. All because the extent of the improvements is so great (along with the amount of detail the posts go into about the improvements).
- ddingus 1y agoI just viewed the one linked above, and the coupla second render delay at first aside, the post displayed nicely, at full frame rate. Old Note 9, Chrome and Firefox. Non flagship mobile devices could very well choke on one of those pages, but most newer devices should display these pages with little grief.
- runevault 1y agoInteresting, I thought I saw the usual complaints even in the past year.
- qingcharles 1y agoAnd if you look at the PRs for the core, there are Intel people hacking away at the low-level routines too; to make it run better on their latest server CPUs.
- animal531 1y agoGo and have a look at Bepu Physics v2: https://github.com/bepu/bepuphysics2 https://github.com/bepu/bepuphysics2 It can be quite performant these days, sadly I'm stuck developing in Unity Mono C# which is quite a bit behind.
- Cieric 1y agoThis looks interesting and I'm going to take a look later. Just a minor nitpick up front though, I think the performance graph should be a bar graph instead of a line graph. Mainly since the in-between states don't have much meaning as you can't be half way between 2 different gpus.
- kevingadd 1y agoMight make sense to use a logarithmic scale for the graphs too, it's hard to tell what speed the other ones are since they're compressed so far down.
- atmavatar 1y agoEven just updating the graphs would be helpful. There appear to have been several releases since 0.9.2.0, including a bump from .NET 7 to .NET 8 (and a bump to .NET 9 in dev). The more recent .NET versions by themselves are likely to have some impact on the performance, let alone any changes in Helion code between versions.
- ogurechny 1y agoThose discussions are a bit misleading. Original Doom updates its state only 35 times a second, and ports that need to remain compatible must follow that (though interpolation and prediction tricks are possible for visual smoothing of the movement). Rendering engine is also completely orthogonal to polygon-based 3D accelerators, so all their power is unused (apart from, perhaps, image buffers in fast memory and hardware compositing operations). Performance on giant maps therefore depends on CPU speed. The point of this project is making the accelerator do its job with a new rendering process. Though I wonder how sprites, which are a different problem orthogonal to polygonal rendering, are handled. So, cough cough, Doxylamine Moon benchmarks?
- kfuse 1y ago"Rendering engine is also completely orthogonal to polygon-based 3D accelerators" Software rendering engine, yes (and even then you can parallelize it). But there is really no reason why doom maps can't be broken down in polygons. Proper sprite rendering is a problem, though.
- bee_rider 1y agoFinally I can play Doom on my 2khz monitor.
- dataflow 1y ago2 kHz monitor? Is that a joke, or a typo, or real?
- thomasqbrady 1y agoHow does licensing work, here... could you use this to develop an indie game and sell it?
- kasajian 1y agoNot sure what the question is. The License is clearly stated.
- gcr 1y agoNo, it’s GPL3, so your game must be open-source. If the authors wanted to protect engine development while allowing indies to sell games made on it, they would have picked LGPL or a more permissive license.
- detaro 1y agosince when do people not sell GPL games?
- energywut 1y agoYou are technically correct, and I believe the GPL doesn't cover the assets for the game (levels, art, audio, etc.), but I suspect there aren't many GPL licensed games out there for sale that have sold enough copies to make developing them worthwhile financially. I'd love to be wrong, so if you have a few examples, I'm all ears.
- energywut 1y agoI wonder if it can play through MyHouse.wad. Which, if you haven't seen before, is an incredible art piece. https://www.youtube.com/watch?v=5wAo54DHDY0 https://www.youtube.com/watch?v=5wAo54DHDY0 If you've read House of Leaves, do yourself a favor and check it out.
- tines 1y agoOh man, House of Leaves is amazing. Danielewski has my respect.
- low_tech_love 1y agoHe used Eviternity 2 as an example, my personal GOTY for 2024. Check it out if you haven’t!
- wiseowise 1y agoI’m also curious about this.
- BLKNSLVR 1y agoThank you for the, so far, half-day rabbit hole... Agreed, it is an incredible art piece, and now I want to go find a copy of House of Leaves.
- uncircle 1y agoIf you talk about myhouse.wad, you must link the video of John Romero himself playing it: https://youtu.be/gIl_TqFJNO8?si=H4o6m-RbH2rpX2FG https://youtu.be/gIl_TqFJNO8?si=H4o6m-RbH2rpX2FG
- bob1029 1y agoI am curious if the author considered use of the built-in numerics library over hand-rolling types like Vector4F. All of the methods defined here: https://github.com/Helion-Engine/Helion/blob/20300d89ee4091ca715b086c3aaa3addb5c6cf98/Core/Geometry/Vectors/Vector4F.cs https://github.com/Helion-Engine/Helion/blob/20300d89ee4091c... Are available in the kitchen sink: https://learn.microsoft.com/en-us/dotnet/api/system.numerics.vector4?view=net-9.0 https://learn.microsoft.com/en-us/dotnet/api/system.numerics... Same idea applies to methods like GetProjection, which could be replaced with methods like: https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4.createperspective?view=net-9.0 https://learn.microsoft.com/en-us/dotnet/api/system.numerics... Advantages of using this library are that it is uses intrinsics (SIMD) to accelerate operations. There is a lot of Microsoft money & time that has been invested into these code piles.
- jabart 1y agoIt looks like these types were code-gen from something else. https://github.com/Helion-Engine/Helion/commit/e6affd9abff148d65096e535c1adda3bb551b813#diff-de9f308a50a59f9d66f886309fbf6596f19e40ca194869a5eddb021f6737c9d2 https://github.com/Helion-Engine/Helion/commit/e6affd9abff14...
- accoil 1y agoFurther down in the commit there's a Generators project that has the VectorGenerator class.
- Disposal8433 1y ago> [a diff with] +4620 -1454 [lines] Someone should learn some CS and then how to make proper commits.
- patrick4urcloud 1y agoi will give a try.
- _0ffh 1y agoIt's a Doom engine, and they missed the opportunity to call it "Hellion"??
- bigbuppo 1y agoAnd with the name Hellion they could also go down the Judas Priest rabbit hole.
- deleted 1y ago[deleted]
- ngrilly 1y agoFinally, a good example of a modern C# code base that is open source, and that doesn't look like the equivalent of J2EE in C#.
- tester756 1y agoI wanted to provide link to Ryujinx repo, but I've found that Nintendo threaten them and they had to close the project :(
- necrosyne 1y agoAllegedly, Nintendo chose to buy them off with millions of dollars to suspend development instead of pursuing legal action.
- lrae 1y agoIs there any source on that? All I'm seeing is they got their hands on the domain, which can be (and was in the past) just part of whatever settlement they agreed on, and the game press spinned that into "Nintendo bought Ryujinx".
- aeonik 1y agoThanks for your comment, made me want to check it out, and yea it's really clean code.
- mawadev 1y agoThe Benchmarks look a bit sketchy... is the frame uncapped for all the other engines and has vsync been disabled? It's a very odd graph to look at, but great performance regardless
- c-hendricks 1y agoThere's a link to a spreadsheet with the actual numbers, and there doesn't appear to be any capping: https://docs.google.com/spreadsheets/u/0/d/19INwMjrppDO-n90HOc-Hhrs1tcqphrItQ_LhzRgurZc/htmlview# https://docs.google.com/spreadsheets/u/0/d/19INwMjrppDO-n90H...
- neuroelectron 1y agoFPSes aught to update the screen every millisecond. Why isn't this more common?
- theblazehen 1y agoBecause you quickly get into diminishing returns, while significantly scaling the hardware required?
- imbusy111 1y agoThat would require a 1000Hz screen to even be able to output. 144Hz is the high-end today. It seems to be pointless to push beyond that.
- c-hendricks 1y ago240/360/480/540hz monitors all exist. 144hz is not that high a bar anymore, and kind of the odd one out given that it's not a multiple of 60.
- matja 1y agoOr you could say 540Hz is the odd one out for not being a multiple of 24Hz, the standard since ~1930.
- dimitropoulos 1y agothe Doom in TypeScript types project wouldn't have been possible without Nick and Helion - I owe Nick a huge thanks! He helped with some of the more obscure parts of the engine and also helped make a super small WAD that is what the game eventually ran in. Legend.
- LoganDark 1y agoDoom in TypeScript types is amazing. Thank you for losing your mind for the rest of us :)
- reverseblade2 1y agoI have seen some use case for MemoryStream, why not use RecyclableMemorysStream instead?