Unity/Rendering&Shader 18

[LIGHT][SHADER] Fake Light - LARA CROFT GO

"라라 크로프트 고" 게임속 라이트 로우 폴리곤의 독특한 그래픽을 보여주는 라라 크로프트 고는 배경의 작은 돌멩이부터, 몬스터, 캐릭터까지 전부 로우 폴리곤으로 제작되어 있다. 재미있는 점은 그에 맞춰 라이트까지 표현되어 있다는 것이다. 게임 속 라이트는 특이점들이 존재한다. 하드 엣지 라이트이다. 빛에 대한 밝기의 단계, 빛이 미치는 범위의 경계가 로우 폴리곤의 그래픽에 맞춰 칼 갈이 끊어진다. 광원에서 빛이 발생하여 오브젝트의 표면에 닿는 형태가 아니다. 광원으로부터 빛이 닿지 않을 부분 역시 밝아지는 경우가 자주 존재한다. 하단의 이미지에서 녹색의 영역은 빛을 받는 게 분명하다. 하지만 붉은색 영역은 조금 다르다. 빛이 받는 부분도 존재하지만, 빛이 닿지 않는 부분이 더 많이 존재한다. 물론 반사광..

[SHADERLAB] URP Shader 1편

[SHADER] URP Shader 1편 함께 회사에 다니는 친구를 위하여 기록합니다. URP 전에 흔하게 사용되던 레거시 셰이더의 경우, 유니티 홈페이지에서 따로 받을 수 있고, URP 프로젝트에서 셰이더를 생성하더라도 레거시 셰이더(CGPROGRAM)으로 생성이 됩니다. 그렇기 때문에 URP 셰이더를 처음 시작할 경우 어렵게 느낄 수 있습니다. 이와 같은 이유로 직접 Shader Library에서 Unlit.shader 파일을 열어 시작하는 방법과, 유니티 URP 매뉴얼에 샘플로 제공하는 기본형 셰이더로 시작할 수도 있습니다. 우선 Shader Library의 경우, 경로가 조금씩 다를 수 있지만 보통 프로젝트 폴더 아래, "Library\PackageCache\com.unity.render-pipe..

[SHADER] Object의 Scale 값을 이용한 UV Shader

[SHADER] Object의 Scale 값을 이용한 UV Shader 셰이더 제작보다, 셰이더를 제작하다 문제가 생겼던 부분을 기록하고자 남긴다. 혼자서 3D + 도트 아트 스타일의 게임을 만들며 비주얼 향상과 개발 속도 향상에 고민을 많이 하게 되었다. 특히 비주얼 향상을 위해서는 한 화면에 걸리는 모든 오브젝트들의 픽셀의 사이즈와 밀도를 균일하게 만드는 것이 관건이었다. 게임을 개발을 진행하다 보니 처음 계획한 것보다 오브젝트들의 크기가 변경하게 되는 경우가 많고, 배경에서는 배치한 오브젝트들의 사이즈를 변경하다 보니 픽셀의 사이즈가 들쑥날쑥하게 되는데, 이 부분을 해소하기 위하여 반복된 수정이 많았고, 오브젝트의 사이즈를 기준에 맞춰서 일정한 단위로 끊어 제작하는 등의 여러 가지 규칙을 세우게 되..

[SHADER] URP Shader를 뜯어보자 - 기본형

[SHADER] URP Shader를 뜯어보자 - 기본형  함께 회사에 다니는 친구를 위하여 기록합니다. URP 전에 흔하게 사용되던 레거시 셰이더의 경우, Unity 에디터를 받는 곳에서 따로 받을 수 있지만 URP 셰이더의 경우 받을 수 있는 곳이 없습니다.  심지어 프로젝트 뷰에서도 생성하지 못하고, 레거시 셰이더만 생성이 가능합니다.  위와 같은 이유로 직업 Shader Library에서 Unlit을 열어 시작하겠습니다.  유니티에는 렌더링 관련된 많은 코드들이 모여 있는 폴더가 존재하는데, 그중 Shader Library라는 것은 이름 그대로 유니티에서 사용되는 셰이더들을 모아놓은 폴더입니다.   버전마다 이름이 조금씩 다르긴 하지만 보통 유니티로 생성한 프로젝트 폴더 아래, "Library\P..

[RENDERING] Planar Reflection, Render

[RENDERING] Planar Reflection, Render 정보 전달을 위한 글이 아닌, 개인적으로 잊지 않기 위해서 기록하였습니다. 1부 - 플레이너 리플렉션 기본 1. 글의 기록 목적 2. 사용 방법 3. 구현 구조 4. 성능을 위한 기본 규칙 2부 - 플레이너 리플렉션을 사용하며 얻을 수 있는 부산물 1. 플레이너 리플렉션과 렌더러 2. RenderDoc에서... 3. 컬링 기능으로 카메라 비활성화 3부 - 마치며... 1부 - 플레이너 리플렉션 기본 글의 기록 목적 컴퓨터 그래픽스에서 반사 관련된 기술이 몇 가지 있는데, 그중 게임을 개발하며 흔하게 접하는 것이 리플렉션 프로브와 플레이너 리플렉션이다. 대부분의 반사가 그렇듯 이 두 가지 방식도 카메라로 특정 오브젝트를 이미지로 촬영한 후..

[RENDERING] Rendering Layers

[RENDERING] Rendering Layers 정보 전달을 위한 글이 아닌, 개인적으로 잊지 않기 위해서 기록하였습니다. 글의 기록 목적 테스트 환경 사용 방법 렌더링 관련 간단한 테스트 성능 관련 글의 기록 목적 게임을 개발하다 보면, 특정 오브젝트에 특정 광원만 영향을 주길 원할 때가 생기게 된다. 이 경우 흔하게 오브제의 Layer, 광원의 Rendering/Culling Mask 이용하여 선택적으로 라이팅을 적용하면 쉽게 해결할 수 있다. 그렇지만 이렇게 개발을 진행하게 되면 문제점이 생길 수 있다. 특히나 대규모 프로젝트나 MMO, 연출 등 아주 많은 기능들이 붙는 게임일수록 문제점이 생길 수 있는데, Layer의 경우, Tag와 함께 오브젝트의 타입이나 상태 등을 나타내기 위하여 수많은 ..

[SHADER] Texture Channel Swap

보통 2D, 3D 할 것 없이, 게임 내 오브젝트를 표현하기 위해서는 최소 한 장의 "색을 표현" 하는 텍스처가 필요하다. 물론 텍스처를 사용하지 않는 게임도 존재하지만, 어디까지나 보통의 게임은 필수이다. 컴퓨터 그래픽스에서 색은 RGB 채널을 이용하고, 추가한다면 Alpha 채널이 붙는다. 그리고 이 채널 3, 4개가 보통 하나의 이미지 파일이 된다. 요즘 오픈하는 게임을 보면 색 이외에도, 쇠를 더욱더 쇠같이, 가죽을 더욱 가죽같이 보이도록 여러 가지 기능들이 추가되어 있는데, 이런 기능들을 위하여 더욱 많은 수의 텍스처를 필요로 하게 되었다. 셰이더로 이런 재질들을 만들어 주더라도, 그 재질이 들어가는 범위를 효율적으로 관리하기 위하여, 마스킹 텍스처를 사용하는 것이 일반적이다. 이런 여러 이유들..