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

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

Очень хороший учебник. Спасибо)

У меня вопрос, как я могу применить отражения только к воде?

  • Полезно 1
Ссылка на комментарий
В 04.10.2019 в 00:52, Expropriator сказал:

Там код шейдеров другой

Та же беда и под ЗП r3-r4, пытался переписать - не взлетает, говорит не порядок с вектором в SSLR, там как минимум "tex2D" не используется, переписывал на примерах из шейдеров, но ему не нравится..(

Да и с r2 на ЗП тоже непорядок, сделал из репо - лужа есть, при чём она постоянна, не зависит от дождя, отражение вроде есть, но при разных углах взгляда артефактит дико. Да ещё - лужа есть, идёт дождь или нет, но афальт всегда стоит сухой, так же с дождём или без. Или я может в репо что-то упустил?

**************************************************************************************************************

В общем, что сделал: движок "OXR_CoC", из вышеуказанного репозитория всё по SSLR перетянул сначала для r2, потом сделал тоже самое для r3-r4, с небольшими изменениями под эти рендеры(оказалось больше файлов где надо добавить дополнительные аргументы, чем у r2), движок скомпилил. По шейдерам для r2 сделал всё так же, как в репозитории, различий много не увидел, для r3-r4 пытался переписать - не вышло, не взлетает. 

На r2.5 вот такие получились "Типа лужи".

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

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Нормалек. Качество не ахти, но для сталка пойдет. Правда, обозначенный выше алгоритм трассировки активно пропускает мелкие объекты, такие как провода, листва и пр. Да и не только мелкие. Хотя и достаточно быстр. Но все равно 6 итераций - мало, лучше хотя бы с десяток.

Марш луча лучше делать в скринспейсе, т.е. по пикселям, а не в мировых или видовых координатах.

Нормаль для воды можно не переводить в пространство касательных и не делать лишних умножений матриц, потому как вода всегда расположена горизонтально.

Изменено пользователем Zagolski
  • Нравится 2
  • Согласен 1
Ссылка на комментарий
6 часов назад, Zagolski сказал:

как вода всегда расположена горизонтально

Ну для воды тогда как минимум придется вектора резать получаемые из-за того что вода не пишется в буфер глубины (В ЗП покрай мере.)

Изменено пользователем _ХоЗаР_
Ну или добавить воду в буфер глубины :-)
Скрытый текст

6 ГБ ОЗУ DDR3 1098 мГц (Разносорт)

Процессор Intel Xeon E5420 4/4 2.5 ГГц

Видеокарта Gigabyte GeForce GT 240 512 МБ GDDR5 (Samsung) DirectX v10.1

 

Ссылка на комментарий

Кто нибудь пробовал реализовать эти отражения на ЗП?

@Anonim, получилось сделать(ЗП - r2), но вот незадача - когда вертишь головой, по краям камеры возникают такие полосы/искажения:

Скрытый текст

92010da7a2f40391ddc88780059d2aaf1f0d9135dca7b1daaf1b1ffe2a7c23ee933cec071f0d9135492491c99f55e97c6db48e9f6e2a9b071f0d91351797e95672c4ccf455f92e242bd72d9b1f0d9135fda079f3c10d8a3bf6991a17750a966e1f0d9135505570dc4d90c26e6b78fb54290cd95d1f0d9135

Что с этим можно сделать?

Если использовать в шейдере такой код:

Скрытый текст

