Urho3DФорумРАССКАЖИТЕ ПРО ВАШИ ПРОЕКТЫ

Quake BSP в Urho (2 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#15
11:14, 9 сен 2016

Короче я потыкал, можно получить источник света, которые не увеличивает яркость пикселей вне тени, а наоборот уменьшает (для этого задал brightnress = -1).
То есть вклад источника света может быть отрицательным. Поэтому ПРИМЕРНЫЙ план действий может быть такой:

Добавляешь в Renderer.cpp новый тип исчтоника света (фактически цель этого, чтобы передать в шейдер твой собственный DEFINE), там уже есть:

+ Показать

Дефайн может быть что-то вроде PERPIXEL POINTLIGHT SHADOW NEGATIVE.

А в шейдере вместо того чтобы увеличивать яркость везде, кроме тени, уменьшаешь яркость пикселей в тени.

Для своего нового источника света сам определяешь и обновляешь позицию в игре на основе других источников света.

p.s. а легче просто нормальные тени отбрасывать ) неужели одна тень лучше нескольких?

#16
11:14, 9 сен 2016

Не, в bsp файле. Когда уровень подготавливается в редакторе они расчитываются и пишутся прям в бинарник. Так во всех bsp движках было от quake1 до Source.

Хотя в q3 есть вершинное освещение как альтеонатива лайтмапам для слабых компов.

#17
11:16, 9 сен 2016

1vanK
То есть все освещение динамическим делать?

#18
11:20, 9 сен 2016

Ну зачем все, это может быть и единсвтенаня лампа, которая не будет давать света, а будет минусовать яркость пикселей в области тени

EDIT: понял, ты насчет предложения о куче теней, ну тогда да, надо движок копать

#19
11:27, 9 сен 2016

Кстати раз в сцене гарантированно один источник света будет, то можно движок не изменять, а просто в шейдере LitSolid в секции PERPIXEL SHADOW изменить пару строчек и все

EDIT: я имею в виду, раз нет риска испортить поведение обычных источников света

#20
11:43, 9 сен 2016

Измененный шейдер litsolid:

    #ifdef HEIGHTFOG
        float fogFactor = GetHeightFogFactor(vWorldPos.w, vWorldPos.y);
    #else
        float fogFactor = GetFogFactor(vWorldPos.w);
    #endif
    
    // Начало измененного кода
    #if defined(PERPIXEL)
        // Per-pixel forward lighting
        vec3 lightColor;
        vec3 lightDir;
        vec3 finalColor;

        #ifdef SHADOW
            finalColor -= (1.0 - GetShadow(vShadowPos, vWorldPos.w)) * 0.3;
        #endif
    
        #ifdef AMBIENT
            finalColor += cAmbientColor.rgb * diffColor.rgb;
            finalColor += cMatEmissiveColor;
            gl_FragColor = vec4(GetFog(finalColor, fogFactor), diffColor.a);
        #else
            gl_FragColor = vec4(GetLitFog(finalColor, fogFactor), diffColor.a);
        #endif
     // конец измененного кода

    #elif defined(PREPASS)
        // Fill light pre-pass G-Buffer
        float specPower = cMatSpecColor.a / 255.0;


Сцена освещена только фоновым освещением, источник света не увеличивает яркость, а вычитает яркость в области тени:

Изображение

#21
12:31, 9 сен 2016

>Не, в bsp файле. Когда уровень подготавливается в редакторе они расчитываются и пишутся прям в бинарник. Так во всех bsp движках было от quake1 до Source.
по мне так проще взять из данных геометрии уровня (BSP) только сетку + UV для текстур, и забейкать источники для Ухи в том виде в котором двиг рассчитывает их получать.

#22
20:12, 9 сен 2016

Спасибо всем! Покопаю, покажу что получилось.

#23
23:53, 12 сен 2016

Что я делаю не так?

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Это переделанное стандартное демо про регдолы. Если я кидаю много шаров то текстуры начинают глючить, потом начинает глючить источник света.... Такое ощущение что где-то буфер переполняется и он начинает портить соседнюю память.

#24
0:00, 13 сен 2016

Лог смотри, похоже где-то в шейдере несуществующая текстура используется

#25
0:08, 13 сен 2016

1vanK
[Mon Sep 12 22:07:54 2016] INFO: Opened log file Urho3D.log
[Mon Sep 12 22:07:54 2016] INFO: Created 3 worker threads
[Mon Sep 12 22:07:54 2016] INFO: Added resource package E:/MyWork/urhosharpeditor/src/UrhoSharpEditor/bin/Debug/CoreData.pak
[Mon Sep 12 22:07:54 2016] INFO: Added resource path E:/MyWork/UrhoGamePrototype/Data/
[Mon Sep 12 22:07:55 2016] INFO: Set screen mode 1920x1080 fullscreen
[Mon Sep 12 22:07:55 2016] INFO: Initialized input
[Mon Sep 12 22:07:55 2016] INFO: Initialized user interface
[Mon Sep 12 22:07:55 2016] INFO: Initialized renderer
[Mon Sep 12 22:07:55 2016] INFO: Set audio mode 44100 Hz stereo interpolated
[Mon Sep 12 22:07:55 2016] INFO: Initialized engine
[Mon Sep 12 22:07:55 2016] INFO: Loading scene from Scenes/map.xml
[Mon Sep 12 22:07:55 2016] WARNING: StaticModel::SetModel() called on AnimatedModel. Redirecting to AnimatedModel::SetModel()

Не вижу подозрительного ничего.

#26
0:11, 13 сен 2016

СТенкам другой материал выстави и посмотри будет мигать или нет

#27
0:15, 13 сен 2016

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

#28
0:17, 13 сен 2016

1vanK
Похоже что ты прав. А чего он не ругается что не хватает какого-то аттрибута? :(

Без текстур или с материалом только с дифузной картой работает отлично.

#29
0:20, 13 сен 2016

Ну попробуй открой issue, чтобы варнинг в лог писало :)

Страницы: 1 2 3 4 5 6 Следующая »
Urho3DФорумРАССКАЖИТЕ ПРО ВАШИ ПРОЕКТЫ

Тема в архиве.