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

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

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

Ответ
 
Опции темы
Старый 27.11.2013, 01:08   #76
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

спасибо понятно объяснил =) да и статейку на геймдеве нашел интересную завтра попробую запилить )))
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 10:57   #77
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Заметил такую вещь. Исследовал модели освещения и юзал примеры шейдеров. Так вот что означает glModelViewMatrix? Это view_matrix * model_matrix или только model_matrix? Потому что если заюзать view_matrix * model_matrix, то изображение становится не правильное...

Еще: почему такой странный эффект может быть? Чем дальше двигаем свет, тем ярче светит O_o
http://rutube.ru/video/7f47e12f23b3c...c964c7730847c/

const std::string NORMAL_VS =
        
"varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "attribute vec4 POSITION;\n"
        "attribute vec3 NORMAL;\n"
        "attribute vec2 TEXCOORD;\n"
        "attribute vec3 TANGENT;\n"
        "attribute vec3 BINORMAL;\n"
        "uniform vec3 LIGHTS_POSITION[8];\n"
        "uniform vec3 CAMERA_POSITION;\n"
        "uniform mat4 MODEL_VIEW_PROJ_MATRIX;\n"
        "uniform mat4 MODEL_MATRIX;\n"
        "uniform mat4 VIEW_MATRIX;\n"
        "uniform mat3 NORMAL_MATRIX;\n"
        "varying vec2 texcoord;\n"
        "void main(void){\n"
        "    vec3 p = vec3(MODEL_MATRIX * POSITION);\n"
        "    l = normalize(vec3(LIGHTS_POSITION[0]) - p ); \n"
        "    v = normalize(vec3(CAMERA_POSITION) - p );\n"
        "    n = normalize(NORMAL_MATRIX * NORMAL);\n"
        "    //mat3 tbn = mat3(TANGENT, BINORMAL, NORMAL);\n"
        "    //l = tbn * l;\n"
        "    gl_Position = MODEL_VIEW_PROJ_MATRIX * POSITION;\n"
        "    texcoord = TEXCOORD;\n"
        "}\n"
;

const 
std::string NORMAL_FS =
        
"uniform sampler2D TEXTURE_DIFFUSE;\n"
        "uniform sampler2D TEXTURE_NORMAL;\n"
        "uniform vec4 LIGHTS_DIFFUSE[8];\n"
        "uniform vec4 LIGHTS_SPECULAR[8];\n"
        "varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "varying vec2 texcoord;\n"
        "void main (void)\n"
        "{\n"
        "    vec4 diffc = texture2D(TEXTURE_DIFFUSE, texcoord);\n"
        "    vec4 bumpc = texture2D(TEXTURE_NORMAL, texcoord);\n"
        "    vec3 bumpn = normalize((bumpc.rgb * 2.0 - 1.0) * vec3(1.0, 1.0, 1.0));"
        "    vec3 h = normalize(v + l);\n"
        "    const float specPower = 20.0;\n"
        "    vec3 n2   = normalize ( -n );\n"
        "    vec3 bn2  = normalize ( -bumpn );\n"
        "    vec3 l2   = normalize ( l );\n"
        "    vec3 h2   = normalize ( h );\n"
        "    vec4 diff = LIGHTS_DIFFUSE[0] * max ( dot ( n2, l2 ), 0.0 );\n"
        "    vec4 diffn = LIGHTS_DIFFUSE[0] * max ( dot ( bn2, l2 ), 0.0 );\n"
        "    vec4 spec = LIGHTS_SPECULAR[0] * pow ( max ( dot ( n2, h2 ), 0.0 ), specPower );\n"
        "    gl_FragColor = diff * diffc + spec;\n"
        "}\n"


Последний раз редактировалось pozitiffcat, 27.11.2013 в 14:07.
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 14:17   #78
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

Еще: почему такой странный эффект может быть?
тут вроде всё более-менее правильно выглядит, только ты не добавил затухание, поэтому при удалении от стенки лайта, стенка заярчается вместо затемнения (векторы от лайта к стенке становятся более перпендикулярны ей).

затухание по нормальному задаётся формулой 1/(dist*dist)
http://en.wikipedia.org/wiki/Inverse-square_law

glModelViewMatrix? Это view_matrix * model_matrix
ну да, или последовательность может быть другая.

Исследовал модели освещения
там новые матрицы не нужны обычно, они все отталкиваются, как правило, от 3х векторов: нормаль, вектор взгляда и направление света, плюс какие-нибудь переменные типа roughness.


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

покури-с:
http://www.rorydriscoll.com/2009/01/...tion-in-games/
http://www.thetenthplanet.de/archives/255
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
impersonalis (27.11.2013), pozitiffcat (27.11.2013)
Старый 27.11.2013, 16:27   #79
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

с затуханием получилось, нос gl_ModelViewMatrix непонятно, всетаки нужно учитывать VIEW_MATRIX или нет, если не брать ее при расчете позиции вершины, то все ок.
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 17:34   #80
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Clear Engine (Понятный движок)

При умножении матриц в общем случае A x B != B x A.
Попробуй model_matrix * view_matrix.
Без VIEW_MATRIX будет все ок, но камеру нельзя будет перемещать в пространстве.
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 17:36   #81
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Samodelkin Посмотреть сообщение
При умножении матриц в общем случае A x B != B x A.
Попробуй model_matrix * view_matrix.
Без VIEW_MATRIX будет все ок, но камеру нельзя будет перемещать в пространстве.
да знаю я это пробывал поразному...

Запилил почти нормально, но вот смущает следующее:

низ какой то странный, а бока вроде бы нормальные


const std::string NORMAL_VS =
        
"varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "attribute vec4 POSITION;\n"
        "attribute vec3 NORMAL;\n"
        "attribute vec2 TEXCOORD;\n"
        "attribute vec3 TANGENT;\n"
        "attribute vec3 BINORMAL;\n"
        "uniform vec3 LIGHTS_POSITION[8];\n"
        "uniform vec3 CAMERA_POSITION;\n"
        "uniform mat4 MODEL_VIEW_PROJ_MATRIX;\n"
        "uniform mat4 MODEL_MATRIX;\n"
        "uniform mat4 VIEW_MATRIX;\n"
        "uniform mat3 NORMAL_MATRIX;\n"
        "varying float att;\n"
        "varying vec2 texcoord;\n"
        "void main(void){\n"
        "    vec3 p = vec3(MODEL_MATRIX * POSITION);\n"
        "    vec3 tmp = normalize(vec3(LIGHTS_POSITION[0]) - p );\n"
        "    vec3 _t = NORMAL_MATRIX * TANGENT;\n"
        "    vec3 _b = NORMAL_MATRIX * BINORMAL;\n"
        "    vec3 _n = NORMAL_MATRIX * NORMAL;\n"
        "    l.x = dot(tmp, _t);\n"
        "    l.y = dot(tmp, _b);\n"
        "    l.z = dot(tmp, _n);\n"
        "    tmp = -p;\n"
        "    v.x = dot(tmp, _t);\n"
        "    v.y = dot(tmp, _b);\n"
        "    v.z = dot(tmp, _n);\n"
        "    gl_Position = MODEL_VIEW_PROJ_MATRIX * POSITION;\n"
        "    texcoord = TEXCOORD;\n"
        "    att = min(1.0 / distance(LIGHTS_POSITION[0], POSITION.xyz) * 3.0, 1.0);\n"
        "}\n"
;

const 
std::string NORMAL_FS =
        
"uniform sampler2D TEXTURE_DIFFUSE;\n"
        "uniform sampler2D TEXTURE_NORMAL;\n"
        "uniform vec4 LIGHTS_DIFFUSE[8];\n"
        "uniform vec4 LIGHTS_SPECULAR[8];\n"
        "varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "varying vec2 texcoord;\n"
        "varying float att;\n"
        "void main (void)\n"
        "{\n"
        "    vec4 diffmap = texture2D(TEXTURE_DIFFUSE, texcoord);\n"
        "    vec3 normmap = (texture2D(TEXTURE_NORMAL, texcoord).xyz * 2.0) - vec3(1.0, 1.0, 1.0);\n"
        "    vec4  diffColor = LIGHTS_DIFFUSE[0];\n"
        "    vec4  specColor = LIGHTS_SPECULAR[0];\n"
        "    const float specPower = 30.0;\n"
        "    vec3 n2   = normalize ( -normmap );\n"
        "    vec3 l2   = normalize ( l );\n"
        "    vec3 v2   = normalize ( v );\n"
        "    vec3 r    = reflect ( -v2, n2 );\n"
        "    vec4 diff = diffColor * max ( dot ( n2, l2 ), 0.0 );\n"
        "    vec4 spec = specColor * pow ( max ( dot ( l2, r ), 0.0 ), specPower );\n"
        "    gl_FragColor = att * (diff * diffmap + spec);\n"
        "}\n"


Последний раз редактировалось pozitiffcat, 27.11.2013 в 19:38.
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 19:55   #82
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

выведи в рендер TBN, сделай 3 картинки на каждый вектор, скорее всего трабла в них.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (27.11.2013)
Старый 27.11.2013, 20:12   #83
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
выведи в рендер TBN, сделай 3 картинки на каждый вектор, скорее всего трабла в них.
nornal


tangent


binormal черный экран
Пробывал умножать вектор бинормали на (1.0,1.0,-1.0) что бы низ отображался, но в полном шейдере эффекта не дало, вообще никак не повлияло на нормал
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 20:18   #84
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

заскейль векторы перед выводом из [-1;1] в [0;1] чтоб понятнее:
vec*0.5+0.5
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 20:27   #85
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
заскейль векторы перед выводом из [-1;1] в [0;1] чтоб понятнее:
vec*0.5+0.5
нормаль


бинормаль


тангент
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 20:43   #86
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

на глаз вроде нормальные.
попробуй перенести всё что связано с лайтами из VS в PS и посмотреть стало ли ок.
повертексные маленькие поинт лайты внутри кубов - это повод для косяков.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 20:45   #87
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
на глаз вроде нормальные.
попробуй перенести всё что связано с лайтами из VS в PS и посмотреть стало ли ок.
повертексные маленькие поинт лайты внутри кубов - это повод для косяков.
я разбил полигоны на кучу мелких. А как должно быть? На полу так же как на стенках?

PS. рендер с блендера
(Offline)
 
Ответить с цитированием
Старый 27.11.2013, 23:50   #88
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Запилил поддержку лайтмапов

(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 00:25   #89
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Clear Engine (Понятный движок)

как блендишь лайтмапы с дифузом?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 00:34   #90
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от Mr_F_ Посмотреть сообщение
как блендишь лайтмапы с дифузом?
диффуз * лайтмап, естественно с разных texcoord.
у меня вот еще вопрос. Как вот запиливают поддержку разных видов освещения да и еще с разными типами теней. Не писать же на каждый случай шейдер. (у меня уже штук 5). Или пишут один убер шейдер, но как тогда с производительностью. Да и слишком много команд в шейдер тоже не засунешь...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +4, время: 18:02.


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