From Neos Wiki
Jump to navigation Jump to search

<< Previous Next >>



In this Office Hours, Probable Prime talks about:

  • MMC
  • Debugging Tools
  • Performance
  • Nullables
  • The XY Problem


(Please note that the transcriptions will not be 100% accurate)

Welcome to office hours, it's the top of the hour so we'll go ahead and get started.

This is the half hour-ish segment where I talk about Neos and get Neos questions answered

that you may have.

If you have a question please drop in the prime time questions for the day's date up

in the office hours text chat.

There's a few channels about this one, you'll be able to find it.

I'm going to go ahead and ping the office hours group again so people know that it's

starting and then we can go ahead and get going on any questions that we have.

Right now we have none so if you want questions answered get them typed into that thread.

As a reminder with a lack of questions we just sit here and we talk about nothing a

bit different etc.

Alright there we go, a question here from Stella who says "How do you feel MMC is going

to go this year, size and world complexity wise?"

I'm not quite sure, it's been a little bit of a while since we did one, it was last February,

we moved it from October to February so it was better for sort of an international market.

There's not much changes in terms of sort of rules and categories so the same freedom

that we had is still there.

So we'll just have to see what happens.

I'm hoping that we have a comparable amount of entries, although it might be more, if

it's more that's great, if it's the same that's great, if it's slightly less that's great.

I'm not fussed.

Soap says "Have you had your daily dose of cheese today?"

I have not.

I did go grocery shopping though.

I had a bunch of errands to do, I had to go to the post office and I had to go grocery

shopping and then I got back and I'm like "Wow that was exhausting" and I fell asleep

on the couch forever so I'm here, hello.

Jekyll Girl says "Are you going to be building anything for MMC?"

I actually do chuck in an entry in, my actual entry for MMC every year is actually the voting

system that's used to allow you to vote on entries though so that will for sure be built.

Rampa says "Better for international market unless you have an exam period going straight

over at prime."

Well there's a problem here which is that we can't please everyone and sometimes it

feels like people are trying to ask us to do that and it's just not possible.

We figured out that by making it in February, last year we had a little bit of a weird one

where we did it in October and then February so you know it was a bit like "This again?

We've only just finished it!"

But now we're locked to February February February February, it should be good and it's

better for the international market overall.

The greater good needs to come up.

Sorry that you have exams during it but the rest of the world has other stuff elsewhere.

Specs is talking about squeezing time in with their full time job etc as a reminder which

we remind people every single year, don't overdo it.

You have the ability to plan ahead, reduce scope, don't submit your world within the

last five minutes of the competition.

People will do it, at least one person in here will do it but please don't, you know,

plan ahead.

I know, Specs, their team is about overdoing it but you know, I also say it every year

as well, practice publishing a world, saving a world, managing a world, creating a world.

Don't make the first world that you publish, the first world that you save, the first world

that you create your entry.

You may come across issues that you don't expect to happen if you've never done it before.

Also did you know that you can publish your entry and then continue working on it?

So let's say it gets to the last week and you're still making polishing changes, publish

the entry and then continue working on it.

That way you don't have to panic, right?

You just have to make sure that the world continues to function roughly.

For example if you're tweaking visuals towards the end in that last week, it can be published,

you're just tweaking visuals.

If you're just swapping out some textures or whatever or maybe some colours, publish


There's no reason for it not to be published.

It's not like it's going to get a bad judgement just for being published early, it'll probably

get a better one because you've managed to publish it without stress.

Moving onwards we have a question here from Ozi who says "In a recent build I've been

trying to use completely local variables to do this, a value copy on a value register

the same one you spawn at Viologics with writeback.

Is this fine to do or is there anything I should worry about pathability update wise?"

Not quite sure, that's like, I don't understand the value copy.

For local variables just use a value user override with create override on write on

like a value field or something, that'll probably be a better idea.

Probably also work on a value register but I don't know why the value copy comes in.

