Перейти к контенту

KD87

Рекомендуемые сообщения

Играю в stalker anomaly, решил покрутить графику.

Но в процессе разбора шейдеров выяснил, что блум не создается или где-то в процессе умножается на 0.

Кто разбирается в пайплайне сталкера. Мне надо понять на каком моменте он (блум) генерируется, в каком шейдере на это отдается комманда, сколько проходов и куда текстура блума пишется.

Заранее спасибо!

 

оказывается блум включается, если в консоли r2_tonemap ON

вот кому бы в голову такое пришло? tonemap - это функция сжатия HDR даты в LDR диапазон, который может вывести средний монитор.

Нашел блум, ответ уже не нужен.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
7 часов назад, 2clip сказал:

Очень круто. Это под оригинал ЗП реализовано? Работает только на Р2?

 

нет, это все делается на Anomaly (их разраб внёс пару правок в движок, чтобы он скушал мои шейдеры)

В аномалии только Р2, стараюсь по максимуму все хвосты от статики вырезать - имхо нет смысла её поддерживать в 2020.

К сожалению прогресс идет туго, сложно без понимания движка вкручивать все это.

из свежих приколюх:

AnomalyDX11AVX_2020-12-20_02-23-04.png

debug вид "эффекта бликов в линзах объектива" (для скринодрочества круто, а вот при игре - я б выключал)

AnomalyDX11AVX_2020-12-20_02-35-39.png

так это выглядит в игре (специально не сильно их выделяю, все хорошо в меру)

 

самая засада - что под новую обработку света и эффекты надо и настройки погоды переделывать, считай с нуля. Т.е. это не как в магазине - просто добавил "товар" в корзину.

Изменено пользователем Cornholio
  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Screen Space Contact Shadows

 

 

AnomalyDX11AVX_2021-04-14_20-08-31.png

raw

AnomalyDX11AVX_2021-04-14_20-08-16.png

без

AnomalyDX11AVX_2021-04-14_20-08-22.png

наложение и смешивание с обычными тенями и моделью освещения

 

Видео в движении

https://www.youtube.com/watch?v=5CronUii8_4

Блум и постобработка

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

Никакого рейшейда - все встроенно в движок и относительно неплохо оптимизировано

 

AnomalyDX11AVX_2021-04-13_21-16-50.pngAnomalyDX11AVX_2021-04-11_15-10-42.png

AnomalyDX11AVX_2021-04-13_21-12-49.pngAnomalyDX11AVX_2021-04-13_21-13-43.png

В процессе работа с водой

 

AnomalyDX11AVX_2021-04-14_20-48-22.png

не думаю что это сильно отличается по качеству от текущей воды в xray - просто чуть чуть иначе считается переход от "прозрачности к отражению"

в плане просто заменить на Screen Space Refection

  • Нравится 3

Поделиться этим сообщением


Ссылка на сообщение

спасибо!

я сейчас вот это читаю и осмысливаю

http://remi-genin.fr/blog/screen-space-plane-indexed-reflection-in-ghost-recon-wildlands/

вроде идея похожа, просто подменю на тот самый перевёрнутый бекбуфер, но с искажением от проекции

Поделиться этим сообщением


Ссылка на сообщение
25.04.2021 в 12:42, Holy Biblie сказал(а):

Здравствуйте. Перекинул шейдер models_lfo_light_dot_weapons (динамический коллиматор) из аномали на сталкер зп, подключил к модельке и словил вылет с этим еррором: 

! error:  (18): error X3004: undeclared identifier 'screen_res'

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

 

Попробуй в файле шейдера сделать замену

"screen_res"

на

"pos_decompression_params2"

 

Только учти, это векторные величины, они как правило пишутся так "pos_decompression_params.xy или screen_res.zw" - не сотри составляющие случайно.

 

Я пока этим развлекался

 

 

  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение
08.05.2021 в 21:03, BOPOHua сказал(а):

Добрый вечер! Есть ли возможность уменьшить колыхание (шатание) травы? Из за большого количества ее на экране - в глазах рябит.  И еще можно ли ее заставить клонится в одном направлении имитируя направление ветра ?  Нашел вот такое видео 

 

  1. Я не знаю способа уменьшить "волны" травы без залезания в сами шейдеры (по крайней мере я в консольных командах не видел ничего, что дало бы надежду)
  2. Поскольку я сам все свои эксперименты провожу на Аномалии, то могу только говорить на её примере (ванильный рендер ЗП хоть и является основой, но иногда может отличаться)
  3. я не уверен по этому методу, так как замерить "колыхания травы" сложно, а мой глаз не замечал каких-то проблем
  4. не гарантирую, что тебе поможет, но (!!) попробуй следующее:
    1. найди свою gamedata/shaders/папку используемого рендера (r1, r2, r3)/shared
    2. открой блокнотом файл common.h
    3. найди функцию calc_cyclic
    4. float 	calc_cyclic 	(float x)				
      {
      	float 	phase 	= 1.0/(2.0*3.141592653589f);
      	float 	sqrt2	= 1.0;//1.4142136f; измени тут на 1.0
      	float 	sqrt2m2	= 2.0;//2.8284271f; измени тут на 2.0
      	float 	f 	= sqrt2m2*frac(x)-sqrt2;	
      	return 	f*f - 0.5;				// [-1     .. +1] // а тут была 1.0, замени на 0.5
      }
    5. по идее это в 2 раза уменьшит "псевдо-синусоиду" по которой считается искажение для травы
  5. что касается видоса от LV - то этого скорее всего нет в твоей версии Сталкера, это его эксперименты с искажениями

 

PS
я продолжил бороться с облаками:

 

 

и пытаюсь сделать свое АО с блекджеком.. (ну вы поняли)

Desktop_Screenshot_2021.05.09_-_23.52.33

на скрине нет фильтрации, её еще не придумал (не прочитал - как правильно делать)

И я тоже задам вопрос (вдруг тут кто знает)
Для АО хорошо бы сделать downscale всего Gbuffer

Вроде я видел в рендере что-то связанное с этим делом в фазе AO, но я все свои эксперименты веду на движке аномалии, и хрен его знает - где и как там постарались моддеры до меня (например, я обнаружил что отдельный пасс для облаков просто был выключен)

 

Мне надо сделать, причем довольно экономным способом, Gbuffer в половинном разрешении, желательно с небольшим блюром (шириной 1 пиксель, чтобы уменьшить разницу между увеличившимися в размере текселями)

Идеи?

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
7 часов назад, Nestandart_5443 сказал(а):

 Заинтересовался, есть ли возможность создать новый шейдер прозрачности или отражения.

 

Возможно всё. Вопрос только в постановке задачи и времени-сложности реализации. А раз ты сам в шейдерах ноль, то не знаю - как именно ты собрался это делать. Как мне говорил LV можно делать индивидуальные шейдеры под определенный mat ID, например, так реализован светящийся экран PDA в модах, где есть "физический" PDA.

 

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

Пример "отложенного" шедера для npc

 

model_npc.s

function normal(shader, t_base, t_second, t_detail)
	shader:begin("deferred_npc","deferred_npc")
	: fog (false)	
	shader:dx10stencil(true, cmp_func.always, 255 , 127, stencil_op.keep, stencil_op.replace, stencil_op.keep)
	shader:dx10stencil_ref(1)		
	
	shader:dx10texture("s_base", t_base)
	shader:dx10texture("s_bump", t_base.."_bump")	
	shader:dx10texture("s_bumpX", t_base.."_bump#")	

	shader:dx10sampler("smp_base")	
end

deffered_npc.vs

#include "common.h"
#include "skin.h"

v2p_bumped _main( v_model I )
{
	v2p_bumped O;
	
	//Hpos and texcoord
	O.hpos = mul(m_WVP, I.P);
	O.tcdh = float4(I.tc.xyyy);

	//Hemi
	float3 Nw = mul((float3x3)m_W, I.N.xyz);
	float3 hc_pos = (float3)hemi_cube_pos_faces;
	float3 hc_neg = (float3)hemi_cube_neg_faces;
	float3 hc_mixed = (Nw < 0) ? hc_neg : hc_pos;
	float hemi_val = dot( hc_mixed, abs(Nw) );
	hemi_val = saturate(hemi_val);

	//TBN
	float3 N = I.N;	
	float3 T = I.T;
	T = normalize(T - dot(T,N) * N);	
	float3 B = cross(N,T);
	
	float3x3 xform = mul((float3x3)m_WV, float3x3(
	2*T.x,2*B.x,2*N.x,
	2*T.y,2*B.y,2*N.y,
	2*T.z,2*B.z,2*N.z
	));

	// Feed this transform to pixel shader
	O.M1 = xform[0]; 
	O.M2 = xform[1]; 
	O.M3 = xform[2]; 
	
	//Position
	float3 Pe = mul(m_WV, I.P);
	O.position = float4(Pe, hemi_val); //Use L_material.x for old behaviour;

	return	O;
}

/////////////////////////////////////////////////////////////////////////
#ifdef 	SKIN_NONE
v2p_bumped	main(v_model v) 		{ return _main(v); 		}
#endif

#ifdef 	SKIN_0
v2p_bumped	main(v_model_skinned_0 v) 	{ return _main(skinning_0(v)); }
#endif

#ifdef	SKIN_1
v2p_bumped	main(v_model_skinned_1 v) 	{ return _main(skinning_1(v)); }
#endif

#ifdef	SKIN_2
v2p_bumped	main(v_model_skinned_2 v) 	{ return _main(skinning_2(v)); }
#endif

#ifdef	SKIN_3
v2p_bumped	main(v_model_skinned_3 v) 	{ return _main(skinning_3(v)); }
#endif

#ifdef	SKIN_4
v2p_bumped	main(v_model_skinned_4 v) 	{ return _main(skinning_4(v)); }
#endif

FXVS;

 

аналогичным способом можно "переписать" шейдеры для конкретных моделей/материалов

 

 

Что касается кода выше - я сам его не проверял, что именно он делает. Это просто пример работы подобного подхода для "override" материала. Скорее всего он не дружит с тенями (т.е если ты будешь делать так новую геометрию - она не появится в shadowmap)

Изменено пользователем Cornholio
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

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

новая модель освещения - авто lvunter, чуть чуть подпилена для демонстрации мной. Попытка в полный PBR (понимаю - глупо пытаться на сток ассетах, но хоть попытались)

 

AnomalyDX11_2021-06-24_19-42-18.pngAnomalyDX11_2021-06-24_19-42-51.png

AnomalyDX11_2021-06-24_19-59-08.pngAnomalyDX11_2021-06-24_19-48-53.png

 

много косяков, но работа идет

  • Нравится 3

Поделиться этим сообщением


Ссылка на сообщение
14.07.2021 в 18:16, Manche сказал:

Какой шейдер отвечает за тень от солнца в ЧН ? Беда с тенями.cNor5lW.png

 

не  совсем понимаю - что именно ты считаешь за беду. Но если речь идет о "фильтрации" теней - то тебе в shadow.h

 

 

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@Шипэтя

 

в консоли комманда

r2_sun_lumscale

для нее возможны значения от 0 до 3, попробуй что-то в районе 1.0

 

её так же дополняют

r2_sun_lumscale_amb

r2_sun_lumscale_hemi

 

с аналогичным диапазоном значений - попробуй уменьшать/подогнать под себя.

  • Согласен 1
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
02.09.2021 в 12:09, Lagrange сказал:

Значит, вопрос такой, есть ли у кого - нибудь готовый PBR типа metall/roughness для сталкача, желательно ЗП, но, на крайний, можно и ЧН. На обычное предоставление не рассчитываю, так что могу договориться за плату, в разумных пределах, конечно, не 150$(~11000 рублей) как Lvutner. У самого пока знаний не хватает для такой работы, так что решил обратиться. 

 

к сожалению это немного расплывчатая формулировка.

В рендере ЗП в общем-то есть система материалов и некое приближение к физическому отображению свойств света на них - считай уже готово)))

 

Если же речь про что-то похожее на то что показывал LV или я - то это чуть более сложная модификация и требует редактирования не только шейдеров, но и обвязки на стороне движка.

 

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

 

Так-то все формулы для приближения к PBR есть в открытом доступе - читай статьи или просто выдирай код из Unreal, Unity, Filament

Изменено пользователем Cornholio
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

вопрос

 

я немного глупый и не очень понимаю - почему в сталкере используются другой класс для хранения буффера - rendertarget. Я не понимаю, почему сначала создается полноценный буффер для глубины/стенсил, а затем его перезаписывают уже виде компонента "позиции в экранном пр-ве" .

 

чисто, чтобы поиметь линейную глубину, вместо z/w ?

 

И опять же вопрос - насколько затратны эти render target?

 

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

 

если предположить, что для gbuffer использовать 3 64битных полноэкранных текстуры, то для fullHD это всего около 48Мбайт памяти на кадр. А вот перекодировать нормали каждый раз (особенно если хочется рейтрейсеры для АО/SSR/GI/FOG) занимает уже заметное кол-во операций на кадр.

 

Я не программист, я так - любитель, но вдруг кто-то разбирается - вчем подвох?

@_ХоЗаР_ вдруг знаешь ^

Поделиться этим сообщением


Ссылка на сообщение

@_ХоЗаР_ 

я, пожалуй верну "толстый gbuffer" заодно появится место под roughness ну и другие свойства материала (может даже светимость, чем чорт не шутит, места-то вагон теперь)

вот правда проверить - насколько отличается фпс довольно сложно... но я расскажу, если интересно будет

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

портировал в аномаль GTAO ( по этой статье https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW VERSION_COLOR.pdf)

без АО (вообще без какого-либо)
AnomalyDX11AVX_2021-10-05_15-11-04.png

 

GTAO

AnomalyDX11AVX_2021-10-05_15-11-14.png

 

пока много багов, надо убрать гало, следы и добавить оптимизации (хотя уже при 16 семплах выполняется за 4-5мс в 1080р на видеокарте 1060)

  • Нравится 4

Поделиться этим сообщением


Ссылка на сообщение

render4.png

 

ранний прототип screen space global illumination, пока сделан отдельно на основе GTAO, в планах попробовать его перенести в xray

  • Нравится 3
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

штука в том, что screen_res и pos_decompression_params - регистры, которые передаются от движка в шейдеры. В разных версиях движка могут называться по разному, но если просто объявить, то вполне может оказаться, что там ничего нет и шейдер все равно не работает (пусть и не дает вылета, ведь компайл проходит)

@Ghilli 

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@Ghilli  не знаю - это скорее вопрос к автору мода. Если б мне надо было делать прицелы - я бы сделал иначе (имхо темные луны плохо для восприятия игрока) лучше всего копировать подход армы, старых call of duty и battlefield - там куча бывалых дизайнеров не просто так пришли к тому виду прицелов, что мы видим в их играх (уверен есть даже презентации и методички по этому процессу в интернете)

 

само собой к модам у меня нет претензий - пусть делают, даже если я считаю это не правильным (я охотно пересмотрю свое мнение и признаюсь неправым - когда кто-то круто реализует такой псевдо 3д прицел), но если серьёзно - обычный модификатор FoV и "маска" прицела - вполне хороший вариант: не ест фпс на второй вьюпорт, не загрязняет обзор игроку ненужными эффектами, а уж сделать прицеливание реалистичным (ну там милдоты, прицельные линии и поправки на дальность, возвышенность) никак точно не мешает.

Изменено пользователем Cornholio

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

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

 

Вот как выглядит "быстрое"

AO_fast.png

время на исполнение, в профайлере renderDoc:

ms.PNG

 

Вот так выглядит идеал (не очень пригодно для игры в реальном времени, но все равно возможно - время на исполнение порядка 9мс)

AO_max.png

 

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

 

Еще есть пути для оптимизации, т.е я ожидаю, что спустя какое время мы сможем за 1мс выдавать еще лучшее качество (ну или ускорить его еще раза в 2)

на скрине с счетчиками профайлера - время в милисекундах, а цена на исполнение всего алгоритма находится в строке AmbientOcclusion, он имеет 3 пасса: сам АО и 2 прохода фильтром (просто случайно забыл выделение снять со второго пасса фильтра)

 

Изменено пользователем Cornholio
  • Нравится 4

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...