1월, 2019의 게시물 표시

void PostList()

투구 모델링

이미지
십자군 원정 이후 중앙 아시아에서 잃어버린 투구를 외계에서 주워서 재활용 해서 쓰다가 다시 사막 한가운데 내던진걸 다시 재활용한 느낌입니다.

종스크롤 슈팅게임의 게임 캐릭터 디자인

이미지
2년전부터 구상했던 종스크롤 슈팅게임의 캐릭터 "레코 하리"의 컨셉아트입니다. 별주부전을 모티브로 하였으며 별 너머 친구에게 배신당해 간을 포함한 장기들을 빼앗긴 토끼가 복수를 위해 날아간다는 내용입니다.

NoiseCat

이미지
귀여운 공포게임은 어떤 느낌으로 표현해야할까 테스트하다가 만들어보았습니다. White Noise 표현은 Ronja 님의 튜토리얼을 참조하였습니다. < https://www.ronja-tutorials.com/2018/09/02/white-noise.html > 전체 코드 ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ Shader  "Unlit/NoiseCat" {     Properties      {         _Tint ( "TintColor" , Color )   =   ( 0.0 , 0.0 , 0.0 , 0.0 )         _MainTex  ( "Texture" ,   2 D )   =   "white"   {}         _Light ( "Light" ,   2 D )   =   "white"   {}         _Arm ( "Arm" ,   2 D )   =   "white"   {}         _ArmLight ( "ArmLight" ,   2 D )   =   "white"   {}         _NoiseMask ( "NoiseMask" ,   2 D )   =   "white"   {}         _LightStrength ( "LightStrength" , Range ( 0 , 10 ))   =   0.0         _LightBlurStrength ( "LightBlurStrength" , Range ( 0 , 10 ))   =   0.0         _NoiseStrength ( "NoiseStrength" , Range ( 0 , 10 ))   =   0.0         _Wav

안개처럼 사라지는 텍스쳐 이미지 만들기

이미지
작년 유니티 스터디를 하다가 연기처럼 사라지는 글자에 대한 질문을 받았습니다. 당시엔 저도 아무것도 모르던 때라 제대로 된 답변을 하지 못했습니다. 이와 관련해서 한번 실제로 작성해보고 제대로 답변드릴 필요가 있었습니다. 이번 셰이더에서는 UV Distortion 과 상위 MipMap 샘플링을 응용해보았습니다. 새벽 중학생 감성으로 작성한 문장 텍스쳐를 샘플로 사용해 셰이더를 작성보았습니다. < 흐트리기 영역을 계산해 보기 > 흐트러지는 영역에 대한 정의는 여러가지가 있겠지만 이번 셰이더의 비주얼을 보면 시간에 따라 특정한 UV 좌표를 기준으로 점점 연기처럼 흐트러지는 범위지고, 또한 원점에 가까울 수록 흐트러지고, 흐려지는 강도가 높아지는 형태를 취합니다. 마치 잔잔한 물결에 돌을 던졌을때 일어나는 물 표면의 파동 느낌을 생각하시면 좋을 것 같습니다. 따라서 이 단계에서 필요한 것은 다음과 같습니다. 1. 흐트러지는 영역의 중점 2. 현재 프래그먼트 셰이더에서 그리고 있는 픽셀 UV 좌표와 중점과의 거리 1 -- 흐트러지는 영역의 중점 먼저 텍스쳐의 어디를 흐트려야하는지 알기 위해선 특정 점을 표현하는 좌표가 하나 필요합니다. 그러니 우리는 외부에서 좌표를 받아올 필요가 있죠 Properties      {         _StPt ( "Dissolve Start Point" , Vector )   =   ( 0 , 0 , 0 , 0 )      } 유니티에선 프로퍼티를 통해 벡터 자료형을 가져오는 방법이 있습니다. UV 좌표는 2차원 좌표계를 사용하니, 우리는 프로퍼티로 가져온 Vector 자료형의 x,y 요소만 사용하면 되겠습니다. 2 -- 현재 중점과의 거리 이제 흐트려버릴 영역의 중점을 알아냈으니 여기에 거리만 적용하면 우리가 원하는 부분을 마음대로 흐트릴 수 있습니다. 여기선 if   ( _원하는 거리  >  distance ( _흐트러

Simple Magic Circle

이미지
위 이미지에서 표현된 마법진에선 각기 다른 3가지 모양이 다른 회전 방향과 속도로 회전하고 있습니다. 이는 마법진 텍스쳐가 일체형이 아니라 3부분으로 나뉘어 있음을 의미합니다. 즉 일반적으로 생각하기엔 위 이미지를 표현하기 위해 각기 다른 3가지 텍스쳐를 만들어야 함을 의미하겠지만 다행히도 우리에겐 하나의 이미지 파일안에 각기 다른 정보를 구분해서 넣을 수 있는 방법이 있습니다. 본 글에서 마법진을 표현하기 위해서 위 텍스쳐를 만들어 사용하였습니다. < 색상 채널 분할 > R,G,B 각 채널에 각기 다른 문양을 사용하였습니다. 셰이더 코드에서 텍스쳐 색상을 샘플링할때 .r .g .b 를 사용하여  빨간색 색상, 푸른색 색상, 초록색 색상 각각을 가져올 수 있습니다. ( 추가로 프로퍼티로부터 _Color 를 받아 곱해준다면 원하는 색상의 마법진을 만들어 줄 수 있습니다. ) FinalColor [ 0 ]   =  tex2D ( _MainTex ,  new_uv [ 0 ]). r  *  _Color ; FinalColor [ 1 ]   =  tex2D ( _MainTex ,  new_uv [ 1 ]). g  *  _Color ; FinalColor [ 2 ]   =  tex2D ( _MainTex ,  new_uv [ 2 ]). b  *  _Color ; < 마법진 회전 > 특정 좌표의 회전후 좌표를 계산하는 방법중 하나는 바로 회전행렬을 사용하는 것입니다. x만큼 회전을 나타내는 회전행렬과 특정 좌표값을 곱하면 회전 결과 좌표값이 나오게 됩니다. for   ( int  x  =   0 ;  x  <   3 ;   ++ x )                 {                     rotation_angle [ x ]   =  RotationSpeed [ x ]   *  _Time