среда, 26 октября 2011 г.

Сегодня было принято решение, которое просто таки обязано популяризировать quad. Итак, quad обзаведется базой шейдеров. Как это будет выглядеть:

Monochrome:
Применение:


Quad.RenderToTexture(MyRenderTarget, True);
  // Render your scene here
Quad.RenderToTexture(MyRenderTarget, False);

ShaderMonochrome.SetState(True);
MyRenderTarget.Draw(0, 0, $FFFFFFFF);
ShaderMonochrome.SetState(False);

<Ссылка на бинарный файл шейдера, готовый к использованию>

Код шейдера:
sampler2D DiffuseMap : register(s0);

float4 std_PS(vertexOutput Input) : COLOR {
  float4 Output;

  float4 tex_diff = tex2D(DiffuseMap, Input.TexCoord);
  Output = (tex_diff.r + tex_diff.g + tex_diff.b) / 3;
              
  if (Output.r < 0.2 || Output.r > 0.8) Output.r = 0.0; else Output.r = 1.0;
  if (Output.g < 0.2 || Output.g > 0.8) Output.g = 0.0; else Output.g = 1.0;
  if (Output.b < 0.2 || Output.b > 0.8) Output.b = 0.0; else Output.b = 1.0;

  return Output;
}


В таком духе будет большое количество шейдеров. Конечно, для простого однопроходного постпроцесс шейдера, как этот, смысла писать один и тот же код на использование особо не трубуется. Но шейдеры будут и сложнее. И объемный свет и размытие, блум, искажение картинки, процедурные текстуры, нормалмеппинг и прочее. Все пожелания прошу высказывать в комментариях, постараюсь удовлетворить. 

Более того, если кто-то выразит желание помочь с пополнением базы шейдеров - милости просим!

Комментариев нет:

Отправить комментарий