Для моделирования эрозии надо вычислять дифференциальные величины (например, разница высоты текущей точки и соседней) на каждой итерации, и таких итераций сделать несколько сотен. За одну итерацию рассчитывается распределение (перенос) материала из каждой точки в соседние. Для примера, ищите в гугле такие статьи по названиям: "Fast Hydraulic Erosion Simulation and Visualization on GPU", "Realtime Procedural Terrain Generation. Realtime Synthesis of Eroded Fractal Terrain for Use in Computer Game"
Т.к. процедурная планета генерируется не вся, а тайлами (блоками), то возникает проблема краевого эффекта. При генерации тайла ландшафта нет никакой возможности узнать, какой рельеф сбоку от этого тайла, если он ещё не сгенерирован. Для решения этой проблемы можно поступить так. Ограничим чило итераций например 50-ю. Тогда генерировать тайл надо с кромкой в эти 50 пикселей. Например, текстура 256*256 превращается в 356*356. Далее проводим 50 итераций эрозии (причём в каж
... Читать дальше »
Экспериментирую с увеличением детализации генерируемых планетарных текстур. Раньше для каждой планеты генерировалась небольшая текстурка, всего 5х8 пикселей, содержащая цветовую палитру: по одной оси цвет в зависимости от высоты/широты, по второй - в зависимости от наклона. Шейдер генератора процедурных текстур использовал эту текстурку для определения цвета пикселя поверхности планеты (т.е. цвета пикселя генерируемой текстуры). Для достижения большой детализации необходимо существенно увеличить число октав различных шумовых функций, а также написать функции для генерации текстур разных материалов (например, в версии 0.94 можно увидеть слои на склонах гор - это пример такой функции).
Теперь текстура палитры превратилась в
... Читать дальше »