Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,925
Записей в блоге: 2

Синтез облаков

17.01.2026, 16:32. Показов 468. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Как-то совсем закис этот раздел форума, ну ничего, вот интересная задачка.

Первая картинка - облака без теней
Вторая - сами тени
Третья - облака с тенями
Четвертая - детали

Для всех картинок данные/пиксели считаются независимо.
Требуется получить освещенные солнцем облака (как в третьей), но с хорошей деталировкой (как в четвёртой). Др словами расписать арифметику для каждого пикселя. Ясно что детали должны как-то (умно) модифицировать тень, но как?

Конечно к такой постановке можно предъявить массу претензий (особенно при желании), но практические задачи обычно таковы. В общем, как говорил Петр 1

Чтобы были корабли облака!
Спасибо
Миниатюры
Синтез облаков   Синтез облаков   Синтез облаков  

Синтез облаков  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2026, 16:32
Ответы с готовыми решениями:

Центр "облака" точек
Есть массив точек с координатами Х, У. Необходимо найти координаты наиболее "кучной" группы точек....

Посчитать площадь вокруг облака точек (с учётом области влияния точек)
Есть набор точек на плоскости. Каждая точка имеет известную область влияния, допустим в радиусе...

Построить прямоугольник по облаку точек содержащих шум
Возможно кто либо сталкивался с подобной задачей: есть облако точек прямоугольной форму, но есть...

7
59 / 59 / 4
Регистрация: 10.06.2023
Сообщений: 889
18.01.2026, 10:37
А не пробовали просто увеличить контрастность 3-го textur?
0
 Аватар для Mikle Quits
776 / 293 / 17
Регистрация: 21.01.2023
Сообщений: 487
18.01.2026, 21:05
Цитата Сообщение от Igor3D Посмотреть сообщение
Требуется получить освещенные солнцем облака (как в третьей), но с хорошей деталировкой (как в четвёртой)
В данном конкретном случае не совсем понятно, почему первая картинка СРАЗУ не детализирована, как четвёртая? Тогда четвёртая и не понадобится.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,925
Записей в блоге: 2
19.01.2026, 00:07  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
В данном конкретном случае не совсем понятно, почему первая картинка СРАЗУ не детализирована, как четвёртая? Тогда четвёртая и не понадобится.
Это ничего не меняет. Детализируя первую мы заявляем: есть какие-то локальные тени (ВЧ), и теперь надо скомбинировать их с плавными (НЧ). Все равно все сводится к этому, хоть сразу, хоть потом

Прямолинейно сложить/умножить не выходит. Напрашивается использовать локальные как "карту высоты", пока не знаю как конкретно
0
 Аватар для Mikle Quits
776 / 293 / 17
Регистрация: 21.01.2023
Сообщений: 487
19.01.2026, 08:56
Цитата Сообщение от Igor3D Посмотреть сообщение
есть какие-то локальные тени (ВЧ), и теперь надо скомбинировать их с плавными (НЧ)
Непонятно зачем ВЧ и НЧ тени получены отдельно, если их потом всё равно нужно сложить. Или предполагается получать ВЧ тени по другому принципу?
Вообще, много непонятного, точнее, недосказанного.
Для начала - как получена первая картинка? ШП, понятно, но она имеет явное насыщение.
Предположу:
1. Генерируется ШП.
2. Уровень ниже 0 отсекается (залито синим фоном).
3. Положительная часть нормализована - получаем №4.
4. Домножаем на некоторую величину>1 (с насыщением), аддитивно накладываем на синий фон - получаем №1.
Верно?
По поводу №2 вопрос: если тень получена трассировкой (что обсуждалось в предыдущей теме), то в каком направлении она велась? По картинке похоже, что слева-сверху, но тогда откуда берётся тень на самом краю вверху и слева? Была бы картинка бесшовной, можно было бы сказать, что с противоположной стороны, но она не похожа на бесшовную.
0
59 / 59 / 4
Регистрация: 10.06.2023
Сообщений: 889
19.01.2026, 09:54
Для ответа на многие вопросы не помешала бы программа, создающая первую и четвертую картинки. Если первая рисуется не разрывно, то можно попробовать рисовать градиент яркости.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,925
Записей в блоге: 2
19.01.2026, 16:22  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
как получена первая картинка? ШП, понятно, но она имеет явное насыщение.
Да, знаковый шум (несколько октав), потом простой модулятор (возможность размыть край), в итоге число. Меньше нуля - чистое (голубое) небо, больше единицы - цвет облака (белый), иначе смешивание. Конечно заливка белым имеет смысл только с тенями
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Была бы картинка бесшовной
Она и есть бесшовная. Любой шум может применяться на (практически) неограниченных площадях, создавая результаты без повторов. Это очень удобно, хотя и не решает всех проблем с разнообразием.

