• Register
Floatlands devblog #16 - weekly update

Updates on procedural island generator and points of interest; implemented vector math acceleration and NPC collision avoidance optimization.

Posted by on

ISLAND GENERATOR

I’ve been working hard on an island generator. We were using premade islands lately and when I spawned alot of islands already I’ve gotten bored of almost the same results. I’ve changed this so now the mesh/terrain of an island also gets manipulated by procedural generation – in this case I’ve used Simplex noise. For now you can find three types of terrain:

flat terrain with chance of spawning a swamp/lake

hilly terrain

large hills/mountainous terrain -really nice to explore

I think this would do just nice apart from having different island shapes, biomes and sizes, the variety continues! I’m ought to work on LOD system and draw distance system, so even potatoes can run this game. When I’m done with this I’m looking forward to implement animals, so we can start testing how well can they behave in our beautiful world.

UPDATE ON POINTS OF INTEREST

CONCRETE TOWER – heavily guarded by enemy NPC robots; this is just an updated model which is already in the scene

WIND POWER STATIONS – these would recharge your robot’s energy, but dynamic weather is needed in order for this to work.

VECTOR MATH ACCELERATION

I’ve been testing Mono.SIMD included in Unity3D for vector math acceleration. It works quite well. Not so sure about PC CPU support yet, but all moderns CPUs should support it. Here is the result of my little test, one million vector additions:

``````var watch = new System.Diagnostics.Stopwatch();

watch.Start();

int runs = 1000000;

var vec4_0 = new Mono.Simd.Vector4f(1f, 2f, 3f, 4f);
var vec4_1 = new Mono.Simd.Vector4f(1f, 6f, 6f, 6f);

for (int i=0; i < runs; i++)
{
vec4_0 = vec4_0 + vec4_1;
}

watch.Stop();
Debug.Log("SIMD:" + watch.Elapsed.TotalMilliseconds+ "ms");

watch.Reset();
watch.Start();

var vec3_0 = new Vector3(1f, 2f, 3f);
var vec3_1 = new Vector3(1f, 6f, 6f);

for (int i=0; i < runs; i++)
{
vec3_0 = vec3_0 + vec3_1;
}

watch.Stop();
Debug.Log("Normal:" + watch.Elapsed.TotalMilliseconds + "ms");``````

NPC COLLISION AVOIDANCE OPTIMIZATION

I also reworked the NPC collision avoidance algorithm abit, it works much faster now.

Trick of optimization is that you update just parts of information every frame :). Only 6-9 raycasts per NPC instead of ~100 (lagfest).

www.floatlands.net

- - 18 comments

I love the image of the windmill. Really captures what you are aiming for i think. Nice work. Keeping an eye on this!