Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Графика, рендер, шейдеры
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91
Diesel
Цитата(ed_rez @ 29.05.2019, 13:29) *
Дизель,
Не помню уже причин, но что-то мне подсказывает, что где-то заковырка. Иначе давно ввели эту схему.


Нужно вырезать статику и чек-бокс детальных текстур (включить отображение деталей постоянно).
Lanforse
Уважаемые, не подскажете, почему при получении цвета с r2_RT_albedo проявляется подобная сетка?



Либо я где-то сильно косячу. Просто пытаюсь разделить постобработку на несколько проходов:

код

CODE


// Set up variable
Fvector3 dof;
Fvector2 vDofKernel;
g_pGamePersistent->GetCurrentDof(dof);
vDofKernel.set(0.5f/Device.dwWidth, 0.5f/Device.dwHeight);
vDofKernel.mul(ps_r2_dof_kernel_size);

// Draw COLOR
RCache.set_Element (s_combine->E[bDistort?2:1]);
RCache.set_c ("m_current", m_current);
RCache.set_c ("m_previous", m_previous);
RCache.set_c ("m_blur", m_blur_scale.x,m_blur_scale.y, 0,0);
RCache.set_Geometry (g_aa_AA);
RCache.Render (D3DPT_TRIANGLELIST,Offset,0,4,0,2);

// DOF
RCache.set_Element (s_combine->E[3]);
RCache.set_c ("dof_params", dof.x, dof.y, dof.z, ps_r2_dof_sky);
RCache.set_c ("dof_kernel", vDofKernel.x, vDofKernel.y, ps_r2_dof_kernel_size, 0);
RCache.set_Geometry (g_aa_AA);
RCache.Render (D3DPT_TRIANGLELIST,Offset,0,4,0,2);



CODE

switch (C.iElement)
{
case 0: // combine
C.r_Pass ("combine_1", "combine_1", FALSE, FALSE, FALSE, TRUE, D3DBLEND_INVSRCALPHA, D3DBLEND_SRCALPHA); //. MRT-blend?
C.r_Sampler_rtf ("s_position", r2_RT_P );
C.r_Sampler_rtf ("s_normal", r2_RT_N );
C.r_Sampler_rtf ("s_diffuse", r2_RT_albedo );
C.r_Sampler_rtf ("s_accumulator", r2_RT_accum );
C.r_Sampler_rtf ("s_depth", r2_RT_depth );
C.r_Sampler_rtf ("s_tonemap", r2_RT_luminance_cur );
C.r_Sampler_clw ("s_material", r2_material );
C.r_Sampler_clw ("s_occ", r2_RT_ssao_temp );
C.r_Sampler_rtf ("s_half_depth", r2_RT_half_depth);
C.r_Sampler_clf ("env_s0", r2_T_envs0 );
C.r_Sampler_clf ("env_s1", r2_T_envs1 );
C.r_Sampler_clf ("sky_s0", r2_T_sky0 );
C.r_Sampler_clf ("sky_s1", r2_T_sky1 );
jitter©;
C.r_End ();
break;
case 1: // non-AA
C.r_Pass ("null", "combine_2_NAA", FALSE, FALSE, FALSE);
C.r_Sampler_rtf ("s_position", r2_RT_P);
C.r_Sampler_rtf ("s_normal", r2_RT_N);
C.r_Sampler_clf ("s_image", r2_RT_generic0);
C.r_Sampler_clf ("s_bloom", r2_RT_bloom1);
C.r_Sampler_clf ("s_distort", r2_RT_generic1);
C.r_End ();
break;
case 2: // non-AA + DISTORTION
C.r_Pass ("null", "combine_2_NAA_D", FALSE, FALSE, FALSE);
C.r_Sampler_rtf ("s_position", r2_RT_P);
C.r_Sampler_rtf ("s_normal", r2_RT_N);
C.r_Sampler_clf ("s_image", r2_RT_generic0);
C.r_Sampler_clf ("s_bloom", r2_RT_bloom1);
C.r_Sampler_clf ("s_distort", r2_RT_generic1);
C.r_End ();
break;
case 3: // dof
C.r_Pass ("null", "combine_dof", FALSE, FALSE, FALSE);
C.r_Sampler_rtf ("s_position", r2_RT_P);
C.r_Sampler_rtf ("s_normal", r2_RT_N);
C.r_Sampler_clf ("s_image", r2_RT_albedo);
C.r_End ();
break;
}


