Перейти к содержимому


Свернуть чат Чат Открыть чат во всплывающем окне

Yakim (Watco... : (неделю назад) :D
Yakim (Watco... : (неделю назад) nope
Yandersen : (неделю назад) Айаяй. Поди Якимко заспамил чат стикерами. :)
Yandersen : (неделю назад) Да лан, тут каждый день кто-нить из админов заглядывает. Как пропустили?
Nextovoy : (неделю назад) Я писал
Гость : (неделю назад) Сорьки, что так у нас. Чего три года так и не попытался в чат писнуть? :)
Nextovoy : (2 недель назад) Спасибо
lz : (2 недель назад) Активировал.
Гость : (2 недель назад) Активируйте его.
Гость : (2 недель назад) Мой профиль - Nextovoy
Гость : (2 недель назад) Написать в чат. Профиль в ручную админы активируют.
Гость : (2 недель назад) Ох уж эта дурацкая привычка писать всё раздельно засоряя чат. Это всё классно, конечно, но ребята, одменестраторы, так называемые. Третий год пытаюсь зарегистрироваться (буквально, третий) на этом форуме, но ПИСЬМО С ПОДТВЕРЖДЕНИЕМ НА ПОЧТУ ТАК И НЕ ПРИХОДИТ. Что делать?
Гость : (2 недель назад) Перешёл я всё же по ссылке Redoctor'a...
Гость : (2 недель назад) Пора уже M4
Гость : (3 недель назад) итак м3
lz : (3 недель назад) Мы тебе и тут передадим.
Гость : (3 недель назад) Зачем в телеграмме делать?!Я вот например не могу зайти,написать в чат,подписаться и не только у меня это.
Redoctor : (4 недель назад) https://vk.com/away....0_23001&cc_key=
Redoctor : (4 недель назад) Тогда в телеграмме в поисковике набери Механоиды 3
Гость : (4 недель назад) Не открывается.
Redoctor : (4 недель назад) https://t.me/mechanoids3 Для тех кто в танке.
Yakim (Watco... : (15 Июнь 2018 - 01:33) КРУЗИИИС!!!11

Изображение
lz : (15 Июнь 2018 - 00:09) КРУЗИС!
lz : (15 Июнь 2018 - 00:09) ЗИС
lz : (15 Июнь 2018 - 00:09) КРУ
Yakim (Watco... : (14 Июнь 2018 - 14:50) Крузис и Королева тоже не в моем вкусе, а проигрывать нечего =D
lz : (14 Июнь 2018 - 13:55) Конечно, полюбить - так королеву, проиграть - так миллион, сделать - так крузис.
smt005 : (14 Июнь 2018 - 00:22) И от третьего лица тоже можно сделать простенькую игру. Простая игра это лучше чем ничего.
smt005 : (14 Июнь 2018 - 00:21) А, ты хочеш что-бы хит был, с "Crysis" графоном и контентом на 100500 часов игры?
Yakim (Watco... : (14 Июнь 2018 - 00:18) Ни топдовншутеры, ни стратежки)
Yakim (Watco... : (14 Июнь 2018 - 00:15) Не, спасибо, не в моем вкусе=)
smt005 : (13 Июнь 2018 - 23:13) Помнится за пару недель от скуки сделал. Делал по вечерам.
smt005 : (13 Июнь 2018 - 23:13)
smt005 : (13 Июнь 2018 - 23:11) Или например такое, только с моделями из игры -> https://youtu.be/RFDdN5dcX8s
smt005 : (13 Июнь 2018 - 23:07) Yakim, да сами себя пните... :) Сделайте что-то, хотя бы уровня "Scrolling TopDown Shooter".
Yakim (Watco... : (12 Июнь 2018 - 22:17) так что, думаю завтра с утреца стартану марафон)
Yakim (Watco... : (12 Июнь 2018 - 22:15) хе-хе, не сомневайся, я в чате по уе уже поинтересовался, сказали обалденный сериал)))
Yandersen : (12 Июнь 2018 - 20:56) Оооооо, поди ща залипнет на пару дней, стопудофф. :)
Yakim (Watco... : (12 Июнь 2018 - 18:28) Окей гляну)
Yandersen : (12 Июнь 2018 - 16:23) Сериал Пространство посмотри. Не по части Мехов, просто шикарен, авось ману доставит.
Yakim (Watco... : (11 Июнь 2018 - 18:50) Дуст и ты уже закаленные и пустые, надож где-то ману доставать)))
Yakim (Watco... : (11 Июнь 2018 - 18:49) Думаю, кого быть пнуть, что-бы тот пнул в ответ да по сильнее.
Yakim (Watco... : (11 Июнь 2018 - 18:48) Давненько и не маленько хе-хе, делать нечего, прокрастинирую =)
Yandersen : (11 Июнь 2018 - 17:46) Якимка, ты там шо, упоролсо маленько? Чиво картинами опспамилсо?
Yakim (Watco... : (09 Июнь 2018 - 22:27) Изображение

Фотография
- - - - -

Моделирование освещения

graphics ray tracing rasterization lighting

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 27

#1 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 09 Декабрь 2014 - 20:21

Давненько не встречал таких качественных, классных, доступных для понимания наглядных презентаций:

Background: Physics and Math of Shading

Отлично объясняет магию света и её моделирование в компьютерной графике, советую всем насладиться.  :)

 

Кстать, на с.55 там дана таблица цветов некоторых металлов.



#2 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 10 Декабрь 2014 - 18:46

Круто.

Я как раз только точечный источник света докурил. По модели Фонга.

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


 


#3 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 10 Декабрь 2014 - 20:40

Только не говори, что ты засел на первых глях и куришь АПИ светильников. В новых глях всё это убрали - в шейдерах как хочешь освещение прописывать можно, никаких встроенных переменных для структур светильников больше нет начиная с 3-й версии. Точечный светильник можно так охарактеризовать:

 

vec3 LightPosition; //xyz

vec3 LightIntensityAt1meter; //RGB

 

Дальше для вычислении интенсивности освещения в интересующей тебя точке, в вершинном (или прямо в пиксельном) шейдере прописываешь так:

 

vec3 PointPosition; //xyz

vec3 PointToLight = PointPosition - LightPosition;

vec3 IntensityAtPoint = LightIntensityAt1meter / dot( PointToLight, PointToLight );

 

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



#4 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 10 Декабрь 2014 - 21:08

Только не говори, что ты засел на первых глях и куришь АПИ светильников

Нет, конечно.
В общем выходит, что материал это 4 цветовых вектора + 2 коээфициента - прозрачность и блеск. Эти цветовые вектора умножаются на соответствующие вектора от источника, а результат уже обыгрывается параметрами затухания источника. Ща домучаю прожектор и буду искать как можно соединять источники на одном материале.


 


#5 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 10 Декабрь 2014 - 22:02

Не пойму, почему 4 цветовых вектора? У меня 3 получается:

1) diffuse (в альфу привык пихать прозрачность) - интенсивность зависит от угла падения лучей, но не зависит от угла обзора;

2) specular (в альфу логично пихнуть "gloss" - отполированность, 1 - зеркальное отражение, 0 - максимально размытый блик) цвет отражённого блика - зависит от угла падения света и угла обзора;

3) emission - интенсивность самоэмиссии (3 компоненты).

 

Амбиенту ты имел в виду как 4-й вектор? ИМХО, искусственная она слишком, эта компонента, не место ей среди материалов.



#6 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 11 Декабрь 2014 - 16:04

Ambient нужный и важный компонент. Она же представляет собой освещенность материала.

Diffuse это степень рассеяния света, а specular степень отражения. Сам же выше кинул сцыль на PDF с объяснениями - свет состоит из поглощенной части, из рассеянной части и отраженной части.


 


#7 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 11 Декабрь 2014 - 21:07

Свет из фотонов состоит. :ph34r:

diffuse и specular определяют, как материал рассеивает и отражает падающий на него под определённым углом свет от источника. А аmbient - это их статистический результат для всенаправленного освещения, т.е. от равномерно распределённых в объёме пространства светильников. Поэтому аmbient так близок по значению к diffuse. Это не физическое свойство материала, а статистическая эмпирическая величина.

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



#8 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 12 Декабрь 2014 - 14:46

Вот сюда положу вторую демку - она как раз про свет.

Прикрепленный файл  lightDemo2.7z   1,33МБ   22 - Раз(а) скачано

Управление камерой по-прежнему WASD+QE. Вращение мышкой.

Клавиши F1-F2-F3 переключают источники света: F1 это точечный источник, F2 направленный, F3 "прожектор".

Пробел активирует курсор.

Выход по нажатию Esc или кнопке закрытия окна (ну, или Alt+F4)

Прикрепленный файл  lightDemo2_source.7z   37,02К   24 - Раз(а) скачано

Сюда же добавлю исходники

 

Сообщение отредактировал PA3UJIb: 13 Декабрь 2014 - 07:50
PA3UJIb: добавлены исходники

 


#9 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 13 Декабрь 2014 - 09:11

Малацца, Разужиб, самообучение твоё возбуждает у меня уважение, хороши коды. Я помню писюки от smt005 - вот то комедия была: конструкторы без деструкторов, опечатки, транслиты в коде, комменты, логически не связанные с копипастнутыми невесть откуда кусками кода... В общем, чувствуется, что разбираешься, вникнуть пытаешься, а не просто копировать непонятно что на скорую руку. Видимо, поэтому так упорно игноришь мои упрощающие жизнь хеадеры - хочешь всё сам изучить, да? Ну хоть FileGLSL.hpp подключи, чтоб шейдеры из файлов грузить - там автоматически окошко с дебаггерной инфой вылазит при ошибках в шейдере - хоть будешь знать, если косяк и что за косяк.

Идею Лога надо бы приватизировать и расфлюстратить как-нить. Помню, есть в стандартных либах какая-то функция, с помощью которой можно зарегать свою процедуру, чтоб она автоматически вызывалась при закрытии приложения. Так вот туда можно прописать закрытие файла автоматическое, а в конструктор класса лога - создание/перезапись файла лога. Тогда можно не париться о зависшем файле при вылете приложения. Ну это так, первое, что в голову пришло по теме. Просто тема хорошая. :)



#10 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 13 Декабрь 2014 - 09:21

хоть FileGLSL.hpp подключи

Пойду изучать.
 
Плин, комменты бы еще по-русски, а то пишешь-то ты по англицки, а слова располагаются всё равно по-русски.
...
while (true)
...
Сильная вещь - меня в своё время напинали за использование цикла
...
while (1)
{
...
};

FileGLSL.hpp подключи, чтоб шейдеры из файлов грузить - там автоматически окошко с дебаггерной инфой вылазит при ошибках в шейдере - хоть будешь знать, если косяк и что за косяк.

У меня при компиляции ошибки в логе все записываются. Просто ошибки шейдеров у меня не обрабатываются никак.

-----------------------------------------------------------------------------------------------------------------

Так, чего-то от темы ушли.
Хм, а вот на такой вопрос - как правильнее задавать "прожектор"? Я просто использую формулу из урока, там берется значение освещенности от точечного источника и домножается на коэффициент (косинус угла между направлением от источника и направлением самого источника, если внутри конуса прожектора, и 0, если вне конуса). А в OGRE было два угла, но как там свет себя вёл, я без понятия.
Есть ли какие соображения? А то я вчера полдня в MathCad графики строил, а найти приемлемое решение так и не смог.

Сообщение отредактировал PA3UJIb: 13 Декабрь 2014 - 10:46
добавлены комментарии в коду Шамана и вопрос про свет

 


#11 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 14 Декабрь 2014 - 05:17

Я просто использую формулу из урока, там берется значение освещенности от точечного источника и домножается на коэффициент (косинус угла между направлением от источника и направлением самого источника ...).

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

Прожекторный светильник не имеет натуральной математической модели - это точечный источник, свет которого закрывается со всех сторон, кроме одной.

 

Но вообще лучше просто взять точечный источник как есть и накладывать на результат 2Д текстуру маски с белым кругом на ней или всякими разноцветными козявками на эмулируемом стекле фонаря.  :)



#12 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 24 Декабрь 2014 - 17:25

Добавил плавное затухание по краям пятна от источника света типа "прожектор"

Было:

lightDemo2_screen00.png

Стало:

lightDemo2_screen01.png

или так даже лучше

lightDemo2_screen02.png

 

По мне так приятнее, как-то реалистичнее светит.


 


#13 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 09 Январь 2015 - 13:15

Пытался тут перед НГ отчебучить тени с помощью shadowmap. Точнее с прорисовкой сцены в отдельную Depth-текстуру, а потом ее использовании при рендеринге основной сцены.

Вот такой вопрос. Точнее, даже пожелание. Что такое FBO? В чем, так сказать, его физический смысл? А то использовать вроде использую, но надо бы конкретно понять, что оно такое.


 


#14 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 10 Январь 2015 - 10:58

FBO - это такой объект, который указывает, куда и как видюхе рендер выводить. По дефолту выпись идёт в ту область видеопамяти, которая сливается на моник. Но можно перенаправить и переконфигурить вывод на любую другую область видеопамяти - например, в текстуру чтоб рисовало. Или сразу в несколько текстур одновременно. FBO объединяет и описывает все таргеты для рисования.

Йищчё?  :)



#15 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 16 Январь 2015 - 16:14


Йищчё?

Сильно обще. Можно и еще :)

Вообще код поправил, но не могу никак избавиться от полосы затемнения, перпендикулярной направлению источника света. Вроде всё по лекалам крою, а выходит чушНЯ одна.

Буду искать косяк - ведь по-любому где-то что не поставил, какую-нить переменную не инициализировал или еще что....


 


#16 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 16 Январь 2015 - 23:21

Ну если конкретнее, то это уже примеры использования, а ты гришь ты эти ФБО итак юзаешь. Позволь догадаться, ты хочешь ФБО в класс инкапсулировать, так что тебе хочется узнать, чего в него напихать. Ну тогда вот: 8 цветовых аттачментов, 1 буффер глубины ЛИБО 1 буффер глубины@трафарет ЛИБО 1 буффер трафарета (раздельно глубина и трафарет не поддерживаются).

