Я хочу сказать. Это самая нужная вещь во Вселенной. Самая глубокое. И я сейчас за всю жизнь наконец стал писать код и сделал. Довольно сложное. И самое прекрасное. Скачайте и посмотрите! Это экзешник, в ГитХаб.

github: Download Latest Version Windows And Source code

"Но если дело в инсульте, то понятно. Может, стоит небольшой дисклеймер добавлять в начало статей, чтобы ни у кого не было повода после первых же строк минусовать. Инсульт у меня. Поэтому ИИ."

Мы не можем видео, только картинки. Множество Мандельброта фрагмент
Мы не можем видео, только картинки. Множество Мандельброта фрагмент

True 32-bit BGRA

Переход на полную 32-битную цветопередачу BGRA, обеспечивающую плавные градиенты. Это позволяет отображать миллионы оттенков. Наш движок работает в честном 32-битном цветовом пространстве, может отображать миллионы промежуточных цветов.

DwmFlush

А DwmFlush - синхронизация с монитором, как обычно 60 fps. DwmFlush() приостанавливает выполнение вашего кода до тех пор, пока диспетчер окон (DWM) не обновит экран. Если ваш монитор работает на 144 Гц, функция будет срабатывать 144 раза в секунду, обеспечивая 144 FPS. Функция ориентируется на текущую частоту обновления монитора, установленную в настройках Windows. Если в системе стоит 60 Гц, вы получите 60 FPS. Если монитор поддерживает 240 Гц и это выбрано в настройках - вы получите 240 FPS. Она даст 60 FPS только если ваш монитор настроен на 60 Гц; на игровых мониторах FPS будет выше, согласно их герцовке.

Высокоточная отрисовка (80-бит)

Большинство исследователей фрактала Мандельброта используют стандартную 64-битную двойную точность, что приводит к "пикселизации" при масштабировании около 10 в 14. В этом проекте используется 80-битная арифметика с расширенной точностью для расширения границ фрактала:

  • Моя реализация (80-бит): Обеспечивает 4 дополнительных десятичных знака точности, позволяя исследовать в 10 000 раз глубже (диапазон 10 в 18).

  • Аппаратная оптимизация: Непосредственно использует регистры FPU x87 для максимальной глубины математических вычислений.

Мы не можем видео, только картинки. Множество Мандельброта фрагмент
Мы не можем видео, только картинки. Множество Мандельброта фрагмент

OpenMP

OpenMP - это стандарт, который говорит компилятору: "Возьми этот цикл и сам раздай итерации разным ядрам процессора". Используя OpenMP, вы занимаетесь параллельным программированием на уровне многопоточности (Multithreading). OpenMP - масштабируемость: ваш код будет одинаково эффективно работать как на 4-ядерном ноутбуке, так и на 128-ядерном сервере.

True SSAA 2x2 (4 независимых выборки на пиксель) прямая интеграция в RGB-пространство

Реализовано "настоящее" сглаживание суперсэмплинга 2x2 (SSAA). Каждый пиксель экрана вычисляется из четырех независимых точек фрактальных координат. Высокоточное поканальное накопление RGB. Механизм сначала вычисляет цвет для каждого субпикселя, а затем выполняет средневзвешенное значение их интенсивностей. Вместо усреднения чисел (итераций), которое создает шум, мы усредняем готовые RGB-значения. Итерации усреднения создают визуальный шум и артефакты. Сначала накапливая 32-битные значения цвета, мы полностью устраняем этот шум. В результате получается чистое и четкое изображение, в котором высокочастотные детали идеально воссозданы, а не размыты. True SSAA 2x2 (4 независимых образца на пиксель) позволяет восстанавливать микронити размером меньше одного пикселя экрана.
Техническое примечание:

  • Стандартный способ: Color( (iter1 + iter2 + iter3 + iter4) / 4) - дает шум/артефакты.

  • Ваш способ: (Цвет(iter1) + Цвет(iter2) + Цвет(iter3) + Цвет(iter4)) / 4 - дает чистую детализацию.

Усреднение количества итераций (индексов) математически неверно, поскольку фрактальные палитры нелинейны. Усреднение индексов A и B часто указывает на совершенно несвязанный цвет C, создавая высокочастотный хроматический шум. Наше решение осуществляет интеграцию в цветовом пространстве RGB. Вычисляя конкретные компоненты RGB для каждого субпикселя перед субдискретизацией, мы гарантируем, что полученный цвет представляет собой настоящую оптическую смесь. Это устраняет артефакты и раскрывает истинную структурную геометрию множества Мандельброта, которая в противном случае маскируется шумом.