Zagolski
Цитата(Lanforse @ 30.05.2019, 14:44) *
Уважаемые, не подскажете, почему при получении цвета с r2_RT_albedo проявляется подобная сетка?

Потому что на R4 этот таргет на стадии combine 2 установлен буфером и в данный момент активен. Либо забирай оттуда цвет раньше, либо измени его на HW.pBaseRT
Lanforse
Но это не R4, а R2
Zagolski
На R2 он тоже активен. Хотя, на R2 если отключить постэффекты (-nodistort -nocolormap), тогда вместо него активным установится базовый таргет.
cjayho
QUOTE (OlegatoR @ 23.05.2019, 00:39) *
cjayho, топикбан за флуд


А то ничо что я куратор темьі? blink.gif
Zagolski
Что-то в теме затишье... Немного разбавлю его. Хочу поделиться своей конечной реализацией 3D оптики. Собственно, кто без ума от таких прицелов (как и я), наверное, уже сами все как надо сделали, но мало ли.
Реализация по типу как у Шокера малость некорректная. Дело в том, что в ней текстура увеличенной сцены накладывается на саму линзу по координатам 0...1, что не совсем верно. В этом случае увеличение в прицеле сильно зависит от размера линзы на экране (чем она ближе, тем сильнее), а также от движения прицела при отдаче или инерции. В последнем случае так вообще изображение в прицеле не соответствует основной сцене и напоминает вид из телевизора.
Так вот, чтобы избавиться от этого и сделать это дело реалистичным, мы накладываем текстуру увеличенной сцены на линзу в экранном пространстве, только и всего. Вот так:

float4 main ( p_flat I, float4 pos2d : SV_Position ) : SV_Target
{
float3 t_svp = s_svp.Load( int3(pos2d.xy, 0) ).rgb;
}

А чтобы пиксельным шейдером не обрабатывать зону вне линзы при создании самой увеличенной сцены и тем самым существенно увеличить производительность, мы отсекаем эту зону при помощи трафарета. Лучший вариант - сперва отрендерить одну линзу и заполнить ей трафарет (заполняем все нулями, на линзу ставим единицы). В конечном итоге вид в прицел при его движении становится гораздо более шикарным и реалистичным. И кроме того, увеличение и разрешение в прицеле не зависят ни от расстояния прицела, ни от его движения.



P.S. Движковый код по трафарету выкладывать не буду, вам он бесполезен, потому как у меня переделанный рендер (forward+ с z-препассом) и там все иначе. Но если какие вопросы будут, помогу чем смогу.
cjayho
Интересно было бы вообще без текстуры увеличенной.
Например у нас есть текстура линзы, с тремя компонентами, первые две влияют на сдвиг пикселя в экранном пространстве, третья на аттенюацию, и есть текстура картинки в экранном пространстве.

вроде такого:

CODE
float3 tex = tex2D( s_lens, uv );

return tex2D( s_image, uv + tex.xy ) * tex.z;


в этом случае даже без третьей компоненты мы можем плавно уменьшить увеличение к краям линзы.
правда при слишком больших увеличениях боюсь будет мыльная или пиксельная картинка.
Zagolski
Цитата(cjayho @ 15.06.2019, 20:41) *
правда при слишком больших увеличениях боюсь будет мыльная или пиксельная картинка.

Именно. Кроме того, не будет эффекта сжатия пространства, который мы видим при взгляде в бинокль в реальном мире или снижением fov в графике.
Zagolski
Кто-нибудь углубленно игрался с параметром сглаживания альфа-теста в ЧН/ЗП? Там их три варианта с разными алгоритмами и разным фпс. Какой из них по качеству лучше?
Fizzed
I've never noticed difference between three alpha-tests, but i could be wrong.

IMO, you should leave it on default value.

Я никогда не замечал разницы между тремя альфа-тестами, но могу ошибаться.

ИМО, вы должны оставить это значение по умолчанию.
Zagolski
Мне кажется, что альфа-тест 10.1 получше, но и прожорливый. Получше он в том плане, что качественнее сглаживает. А может мне так показалось, поэтому и решил у народа узнать их мнение. А вообще лучше юзать который стандарт 10.0, он должен быть быстрее. Хотя в любом случае ванильный отложенный рендер и MSAA - понятия несовместимые.
Zagolski
Решил в сторону скрин-спейсовских отражений поглядеть. Планарные шикарны, но блин геометрию отжирают неслабо (хотя все равно быстрее рейтрейсинга). Посидел сегодня, замутил в сталке:



Что сказать? Плюсы есть. Очень быстрые и весьма качественные. В плане качества планарным почти не уступают в полном разрешении и там и там (по крайней мере в моей реализации). И более живые за счет реального отражения, а не накладыванием текстуры, как в планарных. Но конечно существенный минус, что только локальные (видно на последнем скрине). Впрочем, при игре это не особо заметно. Вот и думаю, что лучше оставлять. Скорее всего для больших водных пространств сделаю планарные, а для луж и других отражений будут SSR.

P.S. А я SSR ранее не особо взлюбил, может просто нормальных не видел. Оказалось, все далеко не так плохо.
Diesel
Zagolski, скорее тест - я у тебя украду эти отражения.
А это только шейдеры или еще движок надо расшивать, относительно тех старых KD отражений?

Когда выйдет твой мод? Пора заканчивать и мне помогать надо уже. У меня лодка есть, будем рыбалку делать. Рыб уже давно завезли в зону. biggrin.gif
Zagolski
Отражения все полностью в шейдере, но из движка нужна конечная освещенная сцена, откуда мы будем сам цвет брать. Для воды - на стадии отрисовки воды ( r_dsgraph_render_graph(1) ), а для луж и прочего - тут уже надо либо в самом конце новую фазу делать, либо брать результат предыдущего кадра с репроекцией текстурных координат. Так что да, в движке тоже делать надо. На forward с этим куда проще, там освещение сразу происходит. Либо на ваниле брать альбедо, но там только цвет, освещения нет, так что это не особо подойдет.

Тут у себя заметил странность, что текстура скайбокса ("$user$sky0" и "$user$sky1") обновляется не каждый кадр, а раз в час. Ерунда какая-то. Это у всех такое или только у меня? Хотя при рендере неба все нормально, плавно, текстура каждый кадр сменяется.
Zagolski
Разобрался, проблема локальная. Не был установлен в экспорт шейдеров фактор смешивания скайбоксов, оттого и не мешались они.
Lanforse
Может кто-нибудь подсказать, как правильно написать скриптовый шейдер на замену SDK-шному model, на статике?
Пробовал вот такое вот:

Код
function normal        (shader, t_base, t_second, t_detail)
    shader:begin    ("model_def_hq","model_def_hq")
            : fog        (false)
            : blend        (false,blend.srcalpha,blend.one)
            : aref         (false,2)
            : sorting    (1, false)
            : zb         (true,true)
    shader:sampler    ("s_base")          :texture    (t_base)
    shader:sampler    ("s_lmap")          :texture    (t_second)
end


Но бьются лайтмапы. Если не использовать hq - то их и вовсе не будет, а должны.
Lanforse
Отбой тревоги, разобрался. Не стоило передавать s_lmap, только и всего.
xrModder
Lanforse, попробуй в sorting заменить 1 на 2 или 3.
Diesel
А у меня вот какая отражения. Спасибо Zagolski.


Отражения не такие уж выдающиеся, но уже вид другой, базара нет.

iOrange
Цитата(Zagolski @ 22.06.2019, 06:57) *
И более живые за счет реального отражения, а не накладыванием текстуры, как в планарных.

Гибридный вариант не рассматривали? Думаю для Сталкера самое оно будет.

http://remi-genin.fr/blog/screen-space-pla...econ-wildlands/
Diesel
Из ЧН пытаюсь попасть на свою локацию 5в1 из ЗП. Непускает забор. Хорошо загородил однако.

Diesel


Zagolski, похоже на отражение солнца, но его нет в помине. Значит можно извратиться и придумать подложку для фальшивого отражения.
Zagolski
Цитата(iOrange @ 24.06.2019, 22:21) *
Гибридный вариант не рассматривали? Думаю для Сталкера самое оно будет.

Наконец руки дошли разобраться и попробовать SSPR в сталке. Спасибо за наводку.



Что сказать? Существенных плюса два: высокое качество при полном разрешении и при этом почти бесплатные в плане скорости. Так что очень даже подойдут как замена планарным для воды. Ну и конечно же стандартный косяк потерянной информации никуда не делся, как и у SSLR...
sergy172
Zagolski, а на сколько затруднительно использовать гибрид, "урезанный" планар+SSPR так, чтобы он дополнял недостатки скринспэйса?
Или же это совершенно не целесообразно по тем или иным причинам?
Cossack-HD
Цитата(sergy172 @ 21.07.2019, 18:02) *
Zagolski, а на сколько затруднительно использовать гибрид, "урезанный" планар+SSPR так, чтобы он дополнял недостатки скринспэйса?
Или же это совершенно не целесообразно по тем или иным причинам?

Всегда чем проще, тем лучше. Планар всё равно будет вызывать отрисовку полигонов, а SSR делается ближе к концу пайплайна, так что осмелюсь предположить что пайплайн рендера станет очень неоптимальным z_crazy.gif Т.е. если сложить вместе сомнительные выигрыши по производительности, артефакты SSR и затраты на реализацию, то проще делать просто планарные отражения и оптимизировать существующие части рендера, чтобы он шустрее гонял.
xrModder
Есть правка движка по восстановлению Солнца?
Zagolski
Цитата(sergy172 @ 21.07.2019, 16:02) *
а на сколько затруднительно использовать гибрид, "урезанный" планар+SSPR так, чтобы он дополнял недостатки скринспэйса?

Тоже думал об этом. Планар на коротких дистанциях (с дальностью 25-50 м) очень шустрый, по крайней мере на форвард. Падение скорости 5-10% (смотря еще какое освещение использовать и разрешение, можно больше выиграть). К тому же карты теней для планара берутся от основной сцены (их не нужно повторно делать), что существенно экономит фпс. Так что вполне уместно сделать честный планар вблизи с SSPR вдалеке. Буду пробовать. Там нет ничего сложного, если в движке реализованы оба вида отражений.

Цитата(Cossack-HD @ 21.07.2019, 18:28) *
Т.е. если сложить вместе сомнительные выигрыши по производительности, артефакты SSR и затраты на реализацию, то проще делать просто планарные отражения и оптимизировать существующие части рендера, чтобы он шустрее гонял.

Да, в движке сталка не помешало бы внедрить нормальный occlusion culling. Тот что есть хорош, по крайней мере он только на CPU и не вызывает задержек. Но он работает только с HOM (крупные объекты вроде домов + их нужно делать), что конечно помогает, но не идеально. Я пробовал в сталк внедрять на базе HZB, этот отбрасывает закрытую геометрию отлично, но слишком велика задержка. Пока его отложил. Но в любом случае очень желательно улучшить отсечение, когда имеются 3д прицелы, планарные отражения, да и еще z-prepass.

Хотя верно, если делать качественный SSLR, то в итоге он жрет даже больше, чем оптимизированный полноразмерный планар с макс. дальностью. Слишком много трассировок. SSPR мне чем понравился, что в нем не трассируется сцена и фпс он почти не кушает.
cjayho
QUOTE (xrModder @ 21.07.2019, 20:15) *
Есть правка движка по восстановлению Солнца?



https://www.gameru.net/forum/index.php?show...p;#entry1655421
xrModder
Цитата(cjayho @ 22.07.2019, 16:20) *

xr_3da\xrGame\game_cl_base.cpp (движковое восстановление солнца в ТЧ)

Код
void    game_cl_GameState::net_import_GameTime        (NET_Packet& P)
{
    //time
    u64                GameTime;
    P.r_u64            (GameTime);
    float            TimeFactor;
    P.r_float        (TimeFactor);

    
    Level().SetGameTimeFactor    (GameTime,TimeFactor);

    u64                GameEnvironmentTime;
    P.r_u64            (GameEnvironmentTime);
    float            EnvironmentTimeFactor;
    P.r_float        (EnvironmentTimeFactor);

    u64 OldTime = Level().GetEnvironmentGameTime();
    Level().SetEnvironmentGameTimeFactor    (GameEnvironmentTime,EnvironmentTimeFactor);
    //if (OldTime > GameEnvironmentTime) // комментарим вот это
    //    GamePersistent().Environment().Invalidate(); // и это
}



Спасибо!
xrModder
Как движково сделать правильные тени от Солнца в R2?
SkyLoader
xrModder, https://github.com/SkyLoaderr/gz_team_engin...ght_DB.cpp#L187
Флаг R2FLAG_TRUE_SHADOWS.
xrModder
Цитата(SkyLoader @ 24.07.2019, 00:44) *


Код
if (ps_r2_ls_flags.test(R2FLAG_TRUE_SHADOWS))
        {
            sun_adapted->set_rotation (OD,_sun_original->right    );
            sun_adapted->set_position (OP);
        }


Такой вопрос, зачем сюда if (ps_r2_ls_flags.test(R2FLAG_TRUE_SHADOWS)) если есть:
Код
            sun_adapted->set_rotation (OD,_sun_original->right    );
            sun_adapted->set_position (OP);


?
SkyLoader
xrModder, это на случай, если захочется сделать правильные тени опциональными через флаг. Можно обойтись без этого условия, конечно.
xrModder
SkyLoader, спасибо, пожалуй обойдусь без опциональных "правильных" теней от Солнца
xrModder
Кто-нибудь исправлял баг с освещением закрытых помещении?
cjayho
QUOTE (xrModder @ 23.07.2019, 20:58) *
SkyLoader, спасибо, пожалуй обойдусь без опциональных "правильных" теней от Солнца


лучше вообще без них, увы. эксперименты показали что если солнце у горизонта, то очень сильно, просто катастрофически, проседает фпс.
xrModder
Есть репозитории SoC кроме того что есть в шапке?
cjayho
QUOTE (xrModder @ 24.07.2019, 17:16) *
Есть репозитории SoC кроме того что есть в шапке?


собираетесь сделать свою движковую солянку? smile.gif
xrModder
Цитата(cjayho @ 25.07.2019, 02:18) *
Собираетесь сделать свою движковую солянку? smile.gif

Не то что солянка, просто собираю все возможные правки для v1.0007rc1 с минимальным изменением gamedata.
cjayho
QUOTE (xrModder @ 24.07.2019, 22:22) *
QUOTE (cjayho @ 25.07.2019, 02:18) *
Собираетесь сделать свою движковую солянку? smile.gif

Не то что солянка, просто собираю все возможные правки для v1.0007rc1 с минимальным изменением gamedata.


