렌더링
글 16개
노멀 매핑이 못 하는 것
법선만 바꾸고 모양은 그대로 두는 거래에는 대가가 따릅니다. 실루엣, 그림자, 시차 셋을 못 하고 스치는 각도에서 무너집니다.
노멀맵은 왜 파란가
방향 벡터를 색 채널에 욱여넣으면 그 밋밋한 하늘색이 나옵니다. 그리고 그 방향이 기준으로 삼는 축이 탄젠트 공간입니다.
평평한 면을 울퉁불퉁하게 보이게 하는 법
밝기를 정하는 게 모양이 아니라 법선이라면, 모양은 그대로 두고 법선만 자리마다 바꾸면 됩니다. 그 법선을 담아 둔 텍스처가 노멀맵입니다.
법선 하나가 밝기를 정한다
셰이더는 면이 진짜 어떻게 생겼는지 모릅니다. 각 자리의 법선이 어느 쪽을 보는지만 알고, 밝기는 거기서 나옵니다.
불 꺼진 방에서도 보이는 것
네온사인은 빛을 받아서 밝은 게 아닙니다. 조명 계산에 참여하지 않고 그냥 더해지는 항이 Emissive 입니다.
호수에 비친 태양은 내가 걸어가면 따라온다
네 항 중 유일하게 보는 방향이 들어가는 항입니다. Diffuse 와 Specular 를 가르는 것이 그 시선 의존성 하나입니다.
손전등을 비스듬히 비추면 어두워지는 이유
같은 빛이 넓게 퍼지면 단위 면적이 받는 양이 줄어듭니다. 그 각도를 내적 한 번으로 구하는 것이 Diffuse 입니다.
그늘이 완전히 검지 않은 이유
빛이 안 닿는 자리도 새까맣지는 않습니다. 그 간접광을 다 계산하는 대신 상수를 하나 깔아 두는 것이 Ambient 입니다.
5,330만 삼각형이 118 드로우 콜로 접힌다
최적화가 잘 되면 프로파일에서 시뮬레이션이 사라집니다. 그리고 병목이 렌더로 옮겨갑니다. Entities Graphics 와 GPU Resident Drawer 는 같은 뿌리입니다.
빌드 다섯 시간과 셰이더 0.5GB 는 같은 원인이다
셰이더 변형은 키워드 축의 곱으로 늘어납니다. 너무 많으면 빌드가 안 끝나고, 너무 적으면 화면이 조용히 깨집니다.
부드러움을 메모리로 살 것인가 연산으로 살 것인가
스프라이트 애니메이션은 메모리를 쓰고 스켈레탈은 CPU 를 씁니다. 캐릭터마다 다르게 고르는 게 답이고, 스켈레탈은 Burst 만 깔아도 달라집니다.
한 줄로 배터리를 절반 쓰는 방법
targetFrameRate 를 30 으로 내리면 프레임 예산이 두 배가 됩니다. 최적화 코드를 짜기 전에 이 한 줄을 먼저 재 봐야 하는 이유.
해상도를 낮춘다는 게 정확히 무엇을 낮추는 것인가
Render Scale 은 기기 해상도를 바꾸지 않습니다. 게임을 그려 넣는 캔버스의 크기를 바꿉니다. UI 는 안 따라 내려갑니다.
안 보이는 픽셀을 몇 번 칠하고 있나
2D 는 반투명이 겹겹이 쌓이는 구조라 같은 픽셀을 네다섯 번 칠합니다. 드로우 콜을 아무리 줄여도 이건 안 줄어듭니다.
2D 라이트는 배칭과 필레이트를 같이 낸다
2D 라이팅은 스프라이트를 그리기 전에 라이트 버퍼를 따로 렌더링합니다. 그래서 라이트 하나가 CPU 와 GPU 양쪽에 값을 매깁니다.
드로우 콜을 줄였는데 느려졌다면
드로우 콜과 SetPass Call 은 다른 것을 셉니다. 드로우 콜이 524 에서 765 로 늘었는데 오히려 빨라진 실측이 있습니다.