Time |
Nick |
Message |
00:01 |
|
liceDibrarian joined #minetest |
00:29 |
MTDiscord |
<mistere_123> fun thing: https://www.desmos.com/3d/556b8f0bf7 |
00:53 |
|
v-rob joined #minetest |
01:24 |
|
smk joined #minetest |
01:45 |
|
lemonzest joined #minetest |
02:26 |
|
lemonzest joined #minetest |
04:00 |
|
MTDiscord joined #minetest |
05:01 |
|
est31 joined #minetest |
05:15 |
|
est31 joined #minetest |
05:39 |
|
est31 joined #minetest |
05:55 |
|
YuGiOhJCJ joined #minetest |
05:59 |
|
calcul0n joined #minetest |
07:01 |
|
gxt joined #minetest |
07:13 |
|
gregon joined #minetest |
07:22 |
|
Alnotz joined #minetest |
07:43 |
|
TomTom joined #minetest |
08:38 |
|
mrkubax10 joined #minetest |
08:44 |
|
dridron joined #minetest |
08:48 |
|
dridron joined #minetest |
09:33 |
|
qqq joined #minetest |
09:42 |
|
gxt joined #minetest |
09:43 |
|
Guest74 joined #minetest |
09:50 |
|
e1z0 joined #minetest |
10:32 |
|
sys4 joined #minetest |
10:45 |
|
appguru joined #minetest |
11:09 |
|
s20 joined #minetest |
11:17 |
|
turtleman joined #minetest |
11:19 |
|
calcul0n joined #minetest |
12:36 |
|
gxt joined #minetest |
12:42 |
|
Oksanaa joined #minetest |
12:50 |
|
s20 joined #minetest |
13:04 |
|
e1z0 joined #minetest |
13:18 |
erle |
celeron55 do you know what the motive is behind “oh your hardware is so bad, it must not work” when it works? like, i had assumed it is some gamer thing, because in hacker circles i rarely encounter it. case in point: if someone runs doom on a potato computer, people are rather impressed there. |
13:19 |
erle |
i mean you obv can't read minds, but i doubt AFCMS is going to tell me about the finer points of gamer culture |
13:20 |
erle |
and i doubt it has anything to do with technical skill (i.e. people still make fun of those who have “worse” hardware even when they know it is wrong) |
13:20 |
erle |
i encountered it first in mineclone2 btw, it was much worse there |
13:20 |
celeron55 |
i don't know. i personally take pride in MT working on the old thing, but i am terrified of the potential amount of resources that could end up being taken from more productive work into supporting hardware only a few people have |
13:20 |
erle |
but that's the joke, it does not take any resources. it just works. |
13:20 |
celeron55 |
the focus must be in the future |
13:21 |
celeron55 |
otherwise the project will stagnate, people will lose interest, and the project will die |
13:21 |
erle |
well i have interest in improving it, as you can see from my recent PRs (some even got accepted :P) |
13:21 |
erle |
so ig i will tackle the shadow issue as soon as i have understood what changed in irrlichtmt |
13:22 |
celeron55 |
we have had this discussion ten times already and that's 9 times too many |
13:22 |
celeron55 |
you already know what i think and what the dynamic there is |
13:22 |
erle |
i do. i just wondered, because for *you* and the other devs i get it – i don't get it for some ordinary gamer though. |
13:22 |
erle |
they have no concept of maintenance burden |
13:23 |
erle |
yet it is very important if a GPU gets you 200 or 300 fps |
13:24 |
celeron55 |
i don't think i've stumbled upon “oh your hardware is so bad, it must not work” in any serious way from ordinary people. but i guess they're thinking based on their own experiences, maybe they had to upgrade their hardware |
13:24 |
erle |
hmm, yes that tracks with AFCMS (“i was not able to run minetest on a 4 year old laptop, how can you run it on an older one?”) |
13:24 |
erle |
i'll ask those ppl if they extrapolate from their own experiences then |
13:24 |
erle |
but for imperceptible differences it still makes no sense |
13:25 |
erle |
in old gaming magazines ca. 1999 we had this category for how well games work on hardware |
13:25 |
erle |
there was a rating ”ruckelt, aber spielbar” (movement stutters, but playable) based on resolution or so |
13:26 |
erle |
which i find funny |
13:26 |
erle |
like if it stutters, it always irritates me to no end |
13:26 |
|
xBarkDog joined #minetest |
13:26 |
erle |
even if it is some pixelated scene like xcom or so (these games have vastly higher hardware needs nowadays because they used some palette tricks that are AFAIK no longer done in hardware, so they are slow) |
13:28 |
erle |
for my hardware, i was pretty much told that my driver is EOL … but there is a newer driver, that is faster :D |
13:28 |
erle |
the only downside being that it does not support at all stuff that the old driver supported with a framerate of like 0.1fps or so |
13:29 |
erle |
because it does not even try |
13:42 |
|
Sobinec joined #minetest |
13:53 |
|
definitelya joined #minetest |
14:15 |
|
Desour joined #minetest |
14:18 |
|
appguru joined #minetest |
14:18 |
muurkha |
now movement stutters in every app all the time |
14:21 |
|
appguru joined #minetest |
14:44 |
sfan5 |
since when? |
14:52 |
erle |
i think it happens if people run like half a dozen electron apps. or if they run mac os :P |
14:53 |
erle |
(application startup is slower and it has animations everywhere, both of which contributes to a *feeling* of slowness, even if the computer is fast) |
14:56 |
MTDiscord |
<warr1024> Can confirm, Mac OS feels really sluggish to use. Smooth, but lazy. You can't turn off the animations. Turning off all animations on e.g. Android via developer options mitigates transition lag quite a lot, wish they allowed it on mac. |
15:05 |
erle |
though i recently talked with some coworkers and it turns out some people don't have this effect |
15:05 |
erle |
like, apps don't feel slow if the animation is <0.3s or so |
15:44 |
celeron55 |
0.3 is incredibly slow for me. i want zero UI animations |
15:44 |
celeron55 |
my time is too short for UI animations |
15:44 |
celeron55 |
i mean, my life is too short |
15:46 |
muurkha |
sfan5: mostly since the first iPhone, I think |
15:47 |
celeron55 |
if i press a key or click a button, i consider the computer's utmost priority to be process anything related to it and show me the finished result as fast as possible. any animations are an absolutely silly, actually ridiculous, distraction from that goal |
15:47 |
celeron55 |
+to |
15:47 |
MTDiscord |
<luatic> No animations can feel somewhat janky |
15:47 |
Oblomov |
that flamegraph with vector.length eating up all the time … |
15:48 |
celeron55 |
it doesn't when you are the one commanding a thing to happen. and if you didn't command it to happen, it shouldn't happen |
15:48 |
MTDiscord |
<luatic> still an animation can make it feel smoother |
15:48 |
MTDiscord |
<luatic> for example in a chess game, if the pieces just teleport that's not very smooth |
15:48 |
celeron55 |
i don't want my screen wallowing around without my input. i press a button, thing happens instantly, and then the computer waits for me to ask me to do another thing |
15:49 |
celeron55 |
ask it* |
15:49 |
MTDiscord |
<luatic> of course the animation should be reasonably quick, and it should be finished as soon as the next command is received |
15:49 |
rubenwardy |
Most people find that animations make something feel more polished and fun to use, as long as it's a quick one |
15:49 |
celeron55 |
i hate fun |
15:50 |
jonadab |
Animations make a demo look more polished the first time you ever see it. |
15:50 |
MTDiscord |
<luatic> "i hate fun" - celeron55, 2023 |
15:50 |
jonadab |
But after you've seen the same animation a few thousand times, it gets _old_ |
15:50 |
MTDiscord |
<luatic> this explains minetest /s |
15:51 |
|
jaca122 joined #minetest |
15:51 |
celeron55 |
jonadab: 100% agree |
15:51 |
celeron55 |
i'm fine with animations, as long as they happen only once and i don't need to see them ever again |
15:52 |
jonadab |
I think it's fine to have them on by default, if the user can turn them off when they get tired of them. |
15:52 |
jonadab |
Then people who don't want to turn them off, can just... not do that. |
15:52 |
celeron55 |
the computer's job is to be an efficient extension of me, not to manipulate me to be happy or feel more things happen than actually does happen, or to make input given by me to cause more processing than is needed |
15:53 |
jonadab |
celeron55: Have you ever played Zork? |
15:54 |
celeron55 |
in other words, the job is very clearly defined, and animation does not help in reaching the goal |
15:54 |
celeron55 |
unless the animation is specifically designed to aid in visualizing something i want and need to have visualized |
15:54 |
jonadab |
(Zork has no graphics of any kind. And yet, it works.) |
15:56 |
celeron55 |
no i haven't played zork, but the concept is nice |
16:01 |
celeron55 |
luatic: chess is a good example of animation being a helpful visualization method. without animating the move, it is literally difficult to see what is happening if you're playing against an AI or a remote player. their hand isn't there moving the piece so you need to visualize the move. of course, you can visualize a move without animation. just draw an arrow from the old location to the new location |
16:02 |
celeron55 |
- i think i'd probably like that more than animation as you can look at it as long as you want to |
16:02 |
celeron55 |
and you don't need to wait for it to happen in order to see what happens. you can instantly see it fully |
16:29 |
erle |
i agree with celeron55, everything that stands in the way of computer doing the job is useless |
16:29 |
erle |
related https://en.wikipedia.org/wiki/Ornament_and_Crime |
16:30 |
rubenwardy |
to give some examples of animations I add - I add a slight transition on hover effects on buttons and such. I also add short fade in/out for modals. The former is non-blocking, the latter delays interaction I guess |
16:30 |
erle |
these fades always frustrate me |
16:30 |
erle |
and you are spot-on, the “non-blocking” kinda mitigates it |
16:32 |
erle |
there's a reason most users are not using compiz or commit linear algebra crimes on unsuspecting application windows |
16:32 |
erle |
(“i can see my terminals backside” type of crimes) |
16:32 |
|
LizzyFleck joined #minetest |
16:33 |
muurkha |
aren't most users using the moral equivalent of compiz these days? |
16:33 |
muurkha |
on Android, iOS, macOS, Microsoft Windows, and GNU/Linux |
16:34 |
erle |
i'm not sure. i mean compositing is one thing, but like, windows that fold up like airplanes or burn or so? |
16:34 |
erle |
definitely not aiding anything |
16:34 |
erle |
the genie-back-into-the-bottle animation on OS X at least shows you where the app went |
16:34 |
muurkha |
macOS has been doing that in every release for like 20 years I think? |
16:34 |
muurkha |
they also use it for "exposé" |
16:35 |
erle |
on android, you can turn it off. on ios … nope. for debugging your own app apparently you can! |
16:35 |
erle |
i have automated android app stuff (through appium) and the first time i tried it failed because i assumed computers are fast. but animations are not! |
16:36 |
erle |
and everything likes to be uselessly faded in/out or slide from some side (regardless of if it actually gives a usable spatial hint) |
16:36 |
erle |
to me it appears almost like people saw these spatial hints and were like “yeah but what if we do only the effect, without the meaning?” |
16:36 |
celeron55 |
the fact that you need to give a spatial hint means the UI is kind of screwed. i don't want to need to know where something "went" |
16:37 |
|
gregon joined #minetest |
16:37 |
celeron55 |
i want it to go where i want it to go, so i then automatically remember where i put it |
16:38 |
erle |
yeah, me too. but i read the reason why the windows button was named START is because they figured out if someone is given the task to do something that makes it more likely |
16:38 |
erle |
and assuming not all animations were useless all the time, i *guess* showing where a minimized window went is useful for some? |
16:38 |
erle |
(not for me, i have i3) |
16:39 |
muurkha |
celeron55: I have an easier time remembering positions than recognizing images, so it's helpful for me to see where things go |
16:40 |
erle |
something minetest-related btw. this bug report does not follow the template and is thus pretty useless to me (see my comment). anyone knows the correct inputs and outputs? https://github.com/minetest/minetest/issues/13946 |
16:40 |
muurkha |
(I have an easier time still with names, though) |
16:40 |
celeron55 |
the classic start menu or the modern equivalent which is an app gallery or launcher screen is pretty useful for beginners, but i don't like them in the long term. in the long term i set up direct keyboard shortcuts or start the application using the literal binary name. it's important for a software engineer to know the binary names of things. you end up in trouble if you don't. i do get it why normal |
16:40 |
celeron55 |
people like app galleries and launchers |
16:40 |
celeron55 |
but that doesn't have anything to do with animations. it's just yet another thing |
16:41 |
erle |
celeron55 btw what do you use? everyone i know ends up at i3 or sway or so on (which is pretty funny bc those are almost never preinstalled) |
16:41 |
celeron55 |
muurkha: recognizing images? what? |
16:42 |
celeron55 |
erle: i'd probably use i3 if i didn't get used to icewm a long, long time ago. icewm made me get used to a set of keyboard shortcuts that are completely incompatible with i3's ones and i'm very efficient with it so i have no need to change |
16:42 |
muurkha |
celeron55: hmm, I was thinking about alternative to putting things in places, but left out that link from my utterances |
16:42 |
|
rod_tout_court joined #minetest |
16:42 |
muurkha |
icewm has a great set of keyboard shortcuts |
16:43 |
erle |
celeron55 well that's fine ig |
16:43 |
celeron55 |
when i start a thing, i put it on one of my 12 workspaces, and i remember the workspace number |
16:43 |
erle |
i have fewer workspaces and they have names. like 3:chat |
16:43 |
muurkha |
I'm terrible at remembering numbers |
16:43 |
celeron55 |
and my workspace shortcuts are win+1234qwerasdf |
16:43 |
erle |
and when i start a thing they get put on that workspace |
16:43 |
celeron55 |
this is also the exact thing what disallows me from using i3 |
16:43 |
erle |
because you'd have to redefine all the keys? |
16:43 |
celeron55 |
i can browse through the workspaces in about 1.5 seconds if i don't remember what's where |
16:43 |
muurkha |
but workspaces on particular keys seems reasonable |
16:44 |
|
gregon left #minetest |
16:44 |
celeron55 |
because the shortcuts are optimally placed on the keyboard for the left hand |
16:44 |
erle |
i see, i should maybe adopt that |
16:44 |
celeron55 |
yeah i don't really remember the numbers i guess |
16:44 |
celeron55 |
i remember the workspaces by the shortcuts |
16:44 |
celeron55 |
finger positions |
16:44 |
erle |
i end up using fewer workspaces because 67890 are so far right |
16:44 |
erle |
now that you say it |
16:45 |
celeron55 |
i don't usually use all 12, i have 5 spare right now which is a good amount of spares |
16:45 |
* muurkha |
makes a joke about AfD |
16:45 |
celeron55 |
and 12 is enough, the need for more occurs super rarely |
16:45 |
celeron55 |
at that point i always can close something to free up both the computer's and my brain's resources |
16:46 |
erle |
celeron55 this is maybe related and cute: https://www.davidrevoy.com/article989/how-to-customise-a-usb-numeric-keypad-under-gnulinux |
16:48 |
celeron55 |
i think the world needs a modern implementation of icewm. maybe as a curated set of configs on top of another wm, or maybe as a fork of something, or maybe as a completely new thing. the focus would be on predictable classic behavior and snappy keyboard shortcuts. i tried MATE lately on one system but it's super clunky, it feels like a museum |
16:48 |
celeron55 |
a spiced up gnome shell is better than MATE |
16:48 |
celeron55 |
very resource hungry and kind of silly, but better anyway |
16:48 |
celeron55 |
gnome shell without some specific config changes and extensions is near useless though |
16:49 |
|
rod_tout_court joined #minetest |
16:49 |
erle |
gnome shell breaks extensions all the time though |
16:49 |
celeron55 |
i found one gnome shell extension that froze the entire system |
16:49 |
erle |
LOL |
16:49 |
celeron55 |
ridiculous, i know |
16:49 |
erle |
as jwz said: once is coincidence, twice is sabotage, three times is official GNOME policy |
16:50 |
celeron55 |
when icewm crashes (a rare occurence, but anything can happen), it just restarts and is like "huh, whatever" |
16:50 |
celeron55 |
or you get kicked out of X and back to tty or the dm |
16:50 |
celeron55 |
as for DMs, i hate all of them and just login on tty and type startx |
16:51 |
celeron55 |
my latest gried with DMs was with trying to set the dpi setting on my 4K display |
16:51 |
muurkha |
ugh |
16:51 |
celeron55 |
it was impossible to do in a way that would satisfy all WMs and applications |
16:51 |
celeron55 |
on the other hand with startx and xinitrc you can do things super controllably |
16:53 |
celeron55 |
gnome shell of course is able to force the dpi setting for everything using whatever magic, and it plays nice with gdm. but that's like saying apple's products are compatible with apple's products |
16:54 |
muurkha |
what's your preferred Wayland setup? |
16:55 |
celeron55 |
the only way i've used wayland is with gdm and gnome shell. and on my sailfish phone. so i guess those |
17:04 |
|
fluxionary joined #minetest |
17:14 |
celeron55 |
i should post my recommended gnome shell setup. it's always difficult to find everything that it needs |
17:16 |
celeron55 |
but that would mean deleting my current gnome shell settings, extensions, extension configs and miscellaneous gsettings options and redoing them all over |
17:16 |
celeron55 |
sounds like torture |
17:16 |
celeron55 |
maybe if i'd make a new user and diff all the config files |
17:17 |
jonadab |
That does sound easier. |
17:17 |
jonadab |
If you wanted to torture yourself, you'd be using Windows 10. |
17:17 |
celeron55 |
i still remember the time when linux people used to laugh at windows registry |
17:17 |
celeron55 |
these days... the windows people laugh at all the linux registries |
17:18 |
jonadab |
Eh, I stopped using Gnome a long time ago, for a whole lot of reasons. |
17:18 |
jonadab |
And the registry was never one of my main problems with Windows. |
17:19 |
celeron55 |
frankly i'm kind of impressed that you can set up gnome shell to be tolerable on a secondary computer. my expectation was it would be awful no matter what |
17:20 |
|
v-rob joined #minetest |
17:26 |
erle |
i think if the gnome people would stop removing things they personally don't like (e.g. theming) and would be backwards compatible their users would be much less upset. |
17:26 |
erle |
i mean GNOME managed to have both MATE and cinnamon fork off them, that's kinda impressive |
17:26 |
erle |
GNOME 4 fork when |
17:26 |
celeron55 |
here's one thing i don't understand in gnome shell: why don't they include a slider to adjust the sizes of window title bars |
17:27 |
celeron55 |
i get it that themes have their own sizes for them, but it's pretty common that i like a theme but the title bars are just the wrong size |
17:27 |
celeron55 |
i suppose their ideology is that title bars shouldn't exist to begin with |
17:28 |
erle |
aren't title bars rendered by the applications in current GNOME? |
17:28 |
celeron55 |
but why does that mean they need to be so big |
17:29 |
celeron55 |
i guess some are, as they include extra content in them |
17:29 |
erle |
if you want to theme anything, you are obviously soooo last-century: https://stopthemingmy.app/ |
17:29 |
celeron55 |
but e.g. think of something like gnome terminal |
17:29 |
erle |
> GTK Stylesheets can make applications look broken, and even unusable. |
17:30 |
erle |
:D |
17:30 |
celeron55 |
nobody uses the title bar buttons regularly to warrant them being so big |
17:30 |
celeron55 |
regularly enough* |
17:30 |
celeron55 |
the content is in the big black part, the title or the buttons there are almost meaningless |
17:31 |
celeron55 |
and take multiple lines of space |
17:31 |
celeron55 |
yeah of course what also happened is that gnome has bad options for dpi scaling |
17:31 |
celeron55 |
you can choose 1x or 2x |
17:32 |
celeron55 |
1x makes everything way too small, 2x makes everything slightly too big |
17:32 |
celeron55 |
on the 4k display |
17:32 |
celeron55 |
why is there no 1.75x or something, i don't get it |
17:33 |
celeron55 |
then there's an "extra large fonts" accessibility option which turns fonts from slightly too small to slightly too big |
17:33 |
celeron55 |
why not a slider or something |
17:33 |
celeron55 |
i love the high contrast accessibility option though, and the disable animations one also |
17:33 |
erle |
do they still have high contrast inverse? |
17:33 |
erle |
that one was really useful for me |
17:33 |
celeron55 |
dunno. what i used was the dark mode with the high contrast option |
17:34 |
celeron55 |
the high contrast option turhs the dark mode from smushy to crisp |
17:34 |
celeron55 |
turns* |
17:34 |
erle |
they should let desour handle their scaling obviously :D |
17:36 |
|
mrkubax10 joined #minetest |
17:51 |
|
Talkless joined #minetest |
17:51 |
|
fling joined #minetest |
17:52 |
|
v-rob joined #minetest |
18:22 |
copygirl |
I'm curious, how realistic is having multipart / microblock nodes that can be made out of different parts, such as panels, stairs, post, each potentially made of a different material? |
18:24 |
erle |
copygirl want to cobble together some entities or what? |
18:25 |
copygirl |
I think I was being clear about wanting nodes. Unless you're talking about block/node/tile entities? |
18:26 |
erle |
copygirl if i would want to do something, i'd probably do it like voxelmodel https://content.minetest.net/packages/Noodlemire/voxelmodel/ |
18:27 |
erle |
and yes, i'd associate the entity with the node. this is not available statically from the engine, but mineclon* echests for example are like that IIRC |
18:29 |
copygirl |
I would like different collission shape combinations as well but it might be possible to generate those programmatically, and reduce the amount of unique nodes registered that way. Though I doubt I'll be able to programmatically make textures for new unique combinations of microblocks as they're used. |
18:29 |
copygirl |
Then again I can't have dynamic textures for just basic nodes. I would need entities, after all. |
18:34 |
celeron55 |
the reason why nodes are performant and don't take lots of ram and disk space is because they are simple. adding complexity like that to them would slow down everything and use up multiple times the memory even if you don't use the features. it's the tradeoff an engine like this has to make. a compromise could be some kind of indirection layer that dynamically allocates and generates nodes based on |
18:34 |
celeron55 |
more complex data structures but that would require quite a lot of development work |
18:35 |
copygirl |
I've delved into voxel development and the lack of a per-chunk-palette limits the amount of stuff you can do such as dynamic node registration. That would really help in this particular case. |
18:35 |
copygirl |
bloxel game development* I should say |
18:36 |
erle |
can't you just make the player bigger or so |
18:36 |
celeron55 |
another option would be to make nodes dynamically sized, but that would require a dynamic node memory space in each mapblock which would have to be managed, and you'd get an extra layer of indirection and memory allocation overhead, so it would be slower |
18:36 |
copygirl |
Either way I was hoping to learn about something that is currently possible. |
18:36 |
celeron55 |
dynamically sized in memory, i mean |
18:36 |
copygirl |
Why? |
18:36 |
celeron55 |
not dynamically sized as in in-world physical size |
18:37 |
celeron55 |
and every node would then have size information which would in itself increase their size even on that basic level to begin with |
18:38 |
copygirl |
If you need more data you can either represent it as a new dynamically created node, or if it's common enough, as a new layer of data layered on top of existing data. |
18:38 |
celeron55 |
in order to have large generated worlds the most common case of simple nodes would have to be made fast and easy on memory, and then the system would have to be able to expand from that using a dynamic system of some sort. that's the basic idea and constraint |
18:38 |
celeron55 |
copygirl: yes what i said: that would require a dynamic node memory space in each mapblock which would have to be managed, and you'd get an extra layer of indirection and memory allocation overhead |
18:38 |
copygirl |
Node type could be one layer, block light another, sky light a third. And just the same, you could add any additional layer to a chunk, on demand, that holds custom information about blocks. |
18:39 |
celeron55 |
currently no allocation is needed, no indirection is needed, no memory management is needed |
18:39 |
copygirl |
Nodes themselves don't need to be dynamically sized in any of my suggestions. |
18:39 |
celeron55 |
it makes everything very fast and reliable |
18:40 |
copygirl |
With a palette based system, nodes are mapped to ids which depending on the number of unique blocks, those are dynamically sized, yes. But it has too many benefits to avoid using, in comparison to a fixed ID space. |
18:40 |
celeron55 |
layers like that are possible for sure, if you're ok with allocating a layer for all nodes in a mapblock even if only one node needs it and others don't. i personally like the idea of layers |
18:40 |
celeron55 |
i almost started a proof of concept of simple layers like that |
18:40 |
copygirl |
Palette based storage is very reliable and don't tell me about performance in a Lua modded game. |
18:41 |
celeron55 |
each was 8 bits per node, and i intended them to be dynamic all the way to Lua, each layer having a name |
18:41 |
copygirl |
Actually, unsure if it would even be slower. |
18:41 |
MTDiscord |
<greenxenith> What does lua have to do with engine performance |
18:41 |
muurkha |
copygirl: I benchmarked LuaJIT against Haskell's GHC this morning and it turned out to be orders of magnitude faster |
18:41 |
celeron55 |
performance matters a lot. you don't appreciate it until you see something that doesn't perform, and believe me, i saw a lot of that when i developed the core of minetest |
18:41 |
copygirl |
You either have a global hardcoded id => block lookup, or you have a palette id => block lookup. Same speed. |
18:42 |
muurkha |
[but that was because my benchmark was flawed] |
18:42 |
muurkha |
I was just testing function fib(n) if n < 2 then return 1 else return fib(n-1) + fib(n-2) end end |
18:42 |
muurkha |
which in retrospect is a stupid benchmark for a tracing JIT |
18:43 |
muurkha |
because tracing JIT will always inline the function-call operations and probably constant-fold away most of the arithmetic, so it's really just testing how deeply it traces |
18:44 |
celeron55 |
copygirl: i don't understand what you're trying to say. layers would obviously represent attributes of nodes, and rendering of nodes would then have to accomodate for the added attributes (or ignore them, for layers that are only meant to be used server-side, for example for physics or whatever) |
18:44 |
muurkha |
but I've seen lots of real problems where naive code in LuaJIT will outperform naive code in C++ or Haskell. just, not by orders of magnitude |
18:44 |
copygirl |
I was advocating for per-chunk palette based block storage here. |
18:44 |
copygirl |
I felt like you were questioning the speed of that. |
18:45 |
celeron55 |
palette means nothing to me |
18:46 |
copygirl |
Thing of an image. Instead of assigning each pixel a full RGBA color (32 bits) you could assign each existing color an index (for example 0=red, 1=blue, 2=transparent) and if that's all the colors you use in your image, now you can represent a pixel with just 2 bits. |
18:46 |
celeron55 |
anyway. if you have strong ideas, i recommend making a proof of concept |
18:47 |
celeron55 |
it's hard to 1) prove that you're serious, 2) prove that an idea can work, and 3) communicate how exactly it should even work, without a proof of concept |
18:47 |
copygirl |
The proof of concept is Minecraft. They use palette-based storage. Though you probably mean in Minetest itself? I really don't want to touch C++ code. |
18:48 |
celeron55 |
i don't see how what you describe would help, or even what problem it intends to fix |
18:48 |
copygirl |
The cool thing with a bloxel game is that you can have theoretically infinite different block types, because only the ones that exist within a chunk need to be references and mapped to a much smaller id. |
18:48 |
celeron55 |
oh you mean not having a game instance global id space but instead a block global id space |
18:49 |
celeron55 |
that makes sense |
18:49 |
copygirl |
Not sure what you mean. |
18:49 |
MTDiscord |
<mistere_123> Well, we already have both near-infinite mapgen and near-infinite content ids :trollface: |
18:51 |
copygirl |
Instead of having a single global id <=> block type mapping you would have an per-chunk id <=> block type mapping. |
18:52 |
celeron55 |
node ids are 16-bit in mapblocks, and that's enough to make every node in the mapblock have a different id, and it's compact as it should be. but currently globally node ids are also 16 bit. it would be possible to have 16-bit node ids in mapblocks mapped to 32-bit global node ids. the mapping would consume space and it would have to be maintained as nodes are removed and added to the mapblock though |
18:52 |
copygirl |
Why even have global ids? Map them to a name when saving, and to a block instance at runtime? |
18:52 |
celeron55 |
they already are mapped when saving |
18:53 |
celeron55 |
but a node is never represented by the name in memory. it's always represented by the id. thus, the need for global ids |
18:53 |
celeron55 |
the global id mapping is generated on world load time to contain all the registered node names |
18:54 |
copygirl |
Why is the mapping to a global ID necessary? |
18:54 |
celeron55 |
at the same time as the parameters of each node are set up |
18:54 |
celeron55 |
because names are more expensive than ids |
18:55 |
celeron55 |
and don't start about Lua. most processing in minetest happens in the engine for a good reason. it gets enormous speedup by dealing with ids |
18:55 |
MTDiscord |
<jordan4ibanez> Because if you do not do that and you changeout your mod loadout, all of a sudden certain IDs aren't mapped properly so water could be a bunch of fire |
18:55 |
copygirl |
Can't you refer to a block by the reference to the block instance? |
18:55 |
muurkha |
an index into a table of pointers to name strings (hashed or otherwise) is effectively a global id |
18:55 |
celeron55 |
refer where? minetest is full of world-global algorithms that go through a fast abstraction layer to mapblocks |
18:55 |
celeron55 |
you don't deal with mapblocks in algorithms |
18:56 |
copygirl |
jordan: I'm suggesting that in-world mapping is done with per-chunk palette. |
18:56 |
celeron55 |
the per chunk palette is dynamic |
18:56 |
celeron55 |
you can't use it to refer to stuff in the global interfaces |
18:56 |
rubenwardy |
plus makes it harder to compare between 'chunks' |
18:57 |
celeron55 |
at the instant you add a new type of node to a mapblock, or remove the last one of one type, the per-mapblock id space would be altered and you would have to adjust everywhere |
18:57 |
erle |
copygirl what is the case that you actually want to optimize for with your suggestion? |
18:57 |
celeron55 |
if you have an indirection layer per-mapblock to 32-bit global ids, then that's what you'd alter and everything else would stay the same |
18:58 |
celeron55 |
but then there's the argument whether it would be better to just have 32-bit node ids stored in each node |
18:58 |
copygirl |
This is the gist of it if you want to read it up: https://www.reddit.com/r/VoxelGameDev/comments/9yu8qy/palettebased_compression_for_chunked_discrete/ |
18:58 |
celeron55 |
it would probably be simpler and faster |
18:58 |
MTDiscord |
<mistere_123> I think the purpose is to remove the maximum number of content ids limit |
18:58 |
celeron55 |
than the extra mapping nonsense |
18:58 |
copygirl |
I think the code is not complete, and not implemented in the best way possible, but it outlines the idea, anyway. |
18:58 |
celeron55 |
stored in each mapblock* |
18:59 |
erle |
copygirl beautiful code is nothing without a problem to solve |
18:59 |
erle |
so what's the problem |
18:59 |
copygirl |
Palette-based storage would be a good first step to not having to worry about reaching any sort of maximum block types limit, and open the way to dynamic node registration at runtime. (For example for multipart blocks.) |
19:00 |
muurkha |
it would be simpler, celeron55, but it seems like it would use twice as much space |
19:00 |
copygirl |
It could also reduce the size of chunks on-disk and over the network, depends on if / how they get compressed at the moment. |
19:00 |
celeron55 |
copygirl: yeah that palette code there that you linked is pretty expensive computationally and memory wise |
19:00 |
muurkha |
so it might be faster or slower |
19:00 |
celeron55 |
it's not a very wise choice |
19:00 |
celeron55 |
i'd rather have 32-bit global node ids |
19:01 |
copygirl |
Woah you determined that by looking at it for .. less than a minute? |
19:01 |
copygirl |
Not even considering optimizations that could be done. |
19:01 |
celeron55 |
of course if you'd design a new engine or a fork of minetest solely based on the idea of that sort of palette, you could do things that are impossible with minetest's registered nodes system |
19:01 |
celeron55 |
but it's out of scope for us |
19:02 |
copygirl |
Yeah this conversation went a bit off-track and I apologize, but I was being questioned about a thing and I answered. |
19:02 |
celeron55 |
it would be a different type of engine on a fundamental level |
19:02 |
copygirl |
(And got defensive at times.) |
19:02 |
celeron55 |
i'd like to see it of course |
19:02 |
celeron55 |
so please go write the proof of concept |
19:02 |
copygirl |
(To be fair, I want to make it, so ...) |
19:03 |
copygirl |
I do want to point out that, again, Minecraft is technically the proof of the concept. |
19:03 |
erle |
why what can it do? |
19:03 |
celeron55 |
i don't see minecraft doing any of the actually interesting things the system would allow. they seem to be absolutely wasting it if they actually do have it |
19:04 |
copygirl |
Yeah, registrations of blocks are limited to startup time. |
19:04 |
celeron55 |
that system should allow essentially having a separate node registration table per mapblock (or in minecraft terms, chunk) |
19:04 |
celeron55 |
i don't believe they have that |
19:04 |
erle |
oof |
19:05 |
erle |
that sounds not like ”solution fits in head” |
19:05 |
copygirl |
But the palette-based storage is working fine for them. And I don't think there's a concernable performance loss due to it. Speedup is done by not using high-level access for things such as world gen and high-performance modifying of chunks using stuff like worldedit. |
19:05 |
celeron55 |
minetest uses a form of palette-based storage on disk. it fits the purpose very well. but the colors there are simply registered node names |
19:06 |
copygirl |
You can telle the palette to give you the ids of blocks that might or might not exist in the chunk, then commit all the changes you'd like to do (more) directly to the buffer. No need to risk multiple resizes. |
19:06 |
copygirl |
That would be a global palette, right? |
19:07 |
celeron55 |
once the server has started the server and clients talk about nodes by the global ids that the server assigns to node names at startup. it's the system minetest is build on, and it's fast and reliable and i'm pretty sure minetest will roll with it long into the future |
19:07 |
copygirl |
(TIL "mapblock" = "chunk", that sure was the cause of some confusion in this conversation.) |
19:08 |
celeron55 |
oh yes, that's the terminology here. i specifically use "mapblock" instead of "block" to avoid confusion |
19:09 |
celeron55 |
the first being the actual literal name of the data type in MT |
19:13 |
copygirl |
So I am to assume that it's not feasible to do a multipart block node in Minetest? While I doubt I want to use an entity per node in-world, what rendering capabilities do node-based entities have in MT? |
19:15 |
celeron55 |
MT doesn't have a good system for having masses of multipart nodes, anything you do will probably be pretty disappointing unless you begin by looking at developing the engine first in some fairly tricky ways (like some of the stuff i talked about initially) |
19:16 |
celeron55 |
entities are for actively moving or changing things that are few and far between in the world, and nodes are for masses of persistent things aligned with the grid |
19:16 |
celeron55 |
the thing in between doesn't really exist |
19:17 |
celeron55 |
and obviously is the more challenging thing to design and implement |
19:18 |
copygirl |
Well you can have per-node meta data storage. |
19:18 |
copygirl |
Just no custom rendering based on that. |
19:18 |
celeron55 |
yes, well node metadata based rendering has been fiddled with in the past... i made a proof of concept at some point |
19:19 |
celeron55 |
it was years and years ago |
19:19 |
celeron55 |
i modified the node definition to be storeable inside metadata, in which case you could assign any custom definition to any node in the world and modify it dynamically just for that node |
19:20 |
celeron55 |
the branch is probably in my repo on github |
19:20 |
celeron55 |
https://github.com/celeron55/minetest/tree/meta_set_nodedef |
19:22 |
celeron55 |
frankly it's a pretty interesting PoC, that's why i've saved it |
19:23 |
celeron55 |
it's from 2012 though, i don't remember whether we even had nodeboxes back then |
19:23 |
celeron55 |
with what today's node definitions can do, or even combining dynamic media with node meshes, it could get wild |
19:30 |
erle |
i have the feeling there is this specific threshold of simplicity that is somewhere |
19:30 |
erle |
and i do not know if it is on the other side or not |
19:30 |
erle |
btw, neat: https://garrit.xyz/posts/2023-11-01-tracking-sqlite-database-changes-in-git |
19:34 |
|
sparky4 joined #minetest |
19:50 |
|
fling joined #minetest |
19:50 |
copygirl |
Are node IDs 16 bit? So you can have 65000-ish of them? |
19:52 |
MTDiscord |
<wsor4035> half that |
19:52 |
MTDiscord |
<wsor4035> the other half is reserved for unknowns |
19:52 |
copygirl |
Unknowns? |
19:52 |
MTDiscord |
<wsor4035> when you remove a mod, whats left behind |
19:53 |
|
Sobinec joined #minetest |
19:56 |
erle |
these are known unknowns, things we know we don't know |
19:56 |
erle |
copygirl so what is your funny mod that generates lots of nodes? |
19:56 |
erle |
i am disappoint i can not make a node for each unicode character hahahahaha |
19:57 |
erle |
(i will not do that though) |
19:57 |
erle |
(inventory rendering would heat my computer into plasma) |
19:57 |
copygirl |
A multipart / microblock mod. |
19:58 |
|
appguru joined #minetest |
19:58 |
erle |
how small are the microblocks though |
19:59 |
copygirl |
Slabs, panels, posts, ... more like RedPower 2 if anyone remembers that, rather than, say, chisel and bits. |
20:00 |
copygirl |
If I was able to, I would love to pour concrete inside a block enclosed with panels for example, but I'll likely limit things to 1 material per node. |
20:02 |
copygirl |
Is Minetest's lighting propagation per-side? |
20:02 |
copygirl |
So can a slab let light through horizontally, but block it vertically (depending on whether it's a top or bottom slab). |
20:05 |
sfan5 |
it can't |
20:07 |
erle |
> limit things to 1 material per node |
20:07 |
erle |
how far can you fake this hehe |
20:44 |
|
fluxionary joined #minetest |
20:49 |
|
lemonzest joined #minetest |
21:30 |
|
v-rob joined #minetest |
21:34 |
|
fluxionary joined #minetest |
22:00 |
|
fluxionary joined #minetest |
23:29 |
|
sparky4 joined #minetest |
23:34 |
|
panwolfram joined #minetest |