Welcome to Office Hours, it is now 4pm, so we're going to go ahead and get started with Office Hours.
So, if you have any questions, please ask them in the Office Hours text chat,
there's a couple of channels above the community meeting stage.
I'm just going to @tag Office Hours again, just to make sure that everyone knows that we're starting,
and then we'll go ahead and get started on those questions.
Actually, before questions, a little bit from me on some random items that I have randomly decided to talk about
just this second and are completely unplanned.
Number one, if there is a moderation issue, do not DM me, do not come up to me and drop a whisper bubble on me,
do not direct message me on any form of platform whatsoever, just go make a ticket.
Always make a ticket. If you make a ticket, it will be handled appropriately.
If you DM me, I'm going to forget about it, because all I'm going to hear in my head is
"la la la la la la" and bitches of cheese.
So, like, make a ticket. Don't be scared of making a ticket, go make a ticket.
There is no excuse not to make a ticket.
Additionally to that, something else I wanted to say but I've just forgotten it, something about tickets, make tickets.
Oh, that was it. If you make an anonymous ticket, we can't respond to it.
We've got an increasing amount of anonymous tickets.
I can't give you details about the tickets, but I can say that they are anonymous.
We cannot respond to anonymous tickets.
So, as an example here, which is not a real ticket, we had one that was like, as an example,
"Hi, my name's Bob and I have this very important thing to talk to you guys about!" as an anonymous ticket.
Great, Bob, we literally cannot respond to you. It's impossible.
Anyway, let's move on to questions after that.
Moving on to questions, we have one from Alex from Alaska who says, "Build anything interesting in the past month?"
And I'm like, yeah, I have built something interesting.
So, on and off, we've been working on a project, sciency project again, to basically simulate various movement impairments.
So we're talking about things like tremors, a loss of reach or range of motion, and things like that.
And the old system was really bad, so I made a new system, and in that new system I actually used a component I haven't used before, which is the Avatar Pose installer.
And Avatar Pose installer will install pose filters when you equip an avatar.
The Pose installer component needs to be on a slot within the proxy that you want to install it on, which is a little bit of a weird one, because it's difficult to find those slots sometimes.
But I made a tool that'll do it. It won't work if you, like me, have renamed your proxies, moved them or anything like that, but it will work on a default avatar.
It installs a wiggler and a wobbler. Those use the avatar pose offset pose filter, a sort of delayed or hard to move hand, which is the pose smooth lerp.
There's an item in Gearbell's public folder, it's like a dumbbell that's difficult to lift, that uses that as well.
And all of those together lead to a big control panel that you can then use to simulate various movement impairments, and we're using it for various tests and experiments. That's quite cool.
The idea is to basically make a VR... This is a cursed image search, what the hell?
Is to basically make a VR version of this. I just posted it in the chat. These are what are called patient empathy suits. That's at least what I searched for.
But the pictures are kind of cursed. You can see that they're wearing goggles and that the goggles are designed to... What's going on here?
The idea is to restrict motion or restrict vision or restrict anything else to make them sort of understand how someone with an impairment like that might move around a room or a particular scenario, etc.
There's a lot here. This is a good Google search.
I know that there are... One that you might have heard of before that might be a little bit easier to relate to is any of those videos you saw on YouTube where men have electrodes strapped to their waist, etc. to simulate labour pain.
Or like a fat suit, stuff like that. There's also a lot of YouTubers that do that.
Yeah, there's a bariatric training suit. I don't know that this was a thing. I'm kind of disturbed that this is a thing, but I guess it's relevant. I'm going to stop posting cursed images.
If you just search for patient empathy suits, you'll get a collection of really, really strange goings on. But they are for good research. I don't know, I'm just a little alienated by them.
For some reason. Anyway, let's see if we've got any other questions. We don't currently have any other questions, so I'm just going to stroll through this alienating Google image search and giggle whilst I'm waiting for additional questions.
Look, this is me five minutes after waking up. I'm already tired.
Oh, Discord determined that image to be obscene. It is not. It is a flesh-coloured dummy lying on a bed. We'll try a different one.
This one's wearing pants, so that might work. Yeah, that one worked.
Although they do get quite meme-y. If there's no questions, I just sort of get giggly and then I find random stuff and we start looking at them.
There are no additional questions, though, so if you have any additional questions, please do let people let me know by posting it into the Office Hours text chat.
Tell your family, tell your kids, ask New Year's questions. It's the Office Hours time.
Here's an example of a scenario where it might, you know, I need to bend over to reach into that cupboard and my range of motion is restricted, so that's difficult.
That's like the actual research. Seeing them in isolation is very alienating, but seeing them in context makes perfect sense. That makes perfect sense there.
I haven't seen any papers or anything like that, but I guess the idea is to increase empathy so that they can better serve those people by understanding the struggles that they face.
Alright, we have a question. Fantastic, we can stop talking about weird suits.
Are PRs2, the Neos locale, still being merged in the modern areas that unhold? I've been trying to deal with that, but they've been mounting up and they get kind of problematic because I'm not able to push the - once they've merged with them, I'm not able to push them to any update, of course, because we're not updating.
But we also have the sort of weird state where two separate people did a full translation for Chinese, and so I don't really know what to do about that one.
There is one I can probably close, which is someone who, Toxic Cookie here, made an UU version of the entire thing. You probably wouldn't be accepting that.
You're free to, by the way, download any of those locale files if you want to use them. You can drop them into the locale folder of the Neos installation, and they will work. You'll be able to find them inside the locale switcher.
Yeah, I can go through - I can add an item to my list to go through them and get them merged.
They should be there, because when we do eventually update, we'll be absolutely fine.
I'm just looking at my Neos to-do list and there's an item that just says "Peter Robinson". I have no idea why.
Anyone knows what Peter Robinson means, go for it.
Most of my notes on my personal Neos to-do list make sense, but that one doesn't.
It just says Peter Robinson. Who's Peter Robinson?
Anyway, I'll move on to a natural question. I'm quite giggly today, it might be the coffee. Anyway.
I'll see about getting those locale files updated, and then if there's a mod to pull them down, that'll be fantastic.
So, Specs has a question here which says "When trying to set up various components that require a reference type to be defined,
it can be very difficult to figure out what types work. There's usually no common types defined,
and manually editing them can be very obscure in trial and error based. Do you have any advice or tools that can use this process?"
There is the one thing that can use the process - one thing being familiarity with that,
but then do remember there is the complexed types in components wiki page.
Additionally, in my public folder there's just a random collection of strings that I spawn in and drag the ones out that I need.
We'll hope to improve that in the future, but I understand that's difficult.
I can tag various components with common types. That's done in cases such as the asset multiplexer.
That's really good in the way that it does there. It's like "Hey, do you want this, do you want that?"
And we can totally do that with other components, we just haven't done that.
I think that's it for that question. Do take a look at that one, and do take a look at my public folder.
Rampr talks about Git interface libraries for C#. You do know that Git, if you have the raw file,
you can just download that as a file, you won't need Git.
So, I guess enumerating the files you might need in an API.
All you basically need to do is enumerate the locale files on the master branch, and then gain access to their raw list.
So let's move down to the next question, and try not to giggle so much.
Ankupilot says "Why connecting with the OpenWorld Logix node via Neocession link does work,
and connecting with LNL, NAT LNL, and with IP port directly does not?
Suppose we have two users in virtual LAN via ZeroTier, for example, users trying to connect
node's IP address and port of the session, while join command in launch options connects via IP port, no reason."
Let's figure out what's going on there, because I've also had trouble with the OpenWorld node,
it's meant to take a lot of ones.
And then there's of course the, if you go to the Logix node browser and you go inside the world folder,
there's like a bunch of things there, but none of those seem to work with the OpenWorld Logix node either.
So I get very confused. Let's try and work what those are.
I've added a note to follow that up as well.
So we've got locale here, and then we've got the OpenWorld Logix node.
So I'll have to take a look at that one. There's probably a way to do it, it's just that OpenWorld node is confusing to me.
There's some areas where I'm just like, I don't understand what's going on here, it's so difficult to use for some reason.
And then Linker says that Peter Robinson is a crime writer, so I'm going to go ahead and just search Peter Robert.
"Peter Robinson was a British-born Canadian crime writer, made the Inspector Banks novels."
I'm just going to go ahead and remove that from my to-do list, like maybe in like three years time,
Neos will just self-destruct because they haven't done whatever the Peter Robinson item is.
There we go. For reference, my personal notes on Neos are, I can't get you like a page length because it's in markdown format, but 2,110 words long.
And they are complete, they used to be organized, but they're completely unorganized.
In fact, at the top of the to-do list, under a section called "Priority", is "Reorganize this list".
Then Zlinker found a paper titled "Supporting the designers to build empathy with people with Parkinson's disease, the role of a hand-trimmism simulating device, and of user research with end users".
That is totally a sort of paper in that area, so that's cool.
Speaking of papers, by the way, a paper detailing the work that we did for the virtual surgical planning stuff that's on my channel just got accepted for publication.
Once it's published, I'll get you a link to that, but that means that Neos is confirmed to be in a scientific paper coming up soon.
It's cool, it's great. My name is on the credits there as well, I made sure that happened.
I think there was a paper historically where my name didn't end up on the credits, which is strange.
Sometimes it's difficult because scientific papers usually need people that have scientific qualifications on them, etc.
And while I do have a university qualification, I have no affiliation with any sort of scientific body.
So it's usually like, "Head of surgery at big hospital is on this paper!"
And I'm like, prime with nothing. Hello, I'm a person. I do science too.
So it's kind of interesting in that regard.
The democratisation of scientific papers is something I'm very interested in, and could talk at length about, but not here.
This is the Neos office hours.
Angry Pilot has followed up with a question that says, "Also, how Neocession link is transformed to anything useful when connecting via LAN?"
I just need to look into how that whole system works.
I know how, for example, NeosDB and NeosRec work, because someone previously asked about those.
I don't know if Neocession. There's got to be some sort of translation mechanism.
For the past, I don't know, three hours, I've been trying to add my Google Calendar to the Calendar app on Windows,
such that my Google Calendar alerts will pop out as Windows notifications,
but it's just stuck on creating accounts. That's very annoying.
I tapped back to it accidentally, and I thought I'd mention it.
Alex says, "Adding the Gmail to the Mail app makes that work." Okay, I'll try adding that.
I've been racking my brain for weeks now about why Peter Robinson was on my Neos to-do list.
Most of the time, when I add stuff to that to-do list, I'm in VR, and so the message isn't that verbose anyway.
But just a name? That doesn't make sense.
For example, one of the items I have here says "GlyphEMSize64", and I know what that means.
That's like, why don't we update the default GlyphEMSize to 64 on our Decode font?
I need to look into that and figure out why we don't, because there's a reason why we don't, I just don't know what it is.
I don't see any additional questions, there is additional conversation about the Neosession stuff,
I don't know how it works, so I'm going to go ahead and look at that more.
Ping me later if I forget.
Ozzy says, "Have you looked into self-driving variables, self-value-hopping at all code-wise?"
I'm honestly really curious about them myself, though given the different systems at play, I understand why I haven't.
Yeah, it's so in the data model that it's really difficult to look at. That's why I say don't do it.
I really don't recommend doing it. If you need a local value, use Values Override.
If you're worried about network traffic on a single float, then you need to change your performance-related targets,
because a single value being transmitted when it changes is no big deal.
I get across this loss and some people get offended by it, but I do find that people spend too much time optimizing stuff that I believe does not matter.
If you can prove to me that it matters, like, concretely, then fantastic, I'll look into it.
A question here from SnowyTheDragon says, "Has anyone made Tetris in Neos?"
Yes, there are several variants of Tetris. There is one in the world browser which is probably the most flashy and cool, so try that one out.
A question from AppenKlit, who says, "Is it possible to check the quality resolution of a YouTube stream?
Can you force the highest resolution?"
I'm not sure if you can. Give me one second to go have a look at the video texture provider.
Again, video texture provider.
I'm not sure what happens.
You're right, there's different qualities available a lot of the time, but I don't know how we pick which quality to do.
Because we use YouTube DLP to do that, if it's like a YouTube stream.
I don't know how we pick "get best format".
Looks like we get the best resolution.
So we get all the info from YouTube, and then we sort the formats that come back from that by the width of the video.
You can probably change the resolution that you'd like by updating the max width and max height property on the video texture provider.
To be the maximum resolution that you would like.
I don't know what those default to, because I can't see a default here in the code, and I don't have Neos open currently.
But do take a look at that max width property.
I think that's it for that.
Snowy asks, "Can you make a game leader board in Neos?"
Absolutely, there's various ways to do it.
I've seen people do it using a web service, where it just returns a piece of text,
and then they just throw that piece of text into a text renderer,
and that way they don't have to deal with any sort of sorting or management in that way.
I've seen people do it with cloud variables, I don't particularly know how they're doing it with cloud variables,
but I've seen people do it.
Just yesterday actually I was looking at Svekin's boop leader board,
which is how many times various people have booped him, I have no idea how that works,
but it was a very long list.
I've also seen game specific ones that don't talk to an external web service,
so they don't use web servers or cloud variables, they're just for a local game,
for example a round of a sort of PVP first person shooter.
A good one that has a lot of theming, I've seen a lot of leader boards,
but one that has a good theming and design is the Murder X game.
That one has a leader board where there's custom icons, a custom font, a custom background for the leader board,
so it looks really, really, really good.
And so I like that one.
But yes, you can. If you have any questions about how to do that, do let us know,
and I'll be able to help you out.
Appin follows up with a use case where they're blowing up a video and increasing its size,
and it doesn't look good right now.
Yeah, check that max width, max height, I can't see a default right now,
there may be a default, I just can't see it currently.
Ah, it looks like the default max width is 1920 by 1080p,
so if you want to change that, then make it larger than that,
you might be able to get up to 4K, etc.
Do keep in mind that does sort of...
I don't think it's double, isn't it like quadruple?
Or it might be less than double.
It's either less than double or more than double, it's not double as far as I remember,
depends on the encoder as well. I can never remember which.
It's one of those things where I just can't remember it.
There's a reason why I didn't work on video when I worked on Mixer, even though they asked me to.
That's a story for another day though.
Yeah, spec says quadruple the pixels, but yes, it is quadruple the pixels,
but sometimes the encoder means that while it's quadruple the pixels,
it's not quadruple the bandwidth.
You can of course try and squeeze larger resolutions into the same bandwidth,
but then you get sort of codec issues. I don't really understand.
By my understanding, Alpin, yes, driving the max width and max height
should enable you to access higher quality streams,
although I don't know and cannot confirm about a deeper look into the code that exists.
So give it a go, if you have any problems do let me know,
and if it works, share that knowledge.
Tell three other people that you managed to get a 4K stream into Neos,
and I'm sure that knowledge will spread around like wildfire.
Taking a look down, there's still some conversation going about the session URLs.
Do keep in mind that there is a page written, I must say,
by one of the participating people of this conversation,
about the networking information, how networking works inside of Neos,
which is really handy, so if you want more information about that,
feel free to of course keep the conversation going,
but there is the Network Information page, which I said is,
lots of it were written by Ruscio as well.
Taking a look down at questions, we have TFG Haida says,
"Does any public health documentation exist for MeshX?"
No. It does not.
And the second question, which is,
"When will Neos create doubles on a newly imported mesh?"
Are you asking for it to, or when it does?
Like, you could read that as,
"Under which circumstances will it create doubles?"
Or, "Can it create doubles? Can we make it create doubles?
Can we have an option to make it create doubles?"
I think there's an option on the mesh importer,
if you go to the advanced settings,
you can check "make double-sided" and it will make it double-sided.
I don't know off the top of my head.
The import routine for models and meshes is largely driven by ass imp,
and sometimes I will go on like a three-hour spelunk into the code base
to find out it's actually an ass imp problem.
For example, all models are somehow rotated by 180 degrees,
and so when they're imported,
Fruix Engine will then counter-rotate them by 180 degrees,
and I literally do not know why.
There is an operation as part of the ass imp routine,
which instructs ass imp to...
Ass imp? Ass imp?
I really don't know how to pronounce it without talking about butts,
but anyway, to make it left-handed,
and sometimes I know that that's not needed
because the model is already left-handed,
so I was thinking, and it's on my giant to-do list,
to look at the importer to try and detect if the model is already,
or is not, or is left-handed,
to not do the left-handed operation again,
because that... It's causing problems for me.
What I want for a particular science-based project
is that if I export a model and then immediately import it,
I want the same result in Neos,
but what I get is instead the object slowly rotates by 180 degrees each time.
So if I want it to be back to the original,
I would have to export it and import it twice
just to get it to rotate back to the original thing.
I think that's the left-handedness.
I don't know. I haven't been able to check that much.
I do have a branch somewhere of Neos
where I disabled the left-handedness,
and in some cases that meant that the normals were screwed up,
and in some cases it didn't,
because, you know, ugh, split-loose geometry.
There might be... Don't we already have split submeshes?
I can never remember why a submesh occurs
compared to just loose geometry.
Oh, not submeshes in this case. Yeah, I understand.
Neos might not have a built-in operation, but Asimp might.
So I double-check if Asimp has it.
With that, we are at 31 past,
so I will be cap enough questions here,
and we'll go ahead and stop Office Hours for today.
If you have any additional questions, please feel free to direct message me.
Message it in Questions and Help, or write a ticket.
If it's moderation-related, don't talk to me about it.
I'm not going to tell you anything. I'm going to make you write a ticket.
If you're worried about making a ticket, don't.
The moderation team are not going to bite your head off.
They are just going to ask for more information,
or they're going to let you know what's going on.
They are not going to be mad at you.
You could literally open a ticket and say,
"I like cheese," and they'll literally respond to you,
"That's great. Thank you. Goodbye."
It doesn't make tickets. Don't be scared.
I will speak to you next time,
and I hope you're having a good day. Bye-bye.