Графика, рендер, шейдеры |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Графика, рендер, шейдеры |
17.08.2010, 10:38
Сообщение
#3761
|
|
Игроман Репутация: 430 Группа: Участник Сообщений: 892 Регистрация: 14.08.2008 |
Разбор полётов Работы участников Шейдеры от Diablo Наработки cjayho ECB Shaderpack Описание ECB-Shaderpack Улучшенный набор шейдеров для игры S.T.A.L.K.E.R.: Shadow of Chernobyl _____________________________________________________________________________ Основные возможности: _______________________ 1) Непрозрачный туман на R2, возможность переключения из файла конфигурации прозрачный/непрозрачный туман 2) Исправлена "синюшность" изображения на R2 3) Эффект компенсационного светового следа на R2 4) Статический и динамический Depth of field на R2, Размытие объектов при прицеливании (требует дополнительного скрипта) 5) Билдовский блум с краснинкой на R2, возможность переключения тонмаппинга в режим, который был в билде 2218 6) Screen space ambient occlusion на R2 7) Правильная отрисовка сияния ламп на R1 8) Правильная отрисовка солнечного градиента на обоих рендерах 9) Полноценная отрисовка occlusion-lightmaps на R2 10) Микроструктурный бамп 11) Правильная отрисовка бликов на блестящих поверхностях 12) Автосатурация - попиксельное уменьшение насышенности слабо освещенных объектов 13) Мягкие тени на R2 14) Экспериментальная возможность - правильные тени от деревьев на R2 15) Улучшенный Motion blur, более похожий на билдовский 16) Исправлена "кислотность" (перенасыщенность) солнечного освещения объектов на R2 17) Отражабельная вода на R2 18) GodRays на R2 + эффект пылинок в лучах. 19) Мягкие партиклы на R2 20) Мягкая вода на R2 Плюс множество регулировок и исправлений мелких недостатков обоих рендеров Условия использования _______________________ Данный продукт предоставляется под соглашением Creative Commons CC-BY 3.0, Подробнее описано по адресу Составитель данного набора шейдеров - cjayho Свежие ревизии находятся по адресу Установка ___________ Данный продукт тестировался под версиями игры 1.0004 и 1.0006 Установка сводится к копированию файлов в папку gamedata мода, изначальный набор файлов предназначается для чистой игры. В случае установки погодных модов необходимо правильно совместить файл config/weathers/flares.ltx Для более полной настройки шейдеров R2 под свой мод можно править файл shaders/r2/config.h. Для корректной работы теней нужно установить следующие переменные в игровой консоли: r2_sun_near_border 1 r2_sun_near 20 Благодарности _______________ Sergy172 за идеи и тестирование экспериментальных веток. -=Diablo=- за изначально портированные шейдеры из 2232 macron за отражабельную воду и наборы шейдеров из билдов 2217 и 2588 Билдоман за набор шейдеров из билда 2571 BAC9-FLCL, KamikaZZe за дельные замечания и критику Shadows за неоценимую помощь в разработке и тестирование экспериментальных версий Meltac <metzinger@gmx.net> (Его мод "Dynamic shaders" здесь: за алгоритм Depth of Field. Код DoF используется с его разрешения. Sky4CE за алгоритм SSAO K.D. За алгоритмы мягкой воды, мягких партиклов, GodRays Наработки ECB Team распространяются под условиями Правки рендера от K.D. Подходит как к чистой игре, так и к любым модам. Изменения - саншафты (команда r2_sun_shafts off/low/medium/high) - мягкая вода (команда r2_soft_water on/off) - мягкие партиклы (команда r2_soft_particles on/off) - регулировка дальности отрисовки травы через консоль (r__detail_radius [49, 501]) - расширенная регулировка плотности травы (r__detail_density [0.02, 0.6]) - расширенная регулировка четкости текстур (r1_tf_mipbias/r2_tf_mipbias [-3.0, 3.0], только R1/R2) - расширенная регулировка расстояния переключения на лоды (r__geometry_lod [0.1, 3.0]) - восстановлены тени от травы (r2_sun_details, R2) - восстановлены блудмарки (r2_bloodmarks, R1/R2) - правильные тени от солнца (R2) - увеличенный видеобуфер (фикс ошибки "(bytes_need<=mSize) && vl_Count" на R2, связанной с перегрузками видеобуфера*) * То есть теперь можно на полной динамике загрузить ресурсоёмкую карту типа болота из ЧН, поставить видимость в 4 километра и взрывать вокруг дымовые гранаты с ЧНовскими партиклами дыма (тоже жутко ресурсоёмкие). Установка: закинуть содержимое в папку с установленным ТЧ (6 патч, более ранние патчи не поддерживаются и просить сделать под них аналогичное бессмысленно!) Настройка: смотрите ogse_config.h Нюансы: - мягкая вода работает и без бинарников - экзешник нужен для пыли в саншафтах и правки вылета перегрузки видеобуфера. Он основан на выложенным в свое время официальном экзешнике для 6го патча без защиты (отсутвие starforce). - рендер-библиотека обеспечивает работу консольных команд, пыли в саншафтах и мягких партиклов. Использование: где и как угодно. Не возбраняется указать автора. Сообщение отредактировал ForserX - 21.07.2020, 13:58 |
 
|
|
|
|
13.05.2020, 04:10
Сообщение
#3762
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
13.05.2020, 18:35
Сообщение
#3763
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
14.05.2020, 00:13
Сообщение
#3764
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
17.05.2020, 07:32
Сообщение
#3765
|
|
Почти Игроман Репутация: 59 Группа: Участник Сообщений: 629 Награды: 1 Регистрация: 13.12.2016 |
Что-то затихло тут все. Посему для поднятия настроения сообщу кое-какую интересность, которая мне позволила поднять производительность на ванильном деферреде на 10%, а в некоторых случаях даже больше.
Все это касается отрисовки ландшафта. Поскольку ландшафт может является очень хорошим окклюдером, это можно использовать для повышения производительности. Суть в том, что ландшафт мы рендерим с z-prepass (предварительный проход по глубине с отключенной записью цвета). Этим мы получаем целых две вкусные плюшки. 1. Поскольку сначала у нас заполнен буфер глубины только ландшафтом, при отрисовке всех последующих объектов при заполнении g-buffer перекрытые ланшафтом объекты будут отклоняться ранним z-test (кроме альфа-теста), пиксельный шейдер на них даже не запустится, тем самым мы получим хорошую экономию bandwidth. Что для deferred render очень важно. 2. Второй проход ландшафта непосредственно при заполнении g-buffer мы делаем самым последним, когда буфер глубины у нас уже заполнен. Соответственно, значительная часть ландшафта может быть перекрыта другими объектами вроде кустов, зданий, каменей, травы (особенно травы). Отрисовку мы делаем конечно же с D3DCMP_EQUAL и опять же ранний z-test будет отклонять все пиксели с ландшафтом, которые закрыты другими объектами. Пиксельный шейдер ландшафта тяжелый, поэтому мы вдовесок получим еще большую экономию bandwidth. Сообщение отредактировал Zagolski - 17.05.2020, 07:45 |
 
|
|
17.05.2020, 07:41
Сообщение
#3766
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Zagolski, понятно. Уже приступаю к реализации.
Этот комментарий кому адресован? Товарищ Кьяхо может и поймёт. Но 99% мододелов просто ничего не поняли. Я же всё таки малость понял, так как ковырял шейдеры, но всё же лучше сделать это на примерах шейдеров. |
 
|
|
17.05.2020, 08:27
Сообщение
#3767
|
|
Почти Игроман Репутация: 59 Группа: Участник Сообщений: 629 Награды: 1 Регистрация: 13.12.2016 |
Там нет ничего сложного. В самый низ r__dsgraph_render.cpp добавим:
Код void __fastcall pLandscape_0(mapLandscape_Node *N) { VERIFY(N); dxRender_Visual *V = N->val.pVisual; VERIFY(V && V->shader._get()); RCache.set_Element(N->val.se, 0); float LOD = calcLOD(N->val.ssa, V->vis.sphere.R); #ifdef USE_DX11 RCache.LOD.set_LOD(LOD); #endif V->Render(LOD); } void __fastcall pLandscape_1(mapLandscape_Node *N) { VERIFY(N); dxRender_Visual *V = N->val.pVisual; VERIFY(V && V->shader._get()); RCache.set_Element(N->val.se, 1); RImplementation.apply_lmaterial(); float LOD = calcLOD(N->val.ssa, V->vis.sphere.R); #ifdef USE_DX11 RCache.LOD.set_LOD(LOD); #endif V->Render(LOD); } void R_dsgraph_structure::r_dsgraph_render_landscape(u32 pass, bool _clear) { RCache.set_xform_world (Fidentity); if (pass==0) mapLandscape.traverseLR (pLandscape_0); else mapLandscape.traverseLR (pLandscape_1); if (_clear) mapLandscape.clear (); } Туда же в R_dsgraph_structure добавляем аналогично какому-нибудь mapSorted это (не забываем и mapLandscape.destroy(); ему сделать сразу после mapSorted.destroy(); ): Код R_dsgraph::mapLandscape_T mapLandscape; в r__dsgraph_types.h в самом конце добавим это: Код typedef FixedMAP<float,_MatrixItemS,render_allocator> mapLandscape_T; typedef mapLandscape_T::TNode mapLandscape_Node; В ф-цию r_dsgraph_insert_static ближе к концу перед Код for ( u32 iPass = 0; iPass<sh->passes.size(); ++iPass) добавляем: Код if (sh->flags.bLandscape && RI.phase == CRender::PHASE_NORMAL) { mapLandscape_Node* N = mapLandscape.insertInAnyWay(distSQ); N->val.ssa = SSA; N->val.pObject = NULL; N->val.pVisual = pVisual; N->val.Matrix = Fidentity; N->val.se = sh; return; } К флагам шейдеров добавим новый bLandscape (аналогично другим также инициализируем), а в blender_BmmD.cpp сразу после case SE_R1_NORMAL_HQ: и case SE_R1_NORMAL_LQ: добавим Код C.SH->flags.bLandscape = TRUE; Отсеять ландшафт отдельно можно и другим способом, я сделал вот так. Также можно вместо создания mapLandscape создать в mapNormalPasses третий элемент, а ландшафт отсеивать туда с другим уникальным приоритетом 3-4. И отрисовывать соответственно как r_dsgraph_render_graph(3); но это будет запутаннее, хотя в какой-то степени и проще. И сразу после C.SH->flags.bLandscape = TRUE; и в high и в low добавим: Код C.r_Pass (shadow_direct_base, shadow_direct_base, FALSE, TRUE, TRUE); C.r_ColorWriteEnable(false, false, false, false); C.r_End(); И там же, но уже после uber_deffer добавим: Код C.RS.SetRS(D3DRS_ZFUNC, D3DCMP_EQUAL); Хорошо бы еще в uber_deffer или где-то еще отключить запись глубины только для ландшафта. В uber_deffer есть такая штука: Код C.r_Pass (vs,ps, FALSE); Для ландшафта делаем (внедрим bool в ф-цию) Код C.r_Pass (vs,ps, FALSE, TRUE, FALSE); Вот и все. В CRender::Render () перед установкой MRT г-буфера (перед BOOL split_the_scene_to_minimize_wait = FALSE;) ставим нулевой рендертаргет с одним только буфером глубины: Код Target->u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,!RImplementation.o.dx10_msaa?HW.pBaseZB:rt_MSAADepth->pZRT); и сразу после делаем Код r_dsgraph_render_landscape(0, false); А после if(Details) Details->Render (); (в обоих местах) делаем: Код r_dsgraph_render_landscape(1, true); Забыл добавить, сам предварительный проход ландшафта очень дешевый, практически бесплатный. И вот еще что. traverseLR запускает отрисовку с сортировкой от ближнего к дальнему, при большом кол-ве разных шейдеров возможна потеря скорости на CPU, а поскольку у нас тут всего 2 шейдера, причем второй запускается на дистанции 50 м и далее, а первый действует до 50 м, перестановок шейдеров на втором пассе практически не будет. То есть волноваться не стоит. Сообщение отредактировал Zagolski - 17.05.2020, 09:12 |
 
|
|
17.05.2020, 09:11
Сообщение
#3768
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Zagolski, вот уже понятнее.
Опробирую на гипер-движке. Боюсь, что рендер выппрыгнет за пределы вселенной. Наконец то, впервые в мире фпс станет пятизначным. |
 
|
|
18.05.2020, 21:15
Сообщение
#3769
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Zagolski, я малость встрял. У меня другой 3й рендер в гиперзвуке.
У тебя шесть знаков в коде. Target->u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,!RImplementation.o.dx10_msaa?HW.pBaseZB:rt_MSAADepth->pZRT); А моё чудо принимает четыре или шесть с Target->. Примерно выглядеть будет так: Target->u_setrt ( Target->rt_Generic_0_r,Target->rt_Generic_1,RImplementation.Target->rt_MSAADepth->pZRT ); или так: u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,rt_MSAADepth->pZRT); И что? Пойду тестировать. Что то собралось. При запуске вылет, как раз на моей Target->u_setrt ( Target->rt_Generic_0_r,Target->rt_Generic_1,RImplementation.Target->rt_MSAADepth->pZRT ); stack trace: 0023:0439E26E rClient.dll, CRender::Render(), i:\scs_3_4_source_code\clearsky\engine\layers\xrrenderpc_r3\r3_r_render.cpp, 315 0023:046AC2D9 xrGame.dll, CLevel::OnRender(), i:\scs_3_4_source_code\clearsky\engine\xrgame\level.cpp, 777 0023:0045760E xrEngine.exe, CEnvironment::SelectEnvs(), i:\scs_3_4_source_code\clearsky\engine\xrengine\environment.cpp, 411 0023:0045706A xrEngine.exe, CEnvironment::load_weather_effects(), i:\scs_3_4_source_code\clearsky\engine\xrengine\environment_misc.cpp, 714 Сообщение отредактировал Diesel - 18.05.2020, 21:36 |
 
