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


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

Yakim (Watco... : (2 дней назад) бугага
lz : (5 дней назад) Вытаскивал из блока.
lz : (5 дней назад) Блэт, мои серваки на амазоне под раздачу попали.
Yakim (Watco... : (2 недель назад) :ph34r:
Гость : (4 недель назад) Благодарю :) (предпочитаю постоянный стабильный заработок)
Yakim (Watco... : (4 недель назад) пхахаха
lz : (4 недель назад) Может быть, хочешь знать, как поднять бабла?
lz : (4 недель назад) Кстати, а проблем с доступом к джойказино у тебя нет?
lz : (4 недель назад) Активировал.
Гость : (4 недель назад) Проблемы с активацией аккаунта на форуме... =)
Yakim (Watco... : (19 Март 2018 - 21:37) :ph34r:
Yakim (Watco... : (01 Февраль 2018 - 21:44) ?
Yandersen : (01 Февраль 2018 - 19:04) Проблемы?..
Yakim (Watco... : (31 Январь 2018 - 13:18) Какие проблемы?
lz : (30 Январь 2018 - 16:17) Какие проблемы? Проблемы с другими движками?
GranMinigun : (30 Январь 2018 - 12:45) Где я предлагал заняться рефакторингом? Я спрашивал, в чём именно проблемы.
Гость : (30 Январь 2018 - 07:55) пускай они там как нибудь сами, без меня)
GranMinigun : (29 Январь 2018 - 21:19) Анрил с видимым исходным кодом таки. Но да, у СруДвижка только сырцы самого движка и свободны. А что конкретно за проблемы в коде СруДвижка? Я видел, что у них в планах провести рефакторинг в ближайший апдейт или два. С точки зрения инструментария, к слову, СруДвижок серьёзно подтянулся в последних версиях, я даже решил таки поближе ознакомиться. (А вообще, мне он понравился графическими технологиями, особенно подходом к освещению.)
Yakim (Watco... : (29 Январь 2018 - 18:01) люто плюсую Егор)
lz : (29 Январь 2018 - 14:29) Движок большой, функционала много, код качественный (не как у крузис енгине) и всё такое.
lz : (29 Январь 2018 - 14:28) Анреал открытый, взрослый, на С++. Пока проект некоммерческий денег заносить никому не надо.
lz : (29 Январь 2018 - 14:27) Да не, на самом деле у меня даже где-то описано, что графический движок можно заменить при необходимости.
lz : (29 Январь 2018 - 14:27) Потому что анреал - офигенная тема.
GranMinigun : (29 Январь 2018 - 01:03) Кстати, Егор. А почему выбор движка пал именно на UE4? Какие-то предпосылки к этому были?
lz : (27 Январь 2018 - 18:39) Я подумал на карту механоидов побольше добавить для фана, а надо ж запаковывать ещё.
lz : (27 Январь 2018 - 18:39) Спс, это я и писал)
GranMinigun : (27 Январь 2018 - 18:20) Только распаковщик. Сторонний. Точнее, его создал lz.
Гость : (27 Январь 2018 - 03:45) а интересно, есть ли где упаковщик для м1? в сдк или может где встроен в саму игру или редактор
Folgen : (19 Январь 2018 - 08:31) Спс.
GranMinigun : (19 Январь 2018 - 05:43) Готово. Добро пожаловать на форум, механоид.
GranMinigun : (19 Январь 2018 - 05:42) Указать, кого именно активировать, например.
Гость : (19 Январь 2018 - 00:49) Активируйте акк. Хз, нужно что-либо указывать дополнительно для этого в чате, или админы сами всех подряд активируют, кто в очереди на активацию?
GranMinigun : (13 Январь 2018 - 05:42) https://forums.unrea...sed-on-gis-data
Yakim (Watco... : (09 Январь 2018 - 00:24) Аа да? Ну окей)
GranMinigun : (08 Январь 2018 - 20:06) А это даже не обсуждается!
Yakim (Watco... : (08 Январь 2018 - 19:55) А кто сказал что мы пьянели?)
GranMinigun : (08 Январь 2018 - 19:48) Ну что, товарищи, протрезвели?
Yakim (Watco... : (02 Январь 2018 - 20:56) сяп)
Гость : (01 Январь 2018 - 23:57) Егорыч на праздники с каникул вернулся. За это тост! Всем маны!
lz : (30 Декабрь 2017 - 23:52) Наоборот.
Гость : (30 Декабрь 2017 - 23:16) Позвольте уточнить, для будущего наркомана прошлое это будущее или наоборот?
lz : (30 Декабрь 2017 - 22:08) Как ты его поймаешь, когда он знает, где ты его будешь ловить?
GranMinigun : (30 Декабрь 2017 - 09:12) Ловите наркомана из будущего!
PA3UJIb : (30 Декабрь 2017 - 06:37) С новым 2018 годом! А то старый-то 2018 мы и не видели даже
Yakim (Watco... : (29 Декабрь 2017 - 19:46) С наступающим)

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

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

graphics ray tracing rasterization lighting

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

#21 OFFLINE   PA3UJIb

PA3UJIb

    Серый

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

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


просто пирамиду видимости в экран всовываешь при рисовке тени, да?

Да, именно этот способ я пользую.


 


#22 OFFLINE   Yandersen

Yandersen

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

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

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

Ну так тогда причём здесь размер экрана? Пирамида будет просто немного другой формы и всё. Текстура тени может быть любого размера, и обычно её квадратной делают с размерами кратными степени двойки (архаизм с времен ГЛ1, когда non-POT текстуры не поддерживались), в то время как вьюпорт любым может быть.



#23 OFFLINE   PA3UJIb

PA3UJIb

    Серый

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

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

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

Вот так: Прикрепленный файл  shadowDemo.7z   1,9МБ   18 - Раз(а) скачано

Исходники тут: Прикрепленный файл  shadowDemo_src.7z   110,54К   17 - Раз(а) скачано


 


#24 OFFLINE   Yandersen

Yandersen

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

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

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

Такся...

 

1) Шейдер shadowmap.fs - шо за шляпные извращения сделать границы текстуры мягкими, когда подобное поддерживается аппаратно? Нужно лишь фильтр текстуры на GL_LINEAR выставить. На выходе получишь стандартный vec4 из которого выбираешь первый компонент.

 

2) Вершинные шейдеры (*.vs) - достаточно объявить входной аттрибут 4-хкомпонентным вектором, чтобы 4-я компонента автоматом была равна 1, даже если прога пихает 3-хкомпонентые вектора шейдеру.

 

