ШейдерыФорум

Пос-процессинг / обработка изображений

#0
13:13, 19 июня 2006

Давайте соберём тут коллекцию ссылок на статьи и примеры по реализации пос-процессинга или обработки изображений на пиксельных шейдерах.

#1
10:10, 7 июля 2006

Mikx
В DXSDK есть семпл PostProcessing тама всё что твоей душе угодно есть

#2
10:59, 7 июля 2006

ну там далеко не все возможные эфекты показаны...

у нвидиа есть ещё много всяких
http://download.developer.nvidia.com/developer/SDK/Individual_Sam… _effects.html

#3
16:04, 10 июля 2006

как сделать эфект похожий на съемку любительской видеокамерой?
В FarCry такой рендеринг назывался "Холодно"

#4
19:42, 10 июля 2006

Mikx
Опиши его подробнее.
В FarCry не играл. :-[

#5
16:42, 12 июля 2006

примерно так:

оригинал http://forum.driveisp.ru/album_pic.php?pic_id=127
обработка http://forum.driveisp.ru/album_pic.php?pic_id=128

но это примерно.

Вообще надо как в передачах про криминал на НТВ, когда оперативники сами чё-то снимают - качество ваще никакое получается. Вот я так же хочу :)
Возможно этот эфект видео-плёнка даёт, когда её много раз используют.

незнаю как ещё объяснить :)

#6
14:20, 13 июля 2006

Mikx
имхо, в данном эффекте просто немного занижена насыщенность (saturation)

#7
15:09, 13 июля 2006

Mikx
Вот - набросал HLSL шэйдер, управляющий насыщеностью:

// Насыщенность изображения
//
// Вход:
//  uniform:
//    sampler2D : diffuseSampler - сэмплер диффузной текстуры
//    float : s - насыщенность
//  variable:
//    float2 uv0 : TEXCOORD0 - координаты диффузной текстуры
//

float4 FP ( uniform sampler2D diff,
      uniform float s,
          float2 uv_diff : TEXCOORD0 ) : COLOR
{
  float4 clr = tex2D( diff, uv_diff );
  
  float max_rgb = max( clr.r, max( clr.g, clr.b ) );
  float min_rgb = min( clr.r, min( clr.g, clr.b ) );
  float average_rgb = (max_rgb + min_rgb) / 2.0f;
    
  float3 av_rgb = float3( average_rgb, average_rgb, average_rgb);
  float3 cur_rgb = (float3)clr;
  
  float3 rgb = lerp( av_rgb, cur_rgb, s );
  
  return float4( rgb, clr.a );
}

float s
<
  float UIMin = 0.0f;
  float UIMax = 5.0f;
  float UIStep = 0.01f;
  string UIWidget = "Slider";
  string UIName = "Насыщенность";
> = 1.0f;

texture tex;

sampler2D diffuseSampler = sampler_state
{
  Texture = <tex>;
  MinFilter = Point;
  MagFilter = Linear;
  MipFilter = Point;
};

technique Saturation
{
  pass p0 
  {  
    PixelShader = compile ps_2_0 FP( diffuseSampler, s );
      }
}
ШейдерыФорум

Тема в архиве.