Oh don't value copy itself, just values override.

Mr Damon asks "Very broad question but how do you feel about the future of Neos?

It will continue forwards until the heat death of the universe so there's lots of future."

Uh, don't, don't do that.

I don't really have a reason to tell you not to do it other than don't.

I'd have to look into why there but I just have a visceral reaction when looking at that

image to say don't.

Yeah I hear lots of advice from people that really isn't researched or validated or tested

in any way, they just discover some sort of hacky thing that's going on and then it spreads

by word of mouth and at no point do people think "hmm I should maybe research exactly

what's going on here."

I would have to look into a lot of the data model code to figure out what's going on there.

It shouldn't be possible to do that.

For example there's a thing here like there is no networking.

Have you tested that?

Have you opened a world of two people in it and default avatars and created I don't know

like 20 of those and sent it around.

Leo asks how would you go about creating better debugging tools?

It depends what you're trying to debug.

There is the debug menu that not enough people use really.

It's difficult to sort of isolate what's going on there particularly when your avatars are

complex or you know crazy.

Hence why I say try the default avatar or try you know an avatar made entirely out of

frames or like a single mesh and then try your world or your creation and see what's going on.

There's also that thing where if you spawn out like 10 copies of your avatar you can

sort of see what the performance is at scale with other people have avatars.

Beyond that we don't really have the suitable debugging tools to give you right now.

It will probably be an initiative that we have at some point once we've got some more

features under our belt.

I also get bothered when people are doing weird things like the above just because they're

like there's no networking.

It doesn't it's a single float.

It's not going to cause much networking load right.

There are hundreds of floats just for like an avatar existing in the world that are sort

of like ping ponging around.

Optimize better.

If you want a local variable then you know you should network sync the parameters and

then drive the result and then you minimize network traffic that way.

Who says is there a way to see what types Bool user component field accepts?

There is a little hack I sometimes do for that.

There are some mods to do it you know more effectively of course.

But what I do is I grab a logic interface card for the component and then if you pull

a ribbon out of any of the properties on that component and push secondary it will sometimes

glitch out and just create a blank sort of dark blue dark purple ref arrow and then you

can look at that ref arrow with your logic step and it will tell you the data type that

it's expecting usually surrounded with other weird stuff etc.

It's usually only reference types that you will have an issue there with because reference

types are less clear.

If it's a basic value such as Bool then the colors match up to our standard coloring and

that secondary tip won't help.

The get type node is also a good suggestion there so keep that one in mind.

Do you expand on that question?

If I'd like to see runtime performance at a per slot level like a color coded heat map


I would too but I also wouldn't because people would use that to judge people so we'd have

to sort of see how we can do that effectively.

We already get that.

It's like you have 101 slots the limit on avatars for this world is 100 slots.

It's like guys grow up please.

Yeah exactly exactly what Lex says.

He can fill 100 slots with access aligners and they will have humongous performance implications

compared to I don't know an avatar that has 101 slots or 200 slots or 500 slots and it's

just you know an avatar existing in the world.

Clots are the last thing you should look at for performance reasons.

Start with what it does and also examine why it does it.

A good example which I always go for and I don't know if it's just me being British or

something is why do like loads of people just have guns on their avatar?

Do you need to have a gun on your avatar?

Are you going to shoot people?

Like why are you going to shoot people?

If you need a gun spawn a gun.

You don't need a gun on your avatar.

You know what McCree or whatever his name is from Overwatch who has a gun like that

or any of the other characters that I've ever got I realise but you know McCree has one

and Holsters is what I meant.

I was talking about Holsters.

Anyway point being I don't need it.

Does your context menu need to play the Halo theme tune orchestral chorus thingy opera

version when you open your context menu?

No so that's a better way to optimise your avatar than worrying about slots.

Ozzy has a fun one who says do you know how to or point to how to go about slot sorting

try making racing god have say first second third place using slot order offset.

