Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 26.11.2013, 10:13   #61
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

вот видео
на плоскости и без TBN сойдёт.
покажи на флипанутом кубе, затекстурь все стены одной и той же нормалкой и таскай там лайт повсюду.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Старый 26.11.2013, 10:35   #62
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
на плоскости и без TBN сойдёт.
покажи на флипанутом кубе, затекстурь все стены одной и той же нормалкой и таскай там лайт повсюду.
это уже с tbn

вот куб, что-то здесь не так
http://rutube.ru/video/e7c98c126c668...9ebc1ed97240d/
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 11:21   #63
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

да, выглядит сломано, отрисовывай в какой позиции находится лайт, шариком или спрайтом
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Старый 26.11.2013, 12:07   #64
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
да, выглядит сломано, отрисовывай в какой позиции находится лайт, шариком или спрайтом
есть норм шейдер?
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 12:35   #65
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

я делаю так

vec3 normtex = texture2D(normalmap, IN_TexCoords).xyz;
normtex = normtex*2.0-1.0;

mat3 TBN = mat3(normalize(IN_Tangent), normalize(IN_Binormal), normalize(IN_Normal));
normal = TBN * normtex;
далее normal это нормаль в ворлдспейсе с учётом нормалмапы.
некоторые любят переводить лайты в тангент спейс, но мне кажется так удобнее.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (26.11.2013), pozitiffcat (26.11.2013)
Старый 26.11.2013, 14:05   #66
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Ребят посмотрите мой шейдер

const std::string NORMAL_VS =
        
"attribute vec4 POSITION;\n"
        "attribute vec3 NORMAL;\n"
        "attribute vec2 TEXCOORD;\n"
        "attribute vec3 TANGENT;\n"
        "attribute vec3 BINORMAL;\n"
        "uniform float LIGHTS_COUNT;\n"
        "uniform mat4 PROJ_MATRIX;\n"
        "uniform mat4 VIEW_MATRIX;\n"
        "uniform mat4 MODEL_MATRIX;\n"
        "uniform mat3 NORMAL_MATRIX;\n"
        "uniform vec3 LIGHTS_POSITION[8];\n"
        "varying vec2 texcoord;\n"
        "varying vec3 vVaryingLightDir[8];\n"
        "varying vec3 vVaryingNormal;\n"
        "void main(){\n"
        "    mat3 rotmat = mat3(TANGENT,BINORMAL,NORMAL);\n"
        "    rotmat = NORMAL_MATRIX * rotmat;\n"
        "    vVaryingNormal = NORMAL;\n"
        "    vec4 vPosition4 = MODEL_MATRIX * POSITION;\n"
        "    vec3 vPosition3 = vPosition4.xyz / vPosition4.w;\n"
        "    for (int i = 0; i < 8; ++i){\n"
        "       if (int(LIGHTS_COUNT) <= i) break;\n"
        "       vVaryingLightDir[i] = -normalize(LIGHTS_POSITION[i] - vPosition3);\n"
        "       vVaryingLightDir[i] = rotmat * vVaryingLightDir[i];\n"
        "    }\n"
        "    gl_Position = PROJ_MATRIX * VIEW_MATRIX * MODEL_MATRIX * POSITION;\n"
        "    texcoord = TEXCOORD;\n"
        "}"
;

const 
std::string NORMAL_FS =
        
"uniform sampler2D TEXTURE_DIFFUSE;\n"
        "uniform sampler2D TEXTURE_NORMAL;\n"
        "uniform vec4 LIGHTS_AMBIENT[8];\n"
        "uniform vec4 LIGHTS_DIFFUSE[8];\n"
        "uniform vec4 LIGHTS_SPECULAR[8];\n"
        "uniform float LIGHTS_COUNT;\n"
        "varying vec2 texcoord;\n"
        "varying vec3 vVaryingLightDir[8];\n"
        "varying vec3 vVaryingNormal;\n"
        "void main(){\n"
        "    gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n"
        "    float maxVariance = 10.0;\n"
        "    float minVariance = maxVariance / 2.0;\n"
        "    vec3 normalAdjusted = vVaryingNormal + normalize(texture2D(TEXTURE_NORMAL, texcoord.st).rgb * maxVariance - minVariance);\n"
        "    vec3 texDiff = texture2D(TEXTURE_DIFFUSE, texcoord.st).rgb;\n"
        "    int lc = int(LIGHTS_COUNT);\n"
        "    for (int i = 0; i < lc; ++i){\n"
        "    float diffuseIntensity = max(0.0, dot(normalize(normalAdjusted), normalize(vVaryingLightDir[i])));\n"
        "    vec3 colour = (diffuseIntensity * LIGHTS_DIFFUSE[i].rgb) * texDiff + LIGHTS_AMBIENT[i].rgb;\n"
        "    vec4 vFragColour = vec4(colour, 1.0);\n"
        "    vec3 vReflection = normalize(reflect(-normalize(normalAdjusted), normalize(vVaryingLightDir[i])));\n"
        "    float specularIntensity = max(0.0, dot(normalize(normalAdjusted), vReflection));\n"
        "    if(diffuseIntensity > 0.98)\n"
        "    {\n"
        "        float fSpec = pow(specularIntensity, 64.0);\n"
        "        vFragColour.rgb += vec3(fSpec * LIGHTS_SPECULAR[i].rgb);\n"
        "    }\n"
        "    gl_FragColor += vFragColour;\n"
        "    }\n"
        "    gl_FragColor.a = 1.0;\n"
        "}"

