Instructional videos for wiki and jME promotion

The font is Foo.

http://www.dafont.com/foo.font

It is free for commercial use. :thumbsup:

Awesome,

Thanks @erlend_sh, I’ll d/l it. Working on a simple flash n fade, atm, whilst trying to get my brain wrangled from cleaning back over to coding.

Later on,
Charles

Please take note that the branding of the sdk has been updated on master:

Hey all,

Here’s something that just popped out the hatch. It’s my first shared Lightworks edit…

I slapped some stuff down, and here’s what came out. Thoughts?

edit: oh, and I have a wall paper for folks to enjoy from the final frames:

3 Likes

I dont get the reference if it is any :confused:

No reference, purely original.

It sometimes happens. :laughing:

Hey! Now that we have a fully accelerated MovieAppState, that video could become the “powered-by-jme.mp4” intro movie for games!

It needs some “powered by” and “platform/technology” and of course it should be shorter (I think that more than 5 seconds risks to be boring, it is intended to be showed every time you run a game). @erlend_sh ?

Nice idea, @Pesegato

I hadn’t planned on actually using that video as anything other than an amusing prototype… kind of like a drawing to put on the fridge for myself… I’m trying to cobble something together for the official intro for the jme video tutorial series.

I could whip up a prototype “powered by” 5 second video easily enough if that art style was nice. The main frame would probably be this one…

and I would probably make a 4:3 and 16:9 version rather than my monitor’s native 16:10, so that the boxing wouldn’t be so bad.

I give the call to y’all if you’d like one of those. Oh, and anyone who wants the master Gimp file used to make the vid, just let me know… I will put it on my google drive and share it.

Game on,
Charles

My suggestion for a logo would be a simpler approach,

My suggestion would be:
Logo+test static image
and like 15fps background glow images that just get switched.

All neatly packaged together in an appstate.

Pro: it could be somwhat small in size (~250kb)
maximum platform compability, as no special stuff apart from textures is used.

2 Likes

Yes, for an actual video game “powered by” type intro… the textured appstate with programmatic blending would be Ideal.

Here’s a set of pngs for folks to play with on that front…
The “Middleground” base:

The “Actual Art”:

and a couple of separate “Glow” effects, positioned correctly:

Total size: ~140kb for assets

Go play with it, and have fun. I’m heading back to my debug for DarkMonkey, today.

And let’s not forget the sound: I propose some “jungle” sound with monkeys screaming and bongo drums :chimpanzee_amused:

1 Like

Nay no sounds or only a small 3-10 note sound. It should not be annoying!.

I might take a look at that next week for the intro appstate.

Yup,
I’d also want a rather simple intro like a simple fade in and fade out of that plain “JmeTitle4a.png”.
Possibly in conjunction with a kick or some smash sound.

Of course you can always have some Credits AppState with some monkeys jumping over the screen or some crazy move, but if you are honest:

We all hammer ESC like idiots in order to skip that annoying intro.

So maybe some slight fading for a few seconds would be cool (but please make it disable-able using the AppSettings) .

I would just make it an appstate/or something similar. Then its up to the user to use it or not.

Deliverd as promised:

Now we just need a short small chime like sound for it?

package jme3.intro;

import jme3test.app.state.RootNodeState;

import com.jme3.app.Application;
import com.jme3.app.state.AppStateManager;
import com.jme3.material.Material;
import com.jme3.material.RenderState.BlendMode;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.renderer.queue.RenderQueue.Bucket;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Texture;

public class IntoAppState extends RootNodeState {
	public final static float	bgEnd		= 1f;
	public final static float	logoEnd		= 0.5f;
	public final static float	glow1		= 0.15f;
	public final static float	glow2		= 0.25f;
	public final static float	blendOut	= 1f;

	EIntroState					state		= EIntroState.Background;
	float						current		= 0;

	private Material			bgMat;
	private Material			logoMat;
	private Material			glowMat;
	private Material			glow2Mat;
	private AppStateManager		stateManager;
	private Application			app;
	private Material			blackBG;

	@Override
	public void initialize(AppStateManager stateManager, Application app) {
		super.initialize(stateManager, app);
		this.app = app;
		this.stateManager = stateManager;

		this.getRootNode().setQueueBucket(Bucket.Gui);

		this.blackBG = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		this.blackBG.setColor("Color", ColorRGBA.Black);

		this.bgMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		Texture backgroundTex = app.getAssetManager().loadTexture("Intro/back.png");
		this.bgMat.setTexture("ColorMap", backgroundTex);
		this.bgMat.setFloat("AlphaDiscardThreshold", 0.01f);
		this.bgMat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);

		this.logoMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		Texture logoTex = app.getAssetManager().loadTexture("Intro/logo.png");
		this.logoMat.setTexture("ColorMap", logoTex);
		this.logoMat.setFloat("AlphaDiscardThreshold", 0.01f);
		this.logoMat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);

		this.glowMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		Texture glowTex = app.getAssetManager().loadTexture("Intro/glow.png");
		this.glowMat.setTexture("ColorMap", glowTex);
		this.glowMat.setFloat("AlphaDiscardThreshold", 0.01f);
		this.glowMat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);

		this.glow2Mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		Texture glow2Tex = app.getAssetManager().loadTexture("Intro/glow2.png");
		this.glow2Mat.setTexture("ColorMap", glow2Tex);
		this.glow2Mat.setFloat("AlphaDiscardThreshold", 0.01f);
		this.glow2Mat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);

		int width = app.getCamera().getWidth();
		int height = app.getCamera().getHeight();

		Quad geometry = new Quad(width, height);

		Geometry bgQuad = new Geometry("Background", geometry);
		bgQuad.setMaterial(this.bgMat);
		bgQuad.setLocalTranslation(0, 0, 4);

		Geometry logoQuad = new Geometry("Logo", geometry);
		logoQuad.setMaterial(this.logoMat);
		logoQuad.setLocalTranslation(0, 0, 5);

		Geometry glowQuad = new Geometry("Glow", geometry);
		glowQuad.setMaterial(this.glowMat);
		glowQuad.setLocalTranslation(0, 0, 1);

		Geometry bg = new Geometry("Glow", geometry);
		bg.setMaterial(this.blackBG);
		bg.setLocalTranslation(0, 0, 0);

		Geometry glow2Quad = new Geometry("Glow2", geometry);
		glow2Quad.setMaterial(this.glow2Mat);
		glow2Quad.setLocalTranslation(0, 0, 2);

		this.bgMat.setColor("Color", new ColorRGBA(0, 0, 0, 0));
		this.logoMat.setColor("Color", new ColorRGBA(0, 0, 0, 0));
		this.glowMat.setColor("Color", new ColorRGBA(0, 0, 0, 0));
		this.glow2Mat.setColor("Color", new ColorRGBA(0, 0, 0, 0));

		app.getGuiViewPort().attachScene(this.getRootNode());

		this.getRootNode().attachChild(bg);
		this.getRootNode().attachChild(bgQuad);
		this.getRootNode().attachChild(logoQuad);
		this.getRootNode().attachChild(glowQuad);
		this.getRootNode().attachChild(glow2Quad);
	}

	@Override
	public void update(float tpf) {
		// System.out.println(tpf);
		// System.out.println(this.current);
		super.update(tpf);
		this.current += tpf;

		switch (this.state) {
		case Background:
			this.blend(IntoAppState.bgEnd, EIntroState.Logo, this.bgMat);
			break;
		case Glow1:
			this.blend(IntoAppState.glow1, EIntroState.Glow2, this.glowMat);
			break;
		case Glow2:
			this.blend(IntoAppState.glow2, EIntroState.END, this.glow2Mat);
			break;
		case Logo:
			this.blend(IntoAppState.logoEnd, EIntroState.Glow1, this.logoMat);
			break;
		case END:
			this.blendOut();
			break;
		}
	}

	private void blendOut() {
		float ratio = 1 - FastMath.clamp(this.current / IntoAppState.blendOut, 0, 1);

		this.blackBG.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		this.bgMat.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		this.logoMat.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		this.glowMat.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		this.glow2Mat.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		if (this.current > IntoAppState.blendOut) {
			this.app.getGuiViewPort().detachScene(this.getRootNode());
			this.stateManager.detach(this);
		}
	}

	private void blend(float endOfPart, EIntroState nextState, Material stateMat) {
		float ratio = FastMath.clamp(this.current / endOfPart, 0, 1);
		stateMat.setColor("Color", new ColorRGBA(ratio, ratio, ratio, ratio));
		if (this.current > endOfPart) {
			this.state = nextState;
			this.current = 0;
		}
	}

	private enum EIntroState {
		Background, Logo, Glow1, Glow2, END
	}

}
4 Likes

waiting for the tutorials :smile:

1 Like

@taintedpyro813
haha, yeah… I want to finish up the DarkMonkey debug, and get Iteag announced at the very least, then I’ll get with @normen on where he’d like to start with the whole series…

@Empire_Phoenix
I love what you did with the artwork. I’ll toss an ogg your way… er… I think that should be an easy format for java.

It’s just a clip from the “fridge art” video, but if it passes, great.
I don’t have any chimy sounds on me, though… back to the debug for me, now.

Game On,
Charles

2 Likes