|
27.11.2013, 01:08
|
#76
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
спасибо понятно объяснил =) да и статейку на геймдеве нашел интересную завтра попробую запилить )))
|
(Offline)
|
|
27.11.2013, 10:57
|
#77
|
Мастер
Регистрация: 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
|
Терабайт исходников
Регистрация: 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
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
27.11.2013, 16:27
|
#79
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
с затуханием получилось, нос gl_ModelViewMatrix непонятно, всетаки нужно учитывать VIEW_MATRIX или нет, если не брать ее при расчете позиции вершины, то все ок.
|
(Offline)
|
|
27.11.2013, 17:34
|
#80
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Clear Engine (Понятный движок)
При умножении матриц в общем случае A x B != B x A.
Попробуй model_matrix * view_matrix.
Без VIEW_MATRIX будет все ок, но камеру нельзя будет перемещать в пространстве.
|
(Offline)
|
|
27.11.2013, 17:36
|
#81
|
Мастер
Регистрация: 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
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
выведи в рендер TBN, сделай 3 картинки на каждый вектор, скорее всего трабла в них.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2013, 20:12
|
#83
|
Мастер
Регистрация: 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
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
заскейль векторы перед выводом из [-1;1] в [0;1] чтоб понятнее:
vec*0.5+0.5
|
(Offline)
|
|
27.11.2013, 20:27
|
#85
|
Мастер
Регистрация: 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
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
на глаз вроде нормальные.
попробуй перенести всё что связано с лайтами из VS в PS и посмотреть стало ли ок.
повертексные маленькие поинт лайты внутри кубов - это повод для косяков.
|
(Offline)
|
|
27.11.2013, 20:45
|
#87
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Сообщение от Mr_F_
на глаз вроде нормальные.
попробуй перенести всё что связано с лайтами из VS в PS и посмотреть стало ли ок.
повертексные маленькие поинт лайты внутри кубов - это повод для косяков.
|
я разбил полигоны на кучу мелких. А как должно быть? На полу так же как на стенках?
PS. рендер с блендера
|
(Offline)
|
|
27.11.2013, 23:50
|
#88
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Запилил поддержку лайтмапов
|
(Offline)
|
|
28.11.2013, 00:25
|
#89
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Clear Engine (Понятный движок)
как блендишь лайтмапы с дифузом?
|
(Offline)
|
|
28.11.2013, 00:34
|
#90
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Clear Engine (Понятный движок)
Сообщение от Mr_F_
как блендишь лайтмапы с дифузом?
|
диффуз * лайтмап, естественно с разных texcoord.
у меня вот еще вопрос. Как вот запиливают поддержку разных видов освещения да и еще с разными типами теней. Не писать же на каждый случай шейдер. (у меня уже штук 5). Или пишут один убер шейдер, но как тогда с производительностью. Да и слишком много команд в шейдер тоже не засунешь...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:12.
|