1 00:00:05.675 --> 00:00:09.825 게임 심화편 베타타입 버전 2 2 00:00:29.275 --> 00:00:34.175 여러분 안녕하십니까 FPS 게임 제작에 박현상입니다 3 00:00:34.175 --> 00:00:36.775 이번 단원에서는 라이트 매핑과 4 00:00:36.775 --> 00:00:40.825 최적화에 대한 강의를 진행해보겠습니다 5 00:00:41.375 --> 00:00:44.225 베타 버전에 이르러 개발을 하다 보면 6 00:00:44.225 --> 00:00:46.325 자연스럽게 그래픽 리소스를 7 00:00:46.325 --> 00:00:48.725 프로젝트에 많이 추가하게 됩니다 8 00:00:48.725 --> 00:00:51.925 하지만 리얼타임 렌더링의 환경에서는 9 00:00:51.925 --> 00:00:55.325 무제한적인 리소스 사용은 어렵습니다 10 00:00:56.275 --> 00:01:00.125 따라서 라이트, 3D 메시, 텍스처 등 11 00:01:00.125 --> 00:01:03.775 다양한 그래픽 리소스에 대한 최적화 기법을 통해 12 00:01:03.775 --> 00:01:08.775 원활한 콘텐츠 제공이 가능한 형태로 최적화하는 방법과 13 00:01:08.775 --> 00:01:12.675 그래픽 요소들에 대한 활용 방법에 대하여 학습하겠습니다 14 00:01:12.675 --> 00:01:16.725 라이트 매핑 15 00:01:16.725 --> 00:01:20.075 라이트 매핑에 대한 개념에 대해서 다뤄볼 겁니다 16 00:01:20.075 --> 00:01:22.675 라이트 매핑이라고 하면 일반적으로 17 00:01:22.675 --> 00:01:26.275 라이트, 맵 이 두 가지 단어가 합쳐진 건데 18 00:01:26.275 --> 00:01:28.325 라이트는 문자 그대로 빛이고 19 00:01:28.325 --> 00:01:32.075 무슨 무슨 맵이라는 표현이 붙게 된다면 20 00:01:32.075 --> 00:01:35.675 이것은 여러분들이 텍스처라고 이해를 하셔도 21 00:01:35.675 --> 00:01:37.425 크게 다르진 않습니다 22 00:01:37.425 --> 00:01:40.675 그러면 빛에 대한 이미지 파일이라고 23 00:01:40.675 --> 00:01:42.375 해석이 될 수도 있을 건데요 24 00:01:42.375 --> 00:01:46.725 빛에 대한 정보를 그림 파일로 만들어두는 과정이 25 00:01:46.725 --> 00:01:49.825 라이트맵의 제작 과정입니다 26 00:01:49.825 --> 00:01:53.975 그러면 빛에 대한 정보를 왜 그림 파일로 만드느냐 27 00:01:53.975 --> 00:01:56.175 그거부터 한번 알아보겠습니다 28 00:01:56.175 --> 00:01:58.075 현실에 있는 모든 오브젝트는 29 00:01:58.075 --> 00:02:04.175 기본적으로는 충분한 힘만 있다면 이동이 가능합니다 30 00:02:04.175 --> 00:02:10.425 반면에 리얼타임 엔진을 이용한 콘텐츠에서 31 00:02:10.425 --> 00:02:16.025 모든 오브젝트가 다 물리적인 계산에 의해서 움직이게 된다면 32 00:02:16.025 --> 00:02:18.175 그것은 굉장히 무거운 33 00:02:18.175 --> 00:02:22.825 컴퓨터가 연산을 하는데 굉장히 무겁게 작동하게 되겠죠 34 00:02:22.825 --> 00:02:26.475 그리고 필연적으로 연산이 무거워지면 35 00:02:26.475 --> 00:02:30.625 우리가 흔히 FPS라고 얘기를 하는 Frame Per Second 36 00:02:30.625 --> 00:02:33.275 초당 그려지는 프레임 37 00:02:33.275 --> 00:02:36.425 화면의 장수가 낮아지게 됩니다 38 00:02:36.425 --> 00:02:40.725 FPS 수치가 콘텐츠의 쾌적한 정도를 나타내는 39 00:02:40.725 --> 00:02:43.225 대표적인 지표 중에 하나인데요 40 00:02:43.225 --> 00:02:47.775 유저들이 화면을 바라볼 때 FPS 장르라고 얘기하는 41 00:02:47.775 --> 00:02:49.625 여기에서 얘기하는 FPS는 42 00:02:49.625 --> 00:02:52.725 First Person Shooting의 약자죠 43 00:02:52.725 --> 00:02:57.575 이런 경우에는 60프레임을 기본적으로 목표에 두고 작업하고요 44 00:02:57.575 --> 00:03:00.675 그 외에 약간 영상미를 중시하는 45 00:03:00.675 --> 00:03:04.725 스토리텔링 기반의 콘텐츠라면 46 00:03:04.725 --> 00:03:07.225 30프레임 정도를 기반으로 합니다 47 00:03:07.225 --> 00:03:11.025 그리고 우리가 흔히 보는 TV도 마찬가지고 48 00:03:11.025 --> 00:03:16.075 영화 같은 경우에는 이거보다 낮은 24프레임을 쓰기도 합니다 49 00:03:16.075 --> 00:03:19.675 그래서 유저들이 화면을 바라보는 데 있어서 50 00:03:19.675 --> 00:03:22.525 얼마나 끊김 없이 매끄럽게 보느냐 51 00:03:22.525 --> 00:03:26.875 이것을 FPS 수치를 이용해서 우리가 알 수가 있는데요 52 00:03:26.875 --> 00:03:31.875 초당 60장의 이미지가 넘어간다면 굉장히 부드럽게 느끼겠죠 53 00:03:31.875 --> 00:03:35.825 더군다나 요즘에는 140프레임, 240프레임과 같이 54 00:03:35.825 --> 00:03:39.475 굉장히 높은 프레임 수를 유지하면서 55 00:03:39.475 --> 00:03:41.975 그러한 모니터들이 있기 때문에 56 00:03:41.975 --> 00:03:44.775 유저분들의 눈도 굉장히 높아져 있습니다 57 00:03:44.775 --> 00:03:46.625 하지만 앞서 얘기한 것처럼 58 00:03:46.625 --> 00:03:49.975 모든 오브젝트가 물리적인 충돌이라든가 59 00:03:49.975 --> 00:03:52.275 계산을 항상 하고 있다면 60 00:03:52.275 --> 00:03:55.525 경우에 따라서는 10 프레임, 5 프레임 61 00:03:55.525 --> 00:03:59.525 이런 식으로 뚝뚝 끊기는 화면을 제공할 수밖에 없는데요 62 00:03:59.525 --> 00:04:03.940 그러다 보니 오브젝트를 크게 두 가지로 나눠서 관리를 합니다 63 00:04:03.940 --> 00:04:07.040 첫 번째로는 여러분들이 캐릭터라고 얘기를 하는 64 00:04:07.040 --> 00:04:09.070 움직일 수 있는 오브젝트들 65 00:04:09.070 --> 00:04:11.440 흔히 Dynamic 오브젝트라고 얘기를 하고요 66 00:04:11.440 --> 00:04:14.490 두 번째로는 배경 오브젝트와 같이 67 00:04:14.490 --> 00:04:16.950 움직이지 않는 오브젝트들 68 00:04:16.950 --> 00:04:20.250 그런 것들은 Static 오브젝트라고 얘기를 합니다 69 00:04:20.250 --> 00:04:23.940 움직이는 오브젝트야 당장 그림자라든가 이런 것들이 70 00:04:23.940 --> 00:04:27.290 시시각각 변하니까 우리가 어떻게 할 수는 없는데 71 00:04:27.290 --> 00:04:30.450 움직이지 않는 Static 오브젝트라면 72 00:04:30.450 --> 00:04:35.700 미리 연산에 들어가는 고도의 비용이 필요한 작업들에 대해서 73 00:04:35.700 --> 00:04:40.940 우리가 먼저 계산해 놓고 유저들에게 제공해 줄 수가 있겠죠 74 00:04:40.940 --> 00:04:43.740 그러한 실시간으로 연산되는 부분에서 75 00:04:43.740 --> 00:04:47.840 빛에 대한 계산 그 외에 나머지 내비게이션 메시라든가 76 00:04:47.840 --> 00:04:50.650 이런 식으로 움직일 수 있는 동선에 대한 계산 77 00:04:50.650 --> 00:04:53.800 이런 것들을 먼저 해놓을 수만 있다면 78 00:04:53.800 --> 00:04:58.400 유저분들이 조금 더 쾌적하게 콘텐츠를 즐길 수 있게 될 겁니다 79 00:04:58.400 --> 00:05:02.050 그리고 이러한 라이트맵이라고 하는 것은 80 00:05:02.050 --> 00:05:04.510 기본적으로 움직이지 않는 81 00:05:04.510 --> 00:05:08.870 Static 처리가 되어 있는 오브젝트들을 대상으로 해서 82 00:05:08.870 --> 00:05:11.940 빛에 대한 계산을 미리 하는 겁니다 83 00:05:11.940 --> 00:05:14.200 지금 예시 화면에서 이렇게 보시면 84 00:05:14.200 --> 00:05:18.400 왼쪽은 라이트맵이 그려지지 않은 상태의 화면이고요 85 00:05:18.400 --> 00:05:22.140 오른쪽은 라이트맵이 그려진 상태입니다 86 00:05:22.140 --> 00:05:25.940 보면 여기는 빛에 대한 음영 표시라든가 87 00:05:25.940 --> 00:05:32.640 붉은색 벽이 빛을 건너편 벽에 반사시키는 효과라든가 88 00:05:32.640 --> 00:05:35.240 이런 식으로 굉장히 많은 부분들이 89 00:05:35.240 --> 00:05:40.140 아래쪽에 처마에 의한 어두운 음영에 대한 표시 같은 것들 90 00:05:40.140 --> 00:05:44.420 이런 것들을 이용해서 조금 더 입체감 있고 91 00:05:44.420 --> 00:05:47.770 사실적인 느낌의 배경 이미지를 92 00:05:47.770 --> 00:05:50.420 유저들에게 제공해 줄 수가 있는 것이죠 93 00:05:50.420 --> 00:05:54.520 이것을 위해서 우리가 기존에 받아진 애셋을 활용해서 94 00:05:54.520 --> 00:05:57.125 라이트맵을 만들어 보는 작업을 할 겁니다 95 00:05:57.475 --> 00:05:59.775 여러분들이 지금 보는 화면은 96 00:05:59.775 --> 00:06:05.525 RPG_FPS_game_assets의 Map_v1을 열어놓은 화면입니다 97 00:06:05.525 --> 00:06:07.675 카메라가 없어서 게임뷰에서는 98 00:06:07.675 --> 00:06:09.875 No cameras rendering이라고 나오니까 99 00:06:09.875 --> 00:06:13.475 우선은 이 씬 뷰를 집중해서 보도록 하겠습니다 100 00:06:13.475 --> 00:06:15.675 여러분들이 맵을 열고 나면 101 00:06:15.675 --> 00:06:20.075 여기 저수조처럼 보이는 물탱크 같은 구조물에 102 00:06:20.075 --> 00:06:24.675 뭔가 이상하게 얼룩덜룩한 이렇게 각진 이상한 모양들의 103 00:06:24.675 --> 00:06:26.625 이미지를 보실 수가 있을 겁니다 104 00:06:26.625 --> 00:06:30.925 실제 RPG_FPS_game_assets_industrial 폴더 내에 105 00:06:30.925 --> 00:06:33.975 Map_v1과 동일한 이름의 폴더가 있습니다 106 00:06:33.975 --> 00:06:37.675 여기에 보면 라이트맵이라고 해서 107 00:06:38.875 --> 00:06:41.425 배치되어 있는 모든 오브젝트들에 대해서 108 00:06:41.425 --> 00:06:43.375 배경 오브젝트들만 있으니까요 109 00:06:43.375 --> 00:06:49.075 라이트맵을, 빛에 대한 그림을 다 텍스처 파일로 110 00:06:49.075 --> 00:06:53.125 미리 그려 놓은 상태를 확인하실 수는 있는데요 111 00:06:53.125 --> 00:06:55.475 이게 임포트 하는 과정에서 112 00:06:55.475 --> 00:06:58.475 약간 데이터에 수정이 일어나면서 113 00:06:58.475 --> 00:07:04.025 지금 보시는 것처럼 일부 맵 데이터가 이렇게 깨져있는 것을 114 00:07:04.025 --> 00:07:05.975 눈으로 볼 수 있게 된 거죠 115 00:07:05.975 --> 00:07:08.725 우리는 이것을 그대로 사용하지 않고요 116 00:07:08.725 --> 00:07:13.825 우리가 작업했던 Main Scene에다가 RPG_FPS 맵을 117 00:07:13.825 --> 00:07:17.625 그대로 이 Scene 파일을 드래그해서 우선 넣도록 할 겁니다 118 00:07:17.625 --> 00:07:21.525 그리고 우리가 테스트용으로 놔뒀던 오브젝트들은 119 00:07:21.525 --> 00:07:26.825 비활성화해서 눈에 보이지 않도록 세팅해놓을 거고요 120 00:07:27.325 --> 00:07:31.475 여기에 배치되어 있는 모든 오브젝트들을 보시게 되면 121 00:07:31.475 --> 00:07:34.275 눈에 보이는 이런 3D 오브젝트들은 122 00:07:34.275 --> 00:07:37.625 전부 다 인스펙터창 우측 상단에 123 00:07:37.625 --> 00:07:39.525 Static이라고 하는 항목이 124 00:07:39.525 --> 00:07:42.325 활성화되어 있는 걸 보실 수가 있습니다 125 00:07:42.325 --> 00:07:46.625 그리고 건물들 오브젝트들 모두 다 Static 처리가 되어있죠 126 00:07:46.625 --> 00:07:50.075 이 Static 항목의 오른쪽 화살표를 눌러보시면 127 00:07:50.075 --> 00:07:52.125 여러 가지 목록이 나오는데요 128 00:07:52.125 --> 00:07:56.775 여기에서 Contribute GI라는 항목이 129 00:07:56.775 --> 00:08:00.425 지금 보시는 것처럼 활성화된 것을 보실 수가 있습니다 130 00:08:00.425 --> 00:08:01.975 이 항목이 활성화되어 있으면 131 00:08:01.975 --> 00:08:04.275 내가 선택한 오브젝트는 132 00:08:04.275 --> 00:08:08.425 라이트맵의 텍스처를 표현해야 할 133 00:08:08.425 --> 00:08:11.475 대상이다라는 뜻으로 이해하시면 됩니다 134 00:08:11.475 --> 00:08:14.275 그래서 여기 있는 모든 배경 오브젝트들은 135 00:08:14.275 --> 00:08:16.625 이미 개발자가 깔끔하게 정리를 해서 136 00:08:16.625 --> 00:08:21.225 전부 다 Static 처리가 되게끔 세팅이 되어있습니다 137 00:08:21.225 --> 00:08:24.375 그래서 이것을 그대로 드래그해서 138 00:08:24.375 --> 00:08:26.775 우리가 작업하는 캐릭터가 있는 139 00:08:26.775 --> 00:08:29.525 Main Scene에다가 드래그해서 올려놓고요 140 00:08:30.175 --> 00:08:33.975 Map_v1이라고 하는 것은 오른쪽 클릭해서 141 00:08:33.975 --> 00:08:35.725 Remove Scene을 해줍니다 142 00:08:35.725 --> 00:08:37.925 그리고 Save는 하지 않도록 143 00:08:37.925 --> 00:08:40.325 Don't Save 버튼을 누르겠습니다 144 00:08:40.325 --> 00:08:43.725 그러면 아까 전에 이상하게 보였던 145 00:08:43.725 --> 00:08:45.625 저수조의 이미지 같은 것들이 146 00:08:45.625 --> 00:08:47.775 없어진 상태를 확인하실 수가 있죠 147 00:08:47.775 --> 00:08:51.425 여기에서 우리는 라이트맵을 만들어 볼 건데 148 00:08:51.425 --> 00:08:55.375 그전에 라이트에 대한 세팅이 조금 필요합니다 149 00:08:55.375 --> 00:08:58.725 Map_v1의 게임 오브젝트 안쪽에는 150 00:08:58.725 --> 00:09:03.075 파티클도 있고 3D 오브젝트도 있고 라이트 항목이 있습니다 151 00:09:03.075 --> 00:09:07.075 원래 유니티 Scene에서는 기본 Scene을 생성하고 나면 152 00:09:07.075 --> 00:09:09.675 Directional Light와 Main Camera가 153 00:09:09.675 --> 00:09:11.175 기본으로 제공이 되죠 154 00:09:11.175 --> 00:09:14.925 그래서 Directional Light가 하나가 더 추가되어 있기 때문에 155 00:09:14.925 --> 00:09:18.325 라이트 항목 자체를 지워줘서 156 00:09:18.325 --> 00:09:21.175 우리는 Main Scene에서 기본 제공하던 157 00:09:21.175 --> 00:09:23.225 라이트만 가지고 사용할 건데요 158 00:09:23.225 --> 00:09:26.225 라이트맵이라고 하는 것은 기본적으로 159 00:09:26.225 --> 00:09:31.025 라이트의 정보를 텍스처로 만드는 과정입니다 160 00:09:31.025 --> 00:09:33.025 그래서 라이트가 있다고 했을 때 161 00:09:33.025 --> 00:09:35.175 지금 빛의 방향이 이렇게 나오고 있죠 162 00:09:35.175 --> 00:09:38.375 그리고 오브젝트가 이렇게 그림자를 만드는 163 00:09:38.375 --> 00:09:42.175 빛의 방향에 따라서 음영이 지는 것들이 있는데 164 00:09:42.175 --> 00:09:46.025 그러면 이렇게 바닥에 그림자가 생성이 됐을 때 165 00:09:46.025 --> 00:09:48.875 이 그림자에 대한 정보뿐만 아니라 166 00:09:48.875 --> 00:09:53.825 오브젝트 자체에서 밝은 면과 어두운 면에 대한 167 00:09:53.825 --> 00:09:57.925 이러한 정보들까지도 모두 다 그림 파일로 만들게 됩니다 168 00:09:57.925 --> 00:10:02.825 이제 라이트맵에 대한 기본적인 준비 사항에 대해서 알아봤고요 169 00:10:02.825 --> 00:10:05.425 본격적으로 라이트맵을 만들어 볼 건데 170 00:10:05.425 --> 00:10:09.225 Window - Rendering - Lighting 항목으로 갑니다 171 00:10:09.225 --> 00:10:15.425 그리고 Scene에서 라이팅 세팅 애셋이라는 부분이 172 00:10:15.425 --> 00:10:19.025 만약에 비어 있다면 이 부분을 제가 잠깐 지워보겠습니다 173 00:10:19.025 --> 00:10:24.075 비어 있다면 New 버튼을 눌러서 새로 생성해 주시면 됩니다 174 00:10:24.575 --> 00:10:27.775 New Lighting Settings라고 새로 생성이 되었죠 175 00:10:27.775 --> 00:10:30.925 그리고 여러 가지 옵션들이 있는데 176 00:10:30.925 --> 00:10:35.025 일단은 라이팅 모드를 Subtractive로 바꿔줄 겁니다 177 00:10:35.025 --> 00:10:37.725 그리고 라이트맵이라는 과정은 178 00:10:37.725 --> 00:10:41.275 원래 정교한 빛의 계산을 하는 것이기 때문에 179 00:10:41.275 --> 00:10:43.825 시간이 굉장히 오래 걸리는 작업인데요 180 00:10:43.825 --> 00:10:48.575 여기는 Direct Samples를 절반으로 16이 되겠죠 181 00:10:48.575 --> 00:10:52.575 Indirect 간접광에 대한 Samples도 절반 182 00:10:52.575 --> 00:10:54.275 Environment도 마찬가지 183 00:10:54.275 --> 00:10:57.675 마지막으로 Lightmap Resolution 부분도 184 00:10:57.675 --> 00:11:00.775 이것을 12 정도로 낮춰서 185 00:11:00.775 --> 00:11:03.775 결과가 빨리 나올 수 있게끔 바꿔봤습니다 186 00:11:03.775 --> 00:11:06.825 실제로 기본 세팅 값을 가지고 187 00:11:06.825 --> 00:11:10.225 현재 맵에 대한 라이트맵을 생성하게 되면 188 00:11:10.225 --> 00:11:12.325 40분이 넘는 시간이 걸립니다 189 00:11:12.325 --> 00:11:15.575 현업에서는 경우에 따라서 하루 종일 걸리거나 190 00:11:15.575 --> 00:11:19.225 밤새도록 라이트맵을 생성하는 일도 더러 있습니다 191 00:11:19.225 --> 00:11:22.375 근데 우리는 그렇게까지 오랜 시간을 쓸 수는 없으니까 192 00:11:22.375 --> 00:11:25.525 이 정도로만 세팅을 하고 그리고 중요한 건데 193 00:11:25.525 --> 00:11:28.475 Directional Light에 모드 부분을 보면 194 00:11:28.475 --> 00:11:30.075 리얼타임으로 되어있죠 195 00:11:30.075 --> 00:11:35.225 이것을 Mixed 혹은 Baked 둘 중에 하나로 바꿔줘야 됩니다 196 00:11:35.225 --> 00:11:38.575 저는 Mixed로 설정을 해놓겠습니다 197 00:11:38.575 --> 00:11:42.425 왜냐하면 리얼타임이라고 하는 건 빛에 대한 계산을 198 00:11:42.425 --> 00:11:45.975 현재 내가 선택한 Directional Light에 대한 계산을 199 00:11:45.975 --> 00:11:48.575 실시간 계산만 하겠다는 뜻입니다 200 00:11:48.575 --> 00:11:51.125 Baked는 라이트맵을 구울 때 201 00:11:51.125 --> 00:11:53.775 보통 Bake 한다는 표현을 합니다 202 00:11:53.775 --> 00:11:58.125 Bake 한다는 건 텍스처로 만든다는 의미고요 203 00:11:58.125 --> 00:12:00.175 Bake를 한다고 했을 때에만 204 00:12:00.175 --> 00:12:03.775 Directional Light의 정보를 가져다 쓰겠다는 뜻입니다 205 00:12:03.775 --> 00:12:06.225 근데 Directional Light는 기본적으로는 206 00:12:06.225 --> 00:12:08.526 태양과 같은 역할을 하기 때문에 207 00:12:08.526 --> 00:12:11.276 Dynamic 오브젝트한테도 영향을 주고 208 00:12:11.276 --> 00:12:13.976 Static 오브젝트한테도 영향을 줘야 돼서 209 00:12:13.976 --> 00:12:16.426 그 두 가지에 모두 영향을 줄 수 있는 210 00:12:16.426 --> 00:12:19.176 Mixed로 세팅을 하는 게 일반적입니다 211 00:12:19.176 --> 00:12:23.776 그러고 나서 준비가 끝났다면 Scene을 저장을 하고요 212 00:12:23.776 --> 00:12:26.376 Ctrl+S를 눌러서 저장을 하고 213 00:12:26.376 --> 00:12:28.276 Generate Lighting 버튼을 214 00:12:28.276 --> 00:12:31.676 라이팅 창의 가장 하단에 있죠 눌러 줄 겁니다 215 00:12:31.676 --> 00:12:34.776 라이트맵이 생성되는 동안 우측 하단에 216 00:12:34.776 --> 00:12:37.326 얼마큼의 시간이 소요되는지가 나오고요 217 00:12:37.326 --> 00:12:40.426 지금은 시간이 차츰차츰 줄어들고 있죠 218 00:12:40.426 --> 00:12:43.876 그리고 라이트맵이 Bake 되는 중에 219 00:12:43.876 --> 00:12:47.176 Global illumination이라고 하는 개념에 대해서 220 00:12:47.176 --> 00:12:49.976 먼저 여러분들께 설명해 드리겠습니다 221 00:12:49.976 --> 00:12:52.126 앞서서 이 Static 옵션에서 222 00:12:52.126 --> 00:12:56.676 Contribute GI라고 하는 항목을 확인했었죠 223 00:12:56.676 --> 00:13:00.776 그 GI의 약자가 Global illumination입니다 224 00:13:00.776 --> 00:13:04.226 일반적으로 빛이라고 하는 것은 태양빛처럼 225 00:13:04.226 --> 00:13:09.476 물체 같은 곳에 직접적으로 닿는 Directional이 있고요 226 00:13:09.476 --> 00:13:14.476 직접광이 물체에 부딪혀서 튕겨나가서 227 00:13:14.476 --> 00:13:17.126 다른 오브젝트에 영향을 주기도 합니다 228 00:13:17.126 --> 00:13:20.076 이것을 Indirect라고 얘기를 합니다 229 00:13:20.076 --> 00:13:23.826 또한 이 빛이 나중에 바깥으로 빠져나가서 230 00:13:23.826 --> 00:13:27.376 하늘에 부딪혀서 다시 내려오기도 합니다 231 00:13:27.376 --> 00:13:31.426 Sky에서 공기 중에 떠다니는 입자에 부딪히는 거죠 232 00:13:31.426 --> 00:13:36.076 그래서 단순히 Directional Light에 의한 효과뿐만 아니라 233 00:13:36.076 --> 00:13:40.526 Sky에서 구름에 부딪히든 혹은 대기에 부딪히든 234 00:13:40.526 --> 00:13:44.726 이렇게 난반사되서 사방에서 들이치는 빛 같은 경우에는 235 00:13:44.726 --> 00:13:49.926 우리는 이것을 GI(Global illumination)라고 부릅니다 236 00:13:49.926 --> 00:13:53.126 그래서 기본적으로 라이트맵을 그린다고 하는 것은 237 00:13:53.126 --> 00:13:57.376 태양과 같은 Directional Light의 직접적인 빛뿐만 아니라 238 00:13:57.376 --> 00:14:02.626 그것이 여러 번 반사가 돼서 사방에서 들이친다는 전제에서 239 00:14:02.626 --> 00:14:06.126 이렇게 Global illumination까지 포함해서 240 00:14:06.126 --> 00:14:09.126 Bake를, 텍스처를 생성하는 것이죠 241 00:14:09.126 --> 00:14:12.626 이 아래쪽에 있는 샘플이라고 하는 것들이 대부분은 242 00:14:12.626 --> 00:14:15.276 우리가 결국 그림 파일로 만든다는 것은 243 00:14:15.276 --> 00:14:18.976 하나의 픽셀 데이터로 계산을 한다는 것인데요 244 00:14:18.976 --> 00:14:22.626 이 픽셀을 무슨 색깔로 표현할지 245 00:14:22.626 --> 00:14:26.326 여러 개의 빛에 대한 정보를 가져오는 것 246 00:14:26.326 --> 00:14:29.826 그것을 우리는 흔히 샘플이라고 얘기를 합니다 247 00:14:29.826 --> 00:14:33.376 한마디로 Directional Light에 대한 계산을 위해서 248 00:14:33.376 --> 00:14:35.426 16개의 샘플이 필요한 거고요 249 00:14:35.426 --> 00:14:38.926 Indirect를 위해서 혹은 Environment를 위해서 250 00:14:38.926 --> 00:14:42.526 수백 개의 샘플을 사용하겠다는 뜻이 되는 겁니다 251 00:14:42.526 --> 00:14:46.876 이 아래쪽에는 그런 수많은 샘플의 정보를 취합해서 252 00:14:46.876 --> 00:14:50.426 어떠한 이미지를 생성할 거냐라는 것인데 253 00:14:50.426 --> 00:14:54.126 여기에서 보면 Lightmap Resolution 항목을 보시면 254 00:14:54.126 --> 00:14:56.676 Texels per unit이라는 표현이 나옵니다 255 00:14:56.676 --> 00:14:59.876 1unit 현실에서는 1m를 기준으로 256 00:14:59.876 --> 00:15:02.526 유니티에서의 1unit을 만들어 놨죠 257 00:15:02.526 --> 00:15:06.176 이 1unit을 그리는 데 있어서 몇 Texel 258 00:15:06.176 --> 00:15:11.076 텍스처에서의 픽셀 이것을 Texel이라고 얘기를 합니다 259 00:15:11.076 --> 00:15:16.076 한마디로 1m의 공간을 표현하는 데 있어서 260 00:15:16.076 --> 00:15:19.476 몇 픽셀을 가져다가 표현을 할 거냐 261 00:15:19.476 --> 00:15:22.226 당연히 Texel의 수가 높으면 262 00:15:22.226 --> 00:15:25.476 훨씬 더 정교한 빛의 표현이 가능한데 263 00:15:25.476 --> 00:15:29.026 그림자라든가 이런 것들도 훨씬 더 정교해지는데 264 00:15:29.026 --> 00:15:31.876 대신 그만큼 시간이 오래 걸리게 됩니다 265 00:15:31.876 --> 00:15:37.776 이 1m를 12개로 쪼개서 표현하겠다는 뜻이 되는 것이고요 266 00:15:37.776 --> 00:15:41.926 이제 설명에 맞춰서 빛에 대한 계산이 다 끝났습니다 267 00:15:42.326 --> 00:15:43.876 여기에서 보시면 앞서서 268 00:15:43.876 --> 00:15:45.876 잠깐 기즈모를 끄도록 하겠습니다 269 00:15:45.876 --> 00:15:48.726 이런 식으로 좀비라든가 이런 것들은 270 00:15:48.726 --> 00:15:52.126 Dynamic 오브젝트이기 때문에 그림자에 대한 계산을 271 00:15:52.126 --> 00:15:53.776 실시간으로 하고 있고요 272 00:15:53.776 --> 00:15:56.026 배경 오브젝트는 Static이었죠 273 00:15:56.026 --> 00:16:00.626 그러다 보니까 움직이더라도 그림자가 바뀌지 않습니다 274 00:16:00.626 --> 00:16:05.226 마찬가지죠 여기 있는 저수조를 움직이더라도 275 00:16:05.226 --> 00:16:07.826 그림자가 바뀌지 않습니다 276 00:16:07.826 --> 00:16:10.176 왜냐하면 이것은 이런 식으로 277 00:16:10.176 --> 00:16:13.976 미리 그림 파일로 만들어졌기 때문입니다 278 00:16:13.976 --> 00:16:17.476 이게 바로 라이트맵이라고 하는 그림 파일인데요 279 00:16:17.476 --> 00:16:20.676 그중에서도 저수조가 차지하고 있는 영역이 280 00:16:20.676 --> 00:16:25.026 Baked Lightmaps 항목에 의해서 노란색으로 표시되고 있죠 281 00:16:25.026 --> 00:16:29.326 오픈 프리뷰 버튼을 눌러서 확인하실 수 있고 282 00:16:29.326 --> 00:16:31.826 Window에 Lighting 패널에서도 283 00:16:31.826 --> 00:16:34.276 Baked Lightmaps이라는 항목을 통해서 284 00:16:34.276 --> 00:16:39.776 현재 총 0번부터 4번까지 총 5장의 이미지로 285 00:16:39.776 --> 00:16:42.376 라이트맵이 생성된 것을 확인하실 수가 있습니다 286 00:16:42.376 --> 00:16:45.726 제가 사용했던 Subtractive라는 방법은 287 00:16:45.726 --> 00:16:49.376 빛에 대한 그림자나 밝은 면이나 모든 것들을 288 00:16:49.376 --> 00:16:52.626 하나의 이미지에 표현하겠다는 뜻이 되는 거고요 289 00:16:52.626 --> 00:16:55.576 좀 더 정확하게 한 종류의 이미지에 290 00:16:55.576 --> 00:16:57.426 표현하겠다는 뜻이 되는 거고 291 00:16:57.426 --> 00:17:00.676 여기에서 Baked Indirect를 하면 292 00:17:00.676 --> 00:17:03.776 간접광에 대한 정보만 표현을 하겠다 293 00:17:03.776 --> 00:17:07.076 그래서 그림자와 같이 직접적으로 생기는 294 00:17:07.076 --> 00:17:11.576 Direct Light 효과에 의해서 생기는 295 00:17:11.576 --> 00:17:15.726 그림자 같은 것들은 빼고 간접광에 대한 것만 그리겠다 296 00:17:15.726 --> 00:17:18.876 그러다 보니 Baked Indirect를 하게 되면 297 00:17:18.876 --> 00:17:21.476 그림자는 포함이 되지 않기 때문에 298 00:17:21.476 --> 00:17:24.676 밝고 어두운 면에 대한 정보만 그려지고 299 00:17:24.676 --> 00:17:28.526 라이트를 바꾸면 그림자의 정보가 바뀔 수 있습니다 300 00:17:28.526 --> 00:17:31.576 대신 텍스처를 한 장 더 쓰게 되는 거고요 301 00:17:31.576 --> 00:17:36.276 Shadowmask 같은 경우에는 총 3장의 이미지를 통해서 302 00:17:36.276 --> 00:17:40.676 그림자와 밝은 면, 어두운 면, GI 이런 것들을 303 00:17:40.676 --> 00:17:43.376 3장의 이미지를 사용해서 표현하기 때문에 304 00:17:44.076 --> 00:17:47.376 라이트맵 방식 중에서 시간도 제일 오래 걸리고 305 00:17:47.376 --> 00:17:50.376 가장 무거운 축에 속하는 방식입니다 306 00:17:50.376 --> 00:17:53.226 그래서 일반적으로 유니티 매뉴얼 상으로 307 00:17:53.226 --> 00:17:56.076 모바일 게임과 같이 굉장히 라이트한 308 00:17:56.076 --> 00:18:00.526 사양이 낮은 플랫폼을 타겟팅 할 때는 Subtractive로 309 00:18:00.526 --> 00:18:04.776 높은 사양을 타겟팅 할 때는 Shadowmask와 같은 옵션으로 310 00:18:04.776 --> 00:18:07.676 베이킹을 하는 것이 좋다고 되어있고요 311 00:18:07.676 --> 00:18:10.126 이런 식으로 라이트에 대한 정보는 312 00:18:10.126 --> 00:18:12.276 한 종류로 정리가 되는데 313 00:18:13.076 --> 00:18:17.326 옵션들 중에 이런 3D 오브젝트들이 월드상에서 314 00:18:17.326 --> 00:18:20.826 어느 방향을 바라보고 있는지에 대한 정보도 315 00:18:20.826 --> 00:18:24.926 이렇게 별도로 더 추가된 것을 확인하실 수가 있죠 316 00:18:24.926 --> 00:18:28.526 그래서 이러한 정보들이 우리가 얘기하는 317 00:18:28.526 --> 00:18:31.026 라이트맵을 Bake 한 겁니다 318 00:18:31.026 --> 00:18:33.726 현재 라이트맵 생성은 끝났는데요 319 00:18:33.726 --> 00:18:36.826 굉장히 어둡고 칙칙한 느낌이 들죠 320 00:18:36.826 --> 00:18:40.976 그런 이유 중에 하나는 지금 환경상의 Sky가 321 00:18:40.976 --> 00:18:44.376 유니티의 기본 Sky이기 때문입니다 322 00:18:44.376 --> 00:18:50.176 Sky에 대해서 약간 우리가 설정을 해줄 필요가 있습니다 323 00:18:50.176 --> 00:18:54.126 우선은 RPG_FPS_game_assets - Texture 항목에서 324 00:18:54.126 --> 00:18:57.826 Skybox 항목을 보도록 하겠습니다 325 00:18:57.826 --> 00:19:02.026 여기 보면 구름이 끼어 있는 하늘의 이미지가 보이죠 326 00:19:02.026 --> 00:19:04.726 Window - Rendering - Lighting 패널에서 327 00:19:04.726 --> 00:19:08.776 Scene 바로 옆에 있는 두 번째 Environment에다가 328 00:19:08.776 --> 00:19:13.926 Skybox_v9를 드래그해서 연결해 줍니다 329 00:19:13.926 --> 00:19:17.576 그러면 지금 보시는 것처럼 우리의 배경화면에 330 00:19:17.576 --> 00:19:21.676 Skybox가 변경이 된 것을 확인하실 수가 있는데 331 00:19:21.676 --> 00:19:26.176 혹시라도 변경된 Skybox가 안 보이시는 분들은 332 00:19:26.176 --> 00:19:29.176 뷰포트에서 여기 있는 Toggle 버튼을 이용해서 333 00:19:29.176 --> 00:19:32.126 껐다 켰다가 가능하니까 참고하시고요 334 00:19:32.126 --> 00:19:34.726 일반적으로 라이트맵을 구울 때 335 00:19:34.726 --> 00:19:38.626 환경에 깔려 있는 Sky에 붉은색 혹은 푸른색 336 00:19:38.626 --> 00:19:41.726 이런 정보들도 같이 구워줘야 337 00:19:41.726 --> 00:19:45.276 이게 조금 더 자연스러운 라이팅을 만들 수가 있는데 338 00:19:45.276 --> 00:19:48.126 이전에는 그러한 라이팅에 사용할 만한 339 00:19:48.126 --> 00:19:50.476 Sky 정보가 충분하지 않았기 때문에 340 00:19:50.476 --> 00:19:54.676 상대적으로 좀 칙칙한 결과를 갖게 된 것이고요 341 00:19:54.676 --> 00:19:57.926 이것을 제가 새로 Generate Lighting을 해서 342 00:19:57.926 --> 00:20:00.376 Skybox가 적용됐을 때도 343 00:20:00.376 --> 00:20:03.076 한번 비교해서 보여드리도록 하겠습니다 344 00:20:03.076 --> 00:20:06.326 Skybox를 설정해 놓은 상태에서 345 00:20:06.326 --> 00:20:08.976 Generate Lighting 버튼을 눌러주겠습니다 346 00:20:08.976 --> 00:20:12.776 Skybox에 라이팅 정보를 받아오기 위해서는 347 00:20:12.776 --> 00:20:15.926 Environment Lighting 항목의 소스 부분이 348 00:20:15.926 --> 00:20:20.126 Skybox로 되어있어야 그 정보를 가지고 와서 349 00:20:20.126 --> 00:20:22.726 라이트맵을 생성하는 데 참고하는 것이고요 350 00:20:22.726 --> 00:20:26.176 기본적으로는 Environment Light의 타입을 351 00:20:26.176 --> 00:20:29.326 결과에 따라서 내가 임의로 수정할 수도 있습니다 352 00:20:30.126 --> 00:20:32.476 두 가지 결과물이 나왔는데요 353 00:20:32.476 --> 00:20:35.226 우선은 위에 있는 이미지가 354 00:20:35.226 --> 00:20:37.976 기본 유니티 Skybox의 결과입니다 355 00:20:37.976 --> 00:20:39.376 여기 화면에는 들어가 있는데 356 00:20:39.376 --> 00:20:42.326 이거는 나중에 집어넣었을 때 찍은 스크린샷이고 357 00:20:42.326 --> 00:20:43.926 유니티의 Skybox 358 00:20:43.926 --> 00:20:47.126 아래쪽에 있는 것은 실제 우리가 적용했던 359 00:20:47.126 --> 00:20:51.426 Skybox 버전 9를 이용해서 Bake 한 건데 360 00:20:51.426 --> 00:20:52.876 크게 차이는 없죠 361 00:20:52.876 --> 00:20:56.876 아마 여기에서 눈에 두드러지는 차이라고 해봐야 362 00:20:56.876 --> 00:21:00.376 이쪽 그림자 쪽의 디테일이 조금 더 잘 보이는 정도 363 00:21:00.376 --> 00:21:04.026 여기 있는 몇 가지 포인트 정도만 조금 더 잘 보이는 364 00:21:04.026 --> 00:21:07.526 이 정도의 변화만 미묘하게 있을 뿐입니다 365 00:21:07.526 --> 00:21:11.676 물론 눈이 좀 예리하신 분들은 처음 딱 보더라도 366 00:21:11.676 --> 00:21:14.826 약간 어두운 부분이 조금 밝아졌네 정도의 367 00:21:14.826 --> 00:21:16.826 느낌은 받으실 텐데요 368 00:21:16.826 --> 00:21:21.126 저 같은 경우에는 Skybox에 있는 정보를 369 00:21:21.126 --> 00:21:25.026 직접적으로 가지고 와서 쓰는 것보다 조금 더 좋아하는 게 370 00:21:25.026 --> 00:21:28.976 Gradient라고 하는 옵션을 조금 더 좋아합니다 371 00:21:28.976 --> 00:21:31.326 그래서 약간 번거롭긴 하지만 372 00:21:31.326 --> 00:21:33.776 Gradient는 쉽게 얘기해서 373 00:21:33.776 --> 00:21:37.676 하늘에서 내려오는 빛과 수평에서 내려오는 빛 374 00:21:37.676 --> 00:21:43.176 그리고 빛이 바닥에 부딪혀서 바닥에서부터 튕겨나오는 375 00:21:43.176 --> 00:21:48.376 Sky 그리고 Equator 마지막으로 Ground까지 376 00:21:48.376 --> 00:21:52.076 이렇게 총 세 가지 빛의 방향을 가지고 377 00:21:52.076 --> 00:21:55.876 임의의 색깔을 제가 정해서 표현하는 방식인데요 378 00:21:55.876 --> 00:21:59.476 그래서 저는 이것을 내가 집어넣은 Sky와 379 00:21:59.476 --> 00:22:02.176 그래도 좀 아주 엇나가지 않게 380 00:22:02.176 --> 00:22:05.676 유사한 색감이라든가 빛의 강도를 가질 수 있게끔 381 00:22:05.676 --> 00:22:10.776 이렇게 스포이드를 통해서 Sky에서 가장 밝은 영역에 382 00:22:10.776 --> 00:22:15.176 색이 좀 보이는 이러한 색상을 골라주고요 383 00:22:15.176 --> 00:22:19.176 빛의 세기는 우선은 1 정도로만 하겠습니다 384 00:22:19.176 --> 00:22:22.926 마찬가지로 Equator 같은 경우에는 클릭해서 385 00:22:22.926 --> 00:22:27.976 스포이드로 지평선 부분의 빛의 컬러를 386 00:22:27.976 --> 00:22:30.026 마찬가지로 1 정도로 두고요 387 00:22:30.026 --> 00:22:32.476 마지막으로 Ground 같은 경우에는 388 00:22:32.476 --> 00:22:35.026 바닥에서 많이 차지하는 389 00:22:35.026 --> 00:22:39.126 가장 넓은 면적을 차지하는 색상의 컬러를 찍어서 390 00:22:39.126 --> 00:22:40.773 이렇게 색을 지정해 줍니다 391 00:22:40.773 --> 00:22:46.373 밝게 표현을 했으니까 여러분들이 너무 밝다 싶으시면 392 00:22:46.373 --> 00:22:49.873 Intensity 항목을 조금만 낮춰서 393 00:22:49.873 --> 00:22:53.023 0이어도 기본적인 밝기를 갖고 있기 때문에 394 00:22:53.023 --> 00:22:56.422 1이 너무 밝다면 약간 낮춰서 표현하시는 것도 395 00:22:56.422 --> 00:22:57.622 하나의 방법입니다 396 00:22:57.622 --> 00:23:01.222 1이라고 하는 건 제가 그냥 나중에 조절하기 위한 397 00:23:01.222 --> 00:23:03.222 임의의 기준값을 잡은 것이고요 398 00:23:03.222 --> 00:23:07.722 빛에 대한 계산이 끝나면 세 번째 스샷까지 함께 399 00:23:07.722 --> 00:23:09.922 결과치로 비교해 보도록 하겠습니다 400 00:23:09.922 --> 00:23:13.722 Skybox의 컬러에서 색을 뽑아내서 401 00:23:13.722 --> 00:23:16.122 Gradient로 세팅을 한 상황인데요 402 00:23:16.122 --> 00:23:20.072 지금 보시면 이전에 Skybox를 가져다 썼을 때보다 403 00:23:20.072 --> 00:23:23.022 음영 부분이 훨씬 더 밝아져서 404 00:23:23.022 --> 00:23:27.322 그림자가 그렇게 짙지 않게, 티가 나지 않게 405 00:23:27.322 --> 00:23:29.922 은은하게 올라온 것을 보실 수가 있고 406 00:23:29.922 --> 00:23:35.522 Equator에 보면 파란색이 조금 더 강조된 것을 보실 수가 있죠 407 00:23:35.522 --> 00:23:39.322 이건 사람에 따라서 혹은 상황에 따라서 408 00:23:39.322 --> 00:23:42.722 여러분들이 선택해서 사용을 하시면 될 것 같습니다 409 00:23:42.722 --> 00:23:44.872 이러한 라이트맵을 사용할 때 410 00:23:44.872 --> 00:23:49.172 여러분들이 임의의 라이트를 하나 설치를 해서 411 00:23:49.172 --> 00:23:51.522 또 다른 사용방법을 하나 보여드릴 건데요 412 00:23:51.522 --> 00:23:54.222 Light - Point Light를 이용해서 413 00:23:54.222 --> 00:23:57.172 Only Baked, Baked라는 것은 414 00:23:57.172 --> 00:24:01.472 기본적으로 무조건 Static 오브젝트한테만 영향을 주게 415 00:24:01.472 --> 00:24:03.922 이렇게 표현이 되는 경우들이 있습니다 416 00:24:03.922 --> 00:24:07.872 약간 붉은색으로 해서 이런 식으로 붉은색 기운이 417 00:24:07.872 --> 00:24:11.722 주변 환경에 조금 묻어나게끔 세팅을 해 봤고요 418 00:24:11.722 --> 00:24:13.722 이 상태에서 라이트맵을 한다면 419 00:24:13.722 --> 00:24:15.472 한 가지 문제점이 있습니다 420 00:24:15.472 --> 00:24:19.772 Baked라는 옵션은 Static 오브젝트한테만 영향을 줍니다 421 00:24:19.772 --> 00:24:23.122 근데 만약에 이렇게 빨간빛이 비치는 상황에서 422 00:24:23.122 --> 00:24:26.072 Dynamic 오브젝트가 접근을 한다면 423 00:24:26.072 --> 00:24:28.772 아무런 영향도 끼치지 못하게 됩니다 424 00:24:28.772 --> 00:24:30.872 그러면 배경은 빨갛고 425 00:24:30.872 --> 00:24:34.922 Dynamic은 여전히 그냥 하늘의 빛만 받고 있다고 한다면 426 00:24:34.922 --> 00:24:37.222 굉장히 어색한 상황이 되겠죠 427 00:24:37.222 --> 00:24:39.222 이러한 것을 방지하기 위해서 428 00:24:39.222 --> 00:24:42.272 라이트맵에서 라이트를 Bake 했을 때 429 00:24:42.272 --> 00:24:46.972 Baked 된 라이트의 정보를 가지고 있다가 430 00:24:46.972 --> 00:24:51.272 Dynamic 오브젝트한테 전달을 해주는 역할의 431 00:24:51.272 --> 00:24:53.422 게임 오브젝트가 존재합니다 432 00:24:53.422 --> 00:24:56.972 이것을 우리는 라이트 프로브라고 하고요 433 00:24:56.972 --> 00:25:00.722 하이어라키에서 라이트 항목에서 맨 아래에 있는 434 00:25:00.722 --> 00:25:03.572 라이트 프로브라고 하는 오브젝트입니다 435 00:25:03.572 --> 00:25:07.322 설치를 하고 월드 영점으로 위치를 바꿔놓겠습니다 436 00:25:07.322 --> 00:25:12.072 그래서 위치에 보면 동그라미 표시들이 있게 되는데요 437 00:25:12.072 --> 00:25:14.722 이 동그라미들을 여러분들이 시작할 만한 438 00:25:14.722 --> 00:25:16.622 적당한 위치에 옮겨두시고 439 00:25:16.622 --> 00:25:20.422 Edit Light Probe Positions 버튼을 클릭하시면 440 00:25:20.422 --> 00:25:24.222 이 개별 구체들을 선택하는 것이 가능합니다 441 00:25:24.222 --> 00:25:27.072 그래서 라이트 프로브를 배치할 때는 442 00:25:27.072 --> 00:25:31.072 기본적으로 라이트 프로브가 캐릭터를 감쌀 수 있게 443 00:25:31.072 --> 00:25:33.922 점프를 한다면 점프 공간까지 고려해서 444 00:25:33.922 --> 00:25:38.622 이것을 내가 필요한 영역만큼 드래그해서 선택 445 00:25:38.622 --> 00:25:41.622 Ctrl + C, V 이런 식으로 446 00:25:41.622 --> 00:25:46.322 Ctrl + C, V 해서 이렇게 확장해서 복사해서 447 00:25:46.322 --> 00:25:48.772 영역을 넓힐 수가 있습니다 448 00:25:48.772 --> 00:25:51.422 이런 식으로 Ctrl + C, V 449 00:25:51.422 --> 00:25:55.922 빛의 변화가 많다면 간격을 조밀하게 하는 것이고 450 00:25:55.922 --> 00:25:59.422 빛에 대한 변화가 적다면 이렇게 널찍하게 해도 451 00:25:59.422 --> 00:26:01.672 크게 문제되지는 않습니다 452 00:26:01.672 --> 00:26:04.922 그래서 라이트 프로브의 단점인데요 453 00:26:04.922 --> 00:26:07.172 유저분들에게 해당되지는 않는데 454 00:26:07.172 --> 00:26:12.222 라이트 프로브는 무조건적으로 연결이 되기 때문에 455 00:26:12.222 --> 00:26:14.522 따로 떨어져서 되지가 않습니다 456 00:26:14.522 --> 00:26:18.372 그래서 이런 식으로 한 번 배치를 하기 시작하면 457 00:26:18.372 --> 00:26:22.072 끊임없이 계속해서 배치를 해야 된다는 458 00:26:22.072 --> 00:26:25.572 단점 아닌 단점을 가지고 있습니다 459 00:26:25.572 --> 00:26:28.022 물론 저는 영상의 길이 때문에 460 00:26:28.022 --> 00:26:30.672 이것에 대해서 전체적으로 하지 않을 건데 461 00:26:30.672 --> 00:26:34.572 지금 보시면 이 삼각형의 범위가 보이고 있죠 462 00:26:34.572 --> 00:26:38.222 이 삼각형 범위 안에 캐릭터가 들어오게 되면 463 00:26:38.222 --> 00:26:40.722 여기 있는 프로브들이 가지고 있는 464 00:26:40.722 --> 00:26:43.972 현재 위치에 있는 라이트의 정보를 465 00:26:43.972 --> 00:26:46.522 Dynamic 오브젝트한테 뿌려주게 됩니다 466 00:26:46.522 --> 00:26:49.422 그래서 빛의 변화가 많은 영역들 467 00:26:49.422 --> 00:26:52.722 음영이 지는 영역들 이런 부분들에서는 468 00:26:52.722 --> 00:26:55.022 굉장히 조밀하게 깔아줘야 되는 거고요 469 00:26:55.022 --> 00:27:00.822 아니라면 여러분들이 잘 선택을 해서 간격 조절을 해야겠죠 470 00:27:00.822 --> 00:27:03.772 일반적으로 이런 작업을 레벨 디자이너가 471 00:27:03.772 --> 00:27:07.222 라이트를 잡으면서 진행하게 됩니다 이런 식으로 472 00:27:07.222 --> 00:27:11.022 만약에 잘못 만든 부분이거나 너무 간격이 조밀하다면 473 00:27:11.022 --> 00:27:14.772 이렇게 선택해서 부분적으로는 지워줘도 됩니다 474 00:27:14.772 --> 00:27:18.772 그래도 컴퓨터가 알아서 연결을 해주기 때문이죠 475 00:27:18.772 --> 00:27:21.722 일단 이 정도만 배치를 해놓고 476 00:27:21.722 --> 00:27:24.372 다시 한번 Window - Rendering에 가서 477 00:27:24.372 --> 00:27:26.522 Generate Lighting 버튼을 눌러서 478 00:27:26.522 --> 00:27:28.922 라이트맵을 Bake 해 보겠습니다 479 00:27:29.322 --> 00:27:31.472 라이트를 앞서서 설명한 것보다 480 00:27:31.472 --> 00:27:34.972 조금 더 Intensity 값을 높여서 Bake를 했고요 481 00:27:34.972 --> 00:27:38.972 플레이를 눌러서 실제 이 오브젝트에 어떻게 보이는지 482 00:27:38.972 --> 00:27:41.122 한번 비교해 드리겠습니다 483 00:27:41.122 --> 00:27:44.072 현재는 라이트 프로브의 영역 밖에 484 00:27:44.072 --> 00:27:47.072 좀 더 정확하게는 붉은색 영역 밖에 있기 때문에 485 00:27:47.072 --> 00:27:48.922 라이트의 영향을 안 받는데 486 00:27:48.922 --> 00:27:51.672 이것을 이렇게 가까이 가면 487 00:27:51.672 --> 00:27:54.422 총신에 붉은색 빛이 도는 게 보이시죠 488 00:27:54.422 --> 00:27:59.922 여기에서 심지어는 붉은색 라이트를 비활성화한다고 하더라도 489 00:27:59.922 --> 00:28:02.472 이렇게 활성화를 끈다고 하더라도 490 00:28:02.472 --> 00:28:05.222 지금 보시는 것처럼 붉은색의 기운이 491 00:28:05.222 --> 00:28:08.872 여전히 총신에 묻어나는 것을 보실 수가 있습니다 492 00:28:08.872 --> 00:28:11.872 이런 방식으로 라이트 프로브를 사용하게 되는 겁니다 493 00:28:11.872 --> 00:28:15.572 마찬가지 맥락으로 라이트에 리플렉션 프로브도 494 00:28:15.572 --> 00:28:16.972 같은 역할을 하는데요 495 00:28:16.972 --> 00:28:20.522 지금은 현재 아무런 데이터가 없는 상태이기 때문에 496 00:28:20.522 --> 00:28:23.722 이 Bake 버튼을 리플렉션 프로브를 배치하시고 497 00:28:23.722 --> 00:28:28.522 여러분들이 적당한 공간에 놓고 Bake를 누르신다면 498 00:28:28.522 --> 00:28:32.722 주변의 환경을 360도로 캡처를 떠서요 499 00:28:32.722 --> 00:28:35.772 이 캡처된 이미지를 유리나 이런 것처럼 500 00:28:35.772 --> 00:28:38.772 아주 반짝반짝한 질감들한테 501 00:28:38.772 --> 00:28:41.022 여기 가까이서 좀 보겠습니다 502 00:28:41.022 --> 00:28:45.872 옷의 질감을 일부러 좀 과도하게 높여보도록 하겠습니다 503 00:28:45.872 --> 00:28:48.372 Smoothness 값을 이렇게 높여놓고 504 00:28:48.372 --> 00:28:53.472 리플렉션 프로브가 있기 전과 후를 비교해 보면 이런 식으로 505 00:28:53.472 --> 00:28:56.472 텍스처를 잠깐 빼서 None 상태로 만들어 두고 506 00:28:56.472 --> 00:28:58.972 Metalic은 이렇게 높여서 보면 507 00:28:58.972 --> 00:29:02.622 지금 주변 환경이 비치는 게 확인이 되시죠 508 00:29:02.622 --> 00:29:05.772 리플렉션 프로브가 하는 일은 이렇게 509 00:29:05.772 --> 00:29:09.472 지금은 오브젝트가 없이 주변에만 510 00:29:09.472 --> 00:29:11.472 이런 식으로 빛을 뿌리고 있는데 511 00:29:11.472 --> 00:29:16.522 리플렉션 프로브의 영역 안에 3D 오브젝트가 존재한다면 512 00:29:16.522 --> 00:29:21.422 이제 이거를 낮춰서 3D 오브젝트 주변에 놔두도록 하겠습니다 513 00:29:21.422 --> 00:29:24.072 그렇게 한다면 지금 보시는 것처럼 514 00:29:24.072 --> 00:29:28.722 주변의 환경을 마치 직접 반사하는 것 같은 515 00:29:28.722 --> 00:29:31.072 느낌을 만들어 줄 수가 있는데요 516 00:29:31.072 --> 00:29:35.022 실제로는 실시간으로 화면을 반사시키는 것이 아니고 517 00:29:35.022 --> 00:29:38.872 리플렉션 프로브가 가지고 있는 이미지를 518 00:29:38.872 --> 00:29:41.622 반사시키는 것처럼 투영시켜서 519 00:29:41.622 --> 00:29:43.522 보여주는 역할을 하는 겁니다 520 00:29:43.522 --> 00:29:47.722 리플렉션 프로브를 꺼보면 Sky 기본값만 반사가 되죠 521 00:29:47.722 --> 00:29:51.872 그래서 이런 식으로 리플렉션 프로브도 Bake를 해서 522 00:29:51.872 --> 00:29:55.972 이때 만들어지는 건 리플렉션 맵을 만드는 것이고요 523 00:29:55.972 --> 00:29:58.872 그래서 단순히 라이트만 Bake 하는 것이 아니고 524 00:29:58.872 --> 00:30:00.922 이러한 프로브와 같이 525 00:30:00.922 --> 00:30:04.372 주변 Baked 된 라이트의 데이터 같은 것들도 526 00:30:04.372 --> 00:30:07.172 따로 미리 계산을 해놓을 수도 있고 527 00:30:07.172 --> 00:30:11.672 리플렉션 프로브처럼 주변 환경의 이미지 같은 것들도 528 00:30:11.672 --> 00:30:16.372 미리 계산을 해서 실시간으로 콘텐츠가 돌아갈 때 529 00:30:16.372 --> 00:30:18.722 하드웨어에서 연산하는 부담감을 530 00:30:18.722 --> 00:30:21.322 좀 줄어들게 만들 수가 있습니다 531 00:30:21.322 --> 00:30:25.322 이러한 일련의 작업들을 대부분 최적화라고 합니다 532 00:30:25.322 --> 00:30:28.172 최적화에서 여러분들이 잊지 마셔야 될 건 533 00:30:28.172 --> 00:30:30.722 단순히 아낀다고 능사가 아니고요 534 00:30:30.722 --> 00:30:34.672 아끼긴 아끼되 그래도 더 좋아 보일 수 있게 535 00:30:34.672 --> 00:30:37.772 혹은 어떠한 기법을 사용하기 전과 후에 536 00:30:37.772 --> 00:30:40.472 커다란 차이를 만들지 않게끔 하면서도 537 00:30:40.472 --> 00:30:43.172 퍼포먼스를 향상시키는 것이죠 538 00:30:43.172 --> 00:30:45.672 최적화 기법에 대해서 좀 알아봤는데 539 00:30:45.672 --> 00:30:47.422 이러한 최적화 기법은 540 00:30:47.422 --> 00:30:50.722 3D 오브젝트를 제작하면서도 사용할 수가 있고요 541 00:30:50.722 --> 00:30:53.622 여러분들이 콘텐츠를 제어하면서 542 00:30:53.622 --> 00:30:56.722 이렇게 좀비 같은 오브젝트를 543 00:30:56.722 --> 00:30:59.372 3마리를 쓰는 것보단 1마리를 쓰는 게 544 00:30:59.372 --> 00:31:00.972 더 리소스는 적게 먹겠죠 545 00:31:00.972 --> 00:31:04.572 3마리의 체력을 1마리한테 몰아줘서 546 00:31:04.572 --> 00:31:08.072 10, 10, 10 나눌 것을 30으로 만들어서 547 00:31:08.072 --> 00:31:11.772 1마리를 잡는데 시간을 더 오래 투자하게 만드는 것도 548 00:31:11.772 --> 00:31:12.872 하나의 방법이고요 549 00:31:12.872 --> 00:31:14.772 단순하게는 최적화라고 하는 게 550 00:31:14.772 --> 00:31:18.022 그래픽에만 해당되지 않는다라는 점을 551 00:31:18.022 --> 00:31:20.872 모든 파트가 다 같이 달려들어서 하는 552 00:31:20.872 --> 00:31:23.322 작업이라는 점을 이해하실 필요가 있고요 553 00:31:23.322 --> 00:31:26.872 단순히 무조건 아낀다고 좋은 건 아니기 때문에 554 00:31:26.872 --> 00:31:28.822 때로는 효과를 일부러 더 써서 555 00:31:28.822 --> 00:31:32.372 유저들에게 몰입감 높은 환경을 제공하기도 하는데 556 00:31:32.372 --> 00:31:35.972 대표적으로 쓰이는 게 바로 추가 효과들이기 때문에 557 00:31:35.972 --> 00:31:38.972 카메라에 있는 포스트 프로세싱을 558 00:31:38.972 --> 00:31:40.622 활성화해 줄 필요가 있습니다 559 00:31:40.622 --> 00:31:43.272 아무리 씬 뷰에서 보인다고 하더라도 560 00:31:43.272 --> 00:31:47.422 포스트 프로세싱이 실제 유저들이 보는 화면에 561 00:31:47.422 --> 00:31:50.072 전달이 안 되면 의미가 없겠죠 562 00:31:50.072 --> 00:31:54.172 그래서 유저들이 보는 화면에도 효과가 표현될 수 있게끔 563 00:31:54.172 --> 00:31:59.572 포스트 프로세싱 체크박스를 활성화해 주시면 됩니다 564 00:31:59.572 --> 00:32:03.922 이러한 포스트 프로세싱 효과를 마찬가지 맥락으로 565 00:32:03.922 --> 00:32:07.122 여기 보면 카메라에 Anti-aliasing 옵션이 566 00:32:07.122 --> 00:32:09.522 추가로 들어가 있는 걸 보실 수가 있는데요 567 00:32:09.522 --> 00:32:11.722 Anti-aliasing 같은 경우에도 568 00:32:11.722 --> 00:32:15.622 내가 화면을 어떻게 부드럽게 표현할 것인가를 569 00:32:15.622 --> 00:32:19.172 이렇게 확대해서 보면 현재 No Anti-aliasing 상태 570 00:32:19.172 --> 00:32:23.272 사실은 실제로는 아예 효과가 빠진 건 아니고요 571 00:32:23.272 --> 00:32:28.522 URP에서는 Project Settings - Graphics에서 572 00:32:28.522 --> 00:32:32.472 현재 적용되고 있는 URP의 퀄리티 세팅 573 00:32:32.472 --> 00:32:38.572 HighFidelity 여기에서 URP의 기본 세팅에서 보면 574 00:32:38.572 --> 00:32:43.022 기본적으로는 Multi Sampling Anti-Aliasing이라고 하는 게 575 00:32:43.022 --> 00:32:44.922 적용되어 있습니다 576 00:32:44.922 --> 00:32:49.022 이걸 Disable로 한번 해보면 Anti-aliasing이 전혀 없는 577 00:32:49.022 --> 00:32:53.621 이런 칼처럼 끊어져 있는 렌더링 결과물을 보실 수가 있는데 578 00:32:53.621 --> 00:32:58.171 이렇게 알고리즘 중에 하나라고 보시면 됩니다 멀티 샘플링 579 00:32:58.171 --> 00:33:00.571 이거 말고 카메라가 가지고 있는 580 00:33:00.571 --> 00:33:03.021 또 다른 종류의 Anti-aliasing을 581 00:33:03.021 --> 00:33:05.921 이렇게 적용해서 보는 방법도 있습니다 582 00:33:05.921 --> 00:33:09.321 그래서 이러한 Anti-aliasing 옵션 같은 경우에는 583 00:33:09.321 --> 00:33:13.171 여러분들이 굳이 중복해서 사용하실 필요는 없기 때문에 584 00:33:13.171 --> 00:33:16.671 기본 제공되는 멀티 샘플링을 사용하시거나 585 00:33:16.671 --> 00:33:19.071 혹은 메인 카메라에 붙어 있는 586 00:33:19.071 --> 00:33:21.821 추가적인 Anti-aliasing을 이용해서 587 00:33:21.821 --> 00:33:25.321 여러분이 눈으로 보기에 조금 더 매끄러운 형태나 588 00:33:25.321 --> 00:33:29.921 혹은 이런 퍼포먼스에 영향이 끼치는 정도를 파악해서 589 00:33:29.921 --> 00:33:31.471 사용하시는 것이 좋습니다 590 00:33:31.471 --> 00:33:36.321 이렇게 화면 전체에 렌더링 되는 결과물을 591 00:33:36.321 --> 00:33:39.321 제어할 수 있는 포스트 효과들이 있고요 592 00:33:39.321 --> 00:33:42.971 이거 말고 이미 렌더링이 다 끝난 화면에 593 00:33:42.971 --> 00:33:45.371 여러 가지 데이터들이 있습니다 사실은 594 00:33:45.371 --> 00:33:49.221 깊이 값이라든가 컬러 값, 위치값, 방향 값 595 00:33:49.221 --> 00:33:51.871 이런 여러 가지 정보들이 있는데 596 00:33:51.871 --> 00:33:53.921 이러한 정보들을 이용해서 597 00:33:53.921 --> 00:33:56.571 간단한 효과를 하나 만들어 보겠습니다 598 00:33:56.921 --> 00:34:00.221 일반적으로는 Core3D 환경상에서는 599 00:34:00.221 --> 00:34:04.971 패키지 매니저를 통해서 포스트 프로세스라는 패키지를 600 00:34:04.971 --> 00:34:07.221 임포트해서 써야 되는 반면에 601 00:34:07.221 --> 00:34:11.971 URP 같은 경우에는 URP 내에 기본 포스트 프로세싱이 602 00:34:11.971 --> 00:34:14.521 Volume을 통해서 생성하고 603 00:34:14.521 --> 00:34:16.921 관리할 수 있게끔 내장되어 있습니다 604 00:34:16.921 --> 00:34:19.971 하이어라키에서 Volume - Global Volume을 클릭해서 605 00:34:19.971 --> 00:34:22.321 맵 전체적으로 영향을 줄 수 있는 606 00:34:22.321 --> 00:34:25.021 포스트 프로세싱을 만들어 보겠습니다 607 00:34:25.021 --> 00:34:28.271 Volume 오브젝트가 만들어지면 New 버튼을 눌러서 608 00:34:28.271 --> 00:34:30.871 현재 비어있는 Profile을 채워줍니다 609 00:34:30.871 --> 00:34:34.971 그러고 나서 Add Override - Post Processing에서 610 00:34:34.971 --> 00:34:36.821 내가 원하는 효과를 611 00:34:36.821 --> 00:34:39.721 굉장히 많은데 이런 것들을 다 설명할 건 아니고 612 00:34:39.721 --> 00:34:42.621 대표적으로 많이 쓰이는 Bloom 같은 것들을 613 00:34:42.621 --> 00:34:44.021 한번 추가해 보겠습니다 614 00:34:44.021 --> 00:34:48.021 Intensity를 우선 1로 할 건데요 615 00:34:48.021 --> 00:34:52.721 이것을 강도를 1로 하게 되면 지금 보시는 것처럼 616 00:34:52.721 --> 00:34:56.171 Smoothness나 Metallic값이 굉장히 높은 오브젝트라면 617 00:34:56.171 --> 00:34:59.871 Intensity가 1만 된다고 하더라도 이렇게 반짝반짝이는 618 00:34:59.871 --> 00:35:03.471 굉장히 눈 아픈 상황들을 보실 수가 있는데 619 00:35:03.471 --> 00:35:06.871 이때는 Bloom만 만지실 게 아니고 620 00:35:06.871 --> 00:35:12.121 오브젝트가 가지고 있는 질감 자체를 약간씩 수정해서 621 00:35:12.121 --> 00:35:14.421 조금 더 여러분들이 편안하게 622 00:35:14.421 --> 00:35:17.471 반짝임이 덜한 상태로 표현할 수 있는 623 00:35:17.471 --> 00:35:20.621 다른 방법들도 강구하실 필요가 있습니다 624 00:35:20.621 --> 00:35:22.171 Bloom 같은 경우에는 625 00:35:22.171 --> 00:35:25.671 앞서 디졸브 효과를 만들 때도 보셨다시피 626 00:35:25.671 --> 00:35:29.071 기본적으로는 Emissive 값에 따라서 627 00:35:29.071 --> 00:35:34.221 Emissive의 컬러 값을 우리가 어떻게 하느냐 628 00:35:34.221 --> 00:35:36.921 단순히 색만 밝게 빛나는 게 아니라 629 00:35:36.921 --> 00:35:39.921 Intensity까지 같이 높아진다고 했을 때 630 00:35:39.921 --> 00:35:44.321 지금 보는 것처럼 밝게 빛나는 효과를 확인하실 수가 있죠 631 00:35:44.321 --> 00:35:46.571 이런 식으로 사용하는 것인데 632 00:35:46.571 --> 00:35:49.621 이것은 무조건 강하다고 좋은 건 아닙니다 633 00:35:49.621 --> 00:35:53.371 잠시 라이트 프로브는 설명에 좀 거슬리니까 꺼놓고요 634 00:35:53.371 --> 00:35:56.371 이런 효과 말고도 대표적으로 많이 쓰이는 것 중에 635 00:35:56.371 --> 00:35:59.221 이번에는 Depth Of Field라고 하는 636 00:35:59.221 --> 00:36:03.071 카메라 포커싱을 맞추는 기술에 대해서 637 00:36:03.071 --> 00:36:04.871 한번 실습해 보겠습니다 638 00:36:04.871 --> 00:36:08.871 우선 Global Volume에서 Bloom 바로 아래에 639 00:36:08.871 --> 00:36:11.021 Override 버튼을 클릭해서 640 00:36:11.021 --> 00:36:14.171 포스트 프로세싱에 Depth Of Field를 추가합니다 641 00:36:14.171 --> 00:36:18.621 여기에서 모드를 활성화해 주시면 Off였던 것을 642 00:36:18.621 --> 00:36:22.571 총 두 가지 Gaussian이나 Bokeh 형식으로 할 수가 있는데 643 00:36:22.571 --> 00:36:27.121 Gaussian 같은 경우는 굉장히 쉽게 사용할 수는 있습니다 644 00:36:27.121 --> 00:36:29.971 다만 이 효과는 카메라에서 645 00:36:29.971 --> 00:36:33.021 얼마나 대상이 또렷해 보이느냐를 646 00:36:33.021 --> 00:36:35.571 결정하는 효과이기 때문에 647 00:36:35.571 --> 00:36:38.171 지금과 같이 게임뷰 상에서 648 00:36:38.171 --> 00:36:41.071 여러분들이 약간의 효과가 적용된 것을 649 00:36:41.071 --> 00:36:43.821 이렇게 넣었다 빼보면 확인할 수는 있지만 650 00:36:43.821 --> 00:36:47.871 우리가 의도한 대로 나오는지는 정확하게 알 수가 없겠죠 651 00:36:47.871 --> 00:36:51.321 그래서 메인 카메라의 위치를 살짝 바꿔서 652 00:36:51.321 --> 00:36:54.921 지금 현재 제가 잠깐 기즈모를 끄고 보면 653 00:36:54.921 --> 00:36:57.821 이런 식으로 현재 플레이어가 654 00:36:57.821 --> 00:37:00.721 빨간색 건물과 일직선 상에 놓이게끔 655 00:37:00.721 --> 00:37:04.821 이 위치에다가 카메라를 빠르게 세팅해 볼 겁니다 656 00:37:04.821 --> 00:37:09.121 우선 씬 뷰의 화면을 이런 식으로 앵글을 잡아놓고요 657 00:37:09.121 --> 00:37:11.971 메인 카메라 그리고 GameObject 658 00:37:11.971 --> 00:37:15.071 Align With View 버튼을 클릭해 줍니다 659 00:37:15.071 --> 00:37:17.921 그러면 내가 선택한 게임 오브젝트가 660 00:37:17.921 --> 00:37:22.071 현재 씬 뷰에서 바라보는 그 위치와 그 각도 661 00:37:22.071 --> 00:37:24.021 그대로 세팅이 됩니다 662 00:37:24.621 --> 00:37:27.371 이렇게 게임뷰와 씬 뷰를 비교해 보면 663 00:37:27.371 --> 00:37:30.121 Depth Of Field가 적용되어 있기 때문에 664 00:37:30.121 --> 00:37:32.821 게임뷰는 배경이 좀 흐리게 보이죠 665 00:37:32.821 --> 00:37:35.421 여기에서 좀 세부적인 설정을 위해서 666 00:37:35.421 --> 00:37:39.471 Start와 End 부분을 활성화해 놓겠습니다 667 00:37:39.471 --> 00:37:43.971 Start와 End는 어느 부분부터 선명하게 보일 것인가 668 00:37:43.971 --> 00:37:48.221 그리고 어디 거리까지 선명하게 보일 것인가 669 00:37:48.221 --> 00:37:51.271 이 두 가지를 결정하는 파라미터인데요 670 00:37:51.271 --> 00:37:56.271 씬 뷰에서 잠깐 카메라를 이렇게 뷰만 옮기도록 하겠습니다 671 00:37:56.271 --> 00:37:59.171 메인 카메라를 옮기는 게 아니라 뷰만 옮길 건데 672 00:37:59.171 --> 00:38:01.271 여기에서 기즈모를 활성화해서 673 00:38:01.271 --> 00:38:03.921 카메라 위치와 비교를 해 보면 674 00:38:03.921 --> 00:38:07.121 현재 Depth Of Field의 Start 값은 10입니다 675 00:38:07.121 --> 00:38:12.271 그러면 카메라로부터 10m까지는 선명하게 보이게 됩니다 676 00:38:12.271 --> 00:38:16.471 반면에 여기서부터 서서히 흐려지게 되는 것이죠 677 00:38:16.471 --> 00:38:19.771 그래서 여러분들이 이 거리 값에 따라서 678 00:38:19.771 --> 00:38:23.371 얼마큼 또렷해 보이고 흐리게 보이느냐를 679 00:38:23.371 --> 00:38:26.771 이러한 파라미터 값을 이용해서 간단하게 680 00:38:26.771 --> 00:38:30.271 좀 더 멀어지면 30m만큼 또렷하고 681 00:38:30.271 --> 00:38:33.971 멀어지면 그만큼 먼 배경은 뿌옇게 되고 682 00:38:33.971 --> 00:38:35.471 이런 식으로 컨트롤하는 건데 683 00:38:35.471 --> 00:38:39.821 이거는 카메라에 대한 지식이나 이해 없이 쓸 수 있는 684 00:38:39.821 --> 00:38:41.721 굉장히 단순한 방법이고요 685 00:38:41.721 --> 00:38:44.471 여기서 Bokeh라고 하는 옵션은 686 00:38:44.471 --> 00:38:48.721 실제 카메라 작동 원리를 기준으로 하기 때문에 687 00:38:48.721 --> 00:38:53.871 보통 세 가지 Focus Distance, Focal Length, Aperture 688 00:38:53.871 --> 00:38:57.571 Aperture라고 하는 건 보통 카메라의 조리개라고 하는 689 00:38:57.571 --> 00:39:01.271 빛이 들어오는 광량을 조절하는 부품입니다 690 00:39:01.271 --> 00:39:04.071 그래서 만약에 Bokeh 형식으로 둔다면 691 00:39:04.071 --> 00:39:07.521 조금 특이한 효과를 우리가 만들어낼 수 있는데 692 00:39:07.521 --> 00:39:11.221 이전에 우리가 Reflection이나 이런 것들을 하면서 693 00:39:11.221 --> 00:39:14.271 지금 보시는 것처럼 이렇게 Reflection과 Metallic 694 00:39:14.271 --> 00:39:17.221 Smoothness가 너무 강하게 되면 695 00:39:17.221 --> 00:39:21.771 이런 식으로 빛이 동그랗게 번져 보이는 것이 있었죠 696 00:39:21.771 --> 00:39:24.971 여기에서 동그랗게 번져 보이는 이 효과 697 00:39:24.971 --> 00:39:28.821 이거를 Blade Count를 5로 세팅을 해두고 698 00:39:28.821 --> 00:39:31.221 거리를 조금 조절하겠습니다 699 00:39:31.221 --> 00:39:34.171 제가 의도적으로 화면에서 700 00:39:34.171 --> 00:39:37.071 Bokeh라는 현상을 설명하기 위해서 701 00:39:37.071 --> 00:39:41.021 약간 세팅 값을 실제로는 사용하지는 않겠지만 702 00:39:41.021 --> 00:39:43.921 굉장히 과도한 값으로 바꿔줬습니다 703 00:39:43.921 --> 00:39:45.871 이를테면 Focus Distance라든가 704 00:39:45.871 --> 00:39:47.821 Focal Length라든가 이런 것들을 바꿨는데 705 00:39:47.821 --> 00:39:50.571 일반적으로 Bokeh라고 하는 효과는 706 00:39:50.571 --> 00:39:54.171 지금 이렇게 하이라이트 되는 이 빛의 모양을 주목해 주세요 707 00:39:54.171 --> 00:39:57.921 Blade Count가 3이면 삼각형의 모양이고 708 00:39:57.921 --> 00:40:02.121 4면 사각형, 오각형, 육각형 이런 식으로 709 00:40:02.121 --> 00:40:05.571 빛에 맺어지는 동그란 모양이 아니라 710 00:40:05.571 --> 00:40:09.071 이런 식으로 실제 현실에 존재하는 카메라와 같이 711 00:40:09.071 --> 00:40:13.521 이런 식으로 빛이 맺히는 모양을 조절할 수가 있습니다 712 00:40:13.521 --> 00:40:17.971 이러한 빛이 맺히는 모양을 조절하는 필터 기능을 713 00:40:17.971 --> 00:40:20.371 흔히 Bokeh라고 얘기하는 거고요 714 00:40:20.371 --> 00:40:25.821 Depth Of Field에서는 보통 이렇게 상이 또렷하게 맺히는 715 00:40:25.821 --> 00:40:28.771 이런 대상에 대해서 컨트롤하는 것이기 때문에 716 00:40:28.771 --> 00:40:31.621 조금 더 현실적인 수치를 보여드리자면 717 00:40:31.621 --> 00:40:33.821 우선 잠깐 Stats를 끄고 718 00:40:33.821 --> 00:40:37.421 여기 선명해 보이는 것을 잘 기억해 두세요 719 00:40:37.421 --> 00:40:41.671 이렇게 제가 현재 카메라 위치를 기준으로 해서 720 00:40:41.671 --> 00:40:44.421 5unit 앞에다가 Distance 값을 놨습니다 721 00:40:44.421 --> 00:40:46.771 이 얘기는 현재 카메라가 있으면 722 00:40:46.771 --> 00:40:51.821 여기서 5unit 거리만큼인 여기에 초점을 맞추겠다 723 00:40:51.821 --> 00:40:55.021 카메라의 초점을 선명하게 맞추겠다는 뜻이 되고 724 00:40:55.021 --> 00:40:59.021 그다음에 Focal Length라는 거리 값을 기준으로 해서 725 00:40:59.021 --> 00:41:01.371 이 값이 작아지면 작아질수록 726 00:41:01.371 --> 00:41:04.871 점점 선명해지는 구간이 늘어나게 됩니다 727 00:41:04.871 --> 00:41:10.071 이렇게 보이듯이 Bokeh 효과도 자연스럽게 사라지게 되죠 728 00:41:10.071 --> 00:41:12.771 그래서 Focal Length에 따라서 729 00:41:12.771 --> 00:41:15.720 선명해지는 구간을 끝까지 채운다면 730 00:41:15.720 --> 00:41:18.620 아주 좁은 영역만 선명할 텐데 731 00:41:18.620 --> 00:41:21.920 역으로 Focal Length가 좁아진다면 이런 식으로 732 00:41:21.920 --> 00:41:27.020 그래서 초점을 맞출 오브젝트의 거리를 기준으로 해서 733 00:41:27.020 --> 00:41:31.170 앞뒤로 범위를 결정하는 게 Focal Length입니다 734 00:41:31.170 --> 00:41:34.320 그리고 효과가 얼마나 강하게 들어갈지 735 00:41:34.320 --> 00:41:37.270 그 정도를 조절하는 게 Aperture고요 736 00:41:37.270 --> 00:41:40.070 조금 더 자연스럽게 한다면 이런 식으로 737 00:41:40.070 --> 00:41:43.220 사람의 경우에도 우리가 항상 바라봐야 되는 위치에 738 00:41:43.220 --> 00:41:45.970 딱 초점을 선명하게 유지를 하죠 739 00:41:45.970 --> 00:41:49.220 이것이 유니티에서 기본 제공하는 효과들이고요 740 00:41:49.220 --> 00:41:52.620 그 외에 나머지들은 애셋스토어를 통해서 741 00:41:52.620 --> 00:41:55.120 기능을 확장시킬 수도 있습니다 742 00:41:55.870 --> 00:41:59.020 오브젝트의 경계를 보면 지금 이렇게 그림자가 743 00:41:59.020 --> 00:42:01.320 어두워진 것들을 볼 수가 있는데 744 00:42:01.320 --> 00:42:03.870 여기에 어울리는 효과 중에는 745 00:42:03.870 --> 00:42:06.970 Ambient Occlusion이라고 하는 효과가 있습니다 746 00:42:06.970 --> 00:42:11.670 기존의 Core3D에서는 포스트 프로세싱에서 관리했던 반면에 747 00:42:11.670 --> 00:42:16.470 URP에서는 Project Settings - Graphics에서 748 00:42:16.470 --> 00:42:20.470 현재 적용되고 있는 URP의 퀄리티 세팅 749 00:42:20.470 --> 00:42:24.870 HighFidelity 여기에서 Renderer List에 있는 750 00:42:24.870 --> 00:42:26.270 이것을 클릭해 보시면 751 00:42:26.270 --> 00:42:30.820 Screen Space Ambient Occlusion이라고 이미 적용되고 있죠 752 00:42:30.820 --> 00:42:35.570 이것을 꺼보시면 이 경계의 어두운 면에 대한 처리가 753 00:42:35.570 --> 00:42:38.220 현재 조금 약하게 보이게 될 텐데 754 00:42:38.220 --> 00:42:42.320 이걸 다시 켜보면 이렇게 어두워졌다 밝아졌다 하죠 755 00:42:42.320 --> 00:42:44.770 Ambient Occlusion이라는 얘기는 756 00:42:44.770 --> 00:42:47.370 Ambient, 환경에 대해서 757 00:42:47.370 --> 00:42:50.570 Occlusion, 차폐가 되어 있다는 뜻인데 758 00:42:50.570 --> 00:42:54.520 한마디로 넓게 펼쳐진 면 같은 경우에는 759 00:42:54.520 --> 00:42:58.220 어느 방향에서든 빛이 들이칠 수 있겠죠 760 00:42:58.220 --> 00:43:00.770 반면에 이렇게 꺾인 면이 있다면 761 00:43:00.770 --> 00:43:03.370 반대쪽에서 오는 빛은 못 받을 거고요 762 00:43:03.370 --> 00:43:06.570 빛을 받을 수 있는 영역이 한정되어 있겠죠 763 00:43:06.570 --> 00:43:09.770 이러한 빛을 받을 수 있고 없고에 대해서 764 00:43:09.770 --> 00:43:11.570 시각적으로 표현한 겁니다 765 00:43:11.570 --> 00:43:16.520 그래서 이러한 것들은 기존의 Core3D와 달리 766 00:43:16.520 --> 00:43:20.520 관리하는 주체가 일부 이렇게 바뀌어 있다는 점을 767 00:43:20.520 --> 00:43:24.120 여러분들이 체크하실 필요가 있습니다 768 00:43:24.120 --> 00:43:27.470 모든 기능에 대해서 설명해 드리지 못한 것은 아쉽지만 769 00:43:27.470 --> 00:43:32.370 여러분들이 이 강의 앞단에서의 최적화 뒷단에서의 포스트 770 00:43:32.370 --> 00:43:35.320 이 두 가지를 두고 혼동하실 것 같아서 771 00:43:35.320 --> 00:43:37.320 정리하는 차원에서 말씀드리면 772 00:43:37.320 --> 00:43:40.020 결국에는 최적화와 포스트 773 00:43:40.020 --> 00:43:45.470 포스트 이외에 그래픽 리소스와 관련되어 있는 작업들은 774 00:43:45.470 --> 00:43:48.770 서로 상호 보완적이라고 보시면 됩니다 775 00:43:48.770 --> 00:43:51.370 퀄리티를 높게 표현을 했다가 776 00:43:51.370 --> 00:43:54.520 그러면 당연히 최적화가 떨어지겠죠 777 00:43:54.520 --> 00:43:57.920 그러면 그것을 기술로 약간만 높이면서 778 00:43:57.920 --> 00:44:00.620 덜 떨어뜨리는 식으로 간다든가 하는 779 00:44:00.620 --> 00:44:05.470 이런 전반적인 작업에서 잘 맞춰서 780 00:44:05.470 --> 00:44:07.920 설정하실 필요가 있습니다 781 00:44:08.620 --> 00:44:12.520 이번 단원에는 라이트 매핑과 포스트 프로세스의 782 00:44:12.520 --> 00:44:14.870 활용 방법에 대하여 알아봤습니다 783 00:44:14.870 --> 00:44:19.320 라이트 매핑과 연계된 리플렉션 프로브, 라이트 프로브 등 784 00:44:19.320 --> 00:44:21.920 그래픽 최적화를 위한 기능과 함께 785 00:44:21.920 --> 00:44:26.270 리얼타임 엔진에서 그래픽 리소스를 제어하였습니다 786 00:44:26.270 --> 00:44:28.720 포스트 프로세스 등 다양한 기능은 787 00:44:28.720 --> 00:44:31.520 후처리에서 리소스를 잡아먹지만 788 00:44:31.520 --> 00:44:34.170 이러한 효과들이 유저들로 하여금 789 00:44:34.170 --> 00:44:36.620 몰입감을 높이는 효과도 있습니다 790 00:44:36.620 --> 00:44:39.720 단순히 아끼기만 하는 방식이 아닌 791 00:44:39.720 --> 00:44:42.020 효율적인 비주얼 표현을 위한 792 00:44:42.020 --> 00:44:44.220 밸런스를 맞추는 것이 중요합니다 793 00:44:44.520 --> 00:44:49.420 이상으로 라이트맵과 포스트 프로세스에 대한 강의를 마치겠습니다 794 00:44:49.420 --> 00:44:49.920 라이트 매핑(Light Mapping) 795 00:44:49.920 --> 00:44:50.420 오브젝트가 빛을 받았을 때의 정보를 텍스처로 미리 저장하는 형태 796 00:44:50.420 --> 00:44:50.920 Static 오브젝트를 대상으로 라이트에 대한 계산을 미리 하여 컴퓨터 계산의 부담을 감소시킴 797 00:44:50.920 --> 00:44:51.420 라이트 세팅 Window - Rendering - Lighting 선택 798 00:44:51.420 --> 00:44:51.920 Lighting Setting Asset 항목의 New 버튼을 클릭해 새로 생성 후 모드를 Subtractive로 변경 799 00:44:51.920 --> 00:44:52.420 Direct Samples: 16, Indirect Samples: 256 800 00:44:52.420 --> 00:44:52.920 Environment Samples: 128, Lightmap Resolution: 12로 설정 801 00:44:52.920 --> 00:44:53.470 Directional Light의 모드를 Mixed로 변경 후 저장하고 Generate Lighting 버튼 클릭 802 00:44:53.470 --> 00:44:53.970 그래픽 최적화 기법 803 00:44:53.970 --> 00:44:54.470 라이트 프로브 : Dynamic 오브젝트가 Static 오브젝트와 같은 빛을 받는 것처럼 보이게 하는 오브젝트 804 00:44:54.470 --> 00:44:54.970 하이어라키창에서 Light - Point Light 선택 후 라이트 모드를 Baked로 변경 805 00:44:54.970 --> 00:44:55.470 하이어라키창에서 Light - Light Probe Group 선택 후 월드 영점으로 위치 806 00:44:55.470 --> 00:44:55.970 Edit Light Probe Positions 버튼 클릭 시 각각의 Probe를 선택하여 위치를 변경할 수 있음 807 00:44:55.970 --> 00:44:56.470 필요한 영역만큼 프로브를 드래그하고 Ctrl + C, V를 이용해 확장함 808 00:44:56.470 --> 00:44:56.970 Window - Rendering - Lighting 선택 후 Generate Lighting 버튼 클릭 809 00:44:56.970 --> 00:44:57.470 라이트 비활성화 시에도 프로브가 라이트 정보를 가지고 있어 Dynamic 오브젝트에게 라이팅 효과가 전달됨 810 00:44:57.470 --> 00:44:58.120 리플렉션 프로브 : Dynamic 오브젝트가 Static 오브젝트와 같은 빛을 받는 것처럼 보이게 하는 오브젝트 811 00:44:58.120 --> 00:44:58.820 하이어라키창에서 Light - Reflection Probe를 선택하여 추가 812 00:44:58.820 --> 00:44:59.470 Bake 버튼을 클릭해 주변 환경 이미지 캡처 후 Surface Inputs의 Smoothness 수치를 높임 813 00:44:59.470 --> 00:45:00.120 리플렉션 프로브를 3D 오브젝트 주변에 두면 주변 환경을 반사하는 효과를 나타냄 814 00:45:00.120 --> 00:45:00.820 실시간 화면이 아닌 리플렉션 프로브가 가진 이미지로 반사 효과를 줌 815 00:45:00.820 --> 00:45:01.470 라이트 프로브, 리플렉션 프로브의 활용으로 콘텐츠 작동 시 하드웨어의 부담을 줄일 수 있음 816 00:45:01.470 --> 00:45:02.120 포스트 프로세싱 렌더링이 완료된 화면에 적용하는 추가적인 이미지 효과 처리 817 00:45:02.120 --> 00:45:02.820 메인카메라 오브젝트에서 Rendering의 Post Processing에 체크해 활성화시킴 818 00:45:02.820 --> 00:45:03.470 URP는 Volume을 통해 관리되도록 포스트 프로세싱이 내장되어 있음 819 00:45:03.470 --> 00:45:04.120 블룸 효과 네온사인과 같이 빛이 자연스럽게 번지는 효과 820 00:45:04.120 --> 00:45:04.820 하이어라키에서 Volume - Global Volume 선택 후 인스펙터창 Profile의 New 버튼 클릭 821 00:45:04.820 --> 00:45:05.470 Add Override 버튼 클릭 후 Bloom 효과 선택 822 00:45:05.470 --> 00:45:05.970 Depth Of Field 카메라 포커싱 기술을 사용하는 후처리 효과 823 00:45:05.970 --> 00:45:06.470 Global Volume 인스펙터창의 Add Override 버튼 클릭 후 Depth Of Field 효과 선택 824 00:45:06.470 --> 00:45:06.970 모드 활성화 후 Gaussian 모드 선택 825 00:45:06.970 --> 00:45:07.470 하이어라키창의 메인카메라 선택 후 메뉴바의 GameObject - Align With View 선택 826 00:45:07.470 --> 00:45:07.970 Depth Of Field의 Start와 End 항목 값을 설정하고 활성화함 827 00:45:07.970 --> 00:45:08.470 Bokeh 모드 프로퍼티 828 00:45:08.470 --> 00:45:08.970 Blade Count: 사용하는 블레이드 수가 많을수록 Bokeh가 더 둥글게 나타남 829 00:45:08.970 --> 00:45:09.470 Focus Distance: 카메라에서 초점까지 거리를 설정함 830 00:45:09.470 --> 00:45:09.970 Focal Length: 초점을 맞출 오브젝트와 카메라 렌즈 간의 거리를 기준으로 범위를 설정함 831 00:45:09.970 --> 00:45:10.470 Aperture: 효과의 강도를 조절함 832 00:45:10.470 --> 00:45:10.970 엠비언트 오클루전(Ambient Occlusion) 오브젝트가 겹쳐진 경계 부분을 어둡게 만드는 효과 833 00:45:10.970 --> 00:45:11.470 URP에서는 Screen Space Ambient Occlusion이 기본적으로 적용되어 있음