PMG
http://forum.pmg.org.ru/

Шейдер огня
http://forum.pmg.org.ru/viewtopic.php?f=2&t=8044
Страница 1 из 1

Автор:  kurlyak [ 18 сен 2010 17:42 ]
Заголовок сообщения:  Шейдер огня

У меня есть пиксельный шейдер:
Код:
float fTime0_X;

sampler Flame;
sampler Noise;

float4 ps_main(float2 tex_coord : TEXCOORD0   ) : COLOR0
{   
   float3 coord;

   coord.x = tex_coord.x;
   coord.y = tex_coord.y + fTime0_X;
   coord.z = 1;

   float noisy = tex2D(Noise, coord);
   float heat = noisy + tex_coord.y;
   float4 flame = tex2D(Flame, heat);
   
    return flame;
}

Скриншот следующий:
Изображение
Текстура Flame:
Изображение
Текстура Noise:
Изображение

В этом пиксельном шейдере меня интересует вопрос, почему смешиваеться цвет и координаты:
Код:
float heat = noisy + tex_coord.y;

Я понимаю если смешивается "цвет+цвет" или "координата+координата", но как это "цвет+координата". Что это нам дает? Причем если заменить на следующий код:
Код:
float heat = noisy + tex_coord.x;

то текстура Flame поворачиваеться на 90 градусов, то есть огонь горит сверху вниз горит как и раньше, а текстура Flame наложена слева на право- вот скриншот:
Изображение

Поэтому не пойму откуда форумула
Код:
float heat = noisy + tex_coord.x;

знает использую я tex_coord.y или использую tex_coord.x ? Если все равно результат float и координаты x(0,1) и y(0,1) значит огонь не должен менять ориентацию так как результат один float heat. Откуда формула знает о том использую я x или использую y текстурных координат? Но все что я понял что это одна текстура двигаеться сверху вниз (Noise) а другая (Flame) на нее просто накладываеться для создания оттенков огня . Но чисто математически я этого понять не могу - float heat = noisy + tex_coord.y.

Объясните пожалуйста, заранее благодарен.

Автор:  MagicWolf [ 20 сен 2010 08:44 ]
Заголовок сообщения:  Re: Шейдер огня

Я думаю не большое случайное смещение не помешает :)

Автор:  kurlyak [ 20 сен 2010 12:51 ]
Заголовок сообщения:  Re: Шейдер огня

Большое спасибо MagicWolf - я уже догадался сам что вроде как цветовой рельеф, или цветовой шум из текстуры Noise накладывается на координату X текстуры Flame и получается что текстура Flame (градиент) повторяет узор текстуры Noise.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/