3) Шейдер shadowmap.vs - трансформаций и матриц слишком много. Зачем тебе отдельная матрица для нормалей? Юзай ту же, что и для вершин - если у вектора 4-я компонента равна 0, то трансформация эквивалентной получается.

 

4) ехе: малацца, кульно! Но невнятна тёмная (не чёрная) полоса на полу по диагонали.

 

5) Доставило:

    // проверка программы на валидность
    if (!mShaderMgr->validateProgram(_program))

Не надоело ещё комменты на русском писать?  :D  Типа, русскими буквами английские термины легче воспринимаются?  :D  Ну, написал бы хоть:
 "проверка шейдерной программы на применимость при данных настройках ОпенГЛ".  :)

 

6) Бинденье текстур, вершинных аттрибутов и цветовых аутпутов - прошлый век. Юзай layout квалифаер чтоб прям в шейдере указывать, в каком слоте нужная текстура сидит, из какого слота вершинный аттрибут вытаскивать и в какой по счёту таргет фреймбуффера писать цвет.

А в проге просто биндни текстуру туда один раз и пусть в том текстурном слоте окалачивается вечно. В случае с depth-текстурой идеальное решение - создал, прицепил, настроил и забыл.

 

7) При рендере в ФБО вижу запрет записи цветовых компонент (glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ;) и разрешение записи в буффер глубины - это всё зачем вапще?! У твоего ФБО что, цветовые текстуры-недотроги прицеплены? Их нет - никуда ничего писаться итак не будет. Активен может быть только один ФБО, дефолтный не попортиться, пока в ФБО рендеришь.



#25 OFFLINE   PA3UJIb

PA3UJIb

    Серый

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

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

А, чорт, перешел же на объединенный файл шейдера. Эти *.vs и *.fs есть пережиток прошлого.

 


1) ...  

2) ...

Честно - не знал.


3) ...Зачем тебе отдельная матрица для нормалей? Юзай ту же, что и для вершин - если у вектора 4-я компонента равна 0, то трансформация эквивалентной получается.

Подумаю над этим.

Пока удобнее в программе матрицу перевернуть и передать её уже в шейдер.


4) ... невнятна тёмная (не чёрная) полоса на полу по диагонали.

Вот моя проблема. Никак не пойму, от чего она образуется


5) Доставило:     // проверка программы на валидность     if (!mShaderMgr->validateProgram(_program)) Не надоело ещё комменты на русском писать?

Ну, транлитировать получается короче, чем рассусоливать всё.


6) Бинденье текстур, вершинных аттрибутов и цветовых аутпутов - прошлый век. Юзай layout квалифаер чтоб прям в шейдере указывать

Поподробнее, пожалста


7) При рендере в ФБО вижу запрет записи цветовых компонент (glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) и разрешение записи в буффер глубины - это всё зачем вапще?! У твоего ФБО что, цветовые текстуры-недотроги прицеплены? Их нет - никуда ничего писаться итак не будет. Активен может быть только один ФБО, дефолтный не попортиться, пока в ФБО рендеришь.

Ок, исправлюсь


 


#26 OFFLINE   Yandersen

Yandersen

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

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

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

Поподробнее о магической уточняющей приписке, именуемой "layout".

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

layout(location = 0) in vec3 VertexCoord;
layout(location = 1) in mat3 TBN;
layout(location = 4) in uvec4 Attrib;

 

И точно также с выходными аттрибутами вершинного шейдера и входными аттрибутами фрагментного:

layout(location = 0) out vec3 ViewPos;
layout(location = 1) out vec3 Normal;

 

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

 

layout(location = 0) in vec3 Pos;
layout(location = 1) in vec3 N;
layout(location = 0) out vec4 Color;

 

Т.е. с помощью "layout" мы жёстко определяем интерфейс входных и выходных данных каждого шейдера. Всё логично.

А кстати слоты униформов точно также фиксировать можно в любом из шейдеров:

layout(location = 0) uniform mat4 ModelViewMatrix;
layout(location = 4) uniform mat4 ProjectionMatrix;

 

Следует отметить, что каждый слот имеет размер 32 байта (поэтому dvec4 займёт два слота) и не может включать более одного вектора (поэтому каждому столбцу матрицы свой отдельный слот присваивается).

 

Ну и напоследок в GLSL 4.3 разрешили, наконец, текстуры прямо в шейдерах дефолтно биндить к желаемым текстурным юнитам:

 

layout(binding = 0) uniform sampler2D DiffuseTexture;

layout(binding = 1) uniform sampler2D SpecularTexture;

layout(binding = 7) uniform sampler2DShadow ShadowMap;

 

Пнятненько?



#27 OFFLINE   PA3UJIb

PA3UJIb

    Серый

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

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

Пока колдую над демкой с тенями

Сохраняю промежуточный результат

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

 


 


#28 OFFLINE   PA3UJIb

PA3UJIb

    Серый

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

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

Да, я переключаюсь: glCullFace(GL_FRONT) когда проходит рендер в текстуру, и glCullFace(GL_BACK) когда простой рендер.

Ты правильно заметил, что "binding" добавили только в GLSL 4.2. Я прогаю в чистом GLSL 3.3, там этого еще нету.

Получилось кстати отобразить depth-текстуру

shadowDemo3_screen01.png

Ща воюю с картинкой - почему-то на разных машинах (обе с видеокартами от nVidia) рисуется разное.

shadowDemo3_screen00.png

 

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

 

Короче, вкурил исходный код урока с тенями - оказывается, всё дело в яркости материала. Пока она низкая, то неправильное самозатенение не видать. Стоит только выкрутить на поярче, то и там, и у меня видно косяки. Как это исправить пока не знаю, но буду, буду искать.

 

Демо с тенью (версия 4) Прикрепленный файл  shadowDemo_v4.7z   1,91МБ   4 - Раз(а) скачано

Исходники Прикрепленный файл  shadowDemo_source.7z   116,83К   5 - Раз(а) скачано

 

Да, ещё вывел для себя правило - "В один проход рендера один конкретный VAO будет работать только с одной конкретной шейдерной программой"

 

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

 
Вот.
lightDemo3_screen02.png
Прикрепленный файл  lightDemo3.7z   5,27МБ   52 - Раз(а) скачано исходный код Прикрепленный файл  lightDemo3_source.7z   147,67К   53 - Раз(а) скачано
Выдалась более-менее свободная неделька на работе. Новая программка, демонстрирующая разные типы освещения. По Фонгу. по Блинну, по модели Кука-Торренса, типа Cartoon и, самый главный мой затык, normal-mapping по Фонгу и Куку.
Камера по-прежнему летает свободно (WASDQE и мышка). Есть фиксированные положения - '1', '2' и '3'. Можно также покрутиться вокруг модели стрелками 'влево'-'вправо'.
Клавиша Enter вкл/выкл вращение модели и света.
Клавиша Space вкл/выкл курсор.
Клавиша F переключает режимы отображения модели глайдера.
Клавишb F1-F6 переключают шейдеры.
Выход по Escape.
Основное здесь всё же не шейдеры с различными моделями освещения, а вынос материала за программу. Теперь можно менять некоторые параметры и текстуры в материале не прибегая к перекомпилляции всех исходников. Я буду и дальше продолжать улучшать и углублять этот подход.
Ну, и плюс мелкие доработки вроде появившегося счетчика ФПС, правильно работающего таймера в лог-файле и еще что-то там.

Сообщение отредактировал PA3UJIb: 22 Март 2015 - 10:52
Новая демка (исправлено) - 22.03.2015

 





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

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