Order offsets are good but you need to make sure that you're actually setting them.

Sometimes in UI I've built I've relied on the fact that new slots will occur after previous

slots and that has screwed up when the gadget or the utility has then reloaded because when

it reloads it's sort of not random but sort of indeterminate what ones might load first

so sometimes they get out of order.

So as long as you're setting that slot order offset on creation when you drop it into like

a collection of slots then it should be okay particularly if you're using UIX which plays

attention more to that.

If you're still having issues with that you can also do it mathematically and in mathematical

sense you'll have to adjust rect transforms or the positioning of individual rect transforms

to make them in the order that you want which would be hilariously bad.

Stella asks is there any way to write driver nullable value?

You can write it yes I'm not sure about driving but absolutely oh no you can drive it as well

yeah sure.

You're looking for the nullable nodes once you have the nullable nodes you'll have the

ability to drive and write them.

I think I have a video on the nullable nodes do I not?

I will have a video on the nullable nodes very shortly because that's a really easy

one to do.

I can't remember which folder of the Logix browser they're in but there we go actually

Lex found it for me so operators nullable use those nodes they are pretty self-explanatory

but I have just added onto my to-do list a task to go ahead and make a video on that

one because it's really simple once you know Eden and thank you for the example as well

I probably haven't done a video before because I can never remember where nullable show up

but the the near and far clip is a good example.

Skant talks about the horrible Logix from before that said would this be the component

equivalent of log of using Logix to drive itself quite possibly yes internally value

copy and the drive system use the same sort of code internally there's just like a piece

it's not exactly this but there's a piece of code which is like you know drive this

field by this field and value copy operates on that but sets up some other settings for

various reasons so yeah pretty much.

Hanu says what causes the lag spike and voice dropouts when people join a session that is

the usually avatars or some parts of the syncing process so when you load in you load your

avatar and loading your avatar will load all of the data about your avatar includes all

the slots or the assets or the Logix or the equipment or the guns or the halo context

menu opera singers that you've got in and that is what causes the hitches we do have

the ability to optimize that with some work we just haven't done that work people get

a bad rap for that so you know maybe experiment with your avatar and trying to make it better

there are optimization techniques on the wiki under optimization guidelines on the wiki

or something like that big main ones are bake your blend shapes try and reduce the amount

of materials textures etc try to avoid gadgets and stuff you don't need on your avatar and

it's about it really you know.

Ozzy asked an interesting question which actually drives me mad I just haven't had the opportunity

to like write up my thoughts on it and be like here's what we should do they say if

you are in charge of organizing discord channels in here is I think you would change for the

better in your opinion absolutely let's go top to bottom top to bottom all right okay

cool so we need to get rid of the distinction between community and Neos channels because

it's very confusing the Neos development staff needs to go above the Neos channels probably

in the welcome and basic info thing welcome links is good guidelines needs to be removed

and just referred to the wiki or any of the Google docs that we have the FAQ channel needs

to be removed and just referred to the wiki or any other FAQ source that we have the discord

groups channel needs to be deleted it was part of a promotional thing in 2019 that no

longer exists so it can just go the welcome lobby needs to be deleted we don't need to

see when people join the server for administration and moderation reasons we have another channel

that does that you guys can't see it's just a member log common with many discord servers

the welcome lobby is just a place where it says that people have joined and we don't

need that our scale we have thousands of people in this discord it's just it's not a functional

channel then coming down to this just the weird gap where we have Neos developments

and community just needs to not be there the the the what else have we got coming down

here and then we need to enable the the like flashcard badge thingy that pops up when you

join a server that other servers have but ours doesn't for some reason it sort of says

like here are the rules here's where the channels are here's what you can do in each channel

here's a channel we recommend you know that's all sort of configurable he's got like a welcome

screen feature or something we need that fixed announcements probably needs to go into the

Neos development section or move higher into welcome and basic info so it's clearer right

now it's sort of like at the bottom of the Neos channels section which doesn't make any

sense we need to reorganize the community meetings channel so that it is more centrally

located around office hours so I don't have to say several channels above I just have

to say one channel above etc that happened when we created voice chat two three and four

because it was busy the patreon voice chat needs to be deleted because it doesn't matter

why does it exist voice chat text needs to be deleted the reason behind that is because

Neos not Neos Discord now natively has a text chat per voice channel and if you don't like

that feature because it's not obvious that it's there I completely understand but there's

no way to turn it off and therefore what you end up with is two voice text channels per

voice text the one that like Discord wants to you to use and then the one that which

a server creator has created and it gets really confusing so the best way around that is basically

to go use the discord provided one yeah we know the experience is a bit bad but it's

better than the alternative where the conversation ends up happening in two separate places then

I would combine alpha testing and testing I don't know what difference between alpha

testing and testing is so that would be combined I would move the preview features above the

international channels whilst I you know like on love our international you know channels

etc there and international communities having those features above might cut down in the

amount of people getting lost and confused yeah there's there's another testing channel

I forgot what we're alpha testing but there's another testing channel I don't remember what

we're testing in it I think it's something to do with Beppu too I really don't remember

I think you can if you have the danger tester role I don't know I don't know I would also

consider deleting the archive channels you know how we archive each MMC we archive the

asset variant system and GDC 2020 while an archive channel can make sense to sort of

preserve the conversation that occurred a certain point it just becomes a detriment

because it appears in my search results when I'm trying to find information and it's usually

old because no one can type in there anymore I'm gonna move on like I would change basically

everything about the discord layout but it's not up to me so moving forwards ramp it says

how about a new component to trickle load heavy avatars when it's added on world route

and make it run by a priority of model textures that's not the solution so a lot of times

we come up with we have with this issue which is is people come up with a solution and then

they occasionally ramp hasn't done this but occasionally it does happen so ramp are you're

not doing this but I'm about to rant about it anyway people go I have a solution for

this problem and then they explain it and then they get mad that we haven't implemented

it the the best way to ensure that that doesn't happen is to state your problem not your solution

it's called the XY problem so we do have a couple of issues open about sort of world

load order controlling the load order etc the best way to do is to go to those issues comment

on them with any information or stuff that you need thumbs up them etc and then we know

that people want us to work on that and then we'll we'll solve the solution there because

the solution unfortunately is not a component to trickle load heavy avatars trickle loading

heavy avatars would be more about the interfacing between the actual loading process in C sharp

and Neos itself to make that better like I don't particularly know what's wrong I haven't

looked into it enough but examples and again this is examples because I have not looked

into this so don't quote me perhaps the loading of avatars isn't multi-threaded enough I don't

know perhaps the order in which we load an avatar could be flipped upside down or sideways

to make certain bits load before other bits you know that's all data model stuff that

isn't component stuff that components are on top of the data model stella asks what

are your thoughts on avatar culling systems and you think they can integrate as a native

feature they should be integrated as a native feature while I like all of the avatar culling

systems that exist you shouldn't have to do that like that is firmly in my mind is one

of the features you shouldn't have to do and while it's great and I love seeing those spread

and being used in worlds and they do make the world better there's like a twang in my

heart or whatever where I'm like we should have solved this for you we should have solved

this for you like every single time there's something complicated that all of you guys

are doing I'm like we should have solved this for you you know another good example would

be Syro wrote an entire mod for this game so they could avoid logics interface cards

because they got so bothered by logics interface cards and I've been there you know it's like

3 a.m you've been working on logics for hours you unpack the logics and then like the logic

interface cards are like yo let's party and then they're just like everywhere and you

can't do anything about it uh rampant says I thought the spike was called by everything

starting to load at one moment uh yeah that again that like fixing that would be data

model that wouldn't be the component layer oh yes my uh some people I needed to respond

with tax uh information I've got back to the tax information which means I need to process

about 40 pdf files and send them to my accountant I'm gonna have so much fun after this office

hours oh so much fun um I just thought I'd let you know that sorry the email came in

and I saw it was taxed and I'm just like damn it uh dia says how much of the performance

issues are caused by unity not quite sure like how to measure that like you can measure

it in in various ways so there are issues caused by um unity forcing us to be sort of

down rev on the basic c-sharp language there are also issues which caused by unity forcing

us to be on a downward version of dotnet which is built on top of the c-sharp language and

both of those things can lead to performance issues then there's rendering which can lead

to additional performance issues then there's just how unity puts stuff together in the

render which can cause performance issues there's the interop which is how we communicate

with unity that can cause performance issues there's just so many angles there and I don't

really know how to measure that in a way that would make sense it would be quite considerable

but the amount of work required to replace unity is also quite considerable Lou asks

uh do we know why logic cards seem to multiply when I'm packing with multiple users in the

session yes that is a long-standing bug which every single person that has ever had access

to the code base has tried to fix and fail it you know there's um there's that image

about a comment um I'll try and find it really quickly yep here we go there's there's various

parts of this but uh this this is you know that that is logic's interface cards um so

yeah freaks of course try to fix it they of course understand it the most um but when

new people are added to the team that have access to the code base they're like cool

I'll try and fix that too and then they can't um so yeah I know coffee tried when they're

on the team I know outsider tried I know I've tried I know gains took a look at one point

like we've all tried to fix it but uh it's it's been difficult so what's meant to happen

is that when um the logic's interface cards spawn um either by unpacking or when you spawn

them because you're creating your logics that logic's interface proxy component is meant

to sort of mark one that exists and the whole system is meant to pick up on that and say

like all right this one is the one that we should use we don't need to generate another

one but something really confusing in the engine goes like yeah I don't know I can't

see that one or something along the lines of that so it makes a new one on top of that

though I don't know why they move like if they didn't move I would have less of an issue

about it but they randomly move and it's really confusing to me um they usually seem to just

get further and further away from things I don't really understand that like I understand

when it's like a tool or a gun or a weapon whatever you want to call it um because that's

being rotated and spun around and passed between people etc but in that case I don't understand

why they're not just sort of turning upside down or sideways and stuff they appear to

just sort of be like orbiting and going further and further out I don't understand.

Let's take a look next uh Ozzy says uh is there a way to change the maximum of undo

steps in the world you can do it via the slot that's non-persistent doesn't save uh probably

a feature request for that one there's probably a reason we have it at a certain level I know

that we need to do a lot of work on undo undo is fantastic but um if you've been playing

Neos enough you'll know that some cases undo doesn't do what you want it to do and it can

actually cause problems um it's either an operation that you've done does not register

via the undo system or it does but not in an order that you can control or it's a multi-step

process and so what you get is you do undo and you've only done like half of it and then

you need to undo again and then you start spamming it and you undo too much like I had

the grab I was recording a video the other day and I had a grab and so I let go of the

grab I don't remember what it was I was just grabbing something and it was in the wrong

position so I thought I'll undo it but for some reason the undo system didn't register

that grab and so it popped up the undo tree um to the next undo which unscrubbed through

a video which is a key part of the recording we were um some of the medical stuff we were

following a video which is a patient exam letter by letter procedure by procedure and

we were using the video as a sort of like um reference about what we needed to do so

I unscrubbed the video like back to the start of the video and then we'd lost our place

we didn't know which test was next and it was just like yeah undo system why all right

moving forwards uh Lex says there's quite a few features in Neos that people use stroke

exploit they're only possible due to the components logics having side effects for example the

component that manages the whisper bubble allows you to distinguish between a normal

whisper bubble a voice message bubble only due to the fact that it's a different color

gets set on the bubble material for a voice message or standard bubble would you rather

people use these kind of set effects or have separate options for every single component

logic snow to properly expose those features um I would rather there be a separate um property

etc um so trying to just double check I understand here okay so you're detecting that a voice

message is happening on your avatar because it uses a different color on the bubble yeah

instead there may be on the whisper bubble manager or whatever we should have check boxes

which are like in conversational bubble in voice message bubble and then that way you

can key off those booleans um keying off that material would probably be problematic because

if we change the default way that bubble works then suddenly the color isn't changing and

then your code breaks that problem that Lex um has described here is identical to the

problem behind the whole permission thing um people are like I want to get the permission

role etc and it's like yeah you can get it in like five different ways but like none

of those are recommended and they're all of the things to avoid list because they're hacky

and we want to provide a way to do it properly um but to do that we need to do it sort of

securely and we're not quite sure how to do that one yet people say why securely think

about it right there's a piece of logics which says if you are a builder you can do super

awesome admin thing and it's using strings for comparison uh well I could write some

logics which finds that string or write a mod which finds that string and update it

to if you're any any role you can do super super admin stuff and it's not it's not secure

uh Troppy gives examples of the undo system being weird they say drawing uh move or delete

a stroke or hit and hit undo maybe it's the wrong spot or doesn't underly yeah the drawing

system is kind of weird it's like one of the examples of where the undo system is usually

good is the drawing system but I understand how like there's there's sometimes gaps there

uh with that I've seen chat die down so we're gonna go ahead and call it here we are at

eight minutes over thank you so much for joining me today I hope you enjoyed um the questions

that we've answered if you have any more questions please drop them in the questions and help

channel um or ping me directly or open up a GitHub issue if it's a feature request um

quick reminder just uh randomly if you have an issue that is moderation in nature make

a ticket don't DM me I'm just gonna ask you to to make a ticket uh Fakir if you have a

question please go for it I will make an exception for you because you seem sad that you are

too late so go ahead um I will wait um for one more minute so you better type quickly

uh whilst I talk about moderation some more yeah if you have an issue that's moderation

related make a ticket don't DM me don't come into Neos and talk to me about it just make

a ticket um you're free feel free to come and talk to me about it but I'm gonna tell

you to make a ticket the whole world has their eyes on oh there we go um Faku says when you

scale under a very small height the lighting gets very buggy um yes that is caused by um

that is caused by floating point imprecision um floating point imprecision is caused by

the computer that you're running um Neos on being unable to represent such small numbers

um you need to understand how floating points work to like really understand why that's

the case um the only way for us to fix it at that scale is for um us to switch to using

doubles which are double length um double width uh floats uh for position which isn't

something that is popular or common in computing right now I'm sure it will be as we sort of

move towards better computers bigger processes etc um but it just isn't right now uh the

one thing I will say to that though is remember that you have a lot of headroom above compared

to below and so something I've been experimenting in with worlds that require smallness is um

making the default scale of the world times 10 or times 100 and what that gives you is

a little bit more precision back the other way you know you don't have to start at one

move the needle to the left make everything 10 times big including users you can do that

you can make them 10 times bigger they won't even realize it if you do it correctly and

when they shrink themselves they'll be a little bit more room in the maths um not much but

a little bit more room it occurs in in basically every game um good example be I know they

fixed it but uh in Minecraft there used to be this thing called the far lands where when

you went really really really far out in the world generation it would get weird because

math was breaking down um there's an example of it in VR chat I know there's actually a

world where you can go through doors and they'll teleport you large magnitudes away from spawn

until floating point stuff happens I have one of those worlds half built I stopped building

it when froukes made it so that when you get to the really really problematic floating

point numbers you just respawn um because then it was is less less fun um more recently

siro found siro it must have been sorry it was there they found this weird component

in uncategorized which is called like up down button control or something anyway we made

an instant willy wonka elevator and took us up into the sky to floating point range that

was fun uh with that we'll go ahead and leave off as I said before ask questions wherever

you want them aim me um DM me whatever you'd like and I'll get back to you whenever I can

I will speak to you next time bye bye