Мы не можем видео, только картинки. Множество Мандельброта фрагмент
Мы не можем видео, только картинки. Множество Мандельброта фрагмент

Почему шум без суперсэмплинга?

Это отличный вопрос! Оказывается, шум без суперсэмплинга - это не ошибка процессора, а фундаменталь��ое явление в цифровой графике, которое называется Алиасинг (Aliasing). Фрактал Мандельброта бесконечно сложен. На границах его множества существуют "нити" и детали, которые в миллионы раз меньше, чем один пиксель вашего монитора.

  • Без суперсэмплинга: Процессор тыкает "иголкой" (лучом) ровно в одну точку центра пикселя. Если он попал в тонкую нить - пиксель стал красным. Если промахнулся на микрон - пиксель стал черным.

  • Результат: Соседние пиксели "хватают" случайные куски микро-деталей. Это создает математический шум.

Как ваш SSAA 2x2 "лечит" это: Вместо того чтобы гадать, что находится в пикселе, ваш код берет 4 пробы в разных углах этого пикселя.

  • Вычисляются 4 реальных цвета для каждой пробы.

  • Эти цвета смешиваются.

  • Магия: Если в пиксель попала тонкая нить, она не будет "кричать" одним ярким цветом или исчезать. Она превратится в мягкую, полупрозрачную линию, которая точно передает форму фрактала.

Визуальная эстетика. Смена цветов

В движке используется сложный гибридный подход к отображению цветов. Плавные переходы (синий и зеленый): Эти каналы управляются сдвинутыми по фазе синусоидальными и косинусоидальными волнами (127 + 127 2 pi * sin/cos). Это создает глубокие гипнотические градиенты. Высокочастотный контраст (красный): Красный канал заполняется с использованием псевдослучайного распределения (стохастический шум). Эффект "Мерцания": смешивая плавные гармонические колебания (G, B) с индексным шумом (R), средство визуализации достигает уникальной мерцающей текстуры. Сопоставление ритмичных волн G/B и "шумног��" красного цвета. Это имитирует визуальную сложность.

Мы не можем видео, только картинки. Множество Мандельброта фрагмент
Мы не можем видео, только картинки. Множество Мандельброта фрагмент

Горячие клавиши

Управление мышью

  • WM_LBUTTONDOWN (Левая кнопка) - увеличиваем масштаб в 2 раза и центрируем новую область вокруг точки клика.

  • WM_RBUTTONDOWN (Правая кнопка) - уменьшаем масштаб в 2 раза и центрируем новую область вокруг точки клика.

Навигация с помощью клавиатуры

  • В VK_F1 - VK_F8 - восемь мест Множество Мандельброта на экран.

const long double PRESETS[8][3] = {
    {-0.7849975438787509L, 0.1465897423090329L, 0.00000000000015L},
    {-1.39968383250956L, -0.0005525550160L, 0.0000000000146L},
    {-0.8069595889803L, -0.1593850218137L, 0.00000000006L},
    {-0.618733273138252L, -0.456605361076005L, 0.0000000000046L},
    {-0.550327628L, -0.625931405602L, 0.00000000781L},
    {-0.55033233469975L, 0.62593882612931L, 0.0000000000023L},
    {-1.3996669964593604L, 0.0005429083913L, 0.000000000000026L},
    {-0.5503493176297569L, 0.6259309572825709L, 0.00000000000031L}
};
  • VK_LEFT (Стрелка ВЛЕВО) и VK_RIGHT (Стрелка ВПРАВО) - увеличиваем и уменьшаем в 1.1 раза но без точки клика.

Управление данными

  • Очень важно VK_RETURN (Enter, Ввод) - у вас сейчас на экран какое-то Множество Мандельброта. И сейчас оно запишется в файл! Mandelbrot.txt вот таком виде:

Mandelbrot txt
Mandelbrot txt
  • А VK_BACK (это та самая клавиша НАД Enter, Backspace) - читает Mandelbrot.txt (читаем три строки из файла) и запускает на экран.

Мы не можем видео, только картинки. Множество Мандельброта фрагмент
Мы не можем видео, только картинки. Множество Мандельброта фрагмент

github: Download Latest Version Windows And Source code