유니티는 기본적으로 Standard라는 쉐이더형을 제공해서 알아서 물리적인 연산을 처리해준다.
쉐이더 파일
- 쉐이더 파일은 프로젝트 폴더에 우클릭하여 필요한 쉐이더 종류를 선택하고 생성하면 된다. (이 글에서는 Unlit Shader를 선택하였다 - UI 쪽에 사용되는 쉐이더)
- 쉐이더 파일에서 Material 부분의 Shader의 경로를 지정할 수 있는데 아래 사진의 파란색 Shader 뒷 부분의 경로가 해당 쉐이더 파일의 경로이다(자신이 수정 가능).
- Properties는 인스펙터 창에서 조절할 수 있는 것들을 적는 부분이다.
- SubShader Tags 에는 렌더 타입을 정할 수 있다.
- Pass를 여러개 작성하면 여러 효과도 줄 수 있지만 하나당 드로우콜이 발생하여 성능에 과부하를 준다.
- Pass의 CGPROGRAM과 ENDCG는 이 사이에 Cg언어를 사용하겠다는 표시다.
- #pragma는 vertex와 fragment 쉐이더에 어떤 이름의 함수로 지정할 것인가를 정의한다.
- struct type의 vertex, fragment에서 필요한 매개변수들을 초기화하고 실제로 사용할 변수들(sampler2D~float - 위에서 매칭한 것들)까지 선언해준다.
- 이후 vert에서 버텍스를 연결해주고 frag에서 색을 입혀주면 쉐이더가 만들어진다.
위에서의 결과물
- vert의 o.uv = o.uv + _Time;에서 움직이는 텍스처를 만들어줬다.
- frag의 return c - lerp~에서 위의 _DissolveTextrue의 빨간색 삼각형 부분을 빼줬다.
과제 내용
- 첫 번째 과제는 버튼을 눌렀을 때 PlayOneShot을 사용하여 여러번 클릭하더라도 중복으로 소리가 안 들리게 하는 것이다.
- 두 번째 과제는 Capture버튼을 눌렀을 때 UI를 제외하여 캡처하면서 텍스처 해상도는 반으로 줄이는 것이다. - 짝수행과 짝수 열만 출력되게 옮기기
한 주 후기
이번 주는 쉐이더에 대해 배웠다. 나는 Material을 이용할 줄만 알지 쉐이더에 대한 건 전혀 알지 못했었는데 이번 교육을 들으면서 Shader의 구조도 알아보고 사용법도 간단하게 알게 되었다. 사실 처음 쉐이더 강의를 듣게 되었을 때는 조금 어려운 느낌이 들었다. 지금까지 교육을 들으면서 고비가 2번 있었는데 UI강의를 들을 때(UI 종류가 너무 많았다) 이번에 쉐이더를 들으면서 cg언어라는 새로운 언어를 접하고 안에 경험해보지 못한 형식에 따라 코드를 작성하는 부분이 어렵게 느껴졌던 것 같다. 그런데 긍정적으로 따라가다 보니까 대략적으로나마 이런식으로 사용하는구나! 하고 이해할 수 있게되어 다행이었다.
이번 주 과제를 진행하면서 첫 번째 과제인 사운드 부분은 쉽게 해결할 수 있었는데 두 번째 과제인 텍스처의 해상도를 줄이는 작업은 쉽지 않았던 것 같다. 특히나 위 사진의 짝수 행과 짝수 열만 옮기는 로직을 생각하는 게 과제를 받은 날의 저녁 늦게까지 하면서 고민했던 문제였다. 최근에 그래도 테스트를 위해 알고리즘 문제를 여럿 풀어봤던 것이 도움이 되었는지 생각을 비우고 다음날 몇 번 적어서 테스트를 해보니까 '이렇게 쉽게 해결할 수 있던 거였어?' 할 문제였던 것 같다. 정답이라고 할 순 없지만 해결을 했다는 것에 뿌듯함을 느낄 수 있었던 과제였다.
이번 주는 스타터스 조기 인턴으로 인한 내부 테스트와 동기들 회식으로 정신 없었던 한 주였던 것 같다. 테스트를 보고나서 내가 어느 부분이 얼마나 부족한지 객관적으로 판단하는 계기가 되었고 동기들과의 회식을 참여하면서 동기들과 더 친해질 수 있는 기회가 되었다. 다음 주도 재밌게 수업 들어야겠다. 파이팅!