PMG http://forum.pmg.org.ru/ |
|
Шейдер марева http://forum.pmg.org.ru/viewtopic.php?f=2&t=8051 |
Страница 1 из 1 |
Автор: | kurlyak [ 22 сен 2010 13:26 ] |
Заголовок сообщения: | Шейдер марева |
Я сделал небольшой пиксельный шейдер марева: Код: float OffsetScale; float fTime0_X; sampler Texture0; sampler Texture1; float4 ps_main(float2 texCoord: TEXCOORD0) : COLOR { // Read and scale the distortion offsets //float2 offset = tex3D(Texture1,float3(4*texCoord.x,4*texCoord.y+fTime0_X,0)).xy; //offset = ((offset*2.0)-1.0)*OffsetScale; float3 coord; coord.x = texCoord.x * 4; coord.y = texCoord.y * 4 + fTime0_X; coord.z = 0; float offset = tex2D(Texture1, coord); offset*=OffsetScale; return tex2D(Texture0,float2(texCoord.x+offset, texCoord.y+offset)); } В этом коде OffsetScale = 0.025; sampler Texture0 = моя сцена, в предыдущем Pass этого эффекта это была цель визуализации в которую я занес сцену. sampler Texture1 = текстура шума, серых оттенков, как вроде мрамор. fTime0_X - время для изменения координат текстуры. Так вот в этом шейдере я все понимаю, и вот его скриншот: Но самое интересное когда я убираю из формулы OffsetScale, то есть вобще закоментирую ее в коде шейдера: Код: float offset = tex2D(Texture1, coord); // offset*=OffsetScale; return tex2D(Texture0,float2(texCoord.x+offset, texCoord.y+offset)); то изображения вобще не видно. Вот скриншот без OffsetScale: Вопрос - почему надо эта переменная OffsetScale в коде. И самое интересное почему она должна быть равна 0,025 - когда я ставлю в ней другие значение картинка искажаеться как в последнем скриншоте. Только надо 0,025. Почему, |
Автор: | bad_duck [ 22 сен 2010 15:09 ] |
Заголовок сообщения: | Re: Шейдер марева |
Все просто: Из текстуры Texture1 берется значение offset Код: float offset = tex2D(Texture1, coord); А т.к. там значения большие (от 0 до 1), то их нужно уменьшить,Код: offset*=OffsetScale; чтобы получить небольшое итоговое смещение координат, Код: tex2D(Texture0,float2(texCoord.x+offset,texCoord.y+offset)); такое что выполняется: texCoord.x+offset примерно равно texCoord.xЕсли не нравится коэф. 0.025, можно от него избавиться путем сильного затемнения текстуры с шумами. |
Автор: | kurlyak [ 22 сен 2010 19:17 ] |
Заголовок сообщения: | Re: Шейдер марева |
Ну хорошо, вот я пытался экспериментировать с OffsetScale. Стоит мне отклониться немного от его значения 0, 025 - картинка становиться искривленной. Вот скажем автор книги что писал этот пример - он же не мог сидеть сутки подбирать значение 0,025! Откуда то оно взялось! Можна как- то динамически в шейдере вычилисть этот коэффициент, может это пропорция какая- то, если пропорция то от чего пропорция. Мне вот до этого бы хотелось докопаться. А во вторых вы говорите что там значения большие от 0 до 1 - изначально в offset до умножения на OffsetScale. Ну так а если текстура WRAP лежит у меня, то то что больше единицы все равно получиться что ляжет как вроде меньше единицы. Правльно же? Но почему то я понять этого не могу. Я не против как вы говорите этого значения 0,025. Мне интересно окуда именно 0,025! Фактически подобрать опытным путем это число невозможно. Так как оно вычисляеться? Вот все понимаю в этом шейдере, но как автор вычислил 0,025 понять не могу! Прошу прощения за мою непонятливость - я только начал изучать пиксельные шейдеры. Объясните как можно более подробно. Заранее благодарен. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |