2018년 10월 16일 화요일

[20181016] Shader - pixel size scale

번아웃에서 날려먹은 건강을 아주 조금씩 회복중입니다.
공부를 다시 시작하고 있지는 못하지만, 운동을 조금식 하고 산책도 하고 있네요.

저를 괴롭히고 있는 희미한 감기증상만 사라진다면 금방 회복할 것도 같은데요.
이거 쉽게 낫지를 않네요.
( o_o)y-~



"Dungeon Start Scene" 이라고 이름지은 것을 작업중입니다.

오래된 모 게임의 특정 스테이지 시작에서 항상 볼 수 있는 녀석을 "존경심을 담아" 카피 하고 있습니다.

이 프로젝트의 기본 모델이 되는 "톨네코의 대모험" 의 것을 가져오고 싶었는데요.
뷰가 제 프로젝트와 어울리지 않아서 작업이 산으로 가버릴 가능성이 높은지라 과감하게 버리고 다른 게임의 것을 빌려오기로 했습니다.

더 자세히 적으면 스포일러가 되어버리니 자세한 것은 작업이 마무리되면 공유하겠습니다.
( '_')y-~


오늘은 위에 언급한 작업을 처리하는 과정에서 만든 shader 에 대해서 남겨볼까 합니다.

retro game 들이 가끔씩 사용하는 pixel 의 크기( ? ) 를 조정하는 shader 인데요.

지금의 기술로 만든다면...
  1. 화면에 블러 처리를 해서 out focusing 효과를 줬다가
  2. 블러 처리를 점차 감소 시켜서 focus 를 바로잡는다
...는 방식으로 처리할 수 있겠죠.

뭔가 날로 먹을 방법이 없을까?
레스터라이즈 과정에 먹혀들어갈 마법의 flag 같은 것이 없을까?
...라는 일념으로 여기 저기 들쑤셔 봤는데 소득이 없었어서 직접 코드를 작성할 수 밖에 없었습니다.


제가 작성한 code 는 다음과 같습니다.


varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform float u_pointscale;
void main()
{
 if( 1.0 < u_pointscale )
 {
    float tx = floor( ( v_texCoord.x * 100.0 ) / u_pointscale );
    float ty = floor( ( v_texCoord.y * 100.0 ) / u_pointscale );

    vec2 new_tex_coord = vec2( tx * u_pointscale * 0.01, ty * u_pointscale * 0.01 );
    gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, new_tex_coord );
 }
 else
    gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord );

}


전문성이 없는 분야의 코드라서 올려놓는 것이 상당히 부끄럽네요.

혹여 이 녀석을 가져다 쓰실분이 있다면 약간 손보시는게 좋습니다.
몇 가지 고려해야할 것들이 있는데 귀찮아서 그냥 넘겼거든요.
( @_@)y-~

그게 무엇인지는 비밀입니다.


오늘 작업은 여기 까지 입니다.
롤드컵을 켜놓고 저녁을 먹어야겠네요.
( +_+)y-~

> 20180225 Code Highlight 적용.

댓글 없음:

댓글 쓰기