Я делал нечто похожее для демоверсии астероидов несколько лет go. Всякий раз, когда ударил астероид, я использовал карту высот - на самом деле, просто карту шума - чтобы сместить половину вершин в модели астероида, чтобы придать ей вид с разбивкой пополам. Для другой половины я просто продублировал модель астероида и сместил вторую половину, используя ту же карту шума. Эффект заключается в том, что две «половинки» совпали идеально.
Вот что я бы попробовал:
- Ваша модель сферы должна быть полной сферой.
- Вам понадобится карта высот для местности.
- В вершинном шейдере вашей сферы для любой вершины к северу от экватора:
- Пример карты высот.
- Установите координату Y вершины на высоту от карты высот. Это эффективно сгладит верхнюю часть сферы, а затем сместит ее на основе вашей карты высот. Вам, вероятно, придется масштабировать значение высоты здесь, чтобы получить что-то рациональное.
- Преобразуйте новые x, y, z как обычно.
Обратите внимание, что вы не текстурируете сферу. Вы модифицируете геометрию. Это должно происходить в геометрической части конвейера, , а не в фрагментном шейдере.
Еще одна вещь, которую вам нужно рассмотреть, это как добавить обломки - камни и т. Д. c. - так, чтобы оно соответствовало смещению геометрии на сфере. Поскольку у вас есть карта высот, она должна быть простой.
Для начала я бы попросил ваш вершинный шейдер выровнять верхнюю половину сферы. Как только это сработает, добавьте в карту высот.
Чтобы это выглядело убедительно, вам потребуется карта сферы и высоты с довольно высоким разрешением. Чтобы сократить геометрию, вы можете использовать плоскость для рельефа местности и полусферу для нижней части. Просто отбросьте любой фрагмент для плоскости, которая находится не в сферическом объеме, который вас интересует. (Вы также можете использовать круговую «плоскость», а не прямоугольную плоскость angular, но заставить вершины выровняться со сферой и заполнить отверстия на границе может быть сложно.)