(September 2019) Monthly WIP Screenshot Thread

In honor of the 20th anniversary of the original Tony Hawk’s Pro Skater I present to you a physically simulated Kickflip from my skateboarding game prototype (exported using the games own GIF exporter):


https://sebastianpauli.net/download/SkateGame_Replay_20190901_edit.gif

Edit: Somehow the animated GIF is not embedded in my post. I couldn’t directly drag it into the post because it’s bigger than 50kb so I had to link it from my webspace. How can I embed an animated GIF from a URL?

Edit: solved…

7 Likes

Does your domain reject image hotlinking?

Imgur

2 Likes

After spending a bit too much time in VRChat and exploring Hyrule in BoTW lately, I decided to give a toon shader a shot. Looks pretty great when I manage to find a model with not too realistic textures.

Standard PBR Gecko Mage:

With my toon shader:

(model from sketchfab RPG Reptile Mage - Download Free 3D model by fongoose (@fongoose) [0641cc1] - Sketchfab)

Overall pretty happy with it, gotta fix some too dark shadows around the edges add skinning and shadow support to it and then I’ll probably be done.

12 Likes

Thanks for the hint. But the problem was actually that I did not link to the https version of the URL and the browser was complaining about some security stuff… :see_no_evil:

still WIP(a lot to do), but looks nice already. thanks Discord people for some help :slight_smile:

its about:

17 Likes

That is pretty slick! I’ll be interested in seeing where you go with it.

1 Like

My first working PBR test!
Untitled

Sorry for the poor quality image, this forum has issues with normal sized images.

3 Likes

you can use imgur.com and paste link.

anyway what is this? :slight_smile:

2 Likes

The shield from here: Greek God Outfit for Genesis 3 Male(s) | 3D Models and 3D Software by Daz 3D
Still playing with getting it to render correctly, I have a feeling that I do not have my materials mapped correctly.

2 Likes

PBR require some knowledge, had same problems get it work on start :smiley:

LightProbe you have there?

first step i would try set metallic = 1, roughness = 0 and see if it reflect probe.

1 Like

Well, that certainly is interesting:

This is Metallic 1, and Roughness 0.
This is my light probe code, it is based on the jme example.

@Override
    protected void initialize(Application a) {
        app = (SimpleApplication) a;

        //Light
        dl = new DirectionalLight();
        dl.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());
        app.getRootNode().addLight(dl);
        dl.setColor(ColorRGBA.White);

        //Filter
        fpp = new FilterPostProcessor(app.getAssetManager());
        fpp.addFilter(new ToneMapFilter(Vector3f.UNIT_XYZ.mult(4.0f)));
        app.getViewPort().addProcessor(fpp);

        //Env Cam
        envCam = new EnvironmentCamera(256, new Vector3f(0, 3f, 0));
        app.getStateManager().attach(envCam);
        
        //Done
        initilized = true;
    }
@Override
    public void update(float tpf) {
        if (probing) {
            renderSteps++;
            if (renderSteps == 2) { //Give the scene a frame to update
                world = (Node) app.getRootNode().getChild("world");
                world.removeFromParent();
                probe = LightProbeFactory.makeProbe(app.getStateManager().getState(EnvironmentCamera.class), app.getRootNode(), new JobProgressAdapter<LightProbe>() {

                    @Override
                    public void done(LightProbe result) {

                    }
                });
                ((SphereProbeArea) probe.getArea()).setRadius(100);
                app.getRootNode().addLight(probe);
            } else if (renderSteps > 10) {
                app.getRootNode().attachChild(world);
                probing = false;
            }
        }
    }

yes, definetly something is wrong, let me think…

1 Like

This is where I create the model

@Override
    public void simpleInitApp() {
        stateManager.attach(new JmeLightingState());

        gen = new ModelMeta(assetManager);
        gen.loadModel("Models/test/test_object.gltf");
        HashMap<String, String> textures = new HashMap<>();
        textures.put("MetallicMap", "Textures/test/mGGShield01S.jpg");
        textures.put("RoughnessMap", "Textures/test/mGGShield01B.jpg");
        textures.put("NormalMap", "Textures/test/mGGShield01N.jpg");
        textures.put("BaseColorMap", "Textures/test/mGGShield01.jpg");
        for (String mesh : gen.getMeshNames()) {
            gen.setPBRMaterial(mesh, textures, false);
        }

        Spatial sky = SkyFactory.createSky(assetManager, "Textures/test/Path.hdr", SkyFactory.EnvMapType.EquirectMap);
        rootNode.attachChild(sky);

        Spatial model2 = gen.getModel();
        world.attachChild(model2);

        stateManager.attach(gen.getDebug());
        stateManager.attach(new ItemGUI(gen));

        flyCam.setDragToRotate(true);

        Node target = new Node("CamTarget");
        target.move(0, 0, 0);

        rootNode.attachChild(world);

        initInputs();
    }

2 questions:

  • do this lightProbe generate multiple times? or just once. (lets say you generate it after first time, then it will reset before generating again so no effect)
  • is radius 100 enough for sure? what is location of this probe? 0,0,0?

as i see both Lightprobe, and envmap generation is done on app.getRootNode() so it should be fine for this case.

myself i have some class to “reupdate light probe on require” and i use something like this(on some later frames like you did):

private void updateLightProbe() {
    Vector3f vector = followSpatial != null ? followSpatial.getLocalTranslation() : followVector;
    environmentCamera.setEnabled(true);
    environmentCamera.setPosition(vector);
    if(lightProbe == null){ //todo tmp code, inner is broken - work wrong
        final LightProbe lastLightProbe = lightProbe;
        lightProbe = LightProbeFactory.makeProbe(environmentCamera, viewNode, new JobProgressAdapter<LightProbe>() {
            @Override
            public void done(LightProbe result) {
                LOGGER.log(Level.INFO, "updateLightProbe() make Probe done");
                //Node tex = EnvMapUtils.getCubeMapCrossDebugViewWithMipMaps(result.getPrefilteredEnvMap(), assetManager);
                //((BoundingSphere) lightProbe.setAreaType(LightProbe.AreaType.Spherical)).setRadius(radius);
                lightProbe.setAreaType(LightProbe.AreaType.Spherical);
                lightProbe.getArea().setRadius(radius);
                if(lastLightProbe != null){
                    lastLightProbe.setEnabled(false);
                    probeNode.removeLight(lastLightProbe);
                }
                lightProbe.getColor().multLocal(0.2f);
                lightProbe.setPosition(vector);
                probeNode.addLight(lightProbe);
                LOGGER.log(Level.INFO, "generated and re-attatched lightprobe light");
                environmentCamera.setEnabled(false);
                isReady = true;
            }
        });
    }
}

maybe it will help you somehow too.

edit:

for further discussion lets create new topic or PM :slight_smile:

edit:

oh i just now noticed, the yellow ball is shield not sphere right?

so it looks like reflection works correctly, but for some reason envmap is “yellow”. do you maybe have yellow background before you generate skybox? or something like this? there is something wrong with envmap i think.

The best way to solve this would be anyway copy paste JME PBR Test, add your model there and slowly add your changes to see what cause problem.

1 Like

A much better PRB render :smiley:

11 Likes

nice!

but why 19 fps :frowning: is this screenshot area taker that freeze app making it low?

or is it just that low? if it is, then this shield would need have like milions of tris.

Nah, the windows snipping tool freezes the screen and does that. This is running at about 3100 fps on my 1080ti.

2 Likes

At last there’s a Minie demo that uses V-HACD…

15 Likes

Bugs in progress.

7 Likes