(October 2018) Monthly WIP & Screenshot thread


#30

I know it wasn’t the point of the post at all, but the thing i liked most from the video (everything looks amazing btw) was the mirror on the tree :smiley: very good feel to it.


#31

Thanks :slightly_smiling_face: The quest is still incomplete, but eventually the player will have to rescue other elves who are trapped inside the tree behind the mirror.


#32

finished this guy

I also got a dedicated game server list going off the steam master servers… Getting very close to releasing this thing on steam and starting a new game!


#33

That robot, it fits spot on!


#34

Looks awesome dude! That gun is really really cool.


#35

Here’s a 3-minute video demo of my current WIP, called DynamicAnimControl:

It’s intended to replace KinematicRagdollControl.

DynamicAnimControl is included in the open-source Minie library, which is part of my Jme3-utilities project: https://github.com/stephengold/jme3-utilities

https://github.com/stephengold/Minie

Source for the demo app is at https://github.com/stephengold/jme3-utilities/blob/master/tests/src/main/java/jme3utilities/minie/test/TestDac.java

https://github.com/stephengold/Minie/blob/master/MinieExamples/src/main/java/jme3utilities/minie/test/TestDac.java


Introducing DynamicAnimControl
#36

This is exactly what I was looking for! Thanks so much!


#37

Wow looks amazing! I’m excited to give it a try.


#38

The elephant is very effective. Jaime made me feel sad. :slight_smile:


#39

Very cool. Looking at your work you can see that you take nothing for granted and take the time to understand exactly what you’re doing. It’s clearly paying dividends. Much love <3


#40

Thanks.

Perhaps I should send Jaime some more balloons… :wink:


#41

I welcome any constructive feedback. However, the API is still unstable.
I’ll issue a call for testers once the API settles down.


#42

Nice work @sgold
Last time I tried KinematicRagdollControl result looked so buggy, with DynamicAnimControl it looks much better now.

Thanks for your contribution.


#43

Trying out various isosurface generators, not quite the result i’d hoped really. I kinda wanted somewhere near a good third in reduction. Total saving: a whopping 1362 verts for a 128x128x128 chunk - in all the data I found it promised a bigger reduction than that. I guess it shows that proof overpowers whatever you want to believe. Results are pretty much blanket for any dataset :confused:

Marching Cubes: 34,860 verts
SurfaceNets: 33,498 verts

MarchingCubes

SurfaceNets


#44

And depending on whether those flat areas should be flat or not… one of these is not as good as the other.


#45

yup, exactly same dataset, the “flat” area is just:

if (loc.y <= 1) {
    return 1.0f;
}

to give it a floor instead of an empty hole. I don’t understand how the algorythm works entirely, I just converted it from javascript, so I don’t really understand that either tbh… It’s definitely not just bad normal data, there are genuine movements in the mesh. Pff. Enough for one day…


#46

I was always felt like marching cubes was ripe for some post-processing to reduce triangles… certainly for farther away chunks but even for near chunks. I felt like the general overall regularity of the subdivisions along cube boundaries should make it easy to join shapes.

…but even still, for flat areas I would think there must be something to reduce polys.


#47

GPU gems describes increasing the block size as opposed to actual LOD, or scaling for want of a better description. It does work, but you end up with small chunks surrounded by ever growing sized ones, and although I haven’t put it into practice (I got sidetracked with alternate methods) it seems that the overhead of generating them might make the load-time pretty bad. I’ll have to do a practical before I can say for definite… This is the mock-up I made to work from. If I move outside my dead zone imagine how much data I’d have to gen. I feel like apologizing to my CPU :confused:

        /*

            The four "center" squares in our setup are going to be our "dead zone".
            Only when we move out of the dead zone do we update our scene.

            +----------------+-------------------+------------------+----------------+
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            +----------------+---------+---------+---------+--------+----------------+
            |                |         |         |         |        |                |
            |                |         |         |         |        |                |
            |                |         |         |         |        |                |
            |                +---------+----+----+----+----+--------+                |
            |                |         |    |    |    |    |        |                |
            |                |         +----+----+----+----+        |                |
            |                |         |    | DZ | DZ |    |        |                |
            |----------------+---------+----+----+----+----+--------+----------------+
            |                |         |    | DZ | DZ |    |        |                |
            |                |         +----+----+----+----+        |                |
            |                |         |    |    |    |    |        |                |
            |                +---------+----+----+----+----+--------+                |
            |                |         |         |         |        |                |
            |                |         |         |         |        |                |
            |                |         |         |         |        |                |
            +----------------+---------+---------+---------+--------+----------------+
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            |                |                   |                  |                |
            +----------------+-------------------+------------------+----------------+

         */

#48

This topic may deserve its own thread.

In my experience, the GPU gems approach only works well with fairly regular terrain… and even then not great. You can also tweak a bit the surfacing threshold but that also comes with some artifacts.

But one of the things I always wanted to look into was just getting rid of the nearly degenerate triangles for a mid-range LOD. There are already reasonably easy to detect during the generation phase because they are close to edges/corners… and it feels like there are a lot of them.

For the larger flatish zones, I always wondered if during triangle emission we could collect similar surfaces like used in the greedy block meshing (similar normal + similar origin distance along normal)… then go triangles -> polygon -> simpler triangles. Trick is doing it fast enough and without blowing out memory… which is already kind of an issue for this algorithm anyway.


#49

Known issue - streamable blocks embedding videos using the “standard” URL, which is what the one-boxer sees. It probably plays a few times before it realizes that it’s getting multiple hits from a web-server.