private List<Vector3> points;
private void fract(Vector3 A,
Vector3 B, float factor,
float fracDec, int maxFracDepth,
int fracCount) {
Vector3 dir, planeU, planeV, C;
fracCount++;
if (fracCount > maxFracDepth) {
points.Add(B);
return;
}
dir = B - A;
planeU = Vector3.Cross(dir,
Vector3.up);
planeV = Vector3.Cross(planeU, dir);
planeU.Normalize();
planeV.Normalize();
C = 0.5f * (A + B) + factorMod * factor * planeV * (Random.value - 0.5f);
fract(A, C, factor * fracDec, fracDec, maxFracDepth, fracCount);
fract(C, B, factor * fracDec, fracDec, maxFracDepth, fracCount);
}
За неимением лучшего использовал стандартный фрактальный метод деления отрезка пополам. Общий код построения точек молнии выше.
Что получилось: