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

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

Вернуться   forum.boolean.name > Проекты > Проекты C++

Ответ
 
Опции темы
Старый 26.10.2014, 19:47   #586
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

В аттаче скрин из игры

Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно?
Миниатюры
Нажмите на изображение для увеличения
Название: Mine 2014-10-26 18-48-03-04.png
Просмотров: 694
Размер:	2.86 Мб
ID:	21084  
__________________

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
ARA (26.10.2014), pax (27.10.2014), tirarex (26.10.2014)
Старый 26.10.2014, 20:32   #587
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: [TrueHorror] - разработка

Сообщение от mr.DIMAS Посмотреть сообщение
В аттаче скрин из игры

Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно?

Верно , а еще можно так сгдладить


inline float rand(float3 seedint i
{
    
float4 seed4 float4(seedi);
    
float dot_product dot(seed4float4(12.989878.23345.16494.673));
    return 
frac(sin(dot_product) * 43758.5453);
}

#define NUM_SAMP 4
#define SPREAD 0.01

        
float vShadowSample texCUBE(sCubeShadow, -vLightDir + (float3(rand(vWorldPosi), rand(vWorldPos1), rand(vWorldPos2)) * SPREAD)).r;
        
fShadow += ((fLength-2.5) < vShadowSample) ? 1.0f 0.0f


(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (26.10.2014)
Старый 26.10.2014, 20:43   #588
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

я на днях кстати делал PCF3x3 для кубмапных шадоумап (без шума), это не лучшее что можно делать с тенями, но просто для справки. могут быть косяки на стыках фейсов кубмапы, но это сложно заметить.
http://geom.io/pc4/demoShadersPoint.html
(можно зажать RMB и летать WASDом)
http://geom.io/pc4/src/graphics/prog...unks/shadow.ps
(код WIPовый)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (27.10.2014), mr.DIMAS (26.10.2014), pax (27.10.2014)
Старый 27.10.2014, 19:24   #589
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

немного про оптимизации. для спота можно отсекать объекты не создающие тени фрустумом построенном для спота, для поинта - по ограничивающей сфере вокруг него с радиусом освещения. все верно?

и кстати так никто и не ответил на:

Сообщение от mr.DIMAS Посмотреть сообщение
будет ли прирост производительности если все шейдерные константы замапить напрямую в регистры и потом устанавливать их через вызовы setvertexshaderconstant/setpixelshaderconstant? и как быть например с таким:

float4x4 worldViewProjection;
float opacity;
float brightness;
например я делаю так

float4x4 worldViewProjection : register( c0 );
float opacity : register( c5 );
float brightness : register( c6 );
но каждый регистр может содержать четыре флоата, таким образом впустую пропадают куски регистров с5,с6.

кароч расскажите че да как.
__________________

(Offline)
 
Ответить с цитированием
Старый 27.10.2014, 19:37   #590
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

все верно?
да

и кстати так никто и не ответил на:
проверь, замерь, когда-то сам заморачивался с этим тоже, но особо сравнений не производил

вообще, стараюсь по возможности юзать везде флоаты4 и напихивать в компоненты всё. так, например, на геоме большинство параметров материала хранится:
uniform vec4 params; /* glossiness, reflectivity, fresnelEmission,isMetalOpacity

fresnelEmission:
fresnel = frac(fresnelEmission)*10.0;
emission = floor(fresnelEmission/100.0);

isMetalOpacity:
isMetal = isMetalOpacity>0;
opacity = abs(isMetalOpacity);
*/
*оправданность этих махинаций под сомнением
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (27.10.2014)
Старый 01.11.2014, 02:46   #591
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Делаю HDR. Возник вопрос по поводу источников света. Допустим фонарик светит с яркостью 1,0. А прожектор с яркостью 10,0. При рендере в хдртексу( A16B16G16R16 ) шейдером лайта, я просто домножаю цвет на яркость источника света. Дальше я делаю тон маппинг так( брал отсюда http://filmicgames.com/archives/75 ):
            "sampler hdrTexture : register( s0 );\n"
            "float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0\n"
            "{\n"
            "    float3 texColor = tex2D( hdrTexture, texCoord );\n"
            "    texColor *= 16;\n" \\ exposure
            "    texColor = texColor/(1+texColor);\n"
            "    float3 retColor = pow(texColor,1/2.2);\n"
            "    return float4(retColor,1);\n"
            "};\n";
В итоге на выходе просто обесцвеченная засвеченная картинка. игрался с exposure толку ноль.

Кароч у меня как обычно ниче не выходит. Че как оно правильно делается?
__________________

(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 13:07   #592
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

float3 retColor = pow(texColor,1/2.2)
это sRGB коррекция, которая там для референса.
на деле тебе надо вместо этого просто включить SRGBWRITEENABLE, будет делать то же самое, но бесплатно, и рисовать в ргба8 тонмаппенный результат с этим.
альбедо текстуры при этом надо читать с SRGBTEXTURE стейтом, иначе получится обесцвеченная херня.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 13:23   #593
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

ниче не понял. просто ты так сумбурно объяснил, что я прям и не знаю че делать.

делаю так, при тонмапе
g_device->SetSamplerState( 0, D3DSAMP_SRGBTEXTURE, TRUE );
g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, TRUE );

при рендере сцены в хдртекстуру

g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, FALSE );

и я выкинул из кода шейдера float3 retColor = pow(texColor,1/2.2)
и кароч все равно засветка и обесцвечивание.

объясни поподробнее, пжлста.
__________________

(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 13:35   #594
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

g_device->SetSamplerState( 0, D3DSAMP_SRGBTEXTURE, TRUE );
это надо делать диффузным текстурам короче, ещё до освещения их.

g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, FALSE );
это можно делать только в ргба8 текстуру, хдр текстуры не умеют юзать этот стейт. в дх10+ стейт и вовсе убрали и сделали для понятности форматы текстур с приставкой _SRGB в названии.
результат тонмапа ты же уже в лдр текстуру рисуешь? там и ставь стейт тогда.

про гамму в очередной раз запосчу
http://http.developer.nvidia.com/GPU...ems3_ch24.html
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
http://www.aversis.be/tutorials/vray...orkflow_01.htm
http://filmicgames.com/archives/299

---
пофиксил первую цитату
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (01.11.2014)
Старый 01.11.2014, 13:50   #595
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Не знаю то ли получилось что должно, вот скрины ( на них позорные не сглаженные тени )

Без хдр

С хдр - exposure 0.4

С хдр - exposure 2.2

С хдр - exposure 6.2


и да, код тонмапа такой

        "sampler hdrTexture : register( s0 );\n"
        "float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0{\n"
        "    float3 texColor = tex2D( hdrTexture, texCoord );\n"
        "    float exposure = 0.4f;\n"
        "    float3 retColor = 1 - exp( -exposure * texColor );\n"
        "    return float4(retColor,1);\n"
        "};\n";
Миниатюры
Нажмите на изображение для увеличения
Название: nohdr.png
Просмотров: 805
Размер:	1.10 Мб
ID:	21103  Нажмите на изображение для увеличения
Название: hdr-exposure 6.2.png
Просмотров: 746
Размер:	1.23 Мб
ID:	21104  Нажмите на изображение для увеличения
Название: hdr-exposure 2.2.png
Просмотров: 767
Размер:	962.9 Кб
ID:	21105  Нажмите на изображение для увеличения
Название: hdr-exposure 0.4.png
Просмотров: 766
Размер:	546.8 Кб
ID:	21106  
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (03.11.2014)
Старый 01.11.2014, 14:25   #596
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

Без хдр
в смысле с хдр светом, но без тонмапа?
ну судя по тому, что белое пятно света стало более вменяемым - вроде тонмап работает.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 14:27   #597
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

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

и еще можно ли скормить результат тонмапа шейдеру FXAA? не появятся ли артефакты?
__________________

(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 14:58   #598
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

ну да без тонмапа, теперь нужно вычислять среднюю яркость сцены, чтобы посчитать выдержку, как это проще сделать?
проще - задаунсемплить картинку в 1 пиксель (тупо нарисовать весь экран в однопиксельный РТ не выйдет, надо несколько пассов с уменьшением в 2-4 раза), исходя из средней яркости крутить экспозицию.
сложнее - считать гистрограмму яркости за несколько кадров, Вэлв очень хитро это делали, считая кол-во слишком ярких/тёмных пикселей occlusion query.
http://www.valvesoftware.com/publica...urceEngine.pdf

результат тонмапа шейдеру FXAA?
должно быть норм
более того, обычно как раз считать любое АА лучше именно ПОСЛЕ тонмапа, иначе если ты сглаживаешь переход между цветом с яркостью 1 и яркостью 100, у тебя просто вся плавность перехода "съестся" яркостью второго, и по прежнему будет выглядеть как без АА.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (01.11.2014)
Старый 01.11.2014, 15:07   #599
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Тоесть мне нужно создать несколько текстур вплоть до 1х1. Затем в несколько проходов: заливать картинку с текущего прохода в текстуру поменьше, и т.д до 1х1? А размазывать при записи нужно при этом?

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

И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то?
__________________

(Offline)
 
Ответить с цитированием
Старый 01.11.2014, 16:08   #600
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

А размазывать при записи нужно при этом?
просто находишь средний цвет.
берёшь снимок экрана (по идее хдрный, но может имеет смысл и после тонмапа) и рисуешь квад с ним в текстуру в 2 раза меньшего разрешения, при этом в каждый пиксель находя среднее арифметическое 2х2 блока большой картинки.
необязательно начинать даунсемплить от фуллреса - можно начать от 512х512 версии (тупо хайрес нарисовать в неё, будет алиасинг, но тут не шибко важно) и дальше 256, 128, 64, 32, 16, 8, 4, 2, 1.
Можно в шейдере читать и 4х4 блок, тогда выйдет 128, 32, 8, 2, 1 (из 2 в 1 уже снова 2х2 фильтр нужен).

И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то?
по формуле какой-то. тут уже не подскажу, мало этим занимался, хватало фиксировать экспозицию руками по триггерам.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (01.11.2014)
Ответ


Опции темы

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

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


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


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