Необходимость менять графику планет была видна сразу после распараллеливания
приложения когда появился свободный FPS, ситуация когда для каждой планеты
нужно подгонять в ручную настройку наложения текстуры что бы небыло заметно шва
приводит к тому что каждая планета заранее фиксирована и генерация просто
перебирает готовый список - это неправильно, поверхность должна быть действительно
уникальной для каждой планеты. Кроме этого просто сферы с текстурой статичны и не дают
нужного ощущения реалистичности несморя на
вращение вокруг оси графику планет нужно улучшить.
Генерация планет из готового списка текстур делает ее предсказуемоей и повторяемой.
Нужно сделать планеты
более интересными в стиле научной фантастики, можно попробовать следующую модель: 3D сфера + карта наложения текстуры
искажающая ее для каждого размера сферы, что бы небыло швов между полюсами + текстура видимой части поверхности наблюдаемой
из космоса.
Далее нужно добавить детализацию вида поверхности за счет карты высот - яркость пикселей меняется в зависимости от высоты поверхности, смена пикселей всей текстуры должна происходить каждый fps через обновление цветов пикселей внутри текстур планет перед рендерингом - в ряде 3D движков эти команды присутствуют и позволяют менять цвет каждого пикселя текстуры по его X,Y координатам, таким образом низины планеты будут темнее а горы более яркими, имитируя научно фантастический вид из космоса - то что выше должно казаться чуть ближе к наблюдателю (космическому кораблю) создавая эффект что это лучше можно рассмотреть и добавляя разнообразия в поверхность. Горы будут чуть ярче, глубокие океаны чуть темнее, океаны будут сильнее бликовать при попадании прямого освещения, а темные низины станут просто светлее, в то время как горы станут еще более яркими, добавляется немного яркости от карты высот в тестуру и 3D движек должен еще добавлять яркости при прямом освещении поверхности.
Каждый четырехугольник ближе к полюсам на 3D модели сферы соответсвует данным цвета 1 пикселя (поверхность планеты представляется прямоугольниками которые расчитываются в цвет 1 точки этими точками и заполняются два полюса по 1 и кольца поверхности вокруг полюсов, для более крупных полигонов по геометрии применяется не 1 цвет а группы из 4 и больше пикселей разом 3x3, 4x4, 5x5 и больше - сначала добавляясь в текстуру внешнего вида а затем накладываясь на планету), ближе к экватору размер сетки увеличивается и растет число групп пикселей поверхности которыми экватор заполняется, например 4 поверхности превращеные в цвет пикселя и сгруппированные в карту пикселей 2x2 для каждого элемента сферы). Это позволит отказаться от генерации планет по числу заранее готовых текстур и генерировать абсолютно разные научно фантастические планеты с разной поверхностью и внешним видом каждый раз делая каждую генерацию уникальной.
Если планеты будут в последствии детализированны целиком то каждая ячейка поверхности представляет собой прямоугольник соединененый с соседними в одно целое пространство, сравнивается количество суши и воды на поверхности каждого квадрата и выбирается цвет поверхности на отображаемой сфере в зависимости от состава воды и типа суши, к получившемуся цвету пекселя накладывается яркость карты высот поверхности, если суши и воды примерно поровну в данном месте планеты то пиксель будет смешанного цвета от пропорций всех типов воды и суши в данном месте (например побережье, небудет слишком резких границ).
Мерцание океана требует создать волнение водной поверхности которая должна определяться для каждой ячейки и менять и ее цвет и уровень отражения, что бы реалистично мерцал океан на планете а не циклично (прокручивая списки яркости) потребуется карта ветров если на планете есть атмосфера, ветра должны вызываться температурой нагрева поверхности (собственное тепло или от звезды) и их движения в разные стороны от мест нагрева. Течения воды пока не проработаны даже в теории. Ветра вызывают волнение воды или шторм - меняя цвет океана в заданных пикселах текстуры поверхности и меняя блеск пикселей, блеск задается картой отражений, это пиксельная карта яркости бликов при попадании света на каждый треугольник 3D модели, существует дополнительно к текстуре поверхности - т.е. текстура поверхности состоит как минимум из 2х текстур - вид поверхности и яркость бликов каждой ее точки, чем спокойнее океан тем сильнее блики, если же волнение или шторм то уровень блеска падает в этих местах. Аналогично понижать яркость пикселей в точках планеты где идут вызванные ветрами песчаные бури. В результате планета сама по себе плавно меняет яркости даже без вращения относительно источника света и в добавок к этому еще и вращается добавля больше разнообразия смены освещения поверхности - такие планеты уже должны выглядеть достаточно красиво для современной игры. Заранее существует понимание что в реальном времени на домашнем компьютере получится создать такую научно фантастическую модель планеты лишь для заставки в меню, рассчитывать тысячи планет в галактике по такой системе потребует слишком много ядер процессора - в ином случае красиво мерцающей в космосе планеты генерируемой по квадратам поверхности и абсолютно разной не получится.
Если условия на планете предполагают это то в высоких местах образуется снег или лед и соответственно вершины гор отображаются светлыми пикселями. Крупные города при ряде условий оказывают влияние на цвет поверхности, например так что бы с темной стороны планеты можно было заметить осветленный пиксель света городов.
По верх этого накладывается эффект атмосферы - потребуется карта влажности точек поверхности. Полет стратосферных перехватчиков и подобных им должен отображаться в виде затененных точек перемещающихся на карте поверхности демонстрируя что планета обитаема при внимательном обзоре планеты. Это все предполагает наличие массива с ячейками (программной матрицы) для каждой планеты где совокупность параметров каждой площади поверхности превращается в цвет пикселя. Предполагается создать такую научно фантастическую модель для стартового экрана в виде планеты которая будет фоном для главного меню игры и далее постепенно создать генерируемые планеты на основе такой модели уже внтури фунциональной 3D сцены. Мощности средней системы для реализации такой модели недостаточно - вернее достаточно для 1 такой планеты, эта проблема решается в разных играх замиранием игрового мира за пределами обзора камеры и упрощенного рассчета по быстрым формулам какой должна быть картинка при приближении игрока к наблюдаемому миру - так реализовано большинство масштабных проектов кроме серверных, выделяя половину мощности системы под рассчет видимой части мира - остальная часть мира считается по простым формулам создающим иллюзию что в отсутствии взгляда игрока там происходило какое-то движение, т.е. мощности компьютеров даже многоядерных недостаточно для асболютной симуляции красивой поверхности всех планет, их атмосфер и т.д. - отсюда ряд случаев когда бои при наблюдении давали в некоторых играх иной результат чем когда камера игрока была далеко от сражения - при сохранениях и загрузки состояния в некоторых играх (полный рассчет идет лишь для того что есть на экране, однако уход от полной симуляции дает и слишком упрощенный результат событий - чего бы так же нехотелось).