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

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

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

Ответ
 
Опции темы
Старый 21.11.2014, 22:05   #1
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
GLSL освещение

Привет всем. Немогу нигде найти решения, может знатоки подскажут.
Есть три типа освещения, направленный, точечный и прожектор. Так вот, как это все запилить в одном шейдере? Как это делают? Я что-то не нашел...
Не делать же if (light_type[i] == 0) {} else if .....
Кто нибудь поможет?
(Offline)
 
Ответить с цитированием
Старый 21.11.2014, 22:47   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: GLSL освещение

А сколько лайтов-то, один?
Чем 3 разных шейдера не угодили?

[i]
видимо не один.
ну, в общем, вариантов очень много, и тут всегда есть над чем подумать. идеального решения нет.
можно иметь несколько вариаций шейдера с разными комбинациями. можно их руками написать, можно составлять из кусков кода автоматически.
если максимальное число лайтов мало, можно юзать #ifdef, если не очень мало, то генерация шейдеров становится уже целой отдельной большой задачей. свои изыскания в этой области описывал тут: http://ndotl.wordpress.com/2014/10/1...shader-system/

можно делать деферед - тогда всё намного проще в этом плане.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
moka (22.11.2014), pozitiffcat (22.11.2014)
Старый 22.11.2014, 21:44   #3
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

Вобщем за проход нужно обработать все 3 варианта. Тоесть на сцене есть 3 источника трех типов. На данном этапе, как раз таки убер шейдер, но тут он не спасает.

PS. Это я тут собрался GLES3 прикрутить, да по нормальному,с качественной картинкой
(Offline)
 
Ответить с цитированием
Старый 23.11.2014, 20:49   #4
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

Еще со спекуляром херня какая-то, вообще не понимаю почему так.
Кто нибудь может объяснить, что за полоску он мне ривует.
Источник в левом дальнем углу

uniform sampler2D _position_map_texture_;
uniform sampler2D _bump_map_texture_;
uniform sampler2D _diffuse_map_texture_;

uniform float _lights_count_;
uniform vec3 _light_position_[4];

void main()

  
vec3 position texture2D(_position_map_texture_texcoord_1).xyz;
  
vec3 normal texture2D(_bump_map_texture_texcoord_1).xyz;
  
  
float spec 0.0;
  
float light_factor 0.0;
  for (
int i 0int(_lights_count_); ++i)
  {
    
vec3 light_pos _light_position_[i];
    
vec3 light_dir normalize(light_pos position);
    
    
vec3 latt vec3(1.00.10.01) * 0.5;
    
float dist length(light_pos position);
    
float att 1.0 / (latt.latt.dist latt.dist dist);
    
    
vec3 l  normalize(light_pos position);
    
vec3 v  normalize(-position);
    
vec3 h  normalize(v);
    
    
spec += pow(max(0.0dot(hnormal)), 28.0) * att;
    
light_factor += max(dot(normallight_dir), 0.0) * att;
  }
  
  
  
gl_FragColor texture2D(_diffuse_map_texture_texcoord_1) * light_factor spec;

Миниатюры
Нажмите на изображение для увеличения
Название: artefact.jpeg
Просмотров: 387
Размер:	423.6 Кб
ID:	21160  
(Offline)
 
Ответить с цитированием
Старый 23.11.2014, 21:55   #5
Черный крыс
 
Сообщений: n/a
Ответ: GLSL освещение

Сообщение от pozitiffcat Посмотреть сообщение
Еще со спекуляром херня какая-то, вообще не понимаю почему так.
Кто нибудь может объяснить, что за полоску он мне ривует.
Источник в левом дальнем углу
Ты же сам хотел спекуляр...
 
Ответить с цитированием
Старый 23.11.2014, 22:17   #6
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Ответ: GLSL освещение

похоже на косяки с tbn
(Offline)
 
Ответить с цитированием
Старый 23.11.2014, 22:52   #7
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: GLSL освещение

vec3 v = normalize(-position);
эмм... тут разве не должно быть normalize(position - cameraPos)? спекуляр же view-dependent.
(знак может быть в другую сторону)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
mauNgerS (24.11.2014), pozitiffcat (24.11.2014), St_AnGer (24.11.2014)
Старый 24.11.2014, 05:54   #8
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

Приогромнейшее спасибо )). Как я сам не догадался. Сталкивался когда-то уже.
vec3 v = normalize(_camera_position_ - position);
Миниатюры
Нажмите на изображение для увеличения
Название: sp.png
Просмотров: 329
Размер:	1.84 Мб
ID:	21161  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
mauNgerS (24.11.2014), St_AnGer (24.11.2014)
Старый 25.11.2014, 19:22   #9
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

Ребят. Кто подскажет? Использую отложенное освещение. Нужно заюзать emissive материала, как правильно это делают?
(Offline)
 
Ответить с цитированием
Старый 25.11.2014, 20:23   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: GLSL освещение

Я бы emissive цвет запёк в альбедо г-буфера, дальше тогда остаётся единичное значение (силу свечения) где-то держать. Хватило бы одноканальной 8-бит текстуры, но в идеале бы ещё куда-нибудь впихнуть. Какая у тебя сейчас раскладка г-буфера?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 25.11.2014, 20:31   #11
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

position.xyz,depth
normal.xyz,0
diffuse.xyz,0
два свободных канала
(Offline)
 
Ответить с цитированием
Старый 25.11.2014, 20:34   #12
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: GLSL освещение

position.xyz,depth
жырнота даже для мощных платформ.
достаточно одной глубины, позиция из неё и данных о камере восстанавливается.

normal.xyz,0
с какой точностью хранишь, кстати?

два свободных канала
ну вот как раз влезает
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 25.11.2014, 20:44   #13
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: GLSL освещение

GL_GLOAT, насчет позиций я где-то видел как получают из глубины
(Offline)
 
Ответить с цитированием
Старый 25.11.2014, 20:54   #14
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,527 пользователей)
Ответ: GLSL освещение

например так ( кусок из моего движка, в подписи есть ссылка на гитхаб, там можешь поглядеть на деферед с оптимизациями )

        "   float depth = tex2D( depthSampler, texcoord ).r;\n"
        "   float4 screenPosition;\n"
        "   screenPosition.x =    texcoord.x * 2.0f - 1.0f;\n"
        "   screenPosition.y = -( texcoord.y * 2.0f - 1.0f );\n"
        "   screenPosition.z = depth;\n"
        "   screenPosition.w = 1.0f;\n"

        "   float4 p = mul( screenPosition, invViewProj );\n"
        "   p /= p.w;\n"
p - восстановленная позиция
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
moka (25.11.2014), Nerd (25.11.2014), pozitiffcat (26.11.2014), St_AnGer (25.11.2014)
Старый 25.11.2014, 21:18   #15
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: GLSL освещение

GL_GLOAT
жыр, можно хорошо впихнуть в ргба8, гугли крайтековские доки про best-fit normals
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (26.11.2014)
Ответ


Опции темы

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

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


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


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