|
|
18.05.2020, 21:44
Сообщение
#3770
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
18.05.2020, 23:19
Сообщение
#3771
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Даже не террайн виноват, а как будто всё вывернуто фейсами наружу. И приоритет визуалов нарушен.
Zagolski, а это как? C.r_Pass (shadow_direct_base, shadow_direct_base, FALSE, TRUE, TRUE); "shadow_direct_base" - у меня везде в ковычках идет. Блин, а тут надо добавлять в этих файлах? У меня компиль шейдеров в оперативу идёт, не как в ЗП. I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_detail_still.cpp(85):#include "uber_deffer.h" I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_detail_still.cpp(104):#include "uber_deffer.h" I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_Model_EbB.cpp(135):#include "uber_deffer.h" I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_Model_EbB.cpp(175):#include "uber_deffer.h" I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_tree.cpp(138):#include "uber_deffer.h" I:\SCS_3_4_Source_Code\clearsky\engine\Layers\xrRender\Blender_tree.cpp(168):#include "uber_deffer.h" C.SH->flags.bLandscape = TRUE; C.r_Pass (shadow_direct_base, shadow_direct_base, FALSE, TRUE, TRUE); C.r_ColorWriteEnable(false, false, false, false); C.r_End(); uber_deffer (C, true, "impl","impl",false,oT2_Name[0]?oT2_Name:0,true); C.RS.SetRS(D3DRS_ZFUNC, D3DCMP_EQUAL); Сообщение отредактировал Diesel - 19.05.2020, 00:05 |
 
|
|
19.05.2020, 02:44
Сообщение
#3772
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
19.05.2020, 04:55
Сообщение
#3773
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
При сохранении текстуры с мип-уровнями в paint.net у меня спрашивают, что я хочу заюзать: Fant, Супервыборка, Билинейная, Бикубическая, Метод ближайшего соседа. Всё более менее понятно со всеми кроме Fant. Не смог толком ничего нагуглить про него .__.
Сообщение отредактировал RayTwitty - 19.05.2020, 04:56 -------------------- |
 
|
|
19.05.2020, 06:03
Сообщение
#3774
|
|
Почти Игроман Репутация: 59 Группа: Участник Сообщений: 629 Награды: 1 Регистрация: 13.12.2016 |
Diesel, Я некоторое навскидку писал, потому как у меня несколько иначе сделано. Если
Код Target->u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,!RImplementation.o.dx10_msaa?HW.pBaseZB:rt_MSAADepth->pZRT); не идет, тогда сделай как Код if (!RImplementation.o.dx10_msaa) Target->u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,HW.pBaseZB); else Target->u_setrt ( Device.dwWidth,Device.dwHeight,NULL,NULL,NULL,rt_MSAADepth->pZRT); И да, shadow_direct_base нужно в кавычках писать. Я бы там исправил, но уже нет доступа. C.r_Pass (vs,ps, FALSE, TRUE, FALSE); - а так сразу глюки. Это нужно делать только для ландшафта. В саму uber_deffer можно добавить в конце bool DO_NOT_WRITE=false, а в теле ф-ции сделать типа того: Код if (DO_NOT_WRITE) C.r_Pass (vs,ps, FALSE, TRUE, FALSE); else C.r_Pass (vs,ps, FALSE); Ну и соотв. в blender_BmmD.cpp вызывать ее с true, а во всех остальных случаях она будет как false. |
 
|
|
20.05.2020, 00:19
Сообщение
#3775
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
При сохранении текстуры с мип-уровнями в paint.net у меня спрашивают, что я хочу заюзать: Fant, Супервыборка, Билинейная, Бикубическая, Метод ближайшего соседа. Всё более менее понятно со всеми кроме Fant. Не смог толком ничего нагуглить про него .__. Вообщем погуглил еще получше и по всему написанному делаю вывод, что Fant аналогичен опции "Лучшее качество" при уменьшении размера изображения. А при создании мипов как раз это и происходит. -------------------- |
 
|
|
20.05.2020, 12:15
Сообщение
#3776
|
|
Почти Игроман Репутация: 59 Группа: Участник Сообщений: 629 Награды: 1 Регистрация: 13.12.2016 |
Тут кое-что прояснилось. Я ранее считал, что в сталке диффузные текстуры хранятся в SRGB формате. Оказалось, нет. Они сохранены в линейном формате и соотв. шейдинг происходит тоже в линейном, то есть корректно.
|
 
|
|
20.05.2020, 13:04
Сообщение
#3777
|
|
Почти Игроман Репутация: 153 Группа: Участник Сообщений: 614 Награды: 4 Регистрация: 03.05.2012 |
Я ранее считал, что в сталке диффузные текстуры хранятся в SRGB формате. Эм, такие форматы пришли только с ДХ10. Как их могли использовать? что Fant аналогичен опции "Лучшее качество" при уменьшении размера изображения. Что значит лучшее качество? (вопрос не к тебе, если что) Это же просто метод фильтрации. У каждого фильтра свой алгоритм. Грубо говоря, с одним алгоритмом мипы будут мыльнее, с другим более четкие. Сообщение отредактировал SkyLoader - 20.05.2020, 13:08 |
 
|
|
20.05.2020, 13:22
Сообщение
#3778
|
|
Почти Игроман Репутация: 59 Группа: Участник Сообщений: 629 Награды: 1 Регистрация: 13.12.2016 |
|
 
|
|
21.05.2020, 16:19
Сообщение
#3779
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Zagolski, я вернулся.
Я заоптимизировал отражения огсе, даже не лагают. Но одно уточнение, это уже смомтриться иначе, чем в оригинале. Что поделать, сетевая, требует жертв. Но вода смотриться опупенно, почти как в CE2. Сегодня до ума буду делать то, что выше писал. И еще я сегодня установил (что раньше не знал), что кроме R1 билд лайт в рендере не читается. А я тут всем гнал. Значит у меня нет преимущества перед ТЧ. |
 
|
|
21.05.2020, 21:43
Сообщение
#3780
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
21.05.2020, 22:35
Сообщение
#3781
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Diesel, выглядит как tf2, освещение сломано.
|
 
|
|
Текстовая версия | Сейчас: 04.05.2024, 16:07 |