![]() |
Ответ: Clear Engine (Понятный движок)
я делаю так
Код:
vec3 normtex = texture2D(normalmap, IN_TexCoords).xyz; некоторые любят переводить лайты в тангент спейс, но мне кажется так удобнее. |
Ответ: Clear Engine (Понятный движок)
Ребят посмотрите мой шейдер
PHP код:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Цитата:
Цитата:
Цитата:
-- а, я понял, ты переводишь направление от лайтов в тангент спейс в VS, все равно непонятно что за прибавление вертексной нормали в PS тогда, плюс направление от поинтлайтов считать в VS на сцене из кубов это жесть по-любому. |
Ответ: Clear Engine (Понятный движок)
Я не сильно силен в такой математике, что то как то по формулам набросал. Мажешь помочь с этими шейдерами? Что как правильно написать
|
Ответ: Clear Engine (Понятный движок)
лучше помоги ему с математикой
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
TBN!
|
Ответ: Clear Engine (Понятный движок)
лучше скажи в теории как ты понимаешь как работает бамп.
я тебя поправлю где надо. без понимания всё время придётся копипастить. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
мы накладываем обычное попиксельное освещение, но нормали берем из текстуры, учитывая нормаль самого объекта и матрицы нормали... как это все между собой связывается в коде, я понятия не имею, да и не видел по этому поводу простых для понимания мануалов |
Ответ: Clear Engine (Понятный движок)
Цитата:
Нормалмапа - находится в пространстве TBN, которое образуется одной матрицей, сделанной из тангента, бинормали и нормали. Эти три хреновины - тупо 3 перпендикулярные друг другу вектора. Каждый пиксель нормалмапы это вектор в их системе координат. Синий канал это насколько вектор повёрнут в сторону нормали, красный и зеленый - в стороны других осей (в каждом пикселе). Только щас заметил, ты не декодируешь сам вектор из карты то. Нужно всегда делать nmap = nmap*2-1, чтобы из диапазона [0;1] перевести каждый компонент вектора нормалмапы в диапазон [-1;1]. Ну вот, короче тебе надо соорудить TBN матрицу из трёх векторов и умножить нормалмапу на неё - тогда ты переведёшь нормалку в ворлдспейс, или (как у тебя было) умножить ворлдспейсовые вектора направлений света на неё (в другой последовательности), тогда ты переведёшь их в пространство нормалки и осветишь там. В блице TFormNormal видел? Ну вот, там были локальные координаты и глобальные, а тут локальные координаты задаются TBN матрицей на каждый вертекс/фрагмент и надо тформить чтобы всё оказалось в одном пространстве в результате. Я бы по-прежнему рекомендовал перевести нормалку в ворлдспейс, потому что это 1 умножение матрицы против кучи умножений на каждый лайт в цикле. Направление света от поинт лайтов надо считать в PS! Если у тебя не супер тесселлированная геометрия. Повертексно это слишком убого и ты вообще не поймёшь правильно или неправильно. |
Ответ: Clear Engine (Понятный движок)
спасибо понятно объяснил =) да и статейку на геймдеве нашел интересную завтра попробую запилить )))
|
Ответ: Clear Engine (Понятный движок)
Заметил такую вещь. Исследовал модели освещения и юзал примеры шейдеров. Так вот что означает glModelViewMatrix? Это view_matrix * model_matrix или только model_matrix? Потому что если заюзать view_matrix * model_matrix, то изображение становится не правильное...
Еще: почему такой странный эффект может быть? Чем дальше двигаем свет, тем ярче светит O_o http://rutube.ru/video/7f47e12f23b3c...c964c7730847c/ PHP код:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
затухание по нормальному задаётся формулой 1/(dist*dist) http://en.wikipedia.org/wiki/Inverse-square_law Цитата:
Цитата:
---- а, ещё забыл, blinn отстойно юзать дефолтный, т.к. он не учитывает закон сохранения энергии, это ещё причина уярчений неадекватных. в реале чем сильнее рассеивается блик, тем он менее интенсивный. покури-с: http://www.rorydriscoll.com/2009/01/...tion-in-games/ http://www.thetenthplanet.de/archives/255 |
Ответ: Clear Engine (Понятный движок)
с затуханием получилось, нос gl_ModelViewMatrix непонятно, всетаки нужно учитывать VIEW_MATRIX или нет, если не брать ее при расчете позиции вершины, то все ок.
|
Ответ: Clear Engine (Понятный движок)
При умножении матриц в общем случае A x B != B x A.
Попробуй model_matrix * view_matrix. Без VIEW_MATRIX будет все ок, но камеру нельзя будет перемещать в пространстве. |
Ответ: Clear Engine (Понятный движок)
Цитата:
Запилил почти нормально, но вот смущает следующее: ![]() низ какой то странный, а бока вроде бы нормальные ![]() ![]() PHP код:
|
Ответ: Clear Engine (Понятный движок)
выведи в рендер TBN, сделай 3 картинки на каждый вектор, скорее всего трабла в них.
|
Ответ: Clear Engine (Понятный движок)
заскейль векторы перед выводом из [-1;1] в [0;1] чтоб понятнее:
vec*0.5+0.5 |
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
на глаз вроде нормальные.
попробуй перенести всё что связано с лайтами из VS в PS и посмотреть стало ли ок. повертексные маленькие поинт лайты внутри кубов - это повод для косяков. |
Ответ: Clear Engine (Понятный движок)
Цитата:
PS. рендер с блендера ![]() |
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
как блендишь лайтмапы с дифузом?
|
Ответ: Clear Engine (Понятный движок)
Цитата:
у меня вот еще вопрос. Как вот запиливают поддержку разных видов освещения да и еще с разными типами теней. Не писать же на каждый случай шейдер. (у меня уже штук 5). Или пишут один убер шейдер, но как тогда с производительностью. Да и слишком много команд в шейдер тоже не засунешь... |
Ответ: Clear Engine (Понятный движок)
Цитата:
Цитата:
- можно юзать деферед (хотя я не фанат) |
Ответ: Clear Engine (Понятный движок)
Ну генерировать это понятно. Просто каждый кадр я задаю в каждый зарегестрированый на сцене шейдер информацию о источниках освещения, и неизвестно будет ли использоваться шейдер или нет... нужно запилить установку значений по требованию тогда.
|
Ответ: Clear Engine (Понятный движок)
мне вот всегда было интересно почему все используют нормалкарты в тангентспейсе. ведь для статики можно было бы использовать и в обектспейсе нормалкарты. но нет. никто не использует.
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
В DX10 и далее это ещё более удобно обёрнуто в constant buffers. Основная философия - разделить константы на группы по частоте обновления. Цитата:
грубо говоря, с тбн у нас уже идеально гладкие нормали объекта, и мы им добавляем доп отклонение 8 битной нмапой лишь, а так тебе придётся все нормали на объекте задавать 8 битами. я делал для террейна нормали 8 битные ворлдспейс, смотрелось херово, пришлось юзать 16 бит хотя бы. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
аналог констант буферов есть вроде, но это в современном ГЛ, не знаю как в мобилковом (в вебном нет):
http://www.opengl.org/wiki/Uniform_Buffer_Object Цитата:
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Собрал под win32, можете потыкать, там 3 сэмпла. Ну и собраная либа с инклюдами https://bitbucket.org/pozitiffcat/cl...ase_alpha2.zip
|
Ответ: Clear Engine (Понятный движок)
|
Ответ: Clear Engine (Понятный движок)
Свет както неправильно всёже работает. Я его приблизил вплотную к стене а он затух.
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Вот что реально напрягает - спекуляр. Ваще что такое спекуляр? Это фэйклвое заблюреное отражение источника света на поверхности. А как предметы в зеркале отражаются, представь? Точно не так как у тебя в семпле. Щас блик как-то странно тянется к центру нижней границы экрана. В юньке спек выглядит так: ![]() |
Ответ: Clear Engine (Понятный движок)
ARENSHI, у тебя на этом скрине Y у нормалмапы инвертирован.
|
Ответ: Clear Engine (Понятный движок)
да, я никак не могу победить этот странный эффект
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Нормалмапа не моя. Я просто разместил текстуру
|
Ответ: Clear Engine (Понятный движок)
Я вот смотрел игры на мобилки в них есть bump. И у них выдает 30 fps, а моя демка выдает 12 fps ЧЯДНТ? Разумеется проверял без этого эффекта и фпс был нормальный даже с десятью скинеными модель камни по 50 костей в каждой. Вывод что тормозит шейдер но там тормозить то нечему
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
каким образом я посмотрю скомпиленый шейдер на ios?
убрав спекуляр увеличилась скорость с 12 до 21 фпс. ВОТ ЧЕ ТУТ МОЖЕТ ТОРМОЗИТЬ! PHP код:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
Наверное степень? Попробуй обойтись без нее. Почитай об оптимизации шейдеров на ассемблере. Еще об особенностях чипов, может они туго справляются с некоторыми операциями. |
Ответ: Clear Engine (Понятный движок)
pozitiffcat, не думал о компиляции движка на WP 7?
|
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Решил попробовать новую концепцию. Вспомнил старые добрые движки, где выводом графики занимался программист, т.е., у нас не было графа сцены и мы в любом месте игрового цикла могли вызвать, что-то типа drawImage(x, y, image) и у нас нарисуется картинка. Это очень удобный механизм для рисования 2д графики. Немного подумав, я решил, что в 3д такая реализация тоже может быть удобной. Я решил попробовать сделать такую реализацию движка параллельно с Clear Engine. Посмотрим, что получится удобней.
Особенно хорошо будет, то, что мы сами можем создавать нужный нам цикл рендера, правда такой движок уже не будет иметь право называться легким, но на основе него можно будет писать свои графы и рендер-циклы. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Проблемы с альфа сортами, и рендером батчами под одним материалом для одного прохода и миниманизации переключений стейтов, подобное ляжет на плечи разраба.
Также менеджить свой стейт - это круто в плане контроля и возможностей, но очень не удобно и требует дополнительной разработки от самого разраба, что приведёт его к переписке того же стейт менеджера, но по своему. Имхо, стейт менеджер должен быть конкретным и простым, реализующим всё что нужно и наипростейшими методами. Удобство работы имхо на первом месте, тогда и не нужно будет думать о своём стейт менеджере. |
Ответ: Clear Engine (Понятный движок)
Цитата:
В 2Д так делали потому что в каком порядке отрендеришь картинки, в таком они и будут друг на друге лежать. В 3Д этим занимается Z-буфер, и хоть ты в каком порядке отрендеришь, всё будет так же, как и с Z-буфером. Логично рендерить группами с одинаковыми текстурами/шейдерами, чтоб не гонять их каждый раз и этим стоит заниматься движку. Альфе нужна сортировка, но с этим опять же лучше пусть двиг справляется. В-общем я не вижу что такого может прогер сделать крутого, что не может сделать за него двиг и смысла забивать прогеру голову этим. Разве что в FPS ствол поверх всего отрендерить, но ради 1 ствола огорода не городят. |
Ответ: Clear Engine (Понятный движок)
У меня в движке есть граф сцены, что совершенно не мешает рендерить в ручную объекты.
Код:
camera->RenderEntity(entity); |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
загрузка изображения1 в атлас - получение текстурной координаты загрузка изображения2 в атлас - получение текстурной координаты билд атласа (создает текстуру внутри себя) создание изображение1, передав в атлас текстурные координаты1 создание изображение2, передав в атлас текстурные координаты2 |
Ответ: Clear Engine (Понятный движок)
Цитата:
Опытом проверится... на самом деле хз. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
добавил доки, правда их там мало не все успел написать
https://bitbucket.org/pozitiffcat/sl...oc/?at=default реализовал кучу функционала, которым можно воспроизвести работу Clear Engine. И даже более, единственное ограничение, это формат вершины, 96 байт positions, normal, texcoord, texcoord2, joint, weight, binormal, tangent. |
Ответ: Clear Engine (Понятный движок)
Цитата:
|
Ответ: Clear Engine (Понятный движок)
Цитата:
хотя как вариант хранить в поверхности еще и формат описывающий ее... --- хоят не не вариант. Я не могу для всех шейдеров хранить attribute location в поверхности |
Ответ: Clear Engine (Понятный движок)
ни одной модели не нужны все эти данные, большинство моделей не имеют скининга, а те кто имеют - редко требуют вторые UV.
тангент и бинормал ужимаются в один vec4. -- со страницы 19 можно почитать как жестоко ужимали вертексы в just cause 2: http://www.humus.name/Articles/Perss...GameWorlds.pdf вообще тут нет идеального варианта, в одном проекте могут юзаться разные структуры. |
Часовой пояс GMT +4, время: 03:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot