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


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

Yakim (Watco... : (14 Июль 2018 - 00:06) :D
Yakim (Watco... : (14 Июль 2018 - 00:06) nope
Yandersen : (13 Июль 2018 - 22:07) Айаяй. Поди Якимко заспамил чат стикерами. :)
Yandersen : (13 Июль 2018 - 22:06) Да лан, тут каждый день кто-нить из админов заглядывает. Как пропустили?
Nextovoy : (13 Июль 2018 - 01:04) Я писал
Гость : (10 Июль 2018 - 22:42) Сорьки, что так у нас. Чего три года так и не попытался в чат писнуть? :)
Nextovoy : (06 Июль 2018 - 16:15) Спасибо
lz : (04 Июль 2018 - 19:44) Активировал.
Гость : (03 Июль 2018 - 16:30) Активируйте его.
Гость : (03 Июль 2018 - 16:30) Мой профиль - Nextovoy
Гость : (03 Июль 2018 - 16:25) Написать в чат. Профиль в ручную админы активируют.
Гость : (03 Июль 2018 - 15:47) Ох уж эта дурацкая привычка писать всё раздельно засоряя чат. Это всё классно, конечно, но ребята, одменестраторы, так называемые. Третий год пытаюсь зарегистрироваться (буквально, третий) на этом форуме, но ПИСЬМО С ПОДТВЕРЖДЕНИЕМ НА ПОЧТУ ТАК И НЕ ПРИХОДИТ. Что делать?
Гость : (03 Июль 2018 - 15:46) Перешёл я всё же по ссылке Redoctor'a...
Гость : (03 Июль 2018 - 15:41) Пора уже M4
Гость : (29 Июнь 2018 - 00:18) итак м3
lz : (28 Июнь 2018 - 16:01) Мы тебе и тут передадим.
Гость : (28 Июнь 2018 - 13:13) Зачем в телеграмме делать?!Я вот например не могу зайти,написать в чат,подписаться и не только у меня это.
Redoctor : (24 Июнь 2018 - 19:35) https://vk.com/away....0_23001&cc_key=
Redoctor : (24 Июнь 2018 - 19:34) Тогда в телеграмме в поисковике набери Механоиды 3
Гость : (24 Июнь 2018 - 19:05) Не открывается.
Redoctor : (24 Июнь 2018 - 18:00) 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

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

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






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

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