![]() |
Ответ: [TrueHorror] - разработка
Вложений: 1
В аттаче скрин из игры
Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно? |
Ответ: [TrueHorror] - разработка
Цитата:
Верно , а еще можно так сгдладить |
Ответ: [TrueHorror] - разработка
я на днях кстати делал PCF3x3 для кубмапных шадоумап (без шума), это не лучшее что можно делать с тенями, но просто для справки. могут быть косяки на стыках фейсов кубмапы, но это сложно заметить.
http://geom.io/pc4/demoShadersPoint.html (можно зажать RMB и летать WASDом) http://geom.io/pc4/src/graphics/prog...unks/shadow.ps (код WIPовый) |
Ответ: [TrueHorror] - разработка
немного про оптимизации. для спота можно отсекать объекты не создающие тени фрустумом построенном для спота, для поинта - по ограничивающей сфере вокруг него с радиусом освещения. все верно?
и кстати так никто и не ответил на: Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
вообще, стараюсь по возможности юзать везде флоаты4 и напихивать в компоненты всё. так, например, на геоме большинство параметров материала хранится: Цитата:
|
Ответ: [TrueHorror] - разработка
Делаю HDR. Возник вопрос по поводу источников света. Допустим фонарик светит с яркостью 1,0. А прожектор с яркостью 10,0. При рендере в хдртексу( A16B16G16R16 ) шейдером лайта, я просто домножаю цвет на яркость источника света. Дальше я делаю тон маппинг так( брал отсюда http://filmicgames.com/archives/75 ):
Код:
"sampler hdrTexture : register( s0 );\n" Кароч у меня как обычно ниче не выходит. Че как оно правильно делается? |
Ответ: [TrueHorror] - разработка
Цитата:
на деле тебе надо вместо этого просто включить SRGBWRITEENABLE, будет делать то же самое, но бесплатно, и рисовать в ргба8 тонмаппенный результат с этим. альбедо текстуры при этом надо читать с SRGBTEXTURE стейтом, иначе получится обесцвеченная херня. |
Ответ: [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) и кароч все равно засветка и обесцвечивание. объясни поподробнее, пжлста. |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
результат тонмапа ты же уже в лдр текстуру рисуешь? там и ставь стейт тогда. про гамму в очередной раз запосчу 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 --- пофиксил первую цитату |
Ответ: [TrueHorror] - разработка
Вложений: 4
Не знаю то ли получилось что должно, вот скрины ( на них позорные не сглаженные тени :-D )
Без хдр С хдр - exposure 0.4 С хдр - exposure 2.2 С хдр - exposure 6.2 и да, код тонмапа такой Код:
"sampler hdrTexture : register( s0 );\n" |
Ответ: [TrueHorror] - разработка
Цитата:
ну судя по тому, что белое пятно света стало более вменяемым - вроде тонмап работает. |
Ответ: [TrueHorror] - разработка
ну да без тонмапа, теперь нужно вычислять среднюю яркость сцены, чтобы посчитать выдержку, как это проще сделать?
и еще можно ли скормить результат тонмапа шейдеру FXAA? не появятся ли артефакты? |
Ответ: [TrueHorror] - разработка
Цитата:
сложнее - считать гистрограмму яркости за несколько кадров, Вэлв очень хитро это делали, считая кол-во слишком ярких/тёмных пикселей occlusion query. http://www.valvesoftware.com/publica...urceEngine.pdf Цитата:
более того, обычно как раз считать любое АА лучше именно ПОСЛЕ тонмапа, иначе если ты сглаживаешь переход между цветом с яркостью 1 и яркостью 100, у тебя просто вся плавность перехода "съестся" яркостью второго, и по прежнему будет выглядеть как без АА. |
Ответ: [TrueHorror] - разработка
Тоесть мне нужно создать несколько текстур вплоть до 1х1. Затем в несколько проходов: заливать картинку с текущего прохода в текстуру поменьше, и т.д до 1х1? А размазывать при записи нужно при этом?
Цитата:
И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то? |
Ответ: [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 фильтр нужен). Цитата:
|
Часовой пояс GMT +4, время: 23:10. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot