(January 2019) Monthly WIP & Screenshot thread

I added a black outline to my fonts by editing the .png file associated with the font. As far as I know, that’s the easiest way to add text effects like borders or shadows to a font.

2 Likes

You can also put a black version of the text right behind it and offset down and right… an easy (and relatively cheap) way to add a shadow. (That’s what Lemur does for shadows.)

BitmapText unfortunately doesn’t support outlines. The new version I was working on did. I got held up trying to support both versions in parallel and got side tracked.

1 Like

Quick try at that. Looks much better.

3 Likes

Or perhaps just simply use a contrasting color? Gotta love unreadable white on white texts.

reminds me of Bang Howdy

Making a modular builder for vehicles. I tried a few ways for this. Rotating nodes using floats took some working around, but in the end I just used a preset array of rotations to move through via index - in this case, increments of 15 degrees. If I didn’t, a node that was rotated more than a few times started to exhibit rounding errors and become visually apparent.

I had to come up with an algorithm to figure out how to rotate a child bar to the parent using the faces a user selects. So I can select face D on the child and face A on the parent and it will return a rotation required. Works pretty well. For a cube, face E and F (the other two faces) would be 0 and 180 to get two planes or rotation (you don’t need three) - which lets you choose any combination of faces on the child and parent.

     child       parent
       D           B        A = 0
     +---+       +---+      B = 90
   A | o | C   C | o | A    C = 180
     +---+       +---+      D = 270
       B           D

    > parentFace subtract childFace = rotation
6 Likes

my pc is dead

That happens when you abuse the driver too much :smiley:

If by “abuse” your mean install the lastest drivers on a clean install, and keep them up to date, then yest

lets guess. raytracing killer :smiley:

3 Likes

Windows 10 once updated itself on my laptop and the dedicated GPU drivers no longer started and couldn’t be reinstalled, the nvidia installer just hung every time. Had to reinstall Windows to get it off its addiction to intel graphics.

1 Like

Oooh, that unhappy face … have not seen it for a long time… since I have switched to Linux :grin: :wink:

4 Likes

These graphics details take so loooong. Spent about 3 hours doing it. :smiley: I think it looks bit better. What’s your thoughts?

Was

Now

5 Likes

Looks good.

I’d suggest rethinking your lighting though, it seems a bit off.
And a common style would probably make sense: Sometimes you have low-poly things with lots of corners and then perfectly smooth things.
Lastly, I’d advise to use the “near” mag filter for the textures, makes them pixelated. Which looks better than the blurry road you have.
Just my 2 cents :slight_smile:

1 Like

There is a bevel modifier in blender to help you make those edges smoother. You can also use the loop cutter or knife to be a little more precise.

Remember you’re issue with the floor needing to be cut up? It is the same kind of issue in that you need more vertices to let the light adjust over a smaller area.

I tend to use the mirror modifier so I only have to design half a car. If you make sure all faces in blender are quads (4 verts) and not complex shapes, it really helps the modifiers work better.

It’s coming along well :slight_smile:

To @Robbi_Blechdose:
I have been messing with lightning for some time, but I didn’t change it to better. Already, I have tried “copy&past” codes what I found there, which never works. I have to just study lightning stuff. :frowning: Even if I put in pre-writed code for shadows rendering and filters, it didn’t work.

To @jayfella:
I will try the to triangulate the faces on model. We will see what it does with the light.
Using mirror since third car. This was made in “old” technique. Propably I can waste more time to rework it for mirror modifier :smiley: (what will be needed soon). Sometimes face with few more verts appear, really can it does a big difference?

Anyway, thank you very much for suggestion :slight_smile: I’m happy that guys like you want to help the begginers.

Hey guys

Have been working on my terrain editor. Thought it deserves to create a demo video for it.

I’m using BSP algorithm and Java’s Random to procedurally generate the terrain.

It’s ES based and terrain blocks and bridge blocks are represented with ES at server side.

The TerrainSystem at server side generate collision shapes and navigation components for terrain blocks. Not done yet, will put another video for it when done.

Edit:

Also there is an option to create prefab/blueprint from terrain as JSON data using Gson library.

This is an example of exported json data. it’s aroun 14 kb :slightly_smiling_face:

////
{"components":[{"cType":"Terrain","scale":100,"minBlockSize":25,"maxBlockSize":55,"seed":1,"firstBridgeModel":1,"secondBridgeModel":1},{"cType":"Scene","name":"terrain-1","worldWidth":1000.0,"worldHeight":1000.0,"scenarioId":0},{"cType":"SceneState","state":2},{"cType":"EntityName","nameId":14},{"cType":"Level","level":0}],"children":[{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":48},{"cType":"BlockJoint","parentBlockNumber":6,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-90.45714,"y":1.0598588,"z":-17.159523},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":2,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":49},{"cType":"BlockJoint","parentBlockNumber":8,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-55.138092,"y":1.0598588,"z":-63.957138},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":50},{"cType":"BlockJoint","parentBlockNumber":12,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-23.437778,"y":2.1197176,"z":-63.797615},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":51},{"cType":"BlockJoint","parentBlockNumber":3,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-120.776184,"y":1.0598588,"z":-33.54079},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":52},{"cType":"BlockJoint","parentBlockNumber":5,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-90.45714,"y":1.0598588,"z":-54.47857},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":53},{"cType":"BlockJoint","parentBlockNumber":2,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-120.776184,"y":1.0598588,"z":-65.85983},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":17,"yExtent":3,"zExtent":17},{"cType":"BlockInfo","type":1,"number":1},{"cType":"BlockJoint","parentBlockNumber":53,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-120.776184,"y":0.0,"z":-80.019356},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":17,"yExtent":3,"zExtent":21},{"cType":"BlockInfo","type":1,"number":2},{"cType":"BlockJoint","parentBlockNumber":51,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-120.776184,"y":0.0,"z":-49.700314},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":17,"yExtent":3,"zExtent":31},{"cType":"BlockInfo","type":1,"number":3},{"cType":"BlockJoint","parentBlockNumber":47,"jointSide":1,"jointPosition":8,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-120.776184,"y":0.0,"z":-12.381268},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":21,"yExtent":3,"zExtent":20},{"cType":"BlockInfo","type":1,"number":4},{"cType":"BlockJoint","parentBlockNumber":52,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-90.45714,"y":0.0,"z":-70.13809},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":21,"yExtent":3,"zExtent":26},{"cType":"BlockInfo","type":1,"number":5},{"cType":"BlockJoint","parentBlockNumber":48,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-90.45714,"y":0.0,"z":-35.819046},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":21,"yExtent":3,"zExtent":23},{"cType":"BlockInfo","type":1,"number":6},{"cType":"BlockJoint","parentBlockNumber":43,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-90.45714,"y":0.0,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":27,"yExtent":3,"zExtent":28},{"cType":"BlockInfo","type":1,"number":7},{"cType":"BlockJoint","parentBlockNumber":49,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-55.138092,"y":0.0,"z":-89.276184},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":27,"yExtent":3,"zExtent":20},{"cType":"BlockInfo","type":1,"number":8},{"cType":"BlockJoint","parentBlockNumber":44,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-55.138092,"y":0.0,"z":-42.638092},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":27,"yExtent":3,"zExtent":20},{"cType":"BlockInfo","type":1,"number":9},{"cType":"BlockJoint","parentBlockNumber":41,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-55.138092,"y":0.0,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":17,"yExtent":3,"zExtent":18},{"cType":"BlockInfo","type":1,"number":10},{"cType":"BlockJoint","parentBlockNumber":50,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-23.437778,"y":1.0598588,"z":-78.45714},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":21,"yExtent":3,"zExtent":18},{"cType":"BlockInfo","type":1,"number":11},{"cType":"BlockJoint","parentBlockNumber":46,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":6.8812675,"y":1.0598588,"z":-78.45714},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":18,"yExtent":3,"zExtent":20},{"cType":"BlockInfo","type":1,"number":12},{"cType":"BlockJoint","parentBlockNumber":45,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-23.437778,"y":1.0598588,"z":-48.138092},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":20,"yExtent":3,"zExtent":20},{"cType":"BlockInfo","type":1,"number":13},{"cType":"BlockJoint","parentBlockNumber":42,"jointSide":5,"jointPosition":5,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":6.8812675,"y":1.0598588,"z":-48.138092},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"TerrainBlock","xExtent":38,"yExtent":3,"zExtent":31},{"cType":"BlockInfo","type":1,"number":14},{"cType":"BlockJoint","parentBlockNumber":0,"jointSide":0,"jointPosition":0,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":0.0,"y":0.0,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":0}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":2,"fillDirection":2},{"cType":"BlockInfo","type":2,"number":41},{"cType":"BlockJoint","parentBlockNumber":14,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-30.319046,"y":1.0598588,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":2,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":42},{"cType":"BlockJoint","parentBlockNumber":14,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":0.0,"y":1.0598588,"z":-26.819046},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":2},{"cType":"BlockInfo","type":2,"number":43},{"cType":"BlockJoint","parentBlockNumber":9,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-74.297615,"y":1.0598588,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":2,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":44},{"cType":"BlockJoint","parentBlockNumber":9,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-55.138092,"y":1.0598588,"z":-21.319046},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":2},{"cType":"BlockInfo","type":2,"number":45},{"cType":"BlockJoint","parentBlockNumber":13,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-8.778255,"y":2.1197176,"z":-48.138092},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":5},{"cType":"BlockInfo","type":2,"number":46},{"cType":"BlockJoint","parentBlockNumber":13,"jointSide":5,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":6.8812675,"y":2.1197176,"z":-63.797615},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]},{"components":[{"cType":"Buff","target":{"id":143},"type":1,"startTime":0},{"cType":"BridgeBlock","bridgeModel":1,"size":1,"fillDirection":2},{"cType":"BlockInfo","type":2,"number":47},{"cType":"BlockJoint","parentBlockNumber":6,"jointSide":1,"jointPosition":2,"offset":{"x":0.0,"y":0.0,"z":0.0}},{"cType":"SpawnPosition","location":{"x":-106.61666,"y":1.0598588,"z":0.0},"orientation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"cType":"Interactable","interactable":true},{"cType":"EntityTag","tag":1}],"children":[]}]}
///
5 Likes

looks like you had fun

1 Like

Last night and part of today, I revisited the bullet character demo I did that shows how to integrate a character input driver with the SiO2 bullet extensions. I went back and added the reactive animation stuff… this does the animation on the ‘view’ side based on the motion of the character relative to ground, current state, etc…

Video here:

It’s a little glitchy but it’s not the principle itself at fault… just needs tweaking, proper animation state transitions, etc…

11 Likes

Now done.

This is a demo of Dynamic Path Finding system using daedalus-lib Java version.

There is no animation yet.

4 Likes