вроде все правильно
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 14:41   #67
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

rotmat = NORMAL_MATRIX * rotmat;\n"
что это?

vec3 vPosition3 = vPosition4.xyz / vPosition4.w;\n"
в модель матрице не должно быть по идее ничего такого, что требовало бы потом этого деления.

for (int i = 0; i < 8; ++i){\n"
" if (int(LIGHTS_COUNT) <= i) break;\n"
" vVaryingLightDir[i] = -normalize(LIGHTS_POSITION[i] - vPosition3);\n"
" vVaryingLightDir[i] = rotmat * vVaryingLightDir[i];\n"
это намного лучше во фрагментном считать

vec3 normalAdjusted = vVaryingNormal + normalize(texture2D(TEXTURE_NORMAL, texcoord.st).rgb * maxVariance - minVariance);\n"
ты зачем-то прибавляешь нормалмапу к вертексной ворлд нормали, забивая на TBN
--

а, я понял, ты переводишь направление от лайтов в тангент спейс в VS, все равно непонятно что за прибавление вертексной нормали в PS тогда, плюс направление от поинтлайтов считать в VS на сцене из кубов это жесть по-любому.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (26.11.2013)
Старый 26.11.2013, 15:07   #68
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Я не сильно силен в такой математике, что то как то по формулам набросал. Мажешь помочь с этими шейдерами? Что как правильно написать
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 18:16   #69
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Clear Engine (Понятный движок)

лучше помоги ему с математикой
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 20:06   #70
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

перепробывал кучу готовых шейдеров, вообще неадекватные результаты. ЧЯДНТ

(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 20:46   #71
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Clear Engine (Понятный движок)

TBN!
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 20:48   #72
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

лучше скажи в теории как ты понимаешь как работает бамп.
я тебя поправлю где надо. без понимания всё время придётся копипастить.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (26.11.2013)
Старый 26.11.2013, 20:49   #73
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от moka Посмотреть сообщение
TBN!
да блин, естественно я юзаю tbn. Ребят, у вас есть проверенный временем шейдер?
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 20:51   #74
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
лучше скажи в теории как ты понимаешь как работает бамп.
я тебя поправлю где надо. без понимания всё время придётся копипастить.
я понимаю это так:
мы накладываем обычное попиксельное освещение, но нормали берем из текстуры, учитывая нормаль самого объекта и матрицы нормали... как это все между собой связывается в коде, я понятия не имею, да и не видел по этому поводу простых для понимания мануалов
(Offline)
 
Ответить с цитированием
Старый 26.11.2013, 21:05   #75
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: Clear Engine (Понятный движок)

учитывая нормаль самого объекта и матрицы нормали
не так.
Нормалмапа - находится в пространстве TBN, которое образуется одной матрицей, сделанной из тангента, бинормали и нормали. Эти три хреновины - тупо 3 перпендикулярные друг другу вектора.
Каждый пиксель нормалмапы это вектор в их системе координат.
Синий канал это насколько вектор повёрнут в сторону нормали, красный и зеленый - в стороны других осей (в каждом пикселе).

Только щас заметил, ты не декодируешь сам вектор из карты то. Нужно всегда делать nmap = nmap*2-1, чтобы из диапазона [0;1] перевести каждый компонент вектора нормалмапы в диапазон [-1;1].

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

Я бы по-прежнему рекомендовал перевести нормалку в ворлдспейс, потому что это 1 умножение матрицы против кучи умножений на каждый лайт в цикле.

Направление света от поинт лайтов надо считать в PS! Если у тебя не супер тесселлированная геометрия. Повертексно это слишком убого и ты вообще не поймёшь правильно или неправильно.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Online)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (27.11.2013), impersonalis (27.11.2013), moka (26.11.2013), pozitiffcat (26.11.2013), St_AnGer (27.11.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 20:03.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com