# Lighting issues with script-generated polygons

I have several shapes made of four vertices each generated using code.

The shapes are correct, but their lighting comes out looking very strange.

Here’s an example: Imgur: The magic of the Internet

I think it has something to do with normals, but I’m quite new to generating meshes. Any ideas?

This is the code I use to generate the map:

``````public GameObject CreatePlaneFromPoints (Vector3[] points, Material material)
{
Vector3 center = centerFromPoints(points) * playerHeightScaleFactor;
GameObject newObj = new GameObject();
newObj.transform.position = center;
mR.material = material;

Mesh msh = new Mesh();

msh.vertices = pointsRelativeTo(points, center);

msh.triangles = new int { 0, 1, 2, 2, 3, 0 };

msh.RecalculateNormals();

msh.uv = new Vector2
{
new Vector2(0, 0),
new Vector2(0, 1),
new Vector2(1, 1),
new Vector2(1, 0)
};

mF.mesh = msh;

// Collider

return newObj;
}

private Vector3[] pointsRelativeTo(Vector3[] points, Vector3 relativeTo)
{
for (int i = 0; i < points.Length; i++)
{
points _= points *- relativeTo;*_
``````

* }*

* return points;*
}

private Vector3 centerFromPoints(Vector3[] points)
{
* int uC = -1000;*
* Vector3 lowest = new Vector3(uC, uC, uC);*
* Vector3 highest = new Vector3(uC, uC, uC);*
* foreach (Vector3 p in points)*
* {*
* if (lowest.x == uC || p.x < lowest.x) lowest.x = p.x;*
* if (lowest.y == uC || p.y < lowest.y) lowest.y = p.y;*
* if (lowest.z == uC || p.z < lowest.z) lowest.z = p.z;*
* if (highest.x == uC || p.x > highest.x) highest.x = p.x;*
* if (highest.y == uC || p.y > highest.y) highest.y = p.y;*
* if (highest.z == uC || p.z > highest.z) highest.z = p.z;*
* }*

* Vector3 diff = highest - lowest;*
* return lowest + (diff / 2);*
}

This might help you: http://schemingdeveloper.com/2014/10/17/better-method-recalculate-normals-unity/ you have to make sure, that the normals are smoothed to their position in average on your surface generation. I guess, right now your normals are in tangent to their individual polygon.