프로그래밍 2014. 10. 2. 11:10
728x90

 

셰이더 왜곡 distortion

 

 

 

 

 

shader distortion test

 

 

오리지날씬( 배경+캐릭터+이펙트+기타 그려져야할 모든것 )이 저장된 렌더타겟텍스쳐와
왜곡이펙트만을 저장할 렌더타겟 텍스쳐가 필요합니다.
 

1. 오리지날씬렌더타겟에 오리지날씬을 렌더링


1. 왜곡이펙트렌더타겟에 왜곡이펙트만을 렌더링
 
2. 오리지날씬텍스쳐와 왜곡이펙트텍스쳐를 블렌드시켜 출력

 

 

블렌드 테스트용 셰이더 코드

 

왜곡이미지의 색상값으로

오리지날 이미지의 UV 값에 변화를 주어

출력하는 코드입니다.

 

uniform texture _pTex_Distortion = NULL;
uniform texture _pTex_Orig = NULL;

 

sampler2D Samp_Texture_Distortion =
sampler_state
{
    Texture = <_pTex_Distortion>;

    //4.0
    Filter=MIN_MAG_MIP_LINEAR;
    //AddressU = Wrap;
    //AddressV = Wrap;

};

sampler2D Samp_Texture_Orig =
sampler_state
{
    Texture = <_pTex_Orig>;

    //4.0
    Filter=MIN_MAG_MIP_LINEAR;
    //AddressU = Wrap;
    //AddressV = Wrap;

};

 

struct VS_INPUT
{
    float4 pos : POSITION;
    float4 diff : COLOR0;  
    float2 uv : TEXCOORD0;

};

 

struct VS_OUTPUT
{
    float4 pos : POSITION;
    float4 diff : COLOR0;     
    float2 uv : TEXCOORD0;

};

 

VS_OUTPUT _VS( VS_INPUT _In )
{
    VS_OUTPUT Out = (VS_OUTPUT)0;

    Out.pos = _In.pos;
    Out.uv = _In.uv;
    Out.diff = _In.diff;


    return Out;
}

 

float4 _PS_Distortion( VS_OUTPUT _In ) : COLOR
{
  float4 Out = 0;

 

  //uv trans
  // 0.001f 은 테스트로 넣어준 값이며, tick, timer 등의 값으로 교체하면 됩니다.
  float2 Trans = _In.uv + 0.001f;

 
  //
  float4 Noise = tex2D( Samp_Texture_Distortion, Trans );

 

  //오리지날씬의 UV 를 흔들어 주기 위한 계산
  // 0.05 이 값 부분이 커질수록 UV 편차가 더욱 심해집니다.
  float2 UV = _In.uv + Noise.xy * 0.05f;

 

  //
  float4 Orig = tex2D( Samp_Texture_Orig, UV );

 
  Out = Orig;

  return Out;
}

 

 

 

 

728x90

'프로그래밍' 카테고리의 다른 글

c++ tick  (0) 2014.11.23
d3d device lost, device reset  (0) 2014.10.07
로그 log  (0) 2014.06.25
범프매핑 노말매핑 법선매핑  (0) 2014.06.10
C++ 문자열 테이블 만들기 ( C++ make string table ), 문자열 파싱  (0) 2014.05.21
posted by BK dddDang
: