OfficeHours:ProbablePrime:2022-04-12
Audio
Description
In this Office Hours, Probable Prime talks about:
- Thumbnails
- The roadmap (which is up to date)
- Optimization again (of course)
- Local/Offline Storage
- Snappers!
Transcription
(Please note that the transcriptions will not be 100% accurate)
Okay, it is the top of the hour, so welcome to prime time for documentation, tutorials
and questions about Neas.
Please drop your questions in the office hours chat and we'll get to them as soon as we can.
I don't see any questions right now, so until there are questions appearing, I don't know.
That monkey with the clapping cymbals, yes.
Yes, until there are questions.
Sorry, I don't answer cheese questions, just some questions about Neas, makes things easier.
I will answer that one, I will.
So Jamikar asks how my day has been.
Good, yes, I have consumed way too much caffeine.
I don't remember eating lunch, so I'll probably sort that out after this.
It's also warming up a bit, which is great.
I'm not looking forward to the summer, where it's going to be sort of air conditioning
as well, but we're a little bit away from that just right now, so it's still cold sometimes.
Okay, next question, which is from Gun Griffin, which says what point does the world preview
get rendered from?
World preview systems are very complicated depending on what the setup in the world is.
Assuming a default world, it will get rendered randomly based on the geographic position
of players who've been there.
Actually periodically, I don't know the period, I think it's like every couple minutes, maybe
every minute, I don't know the answer to that one.
Every computer that is connected to Neos session will take a photo of the perspective of that
user, and then there is sort of like a negotiation or exchange process that goes between the
users in the session to figure out, hey, which is the most up to date thumbnail or session
preview, et cetera.
And then that most up to date one will then be shared with the actual systems that run
our sessions, et cetera, and that's the one you see.
You can check more out there.
If you've got any of the components which are enabled, et cetera, then it will vary.
The listing is right there for what they will do.
Moving onwards to the next question here, which is, is there work being done on Neostruth
during this time?
Yeah, we're doing a few things.
We don't really have much to share about what we're doing or who we're doing, but like I
got lots of stuff happening, occasionally I edit the code, add stuff.
The next update should have like a ton of prime stuff, basically, it's cool.
So you'll see.
The roadmap is still up to date.
If the roadmap wasn't up to date, I would update it, trust me.
But other than that, yeah, we're doing as much stuff as we can.
Yeah, that's all the questions I have currently.
Yeah, you won't see much updates.
We're not releasing updates right now.
We are doing stuff and the roadmap's up to date, but we're not releasing updates.
I get it, it's confusing, et cetera, but remember, the roadmap's up to date.
So like look at the roadmap and imagine us doing stuff.
Who asks what is prime stuff?
Some quality of life improvements, like for example getting the active slot from the collider
much easier than it is currently.
Yeah, there's a bunch of stuff in devlog which I've been posting.
There's random other stuff, which is like things along the lines of like I got annoyed,
so I implemented it.
They're a little bit difficult to describe.
I'd have to go take a look at what's actually made it in and then see which ones are still
pending, and then we'll see what's going on there.
Count occurrences was in devlog, collidery dudad, the grabadudad was in devlog.
There's one other one I can't remember, but yeah, a bunch of other random stuff is happening.
You can see what I'm working on generically by the assigned issues.
If you go to the issue list and you look at sort of assign to prime, those are the sort
of things I'm dabbling in when I get time.
So rubix asks when collections will be implemented.
We don't give ATAs check the roadmap for information on collections and when that might happen.
Crying asks where approximately on the priority list is a FTT or something that could enable
for analysis transforms.
So if you check your look in devlog, Gaines did take a look at making FTT and got things
working.
I don't think that aligned to some sort of architectural problems that we had in NIRS.
We might have to redo that one.
So take a look on the roadmap.
We don't really have an NTA on when that would occur.
I know it looks cool to see it working in the game, but there's a difference from working
in the game as a quick sort of hacky project compared to working in the game, something
that can actually be released.
It's very difficult to unreleased stuff, so that's why we try to make sure everything's
cool, secure, update, future proofed, et cetera, before we actually release it.
That was actually a large problem with the counter occurrences node.
I wrote that thing like three times because the particular way that we were counting the
occurrences in a string could have been problematic, but then we made it a different way that was
slightly less problematic, and then we just went ahead and benchmarked all of them and
found a way that is something like 200 times faster than the previous three ways I was
doing it.
Always fun.
Especially when you're reading the C sharp source.
I don't really know why we did that.
We just did.
Sometimes we do that.
If you, you know, too long didn't read on that is check the roadmap.
I know it doesn't look like it's moving, but the thing that you need to remember is that
even if a roadmap is not moving, it still represents work that is occurring.
So it's sometimes normal to not see it moving because work is still occurring.
It's not like work is not occurring.
Work is occurring.
It just is nothing we can share, really.
Moving onwards from Nessie.
I have a question here from Nessie, which says, is there anything good you can say about
the unfolding situation with NCR?
There are good things to say, but you can't come up with something to understand.
Sorry for the NCR focus.
I supported Neo since before crypto brews knew existed, but I'm, of course, highly impacted
by the situation.
Would like to see some better integration used for the marketplace job system.
Everything I have to say on that matter is in the announcements channel.
There is nothing else I can say about that.
Check the announcements channel.
Stance, et cetera.
They're on the announcements channel.
That's a slightly different question from crying surrogate.
They're asking about buying storage.
You can still supply to the Patreon.
I know everyone's like, don't blah, blah, blah, blah.
The things from Patreon that are still going towards stuff that you need still exist, though.
Some portion of the Patreon goes to paying for our services.
Those services that are paid for then pay for your storage.
Hence why we give you storage when you become a Patreon.
So don't cancel it if you need storage.
Just drop it down or stuff like that.
And then that way, you'll get the storage that you actually need.
You'll still show your opinion by dropping the Patreon.
You won't be outright losing access to storage.
Just on the list of questions we have.
We are interested in additional ways of gaining storage in the future.
Things like a permanent increase may be costing a certain amount of money or stuff like that.
But right now, those are the only two options that we have for storage.
If you have any particular ideas about additional storage ideas, open up a GitHub for your idea
that you have.
I don't know.
Maybe if we send Prime Cheese, he'll give you storage.
Moving onwards, Gun Griffin asks, what's the general rule of thumb for user count when
hosting based on your internet upload speed?
There isn't a general rule.
It's based on a lot of things.
People imagine it as being a hard and fast rule.
The same thing goes with system requirements.
It depends on what you're doing, who you are, what the other people are doing, what their
computers are like, what their internet connection is like, where they are, all sorts of stuff
like that.
You need to factor that all in together.
You can measure the data requirements of an individual user and then extrapolate from
that.
But I just don't give recommendations on that.
The question is too vague, what do you want?
Hack 13 asks, is there any news progress on the switch to auth version of the NEEUS web
login system?
That's a bit of a sort of word soup question.
I'll try and extrapolate an answer, though.
That is on pause, whilst we deal with website related issues, sort of see announcements
on that one.
We need to basically rewrite 90 to 95% of the website to use the new systems and then
actually get some useful functionality in place.
We don't have any useful functionality there.
You can get the profile data via OAuth, but you can't get anything else like friends,
et cetera, stuff like that from the OAuth land.
That's just because we need to rewrite most of the web APIs to then use that new process.
Oh, hackers just updated things to say resetting password.
Resetting password, that can be done via any place, it will do it exactly the same.
You don't necessarily need it from the new system.
You can use the old system.
It's entirely up to you.
Doesn't matter either way.
If you wanted to reset your password another way, do you let me know or extrapolate on
the actual problem?
The old one?
Oh, no, I'd have to double check.
I'm sure you can do it on the old one, though.
Moving forwards to alpha.
Moving forwards to Svekin, who says what part of the snapper does the actual thinking, i.e.,
does a snapper check for snap targets or does the snap targets check if snappers are inside
the collider and do a lot of snap targets.
Neither part does the thinking.
Anything related to snappers, snapping, and grabable receivers, stuff like that, is actually
performed by the grabber, so if you think about grabbing something, there is always
an active user that is grabbing that because you're holding it.
When you drop something in the world, when you let go of it, that's what does the snapper
thinking.
So I am holding a snappable object near its snap target.
When I let go of that, the code which handles the letting go of it will go, cool, I have
snapper components.
I will do a physics calculation to figure out if I'm colliding with an appropriately
configured snap target, and then I will snap into it.
Once it's figured out if there is a snap target in place and that the object that you're dropping
is a snapper, it will instruct the snapper to do its job, but again, the predominant
thinking is via the grabable.
As for the performance problems or questions that you have, no, or not really in like general
use case, I can't think of many cases where you'd need like hundreds of snappers in existence.
There might be some sort of like, I don't know, puzzle game style stuff, but it's totally
fine.
Just remember when it comes to physics calculations, just use them.
I hate people who are like, I'm going to use manual mathematics rather than physics.
It's like, why?
Physics is already doing the manual mathematics for you.
They're like, yeah, active colliders are bad, and yes, active colliders are quite inherently
bad, but if you use them correctly, they're great.
Same thing goes with the grabable physics calculations.
Especially seeing as those are out of the way of you, like you can't influence them.
Those exist in code within our engine that you can't change.
If there was a performance problem with snappers or grabables, we'd fix it.
It's totally fine.
If it's just hats, scarves, bracelets, whatever you want to snap to your avatar, you're totally
fine.
If you've got a lot of snappables in the same location, hey, maybe that'll be a problem,
but that's really only going to come up in exact places, probably games.
Puzzle games will probably come up occasionally.
I'm not too worried about that.
You'd experience that in your individual experience that you're crafting.
Who asks what is the importance of being able to have a local storage that if you want to
save an item, I can save it to a local inventory instead of a local home with a bunch of objects?
Are you asking me what I think the importance is?
Are you asking where it's ranked in our priority list?
Are you asking are we thinking about it?
What's your question?
It is considered.
You can find a GitHub issue for it.
I won't be able to pull that out of my head.
It's not in there.
But there is some area where we're thinking about it to enable it as another storage option.
There's another one on the storage options I mean.
We are looking at other ways that we can provide storage to people on various types and platforms
and things like that.
It is on the list.
I would not be able to comment on the priority.
I don't know.
We don't give ETA's.
Check the roadmap for information.
If you like that feature, remember to thumbs up it on the GitHub and to vote on it using
your priority Patreon priority voting rights.
Moving on, do you know what single threaded bottlenecks might be in the engine?
Do you have any ideas on how to improve them?
There's lots of areas that Fruix is aware of that need to be improved.
There are also lots of areas that Gaines is aware of that need to be improved.
The single greatest improvement we can have right now is moving off of Unity.
That's really what Gaines is trying to focus on.
That's why you'll see stuff happening that isn't a weird or seemingly random order on
Gaines' land.
Gaines wants to get colors under control such that we can start moving to better systems.
That's something we would need before we start moving to better systems is to understand
the color spaces of all the content on there or it's going to start looking really weird
when we have to jump to different rendering engines.
Beyond that, the other cause of problem was that Bepu on physics we updated to Bepu 2.
There are a bunch of other cases which come up which don't seem like they would.
Any old UI that's using the old UI system isn't really designed for expandability scale
or anything like that, so that can be a problem.
I do believe as well from speaking to Fruix that there are some advancements that he wants
to make to the dynamic bone system to make that a little bit more performant.
If you really want to know more performance related stuff, I would probably head on over
to Gaines.
I know they're currently not doing office hours.
I was actually removing them from the active list on the office hours wiki page, but there
would be a better sort of ask about the general performance of the engine.
We do also have an optimization roadmap which has a lot of stuff pinned in there and listed
on there.
I know there's another one sort of in the areas of web requests where we want to move
a lot more stuff to signal R such that we can not have to poll.
Right now we do a lot of polling, which is basically every couple of seconds or however
long it is.
It's probably every 30 seconds.
For some cases, it just depends on what operation it is.
We have to knock at the door on Nia's cloud services and say, yo, got anything new?
Yo, got anything new?
When that drops over to signal R, we don't have to do that.
Moving on to Luca's question.
Regardless of headless and storage, will there be a way for those headless systems at some
point to have their own cache for content, tools, et cetera, where if you're on a LAN
with no internet connectivity, you'd still be able to show off a game, movie tools, and
be able to have all users access the local host source?
Already exists.
There's just a lot of limitations.
If you have everything that you need stored inside the local home or a world which has
saved the local home, then you don't need internet.
I already used that with a bunch of the scientific projects I'm working on.
It works well.
You just frequently need to update what you need access to.
For example, the default avatar unfortunately doesn't work if you're offline, or at least
it didn't the last time I was testing it.
I did make a GitHub about it, and it is something I'm looking into because I don't think that
that's acceptable.
It makes me sort of angry that that is the case.
To fix that, what I did with the local world content is I just shoved the default avatar
into one of those worlds, hit save, set it up in the user spawn such that it uses that
one, not the cloud spawned one, and then it does work whilst offline.
You just need to make sure that everything is saved there.
Better management of local storage will enable better handling there, as will better management
for offline saved stuff that can't work without internet.
It is possible right now.
I do it regularly.
Messy asks if my patron subscription gets me a creation group, what happens to the group's
folder and other things if I decrease my patron level to which it does not include a group?
We will never delete content.
We don't want to do that.
We don't believe in that.
If you get a group which has a certain file storage size and you stop paying for patron,
we will allow you to still have that content.
You won't be able to save any new content to that group, but any existing content will
not be deleted.
That includes your group world and group inventory folders.
So the group will still exist.
It will kind of just be like, I'm going to use air quotes here on the camera, like, locked.
You can't do anything with it.
It will still exist, but you can't really do much with it.
Shockmare asks, or states, really, I haven't really looked into SignalR as a kind of event-based
system.
But if you're familiar with any other event-based system, even as simple as basically just sort
of like Discord, what we're using here, there is basically a data layer that sends messages
between people and lets them know that there's stuff there.
My first exposure to that when I was learning computing was IRC.
You connect to a data channel and it sends data to you.
Another good example would be the difference between web sockets and just regular, like,
web requests.
SignalR isn't allowing us to send a message to you, like, hey, I have new stuff, rather
than you knocking at our door saying, do you have new stuff, we send a message to you saying,
I have new stuff here it is, and that way you don't need to pull.
It is warped in a lot of cases.
Hack 13 said, I heard before there was throttling to the SS server if you're doing a Patreon.
If this is true, what is the throttling?
That's not true anymore.
If you heard it somewhere, please let me know and delete it.
It does not occur anymore.
I removed it from the Wiki.
I talked about it before.
It does not occur.
We removed that perk and moved everyone to the same sort of transmitting for assets.
There's no throttling.
There was no throttling to begin with.
It was just historically, not now, historically that we had a slightly faster CDN for Patreon
users.
So downloads were slightly faster.
It wasn't throttling.
It was the opposite.
We gave more speed to people that had Patreon.
I don't think we'd ever throttle your content.
That's ridiculous.
Messy has a follow-up question on the main group question, which is, and it will be there
if I increase it back.
The group will never be deleted.
You'll still be able to access it.
You just won't be able to save anything new to it.
So it will still be in your inventory system.
You'll still be able to open the group world.
You just won't be able to save things.
So yes, and then if you increase your pledge back to support that, then you'll be able
to save stuff again.
So it's like read only, I guess, is the word I'm looking for.
Sarai has a question, and they say, it's on the fly, so forgive me.
Are there plans to implement some kind of cache delay Atlas, presuming you mean Atlas,
stuff in the cache that is older than X days to combat the whole full drive problem?
Yeah, we have better cache management on an issue to enable you to sort of say what's
going on.
Optimizations in the way that we store cache items there will also help, but I think it
will be a lot more important to sort of give you the control there.
What I would love is some sort of setting, UI, something some way that basically says
like, hey, here is a limit that Neos, don't go over this damn limit.
And then based on that, it won't go over that limit, or maybe it'll delete stuff that's
older.
That is cool, sort of better cache management is I guess what you'd be searching for on
the GitHub.
That's all the questions I have currently.
I'm gonna go ahead and in the intersperse time between looking for more questions, I'm
gonna go ahead and take a look at that whole forgot password problem that we have.
Thought there was a way to do it on the old site.
It looks like there's not a way to do it on the old site.
Account.neos.com should be able to enable you to reset your password.
Not account.neos.com, auth.neos.com.
Sorry, there's like three different websites.
Yes, auth.neos.com will enable you to reset your password.
Hack asks, can you allocate your personal space to the group?
No.
Groups have a different space limit than you.
You cannot move space between them.
You can, however, allocate how much space individual users can take up within that group
storage.
That's like the other way around, that's not exactly what you're asking.
Hack asks, will there be a way to grow strict pay for more group storage?
Yes.
I would love to see groups being entirely overhauled to be a thing that, A, doesn't
require Shifty's help.
She's amazing, but she has other responsibilities, and I would love her to be able to focus on
those.
There's no reason we can't automate group creation, very easy.
I would love it if we could just make groups more feel like a group.
There should be some sort of sense of community about that group, some sort of sense of identity
about that group.
And then features, et cetera, that will allow that.
Absolutely contributing to a group, stuff like that, absolutely.
Thank you.
We have another question here, sorry I had to type something.
Let's just alt-tab around a little bit.
So we have a question here from Gun Griffin which says, is it better to have accessories or different avatar items as a separate mesh with a few weight groups or in the same skin mesh with all the bone weights?
Split up your skin meshes as much as possible, particularly if there's no deformation.
A good example here, and this is like hyper-optimization so don't panic if you're not this case, if you have no body blend shapes, then split your head off from your body and that will provide a little bit more optimization to your avatar.
Because the blend shape groups and listings will only exist for your actual head and not the rest of your body and then we'll be able to sort of optimize the body a little bit better.
When it comes to accessories and stuff like that, if that accessory is designed to always be there, I don't know it's a hat or a scarf that's always part of the avatar, sure make it the same mesh, sure join it together, sure optimize it with the same materials, etc.
If you ever want to take it off, it needs to be a separate mesh, that's basically it really.
You could optimize to hell.
One of my avatars has one material, one skinned mesh, fake blend shapes and you wouldn't know it.
Another one doesn't and in some cases you wouldn't know it because I'm not extreme with my unoptimization.
Best things that you can do are to just assume that you are, like plan out the avatar is what I mean.
Sometimes the problems of optimization are not planning.
You import the avatar and then like five minutes after importing the avatar you're like, well I actually need like a hat and 50,000 multi-tools inside my, inside my belt.
And I need four copies of Ivali, of sorry, of Ryuvi's Edge of Reality doodad inside my belt.
And you know, I need half of sketchfab parented to me, that's absolutely amazing what I want.
Oh yeah, you should always zero as clear out weight groups that aren't meant to be there.
That's just good practice in like making the avatar in general.
I just do that in principle though because like sometimes when the orthonormalization of weight painting is happening you end up with like some fun stuff there.
Crying surrogate has a question here which is, do default tool tips contribute to avatar asset size?
No, the way that the size is displayed in the inventory screen isn't that accurate.
A good way of looking at it is to think about a manifest of your avatar.
So this is going to be quoted I know.
Think of your avatar like it's an airplane.
The mesh of the airplanes, the outer like holes of the airplane, that's a mesh, right?
So that's a separate asset.
So its file size is then added to maybe the mesh of the inside of the airplane, the seats, that's a separate asset.
And then the textures on that plane, both from the outside and inside, that's a separate asset.
And then add those all together up and then you get the size of the final avatar.
Airplane is actually a good thing for this next part though.
If your asset is shared with another user or any of the standard assets, then the first person to upload it will have the file size allocated to them.
As an example here, which happens a lot with avatar bases, if you use the identical avatar base to someone who uploaded the avatar and made it into an avatar,
as in if someone gives you their avatar base and you just change out the textures.
I don't know, your friend is a red dog, you're a blue dog.
If they uploaded the red dog and did the avatar setup process and the meshes are identical, so it uses the same mesh,
the only change is that you change your textures to be a blue dog, then they will have the file size allocated for the mesh.
You will just have the file space allocated for the blue dog texture.
Yeah, everything's separated. It just manifests everything out, like everything's manifested.
So if you are looking at any asset, just explode it.
Don't imagine planes exploding, but imagine it exploding into all its component parts and those are all saved separately.
Every static mesh, every static texture, all saved separately.
If there are overlaps, which is probably a better wording for what I was saying earlier, rather than talking about planes and dogs,
then everything that is unique to you is allocated to your size.
Grun asks, if they delete their copy, do you inherit the file size? I think so. I don't know.
I'd have to poke around a little bit.
It is really wishy-washy on how that whole system works,
particularly in cases where it's assets that are in public folders and things like that or assets that are sort of shared around a lot.
It gets to the point where we have a direct sort of incentive from us as a company to keep assets around.
If it's just you, it's your special avatar and you decide to leave the platform, fine.
OK, you leave the platform, we delete that. We actually delete that.
But in some cases, it's like, well, this is in like five shared folders.
This meme has been shared around to like 20 different people.
We have no real idea who the original owner is, but someone just deleted it.
Like, do we actually delete it? No, of course not. It's really complicated.
The license system will help with that, as we'll be able to see the originator of the asset, both in terms of sort of like when to delete something,
the path, the trajectory of something, who owned it, why they owned it, stuff like that.
And also to sort of handle and maybe optimize file storage in some cases.
Going back to that plane analogy for a bit, everything about the passengers, that's unique to them.
But the plane, pretty stock standard, you know, one 747 for one airline is identical to another 747 for an airline when it comes to digital.
It's not in reality.
We are over time at this point.
So Goan Griffin and Fuzzy, if you have a question, please enter them.
Fuzzy, I would encourage you to use the inventory system. We get this a lot.
And this is something that I try to explain to people and they don't understand.
They're like, oh, you're being difficult.
I'm not. I'm just explaining to you why there's an inventory system.
So you come to New York, you're new and you're like, cool, it's an inventory system.
I can put stuff in my inventory. I can save it. That's great.
At a certain point, you start parenting stuff to your avatar and stop using the inventory system.
I need a gun. I'll parent it to my avatar. I need a different gun. I'll parent it to my avatar.
And I'm like, or pop open your inventory and spawn the gun you need at the time you need it.
Stop laboring yourself.
You don't have to walk around like it's Fallout 4 and you've got like 5000 years of.
What are they called? Radroach like legs in your inventory and, you know, try to like just like leave it in your inventory.
I want a blue version of my avatar, so I will do this complicated logic set up so that my avatar can be blue.
Maybe just save a blue copy of your avatar and then swap into it when you want to be blue.
I need to a lot more sort of betterness.
That also goes on to the question, which I didn't answer. I apologize. I missed it.
I don't have a helpful person ticking and marking questions today, which is...
Actually, I missed two questions. I'm so sorry. I'll jump through those real quick.
Cesari asks, what's the worst crimes that we've seen done in logic so far that made you just not deal with it?
It's honestly mono packing. It just it takes the whole concept of logics and the engine and everything like that and just laughs at it.
There is nothing we can do as like a team to convince you not to do that.
But there's also nothing we can do as a team to undo that or optimize it for you in the future.
Say, for example, we like completely reverse engineer and make logics better.
If it's all regular logics, we do it all the time, like we update nodes, we change how they work, we make them more efficient.
And it's so easy for us to update them because all those nodes are separate and they make sense.
But if you sort of just like remove all the crap and shoehorn it down into one object, it becomes invisible to us.
I'm onto that one next. It becomes invisible to us, right? We can't do anything to it.
We can't help you improve it. It's just like it's just there and it's a mess and it's going to be a mess for the rest of time.
So if you're like, oh, it's lots of problem, tell us it's lots of problematic.
We'll up to my slots for you.
Onto that last question. Is there a better way to move several items and nested folders?
No. Currently, no. Better adventure management is also on our roadmap.
We want to get to the place where it operates more like a sort of Windows file manager or whatever your favorite is,
where you can drag and drop items and move them around and all sorts of stuff like that.
I had a huge rant previous few weeks about how drag and drop is a bad user experience.
Lots of people screamed me. That's totally fine. Drag and drop is terrible, especially in VR.
So there will be some experience that allows you to do the equivalent of drag and dropping.
It may be dragging and dropping. If I get my way or manage to explain to people what I'm talking about instead of just rambling at them,
then there will be opportunities that do not involve the direct drag and dropping mechanism
because it's a terrible experience in VR.
But we will see.
Yes, inventory search is also included in that.
With that, I believe we're out of questions.
If you have any follow-up questions, please feel free to drop them into my DMs, et cetera.
And I will get back to you as soon as I can with more office hours.
I expect this to be up on sounder shortly. If you have any questions, like I said, just let me know.
I'll get back to you.
Bye-bye.