Вот тот, что закомментирован:
 


	float4 get_6x6_image(float2 tc)
	{
		half 	depth 	= tex2D(s_position, tc).z;
		half    depth_s = depth * (1 - step(0.001, abs(depth - 10000)));

		float4 sample;

		sample.xyz = tex2D(s_image, tc).xyz;

		float red_normal = tex2D(s_image, tc).x;

/*		float red_low1, red_high1, red_low2,  red_high2,  red_low3,  red_high3,  red_low4,  red_high4, 
			  red_low5, red_high5, red_low6,  red_high6,  red_low7,  red_high7,  red_low8,  red_high8, 
			  red_low9, red_high9, red_low10, red_high10, red_low11, red_high11, red_low12, red_high12;

			  red_low1 	= tex2D(s_image, float2(tc.x,tc.y-screen_res.w*1)).x;	red_high1 	= tex2D(s_image, float2(tc.x,tc.y+screen_res.w*1)).x;
			  red_low2 	= tex2D(s_image, float2(tc.x,tc.y-screen_res.w*4)).x;	red_high2 	= tex2D(s_image, float2(tc.x,tc.y+screen_res.w*4)).x;

			  red_low3 	= tex2D(s_image, float2(tc.x-screen_res.w*4,tc.y)).x;	red_high3 	= tex2D(s_image, float2(tc.x+screen_res.w*4,tc.y)).x;
			  red_low4 	= tex2D(s_image, float2(tc.x-screen_res.w*8,tc.y)).x;	red_high4 	= tex2D(s_image, float2(tc.x+screen_res.w*8,tc.y)).x;

			  red_low5 	= tex2D(s_image, float2(tc.x,tc.y-screen_res.w*8)).x;	red_high5 	= tex2D(s_image, float2(tc.x,tc.y+screen_res.w*8)).x;
			  red_low6 	= tex2D(s_image, float2(tc.x,tc.y-screen_res.w*12)).x;	red_high6 	= tex2D(s_image, float2(tc.x,tc.y+screen_res.w*12)).x;

			  red_low7 	= tex2D(s_image, float2(tc.x-screen_res.w*12,tc.y)).x;	red_high7 	= tex2D(s_image, float2(tc.x+screen_res.w*12,tc.y)).x;
			  red_low8 	= tex2D(s_image, float2(tc.x-screen_res.w*16,tc.y)).x;	red_high8 	= tex2D(s_image, float2(tc.x+screen_res.w*16,tc.y)).x;

			  red_low9 	= tex2D(s_image, float2(tc.x,tc.y-screen_res.w*16)).x;	red_high9 	= tex2D(s_image, float2(tc.x,tc.y+screen_res.w*16)).x;
			  red_low10 = tex2D(s_image, float2(tc.x,tc.y-screen_res.w*20)).x;	red_high10  = tex2D(s_image, float2(tc.x,tc.y+screen_res.w*20)).x;

			  red_low11 = tex2D(s_image, float2(tc.x-screen_res.w*1,tc.y)).x;	red_high11  = tex2D(s_image, float2(tc.x+screen_res.w*1,tc.y)).x;
			  red_low12 = tex2D(s_image, float2(tc.x-screen_res.w*20,tc.y)).x;	red_high12  = tex2D(s_image, float2(tc.x+screen_res.w*20,tc.y)).x;

		if(depth == depth_s)
		{sample.w = 0.012345;}

		if
		(
		    	(red_normal != red_low1)  && (red_normal != red_high1)
			&& 	(red_normal != red_low2)  && (red_normal != red_high2)

			&&	(red_normal != red_low3)  && (red_normal != red_high3)
			&& 	(red_normal != red_low4)  && (red_normal != red_high4)

			&&	(red_normal != red_low5)  && (red_normal != red_high5)
			&& 	(red_normal != red_low6)  && (red_normal != red_high6)

			&&	(red_normal != red_low7)  && (red_normal != red_high7)
			&& 	(red_normal != red_low8)  && (red_normal != red_high8)

			&&	(red_normal != red_low9)  && (red_normal != red_high9)
			&& 	(red_normal != red_low10) && (red_normal != red_high10)

			&&	(red_normal != red_low11) && (red_normal != red_high11)
			&& 	(red_normal != red_low12) && (red_normal != red_high12)
		)
		{ 
			sample.w 	= 1; 
		}
		else
		{
			sample.w 	= 0; 
		}
*/
			sample.w 	= 1;
		return sample;
	}

 

То этих полос нету, но тогда если на модель/геометрию не попадает свет - отражение бьётся, иногда в отражении просто дырки - а иногда всё побито...

10067dbc0f7877aa93ee5063ec46c6811f0d9135 -> 7c63856a605c851d03d9e2523af1cff61f0d9135

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

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

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

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

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


AMK-Team.ru

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