public override void Embody() { float[] triangleAreas = new float[tris.count / 3]; int[] triData = tris.GetIntData(); float[] vertData = verts.GetFloatData(); float totalArea = 0; int tri0; int tri1; int tri2; for (int i = 0; i < tris.count / 3; i++) { tri0 = i * 3; tri1 = tri0 + 1; tri2 = tri0 + 2; tri0 = triData[tri0]; tri1 = triData[tri1]; tri2 = triData[tri2]; float area = 1; Vector3 p0 = extractToVector(tri0, 0, vertData, verts); Vector3 p1 = extractToVector(tri1, 0, vertData, verts); Vector3 p2 = extractToVector(tri2, 0, vertData, verts); if (noiseType == "even") { area = HELP.AreaOfTriangle(p0, p1, p2); } else if (noiseType == "fractal") { area = HELP.NoiseTriangleArea(noiseSize, p0, p1, p2); area = Mathf.Pow(area, 10); } triangleAreas[i] = area; totalArea += area; } for (int i = 0; i < triangleAreas.Length; i++) { triangleAreas[i] /= totalArea; } float[] values = new float[count * structSize]; int index = 0; Vector3 pos; //Vector3 uv; //Vector3 tan; //Vector3 nor; int baseTri; for (int i = 0; i < count; i++) { baseTri = 3 * HELP.getTri(Random.value, triangleAreas); tri0 = baseTri + 0; tri1 = baseTri + 1; tri2 = baseTri + 2; tri0 = triData[tri0]; tri1 = triData[tri1]; tri2 = triData[tri2]; Vector3 v0 = extractToVector(tri0, 0, vertData, verts); Vector3 v1 = extractToVector(tri1, 0, vertData, verts); Vector3 v2 = extractToVector(tri2, 0, vertData, verts); pos = HELP.GetRandomPointInTriangle(i, v0, v1, v2); float a0 = HELP.AreaOfTriangle(pos, v1, v2); float a1 = HELP.AreaOfTriangle(pos, v0, v2); float a2 = HELP.AreaOfTriangle(pos, v0, v1); float aTotal = a0 + a1 + a2; float p0 = a0 / aTotal; float p1 = a1 / aTotal; float p2 = a2 / aTotal; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = (float)i / (float)count; values[index++] = tri0; values[index++] = tri1; values[index++] = tri2; values[index++] = p0; values[index++] = p1; values[index++] = p2; values[index++] = 1; values[index++] = 0; values[index++] = 0; } SetData(values); }
public override void Embody() { float[] triangleAreas = new float[tris.count / 3]; int[] triData = tris.GetIntData(); float[] vertData = verts.GetFloatData(); float totalArea = 0; int tri0; int tri1; int tri2; for (int i = 0; i < tris.count / 3; i++) { tri0 = i * 3; tri1 = tri0 + 1; tri2 = tri0 + 2; tri0 = triData[tri0]; tri1 = triData[tri1]; tri2 = triData[tri2]; float area = 1; Vector3 p0 = extractToVector(tri0, 0, vertData, verts); Vector3 p1 = extractToVector(tri1, 0, vertData, verts); Vector3 p2 = extractToVector(tri2, 0, vertData, verts); Vector2 uv0 = extractToVector2(tri0, 12, vertData, verts); Vector2 uv1 = extractToVector2(tri1, 12, vertData, verts); Vector2 uv2 = extractToVector2(tri2, 12, vertData, verts); if (noiseType == NoiseType.MiddleBand) { float Y = 1 - ((1 - uv0.y) + (1 - uv1.y) + (1 - uv2.y)) / 3; area = Mathf.Clamp(Mathf.Min(Y * 2, (1 - Y)) * 4.5f, 0, 4); //((1-uv0.y) + (1-uv1.y) + (1-uv2.y) ) / 3; area *= area * area; // * area * area*area; } else if (noiseType == NoiseType.CenterOut) { } else if (noiseType == NoiseType.Even) { float Y = 1 - ((1 - uv0.y) + (1 - uv1.y) + (1 - uv2.y)) / 3; area = Y; } else if (noiseType == NoiseType.OuterRing) { float Y = 1 - ((1 - uv0.y) + (1 - uv1.y) + (1 - uv2.y)) / 3; area = Y * Y; } triangleAreas[i] = area; totalArea += area; } for (int i = 0; i < triangleAreas.Length; i++) { triangleAreas[i] /= totalArea; } float[] values = new float[count * structSize]; int index = 0; Vector3 pos; //Vector3 uv; //Vector3 tan; //Vector3 nor; int baseTri; for (int i = 0; i < count; i++) { baseTri = 3 * HELP.getTri(Random.value, triangleAreas); if (specialInCenter && i == 0) { baseTri = 0; } tri0 = baseTri + 0; tri1 = baseTri + 1; tri2 = baseTri + 2; tri0 = triData[tri0]; tri1 = triData[tri1]; tri2 = triData[tri2]; Vector3 v0 = extractToVector(tri0, 0, vertData, verts); Vector3 v1 = extractToVector(tri1, 0, vertData, verts); Vector3 v2 = extractToVector(tri2, 0, vertData, verts); pos = HELP.GetRandomPointInTriangle(i, v0, v1, v2); float a0 = HELP.AreaOfTriangle(pos, v1, v2); float a1 = HELP.AreaOfTriangle(pos, v0, v2); float a2 = HELP.AreaOfTriangle(pos, v0, v1); float aTotal = a0 + a1 + a2; float p0 = a0 / aTotal; float p1 = a1 / aTotal; float p2 = a2 / aTotal; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = 0; values[index++] = (float)i / (float)count; values[index++] = tri0; values[index++] = tri1; values[index++] = tri2; values[index++] = p0; values[index++] = p1; values[index++] = p2; values[index++] = 1; if (specialInCenter) { values[index++] = 1; } else { values[index++] = triangleAreas[baseTri / 3] * 1000; } values[index++] = 0; } SetData(values); }
public override void Embody() { print("EMBOZ"); triVals = tris.GetIntData(); connections = new int[count][][]; numConnections = new int[count]; int maxConnections = 0; for (int i = 0; i < connections.Length; i++) { connections[i] = new int[16][]; for (int j = 0; j < connections[i].Length; j++) { connections[i][j] = new int[3]; } } for (int i = 0; i < triVals.Length / 3; i++) { int t1 = triVals[i * 3 + 0]; int t2 = triVals[i * 3 + 1]; int t3 = triVals[i * 3 + 2]; AddConnection(t1, t2, t3); AddConnection(t2, t3, t1); AddConnection(t3, t1, t2); } Vector3[] pos = verts.mesh.vertices; for (int i = 0; i < count; i++) { for (int j = 0; j < count; j++) { // means it is same vert if (pos[i].x == pos[j].x && pos[i].y == pos[j].y && pos[i].z == pos[j].z) { for (int k = 0; k < 16; k++) { AddConnection(i, connections[j][k][0], connections[j][k][1]); } } } } float[] values = new float[count * structSize]; for (int i = 0; i < count; i++) { if (numConnections[i] > maxConnections) { maxConnections = numConnections[i]; } for (int j = 0; j < numConnections[i]; j++) { values[i * structSize + 20 + j * 3 + 0] = connections[i][j][0]; values[i * structSize + 20 + j * 3 + 1] = connections[i][j][1]; values[i * structSize + 20 + j * 3 + 2] = connections[i][j][2]; } } // print( "MAX CONNECTION : " + maxConnections ); SetData(values); }