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

Облака и перспектива

07.01.2026, 13:35. Показов 1124. Ответов 25
Метки нет (Все метки)

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

Аттач - пример текстуры которую хочу использовать как небо в сцене. Когда камера смотрит вверх - все вполне устраивает. А вот когда видна линия горизонта - нет, выглядит неестественно. Какие есть готовые решения? Или нужно писать свой шейдер? При этом можно как использовать готовую текстуру/картинку, так и создавать ее самому, процедурно. Освещенность никак не учитывается, в эти дебри не лезем

Спасибо
Миниатюры
Облака и перспектива  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2026, 13:35
Ответы с готовыми решениями:

Перспектива, фокусное расстояние и узлы обзора
По описаловке вирутальной камеры чего то не понятно, как углы обзора связны с фокусным расстоянием....

Перспектива
Доброе время суток. Как в OpenGL отключить перспективу??

Перспектива Unity 3d Череж
Привет всем. Помогите написать скрипт, или может есть стандартный способ Как добиться...

25
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
07.01.2026, 16:58
Лучший ответ Сообщение было отмечено Igor3D как решение

Решение

Цитата Сообщение от Igor3D Посмотреть сообщение
Какие есть готовые решения?
Я делаю слой облаков в виде конуса, в середине основания которого находится персонаж. Отношение высоты конуса к радиусу основания - примерно 1/10. На конус сверху проективно наложена текстура, её даже можно скроллить, как будто облака плывут, можно сделать несколько слоёв и смешивать в шейдере.
Вот моя демка, где сделано именно так: https://disk.yandex.ru/d/fxlEQv3bPZjikg
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
07.01.2026, 20:19  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Я делаю слой облаков в виде конуса, в середине основания которого находится персонаж. Отношение высоты конуса к радиусу основания - примерно 1/10. На конус сверху проективно наложена текстура, её даже можно скроллить, как будто облака плывут, можно сделать несколько слоёв и смешивать в шейдере.
Вот моя демка, где сделано именно так: https://disk.yandex.ru/d/fxlEQv3bPZjikg
Демку посмотреть не удалось (нет вындоуз), но идея понятна, такую "шляпу" легко воспроизвести (аттач). Спасибо
Миниатюры
Облака и перспектива  
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
08.01.2026, 12:40  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Освещенность никак не учитывается, в эти дебри не лезем
Ну "аппетит приходит во время еды". Может как-то можно осветить облака источником (типа солнце), пусть примитивно? Слышал это называется self-shadow(s), облака бросают тень на себя. На землю тоже бросают, но нам это не интересно
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
08.01.2026, 12:59
В моей демке есть и динамическое освещение (а посмотреть её можно и без Windows при наличии Wine, только закинуть туда ещё Dll).
Но самозатенения там нет, этот термин вообще применяется в 3D моделям, а не к рисункам на текстуре.
Вот сымитировать боковое освещение отдельных облаков без самозатенения можно при помощи DP3 бампа. У меня в демке именно так освещается линия горизонта, которая - тоже картинка.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
08.01.2026, 14:51  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
В моей демке есть и динамическое освещение (а посмотреть её можно и без Windows при наличии Wine, только закинуть туда ещё Dll).
Можно просто скриншот? Спасибо
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Но самозатенения там нет, этот термин вообще применяется в 3D моделям, а не к рисункам на текстуре. Вот сымитировать боковое освещение отдельных облаков без самозатенения можно при помощи DP3 бампа. У меня в демке именно так освещается линия горизонта, которая - тоже картинка.
С бампом мысль понятна, но как узнать что (здесь) именно освещенный "бок"? Хотелка чтобы у облака бок/рыльце было освещено, а задняя сторона (от света) темнее. И ограничения на "только текстура/картинка" нет, мои имеджи выше - простая процедурная карта
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
08.01.2026, 16:57
Цитата Сообщение от Igor3D Посмотреть сообщение
мои имеджи выше - простая процедурная карта
По виду - обычный Перлин. Так можно же при его генерации сразу и нормалку к нему сгенерировать:

А скриншот сделаю позже, только по нему же не будет видно, что это не текстуры с освещением, а освещение в реалтайме работает.
Миниатюры
Облака и перспектива   Облака и перспектива  
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
08.01.2026, 17:49
Цитата Сообщение от Igor3D Посмотреть сообщение
как узнать что (здесь) именно освещенный "бок"?
Есть направление на солнце, перерасчитываем его в текстурные координаты, в пиксельном шейдере вычитаем из координат текущего пикселя координаты солнца, получаем направление, с какого освещён данный фрагмент. Тут ещё можно поиграться с третьей координатой, когда солнце за облаком - она максимальна, можно сделать, чтобы в тех местах, где слой облака тоньше, оно светилось.

Вот скриншот демки. Она старая, я её лет 15 назад делал, ещё на FFP.
Можно вращать\поднимать\опускать солнце, картинка динамически меняется, облака бегут, горы на дальнем плане - это цилиндр с текстурой, но свет на него падает так, как и на сетку ландшафта, неотличимо.
Миниатюры
Облака и перспектива  
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
08.01.2026, 21:21  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
По виду - обычный Перлин
Да
Цитата Сообщение от Mikle Quits Посмотреть сообщение
получаем направление, с какого освещён данный фрагмент.
Ясно, а вот дальше что? Нет никакой инфы о том насколько затенен данный фрагмент. То ли он освещен напрямую то ли свет солнца проходит сквозь толщу облака или даже соседнего облака(ов). И, главное, через какую толщу?
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Тут ещё можно поиграться с третьей координатой, когда солнце за облаком - она максимальна, можно сделать, чтобы в тех местах, где слой облака тоньше, оно светилось.
Тоньше по направлению на источник, каким-то (предрасчетным) буфером здесь не отделаться

Не по теме:

Я понимаю что объективно ответа здесь может и не быть, кроме как "пускаться во все тяжкие" с volumetric и.т.д.

Цитата Сообщение от Mikle Quits Посмотреть сообщение
только по нему же не будет видно, что это не текстуры с освещением
За это не переживайте, я Вам верю :)

0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
08.01.2026, 22:51
Цитата Сообщение от Igor3D Посмотреть сообщение
То ли он освещен напрямую то ли свет солнца проходит сквозь толщу облака или даже соседнего облака(ов). И, главное, через какую толщу?
Так я же уже написал:
Цитата Сообщение от Mikle Quits Посмотреть сообщение
сымитировать боковое освещение отдельных облаков без самозатенения
Речь шла о диффузном освещении без теней.
Да и не нужно особо это самозатенение, если только солнце на расположено практически на горизонте. Особенно когда облака - Перлин, обычный слой без башен кучевых облаков.
Цитата Сообщение от Igor3D Посмотреть сообщение
Тоньше по направлению на источник
Снизу всё равно непонятно, какая она там верхняя часть облака, поэтому спокойно считаем толщиной в направлении солнца вертикальную толщину, разницу никто не заметит.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
09.01.2026, 02:42  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Речь шла о диффузном освещении без теней.
Освещение здесь точно не диффузное, нормаль к поверхности не у дел. Мы видим не поверхность облака, а сквозь его объем. Честное (и очень может быть неподъёмное) решение - трассировать лучи проходящие сквозь его объем, считать свет в каждой точке трассы, и складывать эти самплы по альфе.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Да и не нужно особо это самозатенение, если только солнце на расположено практически на горизонте.
"Угол солнца" с Y осью = atan2(shadow_length, object_height). Напр в 9-10 часов утра он значителен, считать что солнце всегда "сверху" - слишком грубое упрощение. А так согласен: не выходит - ну значит оно и не нужно
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Особенно когда облака - Перлин, обычный слой без башен кучевых облаков.
Башни/кучевые - задача совершенно другого плана/масштаба, за рамками данной темы. Здесь хотелось бы простую (пусть примитивную) освещенность типа "у облачка рыльце ярче, попка темнее".
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Снизу всё равно непонятно, какая она там верхняя часть облака, поэтому спокойно считаем толщиной в направлении солнца вертикальную толщину, разницу никто не заметит.
А как поможет это (грубое) упрощение? Шейдим точку, она внизу облака или вверху? Придется видимо топать по лучу, направление = проекция вектора (точка - источник) на поверхность, пока облако не кончится. Чем больше расстояние по лучу - тем меньше света в точке. Не вдохновляет: гемора полно, а толку чуть. Как думаете?
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
09.01.2026, 09:31
Лучший ответ Сообщение было отмечено Igor3D как решение

Решение

Цитата Сообщение от Igor3D Посмотреть сообщение
Придется видимо топать по лучу, направление = проекция вектора (точка - источник) на поверхность, пока облако не кончится
Зачем? Ведь при генерации Перлина мы и получаем его толщину (то моё ЧБ изображение). Это потом, перекрашиваем, получаем белые облака на синем фоне.
Вот я добавил к этим облакам диффузный DP3 свет, по той, что выше, нормалке.
Точно так же можно подсветить тонкие края облаков по принципу - чем ближе к солнцу, тем ярче.
Миниатюры
Облака и перспектива  
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
09.01.2026, 20:22  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Вот я добавил к этим облакам диффузный DP3 свет, по той, что выше, нормалке.
Несомненно, прогресс, смотрится гораздо интереснее. Но затемнения так не получить. Нормаль слишком локальна/неустойчива, а нужен довольно плавный градиент затемнения. Может как-то подгладить нормали?
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
09.01.2026, 20:45
Цитата Сообщение от Igor3D Посмотреть сообщение
Может как-то подгладить нормали?
Блур. Только блурить не нормалку, а сам шум перед тем, как из него генерируется нормалка.
А можно вообще схитрить - сам ШП, это, фактически, октавный шум, его алгоритм построения уже содержит стадию, когда шум ещё не содержит мелких деталей. Можно на этой стадии и выдернуть данные для построения нормалки.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
16.01.2026, 01:28  [ТС]
Попробовал самплить по лучу на источник (аттач). Картинка конечно стала интереснее/богаче, и по скорости приемлемо, но вылазит немало проблем, напр

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

В общем
Близок локоть да не укусишь
Миниатюры
Облака и перспектива   Облака и перспектива  
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
16.01.2026, 08:10
Получилось хорошо. Но, думаю, этого можно достичь и проще.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
16.01.2026, 16:30  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Получилось хорошо.
Ну как.. явно "лучше чем было" (первый имидж без теней), а объективно ничего особо хорошего нет. Хотелось бы как-то реагировать на разный "вектор солнца", сейчас это только в плоскости XY (грубо говоря). Напр солнце впереди или позади камеры - должны быть разные рез-ты

Цитата Сообщение от Mikle Quits Посмотреть сообщение
Но, думаю, этого можно достичь и проще.
Вообще-то хотелось бы поговорить о том "как сделать лучше" Но "проще" тоже годится. Необязательно предъявлять рез-т/картинки, понимаю что это может быть сложно, поясните идею.

Бамп не годится, в смысле им можно украсить освещенную сторону, но теней он не сделает. Кстати о птичках: а почему бы не генерить нормали бампа прямо на месте, зачем таскать карту? Или все-таки "быстрее"? Ладно, это дело техники

А кроме бампа др мыслей я как-то не видел (или не понял). Что у Вас есть?
0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
16.01.2026, 17:01
Цитата Сообщение от Igor3D Посмотреть сообщение
хотелось бы поговорить о том "как сделать лучше" Но "проще" тоже годится
Я завёл речь о "проще" потому, что это изначально базируется на шуме Перлина, ещё и, судя по всему, генерируемом на лету.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
17.01.2026, 00:59  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Я завёл речь о "проще" потому, что это изначально базируется на шуме Перлина, ещё и, судя по всему, генерируемом на лету.
Не очень понял что Вы хотели этим сказать. Да, на лету, я особо не стеснен скоростью, могу позволить 1-2 сек на кадр, иногда и больше. Или Вы предлагаете использовать др базовый фрактальный шум? Там свои плюсы/минусы, но совершенно точно что шум сам по себе принципиальных проблем не решит.

Цитата Сообщение от Igor3D Посмотреть сообщение
- сейчас вектор на свет (практически) перпендикулярен взгляду камеры. Неясно что делать при других раскладах
- нужно как-то создать "эффект объема", сейчас это срез/сечение
С первым пусть не знаю как, но какие-то возможности есть, нужно управлять длиной трассы и модулировать получившееся значение. Вот со вторым есть о чем поговорить. Дело в том что в области тени должен быть не только градиент (это само собой), но и какие-то вариации, часто низкочастотные. "Только градиент" (как сейчас) смотрится все-таки монотонно и выдает срез/сечение. Форма облака принципиально одинакова в любом сечении, с фронтальной стороны оно тоже имеет всякие завитушки. Большинство из них съедается тенью, но не все

Не по теме:

Эх, тут бы пару свежих идеек, типа "young blood". А то все "игры пилят", нафиг они нужны :(

0
 Аватар для Mikle Quits
766 / 283 / 17
Регистрация: 21.01.2023
Сообщений: 436
17.01.2026, 10:32
Цитата Сообщение от Igor3D Посмотреть сообщение
могу позволить 1-2 сек на кадр
Так это не реалтайм. Тогда не так важно.
Цитата Сообщение от Igor3D Посмотреть сообщение
Или Вы предлагаете использовать др базовый фрактальный шум?
Дело не в самом шуме, а в его дальнейших преобразованиях, которые могут быть достаточно сложными и не очень просто реализуемыми на шейдерах. А на процессоре - проблем нет, но медленнее.
Я, к слову, использую не конкретно шум Перлина, а просто октавный шум. Но разницы в конечной картинке нет, разница в алгоритме. И октавный шум очень легко делается сразу бесшовным.
Вот я сделал, как ранее предлагал - нормали сгенерированы из заблюренного шума. Получилось интереснее, чем в п.15 без всякого прохода по лучу.
Цитата Сообщение от Igor3D Посмотреть сообщение
нужно как-то создать "эффект объема"
Цитата Сообщение от Igor3D Посмотреть сообщение
тут бы пару свежих идеек, типа "young blood"
Идея - генерировать 3D, а не 2D октавный шум.
Миниатюры
Облака и перспектива  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2026, 10:32
Помогаю со студенческими работами здесь

Перспектива
Добрый день! Пишу программу которая позволяет смотреть на предмет с разных сторон. Застряла на...

Ретро перспектива
Добрый день Мелькнула мысль, пусть кажется наивной, во всяком случае на первый взгляд. См аттач...

Создаю Mesh на основе облака точек заданной толщины
Здравствуйте. Создаю Mesh на основе облака точек таким образом: Mesh mesh = new Mesh(); ...

Построение поверхности из облака точек формата файла ASCII
Добрый день, подскажите пожалуйста через какую программу лучше построить поверхность из облака...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru