In this Office Hours, Probable Prime talks about:
- Debugging Tools
- 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,
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.
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
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