Okay, I'll make it top of the ounce. We'll go ahead and get started. Welcome to prime time, the office hours for Neos, for views of channels and misreading stuff.
Office hours for myself to answer questions about Neos. We have a bunch of questions, so I'm going to go through and get them started. Please do keep the questions coming though, because we will run out, and if we run out, we sit here in silence until office hours ends.
Let's take a look. So Snowy is asking about prime time podcast. Yeah, so sound or the service I'm using is shutting down in January, and so I don't see much reason to put any more effort into that.
I am looking into alternatives that is taking a little bit longer though, because I want it to be dead simple, because hooray, thumbs up, simple is good.
For now, you can go ahead and use the Neos Wiki, which has transcriptions and audio files uploaded by Lex. Thank you very much for that.
So that's that for that question.
Is it possible to mirror display to texture? No. What you're asking for there is screen sharing, and people think screen sharing should be really simple.
Let me show you why that is not. Screen sharing is basically video streaming, and that's right now what the community are doing. They'll stream their screen to Twitch or some other live streaming service, and then they'll get it in as a texture in the game.
And people view the screen sharing feature that we might create as not that, but it literally is that. So we would have to do our own sort of video streaming somehow there. That's why we don't have that.
It is a feature on our roadmap. You can find that on the Neos GitHub and track that there.
Until that exists, there are community solutions streaming it to Twitch, streaming it to an RTMP server, streaming it to wherever the hell you want, provided it can get you out on RTMP feed.
It's cool. You can't just share a screen that's not that simple.
Next question. And Alex says, will a new podcast feed be created or should someone in the community do that? Please, as the community member, don't do that.
Lex is trying bits of software, which is OK. What I don't want is anyone uploading it in a sort of RSS podcast Spotify format that isn't me, because then we start dealing with impersonation and it becomes a problem.
I hate it when that kind of stuff happens. You end up with sort of like, there are 20 different locations where you can listen to primetime and none of them are official because someone got bored one day and decided to upload it, which is why the current situation is better than we've got.
That is unfortunate that Sounder just decided to sort of up and close down shop, but we'll see. Something I've been thinking about is maybe moving the office hours over to some other host or some other tool.
Sounder also recently emailed me a bunch of tools that they recommend, which is nice of them. I ideally don't want anything self hosted or if it is self hosted, I want it to make sense being self hosted.
An example would be some sort of automated process to get it to the wiki, but then we don't get RSS when it gets Spotify publishing. It's a mess.
For now, the wiki is perfectly fine. It just doesn't let you know that it's happening. But if you remember when the event is, which is right now, then you can go ahead and check the wiki a couple of hours after that. It should be up two days.
Let us move on to additional questions rather than speaking about the office hours over and over again, which is it's fired. It's just a little bit meta. Let's speak about Neos.
So Ozzy has a question about a sync issue of request weight too large. That is actually explicitly covered on the stock sync page and everything I have to say about stock sync is on that wiki page because I wrote it.
Anything in addition that I will gain about that will also be on that page because I'm like very tired of dealing with sync issues, basically. So I only ever update that page whenever I have anything new.
Because I'm just tired, right? There's like four or five sync issues per day. We are working on resolving that. The update issues, et cetera.
There are specific guidances for that too many requests problem. I have noticed a really good way of solving that is to stop saving worlds. I have a lot of people that I'm aware of who will continually save new versions of their worlds for no real reason.
They come up with a system that either lets you keep the same copy of a world over multiple iterations. You might have a working copy that isn't public and then a public copy that might be two copies. But no, these people have got sort of like 11 copies of the same world.
That can lead to that problem quite quickly because saving the world is more strenuous on the cloud than saving items. And then the other solution to that is to think about what you're saving.
I also see a lot of people who work on a project in a world and save it to that world. Let's say, I don't know, you're making a panel that does some cool wizardry stuff. They'll save it into a world and then continue to save that world. Grab the panel, save it to your inventory.
It will have a lot less issues syncing. Trust me. Like, you know, there's no need to basically there's no need to continually make new worlds is what I'm saying.
Yeah, we don't have good version management tools, but, like, that's no excuse to also, like, double those problems, right? Also make sure you're making use of group storage as well where applicable.
I get tired of passing world over the round when there's no group available. You're hosting the world today so you can save a new version of it and add one to the version number and I'm like, no, can you load the one from the group?
The request rate one is literally, like, everything I have to say about it is on the wiki and stuff like that.
Any additional questions, please do drop them in that text thread and I'll get to them in the order that they appear. There are currently no questions so I'll go ahead and mute and wait for questions.
Any comments to the latest carol post? No. No comments. The last time I was aware of the server costs, they were in the range of, like, the sort of 3 to 5,000 range per month, which is why I'm continually telling people not to cancel their patreon because at a certain point the cloud will become at risk.
But just lower it to the amount that they need for storage and that way it's still being paid for. People always say, like, oh, it just goes to carol's pockets and it's, like, no, it also pays for the storage.
As an example here, if you upload a gigabyte of data on your free account, we're paying for that.
If you upgrade to patreon and you have 25 gigabytes of data and you use that entire 25 gigabytes of data while paying for it, great. We're kind of, like, net neutral there, right?
You know, you're paying for it, money comes straight out of our account and goes into the server costs.
But on the various things that you can do to, you know, mess around with storage, you can get to the point where it's, like, cool, I've got, like, five terabytes of storage for free and I'm like, great, thank you for putting your cloud at risk.
Beyond the cloud storage source, though, I have no idea. I just know that those are automatic. Like, it's a big pile of money and the server costs come off the top of that big pile of money.
I want to, once we get all this resolved, I want to sort of adopt an approach where we actually have the information as public as we can be.
Now, there's information, of course, that we can't give out publicly, but there's so much stuff that we can that just, like, it doesn't, like, matter.
We don't give it out because no one really does give it out. There's no real, like, harm in doing it.
A good example of this is a live streaming provider called Glimmish.
Glimmish publicly discloses how much money is going through their business and it's beautiful.
You know, they don't share anything private, like the names and addresses of their employees or anything like that, but they're like, hey, guys, we made this much money on subscriptions because they have subscriptions like Twitch.
And this much was taken with fees and costs and, you know, tax, et cetera, and we gave this much out to you, the creators.
And it's a lot better way to frame the whole revenue split that exists on live streaming platforms.
For those unaware, there's a whole big hurrah right now because Twitch is switching to a 50-50 model, whereas it used to be a 70-30 model. YouTube, I believe, is still 70-30, as in the creator gets 70%, YouTube takes 30%.
But what you can do if you start sharing those fees is you can, like, explain with a better conversation, hey, guys, the reason why this is 50-50 or whatever it is is because although it looks like 50-50,
the government actually takes 25 of our 50, so we get nothing, and then it looks a lot better, right? At that point, you have the lion's share of that, too.
Additionally, they show how much money they made via t-shirt sales, which is, like, usually nothing.
Merchandise is a really good moneymaker. If you can sell a lot, if you can't sell a lot, it's pointless.
Moving forward to additional questions rather than me talking about streaming all day, which I could totally do, but I'm not going to.
Rob says I'm interested in getting better deformations on my characters. Is there a way to integrate trained machine learning models matched as a deformer?
No. That wouldn't be possible right now. You probably have to open up a GitHub issue for that.
Better deformations occur with better weight painting. You can get, like, some really, really crazy weight painting that does a really good job.
An avatar that just comes to mind, which, like, people in this chat might say, like, that's a bad example because of XYZ reason.
I got it, right? It's an example I can remember, and I'm on the spot here, is the hyena avatar.
I see a lot in Neos, though that by default has a lot of layers of clothing, which I believe are all separatable, as in you can take bits of it off, right?
And the weight painting is set up such that, like, there's no clipping that I've noticed, and everything just, like, flows and looks good.
Now, I've made avatars. I've made avatars with clothing. It takes me forever to get to the point where, you know, if you bend your elbow, your elbow doesn't shoot out the back of your clothing.
In some cases, avatar creators will do something where they add a blend shape for when you're wearing clothing or it just, like, makes your arm look like a pipe cleaner.
But that's really, like, not the way that you should do it. You can even see that in video games these days as well.
Like, take a look at things like long flowing outfits, like skirts, dresses, robes, stuff like that in video games, and try and, like, swing your character around as fast as you can.
See how that looks and how that works. And then when you have a problem with defamation, think about, hey, these AAA people can do it, so I can probably do it. Let's take a look.
There's also a video which I'm calling it famous because it's just in my head as, like, oh, my God, yes, from a user. I'll try and get a link for it.
They talk about doing skirts for VRChat. And VRChat skirts are usually renowned for having, like, 200 bones and all being weight painted individually.
And this user provided a guide to do a three or four bone skirt and have it absolutely perfect.
And it's a really good video for basically, like, here's how you're meant to do a skirt with weight painting.
And I found that really good because, like I said, I struggle with weight painting.
So I'll look that up when we get a lot of questions. I'll drop it after in the chat here. I've got a bunch of questions to get through.
Ozzy says, as for any other question, I recently got a facial tracker. I want to know if there's any advice you have for adjusting avatars, namely the avatar expression driver.
I would like you to very much consider the avatars expression driver's properties and all of them.
I'd have to open it up. Actually, I do have the code base open so I can quote this from actual things.
Sometimes I'm like, you need to specify the property that has volume in it. And someone comes back to me, like, three hours later.
I don't know which one it means. And then I open up the code base or I open up Neos.
And it's not called volume. It's actually called, like, potato blah, blah, blah. I've just misremembered it.
The problem is it's sometimes difficult for me to distinguish between my ability to go to that component and then have memory about it.
And then what that component has actually called. Sometimes I don't remember what the property is called.
I just know which order it is or what it looks like visually, not what it's called in terms of words.
So now I'm here. Yes. So take a look at the volume source and silence source.
Make sure that those are specified in your expression driver.
The volume source can come directly from a volume meter.
The silence source can basically be sort of one minus the volume meter.
You can also do that with the sill or silence thing on the Visum analyzer.
There's like a Visum analyzer bar which will measure if you're not speaking.
Those are very important. Once you've hooked those up, you can use volume suppression weight across the board.
Now volume suppression weight is so difficult because it wasn't really explained that I typed it up at some point.
I don't remember where I put that though. No searches across the entirety of the Discord.
Great. Volume suppression. Maybe I did put it on the wiki.
Help if I could spell suppression. There we go.
Volume suppression did not match anything.
Volume suppression. Ah, I put it in. I love this.
Let's document stuff in a really obscure location.
Here are my raw notes on volume suppression stuff.
Volume suppression is very important. What volume suppression does when it's set up correctly.
I know that's a lot of information, but go for it.
Volume suppression when set up correctly will basically reduce the amount that an expression affects your blend shapes whilst you're speaking.
And the reason why that's good is because it's often the case that when you're speaking, you'll make face shapes that match expression shapes.
A good example here might be sticking your tongue out, right?
The face tracker might detect that you're sticking your tongue out, but it's just because you're saying one of the phonemes.
Phonemes are the names for the individual mouth movements you do, and they're language independent.
The phonemes that you do might include a tongue flick or a tongue poke.
Some phonemes do have that, and the face tracker is like, you're poking your tongue out.
And then in the middle of a serious sentence, you're like, we're gathered here today to give our condolences to this massive cheeseboard that Prime consumed in one sitting.
And in the middle of that, you're smiling, winking, putting your tongue out, doing the bedroomized blend shape, and it's just like, what?
Whereas if you configure the volume suppression way, it'll basically be like, all right, there is volume coming out of their microphone.
I will suppress these expressions.
So do take a look at that one.
I have issues on a variety of avatars where the eyebrows on the avatar were basically doing sort of like sine waves because loads of blend shapes were firing at once.
And so you could sort of music equalizer my eyebrows at one point, and that fixed by doing a bunch of volume suppression weight stuff.
Additionally, the regular Viseme analyzer, I know this is a long explanation, but hey, documentation.
The direct Viseme driver, just getting the name because the direct Viseme driver also has voice mouth suppress weight.
I don't know if it's in my notes, but do take a look at that one as well.
I'd have to look how that one works.
That one just like jump scared me.
But you can put the mouth tracking source into the direct Viseme driver as well.
And in that case, what it'll do is if you're not speaking, it can still detect the Viseme shapes and activate those based on that, which is a great way to get around the whole multiple blend shapes being, I'm sorry,
multiple sources driving the same blend shape problem.
It allows you to drive all of the Viseme blend shapes using your mouth, which means that when you're not talking, you can still do things like OO or E or R, R being a common one for opening your mouth.
You know, when you go to the doctor, like say R, right, you can do that by assigning the mouth tracking source to that.
Of course, if you have enough blend shapes to not require that, go for it.
But there you go.
Just a random anecdote whilst you're here.
If you have a blend shape, which is triggered either via the facial tracker or via gestures or anything like that, that involves closing your eyes.
You know, some people do it.
They're like my eyes closed.
Consider not doing that and instead consider going to the eye manager and using I think it's like I close override there because if you do that, I close override.
It will signal to the eye managers to stop you from blinking.
Because what I see on a ton of avatars is their eyes are closed due to a gesture, but the eye manager is still desperately trying to make them blink.
And so what you get is what I call like a closed eye blink.
But it's no issue, but like if you really want finesse, go take a look at the eye manager and see if you can get around that.
It can suppress the blinks if you set some of those properties.
It's also great because again, multiple blend shapes, multiple drivers, right?
You won't need two eye closed blend shapes.
You need one blink blend shape for each eye and then you can use the stuff.
The subtract limits.
Yeah, I have no idea how those work.
I'll have to take a look at those.
I wonder what those were.
I seem to remember as well there was like something in the eye manager that was designed to enable texture based eyes and texture based visemes to work a little bit better.
I can't remember what that is.
The eye manager is amazing.
There's loads of stuff that can be done there.
So do take a look at that.
I'm going to move on to the next question because I've been talking for a long, long time about that particular question.
Hanu says, where do subs and bits money go from the newest Twitch channel?
Two bank accounts controlled by Carol.
Don't know where they go based on that.
So with that, I believe we are done on questions.
If you have any other questions, please do let me know and I will get back to you.
Mike, that's a good question, which is what's a good way for having multiple languages of text for a world or object?
I've seen a bunch of ways to do that.
I think the simplest way I've seen to do that is like a value multiplexer where you assign each language that you support an ID and then use a dynamic variable to specify which which language ID that you're using.
The end goal for that is for us to open up the translation system that we use for the rest of Nios's locale to you guys for custom locale files.
Currently, we're restricted to just one file and we're already seeing the sort of stresses of that.
For example, all of the Nios the universe translation strings are in the main locale file and there is no way that that should ever happen.
But alas, it has.
There's a bunch of stuff in the Japanese community area where they do their best to accommodate Korean and English, which may show you some alternative ways of doing that.
That's the way I've done it in the past.
I've also actually just sort of like had to pop the locale system because I can do that so that it has those strings in there.
Oh, you should also when you're building UI, look through the locale files that we have and see if there's any local strings.
You can just steal things like OK, yes, cancel, no, are probably in the locale files.
You can just steal those and use our locale system and you'll get however many languages we have that one word like yes or OK will be translated for all of those languages.
Big question here from Max who says, I ran into an issue of a user.
They had more than five hundred and twelve depth of children object, which prevented them from learning a world.
Is there any reason it's why the max depth limit is five twelve?
Would you happen to know why I let you save and not load the object?
Well, this is an interesting one, and it's caused by lack of standards.
So Neos being Indy in air quotes, early access in air quotes, beta in air quotes application that is developed by one person.
It doesn't have many standards.
So a corporate setting or maybe even like a triple A setting a limit like five twelve.
Wherever the hell it is, would have involved like meetings, paperwork and emails, and I'm not saying Neos needs to do that.
But the point is, once that limit is decided, it will be standardized everywhere.
So a component that a slot depth everywhere in Neos would be five twelve.
And it would probably link to.
In a roundabout fashion, however you want to do it in C sharp, it would link to the same configuration variable or property or maybe even a death hashtag defined in C sharp, such that it is like mandatedly defined everywhere as a standard.
If you want to look that up, it's something called like magic strings or magic numbers in code. It's basically like if you have a number, link it to a variable and then you can document what that variable means.
You can also change it, which means that you aren't in the future magically hunting for that one.
As a good example here.
What was hard coded somewhere recently?
Oh, yeah, I was looking at how noise works in Neos, and we use this library called fast noise.
And it does this really weird thing where like it's noise like members.
So like fields and functions and whatever you want to call them within.
Within its library, they.
Do this weird thing where they had a return type I didn't recognize, so I'll just post an example here.
They have this return type.
And I'm like, that's a bit weird. What the hell is FN decimal? And so I looked it up and FN decimal is defined using C sharp defines.
Where if you enable the C sharp definition of use doubles, then FN decimal will be a double. Otherwise it will be a single.
So that's that standardization, right? It's we're putting this in place and we're using FN decimal because then that means with one click of our build, we can swap between using system double and system single everywhere.
In the code base.
And it was a tangent into like development. But yeah, that's that.
We'd have to probably like overhaul a lot of stuff to like get that standardized.
It's probably just like a weird edge case. There's going to be a bunch of them.
There was another edge case I found where it's just like, cool, don't know why, but cool. I think it's in the value graph recorder. I've just opened it up.
Yeah, here we go. So the value graph recorder, for those who do know, that is what is allows you to, well, that's what I'm saying, right?
So in saving, we use a different standard depth limit than in loading.
Maybe I'd have to look it up, right? So somewhere in the save routine, there is.
A number greater than 512 and then somewhere in the loader 18, there is a number less than 512.
I'd have to look into it more, but that's probably what's happened. I've noticed that a couple of times back onto that example.
So the value graph recorder basically will record graphs into an array that you can't touch, but it's used for the graph measures.
The line waveform measures that exist. And there's a points value on that component.
And that is essentially just the size of the array that holds those values for that graph.
I usually have about 1000. That's usually good. If you want like really short term daily, you want 250.
But I found out the other day, the maximum value for that is 524288.
I'm like, cool, is that a binary number? I don't know off the top of my head, but that is the maximum number of values.
You could have a value graph recorder. I don't know. There is a comment here which says limit to roughly half a million values.
I would say that 524000 is actually over half a million by 24000.
But that number was there and it was decided on. I don't know the reason why it was decided on there, which leads into sort of anecdote.
Comments in code get a lot of bad reputation because, you know, you get stuff like, I'm typing, sorry.
You get people saying like, yeah, there's why we don't do comments on our code, because it's obvious what the code is doing.
But what you should do with comments is explain why the code is doing that.
So in this case, it's really difficult because signing A to 1 is very difficult to describe.
But maybe, you know, A being 1 is very important to the mathematics we're doing.
So it's like, we need this to be 1 because of Pythagoras, right?
And then like someone coming back through that code when they see that and they're like, hang on a minute, why is A 1?
And they're like, oh, because of Pythagoras.
Or maybe there's a link to a GitHub issue or some other issue tracking there that's like, this is why, here's the decision, here's the design document.
That's good commenting, not just assign the value of 1 to A. It's ridiculous.
So I'm seeing more of that in the Neos code base since I've joined, really.
I don't know if I'm just sort of like accidentally encouraging that, but I do see a lot there.
I also do it to help review sometimes, which is a little bit like a misnomer.
You shouldn't do it to help reviews, but sometimes I do.
You know, if I think like something is going to be stringently reviewed in a code review, I'll add some extra comments explaining why the hell that's happened.
And usually that is a double duty, right?
It means the next person coming through that code is just like, oh, that's why that code looks like a piece of crap because of these reasons.
But sometimes it's like, it's there just for shouldn't be doing.
But there we go.
I can look into that one, Lex, if you would like.
I'm going to go ahead and find that skirt video in the lull that we have and look into that, but we'll be ending off shortly.
So if you guys have any more questions, do let me know, and I'll get to them as soon as I can.
I'll go find that VRChat skirt video just shortly.
All right. I come back from the land of mute to thank you, your skirt sucks, zero to hero.
I haven't watched the video in a long time, so I don't remember it being that sort of brash in its wording.
But it takes a common avatar that you saw in VRChat about the time it was uploaded, removes its like 12 skirt bones,
and replaces it with three or four skirt bones, and shows you how to weight paint them successfully.
It's a really good video for me just saying like, I was learning weight painting can't just be throw bones at the problem.
Because that's what I kept doing.
And if you look at like AAA games, that's usually what they do because they're controlling the engine to do that.
They're like, yes, there is like a chest 22 bone.
What the hell does that do?
But in a situation like Neos and VRChat, you don't need as many bones.
All right. Let's go down.
Lex says, why does your main avatar have obfuscated names to the bones and that specific method is on the things to list?
Isn't simple avatar production enough?
I did that a long time ago, and undoing it is difficult.
That is why that exists.
There's this like problem with avatars where the longer that your avatar has been in Neos and has been edited, the less stuff makes sense.
I think like the other week I found box child child child parented to a random part of my avatar with nothing on it.
Not even a box mesh, strangely, which I of course just deleted.
But at a certain point I thought it was a good idea to parent box child child child to my avatar for some reason and then save it.
I don't know if something was parented to that like a system or something, but it wasn't doing anything then.
So you did it.
All right, Rob, if you have a final question, do let me know.
I will actually I'll go find the Haein avatar.
I typed a really bad spelling of it into Google and it came up with a Hyundai car.
If anyone knows the avatar I referred to and is able to actually spell it or has it bookmarked, please, please do drop it in the chat.
I know some of you got it. I guarantee someone's got it. It's quite a popular avatar.
I think I see Arena has probably got it.
Yeah, there it is.
Here you go. And I'll get the picture I was referring to.
So in this outfit here, the jacket doesn't clip with, I don't know, clothing names, the tube top.
And the shorts are just really good. And there's like I've never seen any trouble with the shoes.
I don't know what to call those either, but I've just seen like nothing like the weight painting is really good on those.
You can even kind of see it in that pose, right?
The shorts are bending in a way that to me makes sense.
Or sometimes when I make clothes and I bend the legs to test, I'm just like, what the hell is happening to those bones?
Last question from Rob before we leave off here says are you guys hiring reading artists or any other type of 3D artist?
Not currently. I'm not hiring anyone currently.
That changes. I hopefully will let you know.
I can't promise anything there, depending on how things change and who's doing it.
That'll be it for today, though.
Lex, I will look into that 512 issue.
I guarantee that if I just search the code base for like 512, I'll probably find it.
But I'll take a look.
And I'll get back to you.
Otherwise, thanks for attending.
Thanks for your questions.
I'll talk to you soon.