Страницы

Поиск по вопросам

воскресенье, 24 ноября 2019 г.

Рендер туманности


Поскольку результаты поисков по вопросу неудовлетворительны, то решил-таки задать вопрос.

Требуется эффективный алгоритм рисования чего-то, похожего на звёздные туманности
Крайне желательно, чтобы рендер мог выполняться в реальном времени и почти настоятельн
требуется, чтобы алгоритм был стабильным (выдавал одну и ту же картину при неизменны
входных параметрах).

В ходе поисков я обнаружил фрактальный алгоритм Buddhabrot, но он довольно медленный
насколько я могу судить по той реализации, что я увидел (http://cabin.users.geeky.net/classes/buddhabrot.htm
запустить и подождать около минуты)

UPD: я выставил теги не совсем верно (поправьте, если кто знает, какие тэги здес
более уместны). Не обязательна реализация на яве. Главное - понять идею, а перенест
на J2D я уж как-нибудь сумею. 

UDP2: без сомнения идея с зарядами дала результаты. Пока они незначительные, но уж
кое что.. немного поправить распределение зарядов и цветовую гамму + звёзды + сглаживани
шума вместо грубого шума и будет то что надо. На этом основании закрываю вопрос и помеча
ответ как правильный. Возможно также попробую наложить спирали на эту сцену: вмест
со звёздами должно получиться неплохо.



UPD

Итак, скрещивание спиралей с точечными зарядами удалось.. теперь надо наложить облакообразны
шум (в чём мне очень помогла статья Simple Clouds Part 1)



UPD 21 сентября

И вот очередной апдейт для заинтересованных. Думаю я уже близок к завершению. 


    


Ответы

Ответ 1



Простейшим методом реализации разнообразных «случайных» текстур есть метод Кена Перлина названный в его честь. В этом методе генерируется несколько текстур «октав» и слага их вместе мы получаем довольно интересную текстуру, вид которой зависят от нескольки параметров. Тут подробнее Я пробовал, медленно генерирует, и нужно долго подбирать коэффициенты для нормальног вида. Попробуйте другой метод: расположить несколько точек (зарядов), а цвет туманност задать как потенциал или эл.поле от этих зарядов f = k/r или E = k/(r^2) не забыва про суперпозицию.

Ответ 2



Насчет функции генерации облака вокруг центра. Если взять приближение (не четки мат функции). Например, первый rand дает значение от 0 до 1 (дробное). Разобьем значение 0 - 1 на части: 0 - 0,5 - вероятность 50%, значит расстояние должно быть маленькое, максимум 10 (можн от 0 до 10) 0,5 - 0,7 - вероятность меньше, расстояние максимум 100 (можно от 10 до 100) 0,7 - 0,8 - вероятность еще меньше, расстояние максимум 1000 (можно от 100 до 1000) Потом применяем найденное максимальное расстояние к рандому нахождения координат (второй и третий ранд) = (x,y) Тут можете сами задавать кратность и вероятность 'рисовать' какие угодно функци распределения - я не специалист как они выглядят более естественно. Главное алгорит - если будете вызывать напрямую функцию генерации точек, то они могут быть медленными а тут сами рулите. Кстати насчет функций - вероятно, есть какие-то алгоритмы: задаете текущий srand задаете центр распределения, вызываете функцию с предопределенными параметрами и он вам генерирует точки, например, по нормальному закону или по экспоненте (какие-то таки функции я видел в математических пакетах, сразу не вспомню)

Комментариев нет:

Отправить комментарий