//**********************************
    //какой то глюк с позицией планеты, если не в 0.0 то возвращает непонятно что
    //****************************************

    private void setVertices()
    {
        camPosition = worldToLocal(cam.transform.position);        // позиция камеры
        magic       = Quaternion.FromToRotation(curAxis, camPosition);
        //определяю магию для плавного нарастания детализации
        camDistance = Vector3.Magnitude(camPosition);        //   Mathf.Sqrt(camPosition.x*camPosition.x+camPosition.y*camPosition.y+camPosition.z*camPosition.z);
        float min = 0.8f;
        float max = 2.5f;

        if (camDistance >= 1.75f * radius)
        {
            coordCorrection = max;
        }
        else
        {
            if (camDistance <= radius)
            {
                coordCorrection = min;
            }
            else
            {
                float bebe = Mathf.Pow((camDistance / radius - 0.75f), 0.9f);
                coordCorrection = Mathf.Lerp(min, max, bebe);
            }
        }

        //ставлю точки

        float texCoorScale = 200f;

        for (int i = 0; i < vertOld.Length; i++)
        {
            //есть сохраненная позиция в меше которую легко повернуть к камере
            Vector3 turnedPos = vertOld[i];
            turnedPos.x *= coordCorrection;
            turnedPos.z *= coordCorrection;

            turnedPos = magic * turnedPos;
            turnedPos.Normalize();
            float height = MagicData.Height(turnedPos);
            vert[i] = turnedPos * radius * height;
            Vector3 pos   = turnedPos;
            float   xCoor = Mathf.Abs(pos.x);
            float   yCoor = Mathf.Abs(pos.y);
            float   zCoor = Mathf.Abs(pos.z);
            if (xCoor >= yCoor && xCoor >= zCoor)
            {
                uv[i] = new Vector2(pos.y / pos.x, pos.z / pos.x);
            }
            if (yCoor > xCoor && yCoor >= zCoor)
            {
                uv[i] = new Vector2(pos.x / pos.y, pos.z / pos.y);
            }
            if (zCoor > yCoor && zCoor > xCoor)
            {
                uv[i] = new Vector2(pos.y / pos.z, pos.x / pos.z);
            }
            uv[i] *= texCoorScale;
        }
    }
    void camHandle()
    {
        //запрет на перемещение внутри планеты
        Vector3 camPosition       = ThisMeshPlanet.worldToLocal(transform.position);
        float   camDistance       = Vector3.Magnitude(camPosition);
        float   heightAtThisPoint = MagicData.Height(camPosition);
        Vector3 posit             = camPosition;

        posit.Normalize();
        if (camDistance < (posit * heightAtThisPoint * (ThisMeshPlanet.radius + height_of_sight)).magnitude)
        {
            transform.position = ThisMeshPlanet.localToWorld(posit * heightAtThisPoint * (ThisMeshPlanet.radius + height_of_sight));
        }
    }
    void SetTree(int number, GameObject CurTree)
    {
        Vector3 pos = Random.insideUnitSphere;

        pos.Normalize();
        float height = MagicData.Height(pos);        //two.Height(pos);

        if (height > 1)
        {
            GameObject currentTree = (GameObject)Instantiate(CurTree);
            currentTree.transform.parent   = gameObject.transform;
            currentTree.transform.position = pos * (radius) * height;
            currentTree.transform.up       = pos;
            currentTree.transform.RotateAroundLocal(pos, Random.value * 360);
            Vector3 scale = new Vector3((0.5f + Random.value * 0.5f), (0.5f + Random.value * 0.5f), (0.5f + Random.value * 0.5f));
            currentTree.transform.localScale.Scale(scale);
        }
    }