Time |
Nick |
Message |
00:18 |
|
paramat joined #minetest-dev |
00:19 |
paramat |
i decided to go ahead with #2720 will push very soon. note i am changing humidity octaves to 3 and persistence to 0.5 for fewer tiny jungle biome bubbles |
00:19 |
ShadowBot |
https://github.com/minetest/minetest/issues/2720 -- Mgv6: Enable snowbiomes by default. Double biome noise spread. by paramat |
01:00 |
|
Wayward_Tab joined #minetest-dev |
01:03 |
|
Miner_48er joined #minetest-dev |
01:06 |
paramat |
now pushing |
01:11 |
paramat |
complete |
01:19 |
hmmmm |
see? biome bubbles are why I prefer minecraft's biome shape |
01:21 |
paramat |
i don't mind a few, an occasional one is cute. lower octaves and persistence helps to reduce their number |
01:22 |
hmmmm |
yeah that also makes biomes... square |
01:22 |
hmmmm |
rather, that predictable off-center blob shape |
01:22 |
hmmmm |
it's a natural side effect of easeCurve + bilinear interpolation |
01:23 |
paramat |
that's very noticeable with < 3 octaves |
01:23 |
hmmmm |
see |
01:23 |
hmmmm |
this is why I wanted to check out cubic interpolation |
01:24 |
sofar |
paramat: which mapgen has your changes? v6 ? |
01:26 |
paramat |
yes |
01:27 |
paramat |
it has kick-ass big jungles now |
01:27 |
|
Hijiri joined #minetest-dev |
01:29 |
sofar |
it's creating tunnels underwater? |
01:34 |
paramat |
that's probably a previous bug |
01:34 |
paramat |
um.. 'characteristic' |
01:35 |
sofar |
lol |
01:35 |
paramat |
i've noticed v6 jungles get very thick and dark sometimes, now they're larger they're a real adventure, instead of pathetic 60 node-wide patches |
01:35 |
* sofar |
cant find snow |
01:36 |
paramat |
might need to travel 1kn |
01:36 |
paramat |
or more |
01:37 |
|
Hijiri joined #minetest-dev |
01:48 |
paramat |
you need to start a new world and make sure you don't have 'mgv6_spflags = nosnowbiomes' in .conf. the underwater tunnels are i think air-dungeons forming |
01:49 |
sofar |
oh, that's on by default |
01:51 |
sofar |
huh |
01:51 |
sofar |
something put it back, too |
01:54 |
sofar |
ugh |
01:54 |
sofar |
something keeps putting the "nosnowbiomes" param back in there |
01:54 |
sofar |
paramat: ? |
01:58 |
|
paramat joined #minetest-dev |
01:59 |
sofar |
paramat: can't find snow... had a hard time removing nosnowbiomes, and now I get this: |
01:59 |
sofar |
http://i.imgur.com/BVlwbOX.png |
02:00 |
sofar |
maybe my minetest_game is old |
02:00 |
* sofar |
pulls |
02:01 |
sofar |
ahh that did the trick |
02:01 |
sofar |
paramat: looks great! |
02:05 |
sofar |
http://i.imgur.com/LAb2xuT.jpg |
02:07 |
paramat |
oh yes, need latest MTGame *=/ |
02:08 |
|
Hijiri joined #minetest-dev |
03:09 |
|
Wayward_Tab joined #minetest-dev |
03:37 |
|
deltib joined #minetest-dev |
03:52 |
|
RealBadAngel joined #minetest-dev |
04:32 |
|
RealBadAngel joined #minetest-dev |
05:43 |
|
Hunterz joined #minetest-dev |
05:47 |
|
Hunterz joined #minetest-dev |
05:51 |
|
cd2 joined #minetest-dev |
05:51 |
cd2 |
heyo :D |
05:52 |
est31 |
hi |
06:57 |
|
err404 joined #minetest-dev |
06:57 |
|
Hunterz joined #minetest-dev |
07:38 |
|
Puma_rc joined #minetest-dev |
07:40 |
|
Calinou joined #minetest-dev |
08:05 |
|
Yepoleb joined #minetest-dev |
09:05 |
|
Darcidride joined #minetest-dev |
10:02 |
|
cib0 joined #minetest-dev |
10:07 |
|
crazyR joined #minetest-dev |
10:20 |
|
FR^2 joined #minetest-dev |
10:47 |
|
chchjesus joined #minetest-dev |
11:20 |
|
est31 joined #minetest-dev |
11:31 |
|
Amaz joined #minetest-dev |
11:32 |
|
Player_2 joined #minetest-dev |
12:00 |
|
proller joined #minetest-dev |
12:04 |
|
cib_ joined #minetest-dev |
12:10 |
|
Darcidride joined #minetest-dev |
12:40 |
|
err404 joined #minetest-dev |
13:11 |
|
err404 joined #minetest-dev |
13:30 |
|
rom1504 joined #minetest-dev |
13:31 |
|
err404 joined #minetest-dev |
13:32 |
|
Darcidride joined #minetest-dev |
13:35 |
|
LittleJoe joined #minetest-dev |
13:37 |
|
Wayward_Tab joined #minetest-dev |
14:10 |
|
Darcidride joined #minetest-dev |
14:11 |
|
cib0 joined #minetest-dev |
14:35 |
|
hmmmm joined #minetest-dev |
14:42 |
|
proller joined #minetest-dev |
15:05 |
|
proller joined #minetest-dev |
15:09 |
RealBadAngel |
https://github.com/RealBadAngel/minetest/tree/minimap3 |
15:09 |
RealBadAngel |
if somebody wants to try minimap progress |
15:10 |
RealBadAngel |
only config option is minimap_shape_round = true/false |
15:11 |
|
Wayward_Tab joined #minetest-dev |
15:14 |
|
Hijiri joined #minetest-dev |
15:17 |
|
proller joined #minetest-dev |
15:21 |
|
Wayward_Tab joined #minetest-dev |
15:21 |
|
rainsford joined #minetest-dev |
15:22 |
|
rainsford left #minetest-dev |
15:30 |
hmmmm |
hrmm let's see this minimap |
15:31 |
hmmmm |
a thread |
15:31 |
hmmmm |
there's a new thread!??! |
15:32 |
|
proller joined #minetest-dev |
15:32 |
hmmmm |
hrmm I need to take a better look at this but my hope was that this could be done without introducing more client-side contention |
15:34 |
hmmmm |
there's no locking done at all? |
15:35 |
hmmmm |
the only way this isn't crashing is through pure luck |
15:35 |
hmmmm |
also wtf is the "minimap mode"? |
15:37 |
celeron55 |
umm |
15:37 |
celeron55 |
i started reading this too and noticed the same thing |
15:37 |
celeron55 |
there is no locking at all when reading the client's map from a thread |
15:39 |
hmmmm |
okay, the particulars of the code are a little sloppy but nothing that can't be fixed |
15:39 |
hmmmm |
is having a separate minimap thread the optimal approach, though? |
15:39 |
hmmmm |
what if we throw this into the client step |
15:39 |
hmmmm |
also i personally feel like 10ms is a bit too short of an update time |
15:40 |
celeron55 |
do you mean 100ms |
15:40 |
hmmmm |
why? |
15:40 |
celeron55 |
what's how long it sleeps |
15:40 |
hmmmm |
it says sleep_ms(10); in minimap.cpp line 73 |
15:40 |
celeron55 |
what's* |
15:41 |
celeron55 |
https://github.com/RealBadAngel/minetest/blob/minimap3/src/minimap.cpp#L74 |
15:41 |
celeron55 |
i wonder what version you are reading |
15:41 |
hmmmm |
an older version |
15:41 |
hmmmm |
he changed it in the commit at HEAD |
15:42 |
hmmmm |
woops |
15:42 |
hmmmm |
i dunno, celeron, what do you think about having the minimap in a separate thread? |
15:43 |
celeron55 |
i think if this was run in the render thread the x*z loop would have to be paused between frames and done in multiple parts that way; i feel it's not going to be (and shouldn't need to be) fast enough to be run within a single frame |
15:43 |
celeron55 |
if it would be fast enough to run within a single frame, then it should be split so that we can have larger map areas |
15:43 |
hmmmm |
why, because the nodes could have updates throughout the render thread? |
15:44 |
celeron55 |
no but because it's a rather heavy operation to find the ground level for tens of thousands or more positions |
15:45 |
hmmmm |
oh, that is true |
15:45 |
|
rubenwardy joined #minetest-dev |
15:45 |
celeron55 |
frametime jitter is a terrible and embarrassing thing to have, especially if it was due to a thing like this |
15:45 |
hmmmm |
didn't think of that |
15:47 |
celeron55 |
i |
15:48 |
celeron55 |
i'm also not sure at all that these irrlicht texture operations that are being done in the thread are actually thread-safe |
15:48 |
celeron55 |
the image ones are re-entrant as far as i know (i don't know if they are specified to be, but they likely are), but when you create an image from a texture, that might go on scarier territory |
15:48 |
celeron55 |
dunno |
15:49 |
hmmmm |
good to note |
15:50 |
celeron55 |
it might also be platform dependent or whatever; i'm pretty sure irrlicht was never designed to run at all in multiple threads so it's up to us to figure out what can be done and what cannot |
15:50 |
hmmmm |
another thing |
15:51 |
hmmmm |
all of the ground levels are recalculated every getMap() call |
15:51 |
hmmmm |
since users are most likely walking from one place to another, shouldn't there be a heightmap cache |
15:54 |
celeron55 |
probably, altough i don't think the performance should be dependent on it |
15:54 |
RealBadAngel |
hmmm, thread and mapper share their data and trigger events between them, so no crashing possible, its no luck |
15:55 |
celeron55 |
oh god |
15:55 |
RealBadAngel |
also whole scan have to be completed each time, theres no fixed ground level for surface scanner |
15:56 |
celeron55 |
i'm 100% sure that kind of synchronization has subtle bugs in it |
15:56 |
RealBadAngel |
had, ive eliminated them ;) |
15:56 |
|
MinetestForFun joined #minetest-dev |
15:56 |
RealBadAngel |
simply, if scan is not complete draw cannot pick another frame |
15:57 |
celeron55 |
i wonder if minetest runs cleanly enough in helgrind or drd for checking things like this |
15:57 |
|
TheWild joined #minetest-dev |
15:57 |
celeron55 |
it might not |
15:57 |
RealBadAngel |
anyway i may change it, never touched threads before |
16:00 |
rubenwardy |
How to use minimap? |
16:00 |
RealBadAngel |
press f9 |
16:00 |
rubenwardy |
awesome |
16:00 |
RealBadAngel |
it looks better with shaders ;) |
16:01 |
rubenwardy |
is that not in minimap3? |
16:01 |
RealBadAngel |
it is there |
16:02 |
RealBadAngel |
also in config: minimap_shape_round = true/false |
16:04 |
rubenwardy |
shape_round also affects the behaviour when rotating, it seems |
16:05 |
RealBadAngel |
yes, shadows are dynamic then |
16:05 |
RealBadAngel |
and theres no player marker |
16:06 |
rubenwardy |
quite weird behaviour underground |
16:06 |
rubenwardy |
no player marker, and the thing spins, which is cool |
16:07 |
rubenwardy |
I guess radar is recommended for underground |
16:07 |
RealBadAngel |
exactly |
16:07 |
RealBadAngel |
it scans for air nodes and count them, so more air, px on the map is more green |
16:08 |
RealBadAngel |
i found that works pretty good when digging tunnels |
16:08 |
rubenwardy |
I'd like to see a player marker on the circle map - just a dot - it's hard to judge exactly where you are |
16:08 |
rubenwardy |
That was probably badly worked |
16:08 |
RealBadAngel |
always in the middle |
16:08 |
rubenwardy |
* worded |
16:09 |
rubenwardy |
Yeah, but it's human eyes are weird with judges halfs |
16:09 |
rubenwardy |
It's not required |
16:09 |
RealBadAngel |
also do notice that marker occupies the middle, it could be hard to see nodes you are placing |
16:09 |
VanessaE |
player marker on the circular map can be done - as soon as RealBadAngel is able to again use the texture I created ;) |
16:10 |
rubenwardy |
A pixel |
16:10 |
rubenwardy |
Yeah, digging is quite cool |
16:10 |
VanessaE |
a 5x5 crosshair with an empty center pixel. maybe. |
16:10 |
RealBadAngel |
you can do that with overlay texture |
16:11 |
RealBadAngel |
so its up for texture pack |
16:11 |
hmmmm |
RealBadAngel, what do you mean by this [11:56 AM] <RealBadAngel> simply, if scan is not complete draw cannot pick another frame |
16:12 |
RealBadAngel |
it locks itself, data cannot be grabbed if scan is not done |
16:13 |
rubenwardy |
Sounds logical. Like a buffer locking, if it's not finished the reader just keeps reading from the old. |
16:13 |
rubenwardy |
* double buffer |
16:13 |
RealBadAngel |
scanner work on images |
16:13 |
hmmmm |
i don't see where this happens |
16:13 |
RealBadAngel |
not threaded part uses textures |
16:14 |
RealBadAngel |
first of all, getMap gets copies of parameters so changes during scan doesnt affect scanner |
16:14 |
hmmmm |
okay, that's fine |
16:15 |
RealBadAngel |
when its done it changes image_grabbed flag |
16:15 |
RealBadAngel |
so draw code can pick another frame |
16:15 |
RealBadAngel |
if theres no new frame ready, draw uses old one |
16:15 |
rubenwardy |
Would it be possible to hide jolting (ie, on mine when walking the map only moves every 1/10 or a second) by moving where the texture is drawn, if the minimap takes too long? |
16:16 |
hmmmm |
hrmm |
16:16 |
|
cib0 joined #minetest-dev |
16:16 |
rubenwardy |
I probably misunderstand how it's done. |
16:16 |
hmmmm |
I am not understanding how this works |
16:16 |
RealBadAngel |
on my box i do get minimap fps like half of overall fps |
16:17 |
RealBadAngel |
in 256x256 mode |
16:17 |
RealBadAngel |
in others scanner is faster than 60fps |
16:17 |
|
selat joined #minetest-dev |
16:17 |
hmmmm |
what thread is Mappger::getMinimapTexture() called in? |
16:18 |
RealBadAngel |
main |
16:18 |
rubenwardy |
Is the minimap constantly updating, and the jolting is when it finishes a tick? Or does it sleep? |
16:18 |
rubenwardy |
Maybe I should just read the code, lol. :P |
16:18 |
hmmmm |
somehow I wonder if uploading a texture every 100 ms is a good thing |
16:19 |
RealBadAngel |
huh its done everywhere |
16:19 |
RealBadAngel |
each frame |
16:19 |
RealBadAngel |
rendering to textures for example |
16:19 |
hmmmm |
so getMinimapTexture only swaps the texture if image_grabbed is false |
16:20 |
hmmmm |
those are cached |
16:20 |
hmmmm |
image_grabbed is sort of misleading |
16:20 |
hmmmm |
more like... "minimap_texture_invalidated" |
16:20 |
RealBadAngel |
could be named better ;) |
16:21 |
RealBadAngel |
also about thread, only getMap will remain there |
16:21 |
RealBadAngel |
i already moved getColorFromId from runtime |
16:22 |
RealBadAngel |
so thread will work only on open images and will create just one new image each run |
16:22 |
hmmmm |
so I don't understand how the whole image_grabbed thing prevents a race condition |
16:25 |
RealBadAngel |
if false, it cannot start new scan |
16:25 |
RealBadAngel |
ooops |
16:25 |
RealBadAngel |
hold on a sec, i will make a diagram |
16:26 |
hmmmm |
it doesn't matter, it doesn't need a diagram |
16:26 |
hmmmm |
the fact remains that any other thread can access map and not respect this image_grabbed variable at all |
16:26 |
hmmmm |
unless i'm totally mistaken, you're depending upon the order in which things happen inside of the render thread |
16:27 |
celeron55 |
and likely the duration of things too |
16:28 |
hmmmm |
this is remarkably fragile code... |
16:28 |
hmmmm |
RealBadAngel, even if I'm totally wrong, what's the cost of adding uncontended locks around map accesses? |
16:28 |
hmmmm |
70 nanoseconds? |
16:29 |
hmmmm |
the texture locks are a bit more subtle, however... |
16:31 |
RealBadAngel |
scanner cant make new scan if old one is not used, renderer cannot pick incomplete scan for texture, wheres depending on duration there? |
16:31 |
RealBadAngel |
theres no such thing in whole code |
16:33 |
RealBadAngel |
hmmmm, and i dont depend on order of anything |
16:33 |
RealBadAngel |
if renderer doesnt have new frame it will try next time |
16:33 |
RealBadAngel |
otherwise old texture is used |
16:34 |
hmmmm |
I'm talking about map access here |
16:34 |
RealBadAngel |
here im not sure |
16:34 |
RealBadAngel |
i do copy blocks to vmanip |
16:35 |
RealBadAngel |
should i do that under locking? |
16:35 |
hmmmm |
YES..... |
16:35 |
RealBadAngel |
so why mapblock mesh updates doesnt do that? |
16:35 |
hmmmm |
i don't know |
16:35 |
hmmmm |
but it should |
16:35 |
celeron55 |
they copy their content to vmanips in the client thread |
16:35 |
celeron55 |
and then give the vmanips to the mesh thread |
16:35 |
|
Wayward_Tab joined #minetest-dev |
16:36 |
celeron55 |
you can do the same thing here if you want and if it's fast enough |
16:36 |
hmmmm |
in any case, image_grab needs to be volatile |
16:38 |
RealBadAngel |
celeron55, i can move copying to main, no problem |
16:41 |
RealBadAngel |
hmmmm, that variable is the lock in fact, i can mention bout it in name |
16:42 |
RealBadAngel |
and i will do cleanin now, theres lotsa dead code in that branch |
16:43 |
RealBadAngel |
btw, have you guys checked the performance with minimap? |
16:43 |
RealBadAngel |
how it actually works for you? |
16:45 |
|
Hunterz joined #minetest-dev |
16:52 |
hmmmm |
also Mapper::setPos() has a potential race condition |
16:52 |
RealBadAngel |
doesnt have |
16:52 |
RealBadAngel |
getMap works on copies of parameters |
16:53 |
RealBadAngel |
on the next run it will get updated pos |
16:53 |
RealBadAngel |
same applies to mode |
16:54 |
RealBadAngel |
you can check that when flying fast and 256x256 map |
16:54 |
RealBadAngel |
scanner stays a little behind the player |
16:55 |
RealBadAngel |
not much but thats visible (at least on my box) |
16:56 |
hmmmm |
they might not be updated before they're copied |
16:56 |
hmmmm |
this is why they need to be volatile |
16:57 |
VanessaE |
actually it works just fine in practice. |
16:57 |
hmmmm |
yes, but we are not concerned about "in practice" |
16:57 |
hmmmm |
we need to worry about what can happen in theory, because what can happen will happen |
16:57 |
VanessaE |
fair enough |
16:59 |
RealBadAngel |
if its locked it cant do anything |
16:59 |
RealBadAngel |
scanner cannot scan, renderer cannot pick incomplete data |
16:59 |
hmmmm |
RealBadAngel, yes it can |
16:59 |
hmmmm |
do you not realize that compilers sometimes reorder operations? |
17:00 |
RealBadAngel |
how they can reorder variable value? |
17:00 |
RealBadAngel |
its the condition for all the actions here |
17:00 |
hmmmm |
read about this http://preshing.com/20120515/memory-reordering-caught-in-the-act/ |
17:01 |
RealBadAngel |
ok |
17:01 |
hmmmm |
what you think is thread safe really is not |
17:01 |
hmmmm |
you need to worry about not only atomicity, but also memory access reordering |
17:02 |
hmmmm |
so you have in one thread |
17:02 |
hmmmm |
texture = mapper.getMinimapTexture(); .... mapper.setPos(newpos); |
17:03 |
hmmmm |
image_grabbed = true, so the thread starts to call getMap() |
17:03 |
hmmmm |
and it copies over the parameters |
17:03 |
hmmmm |
well it just so happens that newpos didn't completely finish writing to data->pos, it's only half written |
17:04 |
hmmmm |
so your old position was (200, 0, 400) or something and the new position is (4000, 30, 12) |
17:04 |
hmmmm |
it only had time to write 2 of the 4 16-bit numbers within that access |
17:04 |
hmmmm |
so it ends up being, say... (200, 30, 12) |
17:05 |
hmmmm |
and the same thing with mode too |
17:05 |
hmmmm |
assuming that accesses to variables of type bool are atomic on our supported platforms is pretty fair |
17:05 |
RealBadAngel |
hold on a sec |
17:05 |
hmmmm |
but a v3s16 is NOT ATOMIC on any of our platforms |
17:05 |
hmmmm |
it simply isn't |
17:06 |
RealBadAngel |
only thing that can trigger something here is that flag |
17:06 |
RealBadAngel |
before it gets written nothin can happen |
17:06 |
hmmmm |
I just explained in great detail how this race condition happens |
17:07 |
hmmmm |
and then you handwave it away with "but the flag is there!" |
17:07 |
RealBadAngel |
im just trying to understand hows that possible |
17:07 |
hmmmm |
read what i wrote again, carefully |
17:13 |
RealBadAngel |
ok, so it may happen. whats your suggestion to prevent that? |
17:13 |
hmmmm |
locking |
17:16 |
|
ElectronLibre joined #minetest-dev |
17:26 |
|
Krock joined #minetest-dev |
17:28 |
RealBadAngel |
hmmmm, any examples? |
17:45 |
|
Wayward_Tab joined #minetest-dev |
17:47 |
RealBadAngel |
hmmmm, from what i read it seems like converting v3s16 to three atomic ints would do the trick and have lock-free code |
18:07 |
Krock |
hmmmm, Is it thought to be changed like this? https://github.com/SmallJoker/yappy/commit/1f0b |
18:08 |
Krock |
(Talking about the memory efficiency improvements) |
18:11 |
|
TheWild joined #minetest-dev |
18:19 |
|
cib0 joined #minetest-dev |
18:21 |
|
err404 joined #minetest-dev |
18:25 |
|
Wayward_Tab joined #minetest-dev |
18:33 |
|
Wayward_Tab joined #minetest-dev |
18:36 |
|
hmmmmm joined #minetest-dev |
18:39 |
|
nore joined #minetest-dev |
18:40 |
|
LittleJoe1 joined #minetest-dev |
18:41 |
|
TheWild joined #minetest-dev |
18:42 |
|
Hijiri joined #minetest-dev |
19:14 |
|
EvergreenTree joined #minetest-dev |
19:29 |
|
err404 joined #minetest-dev |
19:42 |
|
Hijiri joined #minetest-dev |
19:50 |
|
TheWild joined #minetest-dev |
19:52 |
|
Wayward_Tab joined #minetest-dev |
19:58 |
|
proller joined #minetest-dev |
20:28 |
|
paramat joined #minetest-dev |
20:28 |
|
paramat left #minetest-dev |
20:49 |
|
ElectronLibre left #minetest-dev |
20:57 |
|
Hijiri joined #minetest-dev |
21:09 |
|
Kray joined #minetest-dev |
21:54 |
|
Puma_rc joined #minetest-dev |
22:04 |
|
Hijiri joined #minetest-dev |
22:04 |
|
VargaD_ joined #minetest-dev |
22:19 |
|
cib0 joined #minetest-dev |
22:41 |
|
sofar joined #minetest-dev |
22:42 |
|
proller joined #minetest-dev |
23:00 |
|
proller joined #minetest-dev |
23:03 |
|
Hijiri joined #minetest-dev |
23:13 |
|
RealBadAngel joined #minetest-dev |