Давайте соберём тут коллекцию ссылок на статьи и примеры по реализации пос-процессинга или обработки изображений на пиксельных шейдерах.
Mikx
В DXSDK есть семпл PostProcessing тама всё что твоей душе угодно есть
ну там далеко не все возможные эфекты показаны...
у нвидиа есть ещё много всяких
http://download.developer.nvidia.com/developer/SDK/Individual_Sam… _effects.html
как сделать эфект похожий на съемку любительской видеокамерой?
В FarCry такой рендеринг назывался "Холодно"
Mikx
Опиши его подробнее.
В FarCry не играл. :-[
примерно так:
оригинал http://forum.driveisp.ru/album_pic.php?pic_id=127
обработка http://forum.driveisp.ru/album_pic.php?pic_id=128
но это примерно.
Вообще надо как в передачах про криминал на НТВ, когда оперативники сами чё-то снимают - качество ваще никакое получается. Вот я так же хочу :)
Возможно этот эфект видео-плёнка даёт, когда её много раз используют.
незнаю как ещё объяснить :)
Mikx
имхо, в данном эффекте просто немного занижена насыщенность (saturation)
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 ); } }
Тема в архиве.