We are compiling a list of things to add to the C# interface. These three rank pretty much at the top.

I am not sure when these will be released, there is 80% chance it will happen within the next two releases.

In these three cases, there is not new behavior code needed. It is more of a plumbing job exposing data we already have to the C# side. It is low risk in general and if you decide to develop it should take you an hour or two.

This getHeight method is optimized, so you should be fine calling it from your instancing system. The Voxel Farm instance layer calls it all the time to place. You can compute the surface slope by making additional calls to getHeight() in a neighborhood and computing the gradient:

double p0[3] = { x, y, z };

double y1 = getHeight(instxmax, z, world, biome, layer, heightmap);

double p1[3] = { instxmax, y1, z };

double y2 = getHeight(x, instzmax, world, biome, layer, heightmap);

double p2[3] = { x, y2, instzmax };

double y3 = getHeight(x, instzmin, world, biome, layer, heightmap);

double p3[3] = { x, y3, instzmin };

double y4 = getHeight(instxmin, z, world, biome, layer, heightmap);

double p4[3] = { instxmin, y4, z };

double v10[3] =

{

p1[0] - p0[0],

p1[1] - p0[1],

p1[2] - p0[2]

};

double v20[3] =

{

p2[0] - p0[0],

p2[1] - p0[1],

p2[2] - p0[2]

};

double v30[3] =

{

p3[0] - p0[0],

p3[1] - p0[1],

p3[2] - p0[2]

};

double v40[3] =

{

p4[0] - p0[0],

p4[1] - p0[1],

p4[2] - p0[2]

};

double n[3];

CROSS(n, v20, v10);

double d = sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);

double angle = DOT(n, up) / d;

CROSS(n, v30, v40);