Не по теме:

Кстати именно это мне и непонятно в "октавном шуме" что Вы давеча объясняли. С одним кубом все ясно, но как же остальные/соседи? Ну это к слову, не стоит отвлекаться

0
 Аватар для Mikle Quits
776 / 293 / 17
Регистрация: 21.01.2023
Сообщений: 487
19.01.2026, 19:14
Цитата Сообщение от Igor3D Посмотреть сообщение
С одним кубом все ясно, но как же остальные/соседи? Ну это к слову, не стоит отвлекаться
Уж дам ответ, может пригодится. Там всё просто, вот, я когда-то давно реализовал на шарпе вышеописанный алгоритм:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    const int PSize = 512; // здесь ставим свой размер
    float[,] Noise = new float[PSize, PSize];
 
    private void Gen()
    {
      Random Rnd = new Random();
      int d = PSize >> 1;
      while (true)
      {
        for (int y = 0; y < PSize; y += d + d)
        {
          for (int x = 0; x < PSize; x += d + d)
          {
            Noise[(x + d) & (PSize - 1), y] = (Noise[x, y] + Noise[(x + d + d) & (PSize - 1), y]) * 0.5f + (float)d * (0.001f * (float)Rnd.Next(1000) - 0.5f);
            Noise[x, (y + d) & (PSize - 1)] = (Noise[x, y] + Noise[x, (y + d + d) & (PSize - 1)]) * 0.5f + (float)d * (0.001f * (float)Rnd.Next(1000) - 0.5f);
            Noise[(x + d) & (PSize - 1), (y + d) & (PSize - 1)] = (Noise[x, y] + Noise[(x + d + d) & (PSize - 1), (y + d + d) & (PSize - 1)] + Noise[x, (y + d + d) & (PSize - 1)] + Noise[(x + d + d) & (PSize - 1), y]) * 0.25f + (float)d * (0.001f * (float)Rnd.Next(1000) - 0.5f);
          }
        }
        if (d == 1) break;
        d = d >> 1;
      }
    }
Результат - бесшовный шум, можно тайлить.
Если результат нормализовать к единице - будет что-то вроде четвёртой картинки, если к большему значению (с последующим усечением), то вроде первой картинки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2026, 19:14
Помогаю со студенческими работами здесь

Прореживание облака точек
Здравствуйте Довольно много занимался подобными задачами, но вот нужна простенькая вещь - и...

Синтез ДН ФАР. Синтез БПФ
Добрый день, подскажите как реализовать &quot;Алгоритм синтеза ДН линейной антенной решетки&quot;,...

Opera представила «убийцу облаков»
Opera Software выпустила лабораторную версию Opera Unite - новой, встроенной в браузер технологии...

нарисовать рисунок неба, солнца в нём, облаков, используя такие операторы, как convas и др
Помогите нарисовать рисунок неба, солнца в нём, облаков, используя такие операторы, как convas и...

Анимация. Движение облаков.
помогите пожалуйста сделать анимацию движение облаков. нарисовать облака. и потом сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru