[0.11.5] Latios Framework for ECS megathread

Keep up the good work, it’s fantastic when people share their work.

2 Likes

I think you are over thinking the matter too much.

In short
My point was nothing more, than having frameworks and identifying a risk of using such with later packages, which are actively changing. As you experienced yourself, things get broken as you pointed out. There is nothing more to it. :slight_smile:

Expanding upon
We have somwhere on the forum, source of well developed physics framework in DOTS. It was maintained to the certain point. Then consider first DOTS FPS samples, or even Megacity. People get really upset, when they find out, resources are not going to be maintained and kept up to date. It was just few months, or so, when each of them stopped being compatible with later evolving entities packages. Hence maybe you will see my reasons for concerns?

Identifying risk early, helps to mitigate it, as you aiming to do so. Which is great.
Again, I am not against such works, as each is great learning source. I do kindly investigate such, when I got a time. But I am looking at the matter realistically and I hope you see my point now. :slight_smile:

4 Likes

Even more important than writing good code, is being a good person to work with. Unfortunately, this kind of thing does not make a good impression. I hate to say it, but I would have to think twice about using code if it’s author was responding to people this way. I have nothing against you, and I’m not saying this was your intention. But maybe it’s not a good idea.

I don’t want to step into the middle of anything here, but this has taken a really dark turn and fast.

I don’t post a lot on the boards, but I’ve spent a lot of time lurking in the DOTS forum over the past year and I’ve seen all three of your handles (DreamingImLatios, Antypodish, PublicEnumE) show up repeatedly asking and answering questions on the threads. I have to say it’s a bummer seeing such negatively breaking out in the community.

5 Likes

You’re right. I don’t mean any animosity here, and I’ll back out. I always appreciate people sharing their code, and @DreamingImLatios , you’ve done a ton of good here on these forums - sharing code, bringing up important issues, and helping folks by answering their questions - including mine. I didn’t like your response here, but that’s all. I probably poured gas on a fire, and that’s not helpful.

1 Like

I am probably overthinking it. And I do get your point. In fact I agree with it. I just don’t know why you decided to tell me that. I appreciate you clarifying that it wasn’t intended to be malicious. And I’m sorry that I offended you and everyone else in trying to figure that out. :sweat_smile: My goal was to tell you where my thoughts were so that you could answer my question in a more helpful way. I still think understanding why you decided to type out your thoughts the first time (I fully understand your subsequent replies) could potentially lead me towards new solutions to further reduce risk for such projects. But I will leave that up to you. PM is probably better though.

To everyone else, I encourage feedback. And I fully recognize I am not perfect and sometimes you may need to call me out in order to help me reach an understanding. If you would like to discuss more, please PM me. I’m here to grow and improve, and appreciate any thoughts or tips you can provide.

And to avoid this issue in the future, if you are going to make a negative comment on this thread about what I am doing for the sake of discussing a more general problem rather than something I should take as direct feedback, please indicate as such. Otherwise I am just going to be really confused and say dumb things again.

3 Likes

@DreamingImLatios No worry, we are good. Thx :slight_smile:
I will try to be more clear next time.
All best in the project :sunglasses:

2 Likes

Strange last part of this thread :smile: Things just happen, no matter what @Antypodish intended or how @DreamingImLatios get it, bad days happens and everyone can take something wrong because of mood, especially at Autumn :smile: Just deep breathe and move forward :wink:

7 Likes

Latios Framework 0.2.1 is officially released!
This is a patch release that supports Entities 0.16.0.

There are no new features as this just resolves some breaking changes.

Link Here

Enjoy Entities 0.16.0 and stay safe!

3 Likes

I just want to say – thanks for releasing this framework!

Honestly, I am trying to get back into DOTS and ECS again, as I took a hiatus due to life (and waiting for the technology to actually evolve a little). However, I am stumped right now as to whether or not DOTS has actually evolved that much. D:
After looking through your github, it looks like you’ve been writing your own version of using DOTS that may or may not be compatible with Unity’s “grand vision” in the end.
I say this because, as far as I can tell, you’ve been doing more with DOTS than it appears Unity has been since I last took a dive into DOTS / ECS methodologies. The fact that we don’t have scene/subscene references, or basic things like decent physics / animation (provided by default) right now bothers me. However, it looks like you are really tackling this in a bit-by-bit fashion with your framework – which is awesome.

For those of us who have been out of the loop with DOTS, I was curious what kind of things are coming with DOTS, and what kind of things we will probably have to wait a while for – and for the latter stuff, I would like to know where making a full-on game with DOTS would need to compromise on (with and without your system) in order to supplement that with a Mono equivalent?

I want to get started with understanding your framework, but I’m afraid I don’t have enough current knowledge on DOTS to actually get me up to speed with what it can (and cannot) currently do in terms of more full-featured games. In particular, I am trying to establish the expected workflow with DOTS as it currently stands.
You mentioned possibly streaming some stuff, so I would also like to see you showcase some of what your system can do in regards to scene loading and/or unloading, or making entities behave in a certain way (locally and globally), etc. I am working on a trait-based Unity Editor tooling system right now, with ECS as the core, but I’m curious as to how (or if) an entity can be processed with a (dataless) component, for example – especially at the bit/byte level – w/DOTS, for example.
Please keep in mind that I am a programmer – but only out of years of necessity. I am more of a designer at heart, and as such, I’m just looking to understand how I might design my own visual tools with ECS and DOTS as the foundation technology. I am trying to understand the current state of the technology before I jump into that though, so any examples on how to handle and understand the low-level side of DOTS and/or ECS with your framework as an example would be greatly appreciated! :slight_smile:

Your docs are amazing btw! :slight_smile:

Wow! Thank you for the kind words! I’m really glad you like it! Such comments make my day! :smile:

Hard for me to speak in the context outside of my framework. There are other veterans on these forums that can better answer to that, though I suspect they have similar but different solutions to the problems this framework addresses.
If you have a specific game idea, I can tell you what parts have high-level functionality already implemented by Unity, what parts I may have solutions for (or solutions in the works), and what parts you would be on your own for. Games just have too wildly varying requirements for me to give you a good answer without context.

While this unfortunately doesn’t fully demonstrate the power of streaming (the code is there other than some subscene caching bugs, but I haven’t invested the time to design levels that use it), I do have a game project that I have made public and is one of the main projects I’ve been using to sort of “battle test” this framework. It is at the point where new ships and levels can be added to the game without touching a single line of code. The repository for it is here: https://github.com/Dreaming381/lsss-wip/tree/master
If you would like a personal tour of that repository and how it all works, PM me and we can work out a time to meet through Discord. :sunglasses:

3 Likes

Latios Space Shooter Sample
I click any Scene then crash…
any solution?

e7d4c474767ec9dd3c90244b39dbff2c07d2ca1b.jpeg

What GPU are you using? Are your graphics drivers up to date?
One thing you could try is in SpaceSkyRenderer.cs, changing lines 39 and 89 from 4096 to something small like 512 or 1024 (keep them the same).

1 Like

My GPU are using GTX 950, i7.3, and my driver is up to date.
Thank DreamingImLatios, Change to 512 or 1024 can solve the problem.

1 Like

Btw, I yoinked the box collider code from lsss, and it works great. Thanks.

1 Like

Latios Framework 0.2.2 is officially released!
This is a patch release that supports Entities 0.17.0.

  • Core

  • Burst Patcher has been deprecated and now needs the scripting define symbol BURST_PATCHER to be enabled. I doubt anyone was using it for custom jobs, but if you were, please reach out to me as there are better solutions available.

  • Bootstrapping bugfixes

  • Physics

  • To support 2020.2 users, the new FindPairs dispatcher has been backported. This includes a new ScheduleParallelUnsafe option as well as new safety diagnostics that make it a lot harder to mess up. Normally I don’t like to add new features to patch releases, but this is a common codepath in my projects and I have some confidence in it.

  • Several bugfixes, including ones I forgot to backport to [0.2.1]

  • The README pages with the roadmaps have been updated.

Link Here

As for the fabled version [0.3.0], it is coming. I’m spending much more time than I originally planned to ensure that the new Audio package is built on a solid foundation.

Anyways, if you are hyped for [0.3.0] and want to help make it arrive faster, please PM me! Zero programming skills are required to cut my time until ship by half! :smile:

Enjoy Entities 0.17.0 and stay safe! :sunglasses:

6 Likes

Latios Framework 0.3.0 is officially here! - Link
This is a feature release targeting Entities 0.17.0. Feature releases contain breaking changes, so please read the Upgrade Guide if you are already using [0.2.2].

Overall Highlights
There were three goals I had hoped to achieve in this release:

  • Improve compatibility with other DOTS projects
  • Rename packages and tools for better clarity and consistency
  • Reduce latencies caused primarily by sync points

Compatibility
Even though the Latios Framework has its own physics module (still a work in progress), many people would prefer to use Unity.Physics or Havok.Physics instead. This is supported and has been for a while. What is new is that many features that have side-effects can now be disabled. See this compatibility guide for more info.

In addition, the built-in systems are now much more injection-friendly!

Package Names and Tooling
What did Latios.Physics mean to you? Was it an alternative to Unity.Physics? Was it an extension? It was annoying to have to type “Latios.Physics” to differentiate it. So I renamed it to something much more unique that helps set it apart as a different solution with different ways of working. It is called Psyshock now. And Audio is called Myri. The names will make it easier to have conversations and also easier to search on Google and these forums.

As for tooling, all authoring components have been categorized under Latios and organized by module. That should make finding them a lot easier.

Sync Point Management
Just for comparison, here is what a stress-test frame looked like in LSSS [0.2.0]:
Todo: I need sleep. Will edit this post with images tomorrow.

And this is what that same stress-test looks like in LSSS [0.3.0]:
Todo: I need sleep. Will edit this post with images tomorrow.

It is quite the improvement!

Core Highlights
This release introduces custom command buffers:

  • EnableCommandBuffer - including LinkedEntityGroup
  • DisableCommandBuffer - including LinkedEntityGroup
  • InstantiateCommandBuffer - can add and initialize components to the new entity faster than ECB
  • DestroyCommandBuffer - is sometimes faster than ECB

In addition, these can be acquired using latiosWorld.syncPoint and are played back at the beginning of the frame.

Psyshock Physics Highlights
Box Colliders are here! Now you can have flat things! They use a custom algorithm loosely based on SAT.

Myri Audio Highlights
This is an entirely new package that drives DSPGraph audio using pure ECS. It has the following major features:

  • Oneshots
  • Looped
  • 3D Spatialization
  • Automatic Voice Combining
  • Fully job and Burst-compatible asynchronous API
  • Worker-thread execution during a Sync Point
  • Multiple Listeners
  • Zero-Code Playback

LSSS
LSSS also received an update. Check it out and hear Myri in action!

Feedback Wanted!
Outside of patch releases and bug fixes, I will be taking a break from heavy development to catch up on life things. In the meantime, I would love feedback! Specifically I would love to know the following:

  • Bugs
  • Roadmap feature prioritization requests (The roadmaps are in each module’s README page at the bottom)
  • New feature requests
  • Optimization requests
  • XML documentation requests
  • Markdown documentation requests
  • More samples requests (mention the feature you wish to see samples for)
  • Videos?
  • Some other way I can make this framework better?

Currently my plan for [0.4.0] is to focus on the existing modules and fill out their APIs and optimize them. I will likely be doing this development in LSSS still. ETA September.

Enjoy the new release!

9 Likes

Congrats on the release! I am excited to give your framework a try once I"m able to spend time on gamedev again.

1 Like

I think I found another bug(forgot this thread was created so probably a better place to discuss this), audio doesn’t appear to work in a build created with the new build pipeline package(com.unity.platform.windows), but its fine using the old one from the file menu.

Not really sure what else to add, its just a simple scene with a looping audiosource playing. Nothing in the player log to suggest anything isnt working.

That’s really weird. LSSS uses the new build pipeline. I guess I haven’t tried making a build in 2020.3 yet (been super busy with some projects that don’t really require building). I’d be curious if you experience the same thing using 2020.1.9f1. Regardless, I will let you know if I manage to reproduce it!