?

Log in

Russian Computer Graphics
Algorithms and development
Генерация изображения облаков (Clouds image generation) 
31st-Oct-2006 08:29 pm
Недавно реализовал алгоритм генерации изображения облаков. Основан на так называемом шуме Перлина (Perlin noise).
Идея достаточно проста: имеется несколько буферов с различным разрешением, каждый из которых заполнен сеточными значениями шумовой функции. Далее эти буферы интерполируются по разрешению в один аккумулирующий буфер с коэффициентами, обратнопропорциональными разрешению каждого буфера. В итоге получается некая фрактальная структура, весьма похожая на плотный слой облаков. Для регулирования плотности облаков можно использовать какую-либо нелинейную функцию типа гиперболического тангенса, логистической кривой, экспоненты или даже простую порогувую функцию, а также их комбинации. Выбор нелинейности существенно расширяет разнообразие получаемых изображений.

Оригинальная документация по используемым алгоритмам:
http://www.cs.cmu.edu/~mzucker/code/perlin-noise-math-faq.html

Описание реализации:
В программе используется шумовая функция, описанная в оригинальной документации. Вид нелинейности - гиперболический тангенс со сдвигающим и масштабирующим коэффициентом.
Следующие параметры задаются в INI файле:
- цвет неба (RGBA)
- цвет облаков (RGBA)
- размер изображения (должен быть равен степени 2)
- параметр сдвига (плотность облаков)
- параметр масштабирования (резкость облаков)
- начальное разрешение буфера
- конечное разрешение буфера

Среда разработки: Microsoft Visual Studio 2003
Язык: C++
Библиотека: MFC без архитектуры документ/вид

Скриншоты:

SkyColor=0x00800000
CloudsColor=0x00FFFFFF
CloudsDensity=0.8
CloudsSharpness=12.0
ImageSize=512
BeginLevel=1
EndLevel=9



SkyColor=0x00000000
CloudsColor=0x00FFFFFF
CloudsDensity=0.8
CloudsSharpness=12.0
ImageSize=512
BeginLevel=3
EndLevel=9


SkyColor=0x00000080
CloudsColor=0x00FFFFFF
CloudsDensity=0.8
CloudsSharpness=12.0
ImageSize=512
BeginLevel=1
EndLevel=5


Скачать программу с исходниками (200 Kb):
clouds.zip

Хотелось бы обсудить и другие подходы к проблеме генерации изображений облаков.

Recently has released an algorithm for rendering clouds image. It is based at so called Perlin noise.
The idea is rather simple: there are several buffers with different resolutions, each of which is filled with noise function values at a grid. Then these buffers are interpolated by the resolution into the accumulation buffer, using coefficients, inversely proportional to each buffer resolution. As the result, we get some fractal-like structure similar to dense layer of clouds. You can use some non-linear function for clouds density regulation: hyperbolic tangent, logistic curve, exponent and even simple step-function as well as their combinations. The choice of non-linearity greatly extend the variety of derivable images.

Original documentation considering used algorithms:
http://www.cs.cmu.edu/~mzucker/code/perlin-noise-math-faq.html

Implementation specification:
The program uses noise function, described in the original documentation. The type of non-linearity is hyperbolic tangent with shift and scaling factors.
The following parameters are specified in the INI file:
- sky color (RGBA)
- clouds color (RGBA)
- image resolution (must be a power of 2)
- shift parameter (clouds density)
- scaling parameter (clouds sharpness)
- initial buffer resolution
- final buffer resolution

It would be please to discuss another approaches to clouds image rendering algorithms.
Comments 
31st-Oct-2006 06:29 pm (UTC)
Кстати говоря, подобный алгоритм подходит не только для изображений облаков, но и для генерации поля высот (height map) для ландшафтов.

By the way, such algorithm is sutable not only for clouds images, but also for terrain height map generation.
This page was loaded Apr 28th 2017, 12:11 pm GMT.