Сразу хочу тогда предупредить что большинство известных "багов" двигла сталкера - это не совсем баги а затычки чтоб сделать незаметными более серьезные и трудноустранимые баги. Вроде проседания фпс в несколько раз если правильные тени и солнце у горизонта (из-за чего тени сделаны неправильными, и покалечены зарешеченные лампы на р2). Еще можно вспомнить довольно заметное проседание фпс при рендере фларов, из-за чего вообще было отключено солнце. Из-за проблем со стеклами и прочими полупрозрачными объектами на р2, были выкошены все стекла из Зоны.
Еще бесконечные патроны у неписей, потому что боевка банально не умеет взаимодействовать с патронами в инвентаре.
Еще дурацкие ситуации когда достреливаешь раненного враждебного непися умоляющего об аптечке, обыскиваешь его и у него в инвентаре аптечка есть и даже не одна (а потому что в двигле есть заготовка под функцию с комментарием // return correct medikit)
Еще отключена фича с патронами на поясе - во первых дико дурацкая задумка ужасно мешающая играть, а во вторых проблема опять же с тупым ИИ.

ну и так далее.
xrModder
Цитата(cjayho @ 25.07.2019, 03:54) *
Сразу хочу тогда предупредить что большинство известных "багов" двигла сталкера - это не совсем баги а затычки чтоб сделать незаметными более серьезные и трудноустранимые баги. Вроде проседания фпс в несколько раз если правильные тени и солнце у горизонта (из-за чего тени сделаны неправильными, и покалечены зарешеченные лампы на р2). Еще можно вспомнить довольно заметное проседание фпс при рендере фларов, из-за чего вообще было отключено солнце. Из-за проблем со стеклами и прочими полупрозрачными объектами на р2, были выкошены все стекла из Зоны.
Еще бесконечные патроны у неписей, потому что боевка банально не умеет взаимодействовать с патронами в инвентаре.
Еще дурацкие ситуации когда достреливаешь раненного враждебного непися умоляющего об аптечке, обыскиваешь его и у него в инвентаре аптечка есть и даже не одна (а потому что в двигле есть заготовка под функцию с комментарием // return correct medikit)
Еще отключена фича с патронами на поясе - во первых дико дурацкая задумка ужасно мешающая играть, а во вторых проблема опять же с тупым ИИ.

ну и так далее.

Вы мне дайте ссылки на репо, а там посмотрим smile.gif
cjayho
QUOTE (xrModder @ 25.07.2019, 05:49) *
Вы мне дайте ссылки на репо, а там посмотрим smile.gif


На свои сырцы что ли? smile.gif
та ну, это стыдно показывать smile.gif
ForserX
Загольский. Ты мне как-то обещал реализацию оптики.

Загольский. Ты мне как-то обещал реализацию оптики.
xrModder
Цитата(cjayho @ 25.07.2019, 17:28) *
На свои сырцы что ли? smile.gif
та ну, это стыдно показывать smile.gif

Покажешь или нет?
Diesel
У меня новый рендер нарисовывается. Выкинул лайтмапы (хотя они не так и портили вид). Чисто динамический свет. На улице нормально, в помещении свет динамики не попадает, однако. У каждой текстуры свой шейдер будет. Текстура с маской на основе террайн-текстуры - это лишнее, но требуется.
Еще работы много предстоит. Осилил только папку wood c текстурами.

Кто нибудь подобное делал? Или я один умом тронулся?
cjayho
QUOTE (Дизель @ 07.08.2019, 02:10) *
Выкинул лайтмапы (хотя они не так и портили вид). Чисто динамический свет.


не будет ли графон как в дум3 с непроглядно черными тенями?
xrModder
cjayho, так вы будете дать доступ к исходникам?
Diesel
cjayho, я оставил хемисферу. Без неё ни как солнце не активно на поверхности.
Zagolski
Цитата(Дизель @ 07.08.2019, 03:10) *
У меня новый рендер нарисовывается. Выкинул лайтмапы (хотя они не так и портили вид). Чисто динамический свет. На улице нормально, в помещении свет динамики не попадает, однако.

Передавай в hmodel.h параметр h какой-то свой, что-то около 0.05. Только там, где USE_LM_HEMI используется. Правда, там не только для помещений, на улице такая геометрия тоже используется. Так что идеально не выйдет сделать, что-то придумывать придется.

Цитата(cjayho @ 07.08.2019, 09:26) *
не будет ли графон как в дум3 с непроглядно черными тенями?

Вряд ли, на статичной геометрии ambient light в вершины моделей пишется. А для динамических вообще по другому считается. Ну а для помещений рецепт выше.

Цитата(ForserX @ 28.07.2019, 16:57) *
Загольский. Ты мне как-то обещал реализацию оптики.

На отложенном рендере я ее еще не сделал, руки не дойдут, по другому работы полно. Но зато еще лучше оптимизировал на форварде, теперь вообще фпс не падает (где-то даже выше), и это при идентичном основному экрану качестве и разрешении в линзе. О как! Осталось на deferred перенести.
Так ты ж в армии, вроде как. Или уже вернулся?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.