Рисовка может одновременно идти в таргеты лишь одного фреймбуффера. Но не обязательно во все сразу. Функция glDrawBuffers даёт выбрать, в какие таргеты активного фреймбуффера рисовать и в каком порядке. Ну вот например если у тебя 4 текстуры приаттачено к ФБО, и ты хочешь рисовать в ту, что прицеплена к аттачмент поинту №2, то делаешь так:

 

GLuint targets[4] = { GL_COLOR_ATTACHMENT2, GL_NONE, GL_NONE, GL_NONE };

glBindFramebuffer(MyFBO);

glDrawBuffers(4,targets);

 

Эквивалентно, но не так наглядно:

 

glDrawBuffers(1,targets);

 

Потому что GL_NONE - дефолт для всех неуказанных таргетов.

Можно и не рисовать цвет вообще:

 

glDrawBuffer(GL_NONE);

 

В таком случае будет писаться лишь буффер глубины, если такой аттачмент имеется.

 

О, кстать, не забудь, что glViewport не имеет никакого отношения к ФБО, так что когда переключаешься с одного ФБО на другой всегда помни вьюпорт перенастраивать. Возможно, имеет смысл размеры вьюпорта в классе ФБО хранить, кстать.

Насчёт дравбуфферов не уверен, помнит ли ФБО свои дравтаргеты, но помойму нужно указывать их каждый раз при переключении ФБО.



#17 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 18 Январь 2015 - 07:12


Позволь догадаться, ты хочешь ФБО в класс инкапсулировать

Хотеть мало, еще надо разобраться с ним до конца - не могу же зашить то, что не понимаю.


Можно и не рисовать цвет вообще:   glDrawBuffer(GL_NONE);   В таком случае будет писаться лишь буффер глубины, если такой аттачмент имеется.

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


glViewport не имеет никакого отношения к ФБО

Соответственно, карта теней зависит от размеров вьюпорта, так что приходится каждый раз убивать depth-текстуру и пересоздавать ее (предварительно отцепив от FBO).


Насчёт дравбуфферов не уверен, помнит ли ФБО свои дравтаргеты, но помойму нужно указывать их каждый раз при переключении ФБО
 

Ну и FBO пока только один.


 


#18 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 18 Январь 2015 - 09:11

Разужиб, ты имеешь в виду один ФБО плюс дефолтный? Или ты прямо в дефолтный тени рендеришь и потом в текстуру сливаешь?

Соответственно, карта теней зависит от размеров вьюпорта, так что приходится каждый раз убивать depth-текстуру и пересоздавать ее (предварительно отцепив от FBO).

Это что ещё за ересь? Каким образом размер карты теней связан с размером окна (ты ведь оконные размеры вьюпорта имел в виду)?

Текстура один раз создаётся - создание объектов есть ресурсоёмкий процесс, это не для покадровых дел. Тебе нужно просто переключаться между дефолтным и созданным ФБО, рендеря в созданный только тени, а затем теневую текстуру биндить куда там надо, переключаться в дефолтный фреймбуффер и рендерить с нею. Так что создаёшь ФБО, текстуру для теней, аттачаешь её к ФБО и затем при переключении меду дефолтным и созданным ФБО только вьюпорт и драфбуфферы настраивашь.

Текстуру тени можно, кстати, один раз забиндить в текстурный слот, скажем, №7, и забыть о ней - она там всегда будет сидеть, никуда не денется. Позволяется даже читать и рендерить в одну и ту же текстуру, шо интересно. Правда не одновременно, а то неопределённый результ может быть из-за того, что не определено в каком порядке фрагменты шейдерятся - GPU ведь щтука очень многоядерная и распараллеленная.



#19 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 18 Январь 2015 - 19:44


ты имеешь в виду один ФБО плюс дефолтный?

Да, есть же дефолтный, точно, про него не сказал.


Это что ещё за ересь? Каким образом размер карты теней связан с размером окна

Ну вот так, если не менять размер текстуры, то тени не на своих местах будут. А то и вовсе пропадают


 


#20 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 19 Январь 2015 - 03:40

Ну вот так, если не менять размер текстуры, то тени не на своих местах будут. А то и вовсе пропадают
Хуита какая-то, не связаны эти события никак, если багов нет. Так что описывай довай, как там у тебя это всё происходит. И каким макароном карту тени делаешь, тоже описывай. Способов ведь туча, но как мне кажется, ты просто пирамиду видимости в экран всовываешь при рисовке тени, да?

Хоть в моих прогах теней и нет, но теорию я знаю, могу свои пять копеек вставить, чо.






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных