Graphics(2)-그래픽 최적화 기법

simple_coding·2024년 4월 22일
0
post-thumbnail

그래픽 최적화 체크

Batches(드로우콜) 값 최소화시키기

프레임디버거를 사용하면 실행 중인 게임을 특정 프레임에서 중지하고 해당 프레임을 렌더링하는 데 사용되는 개별 드로우 콜 을 볼 수 있다. 디버거는 드로우 콜의 리스트를 제공하고, 하나씩 단계별로 볼 수 있도록 하여 씬이 그래픽 요소에서 어떻게 구성되는지 자세하게 볼 수 있다.

Window - analysis - profiler
play했을 때 리소스가 사용되는 세부내용 을 확인할 수 있다.

정적 배칭

고정된 위치에 존재할 오브젝트는 부모의 자식으로 묶어두었을 때 정점셰이더의 계산을 줄일 수 있다.

이때, 움직이지 않을 오브젝트들은 Static을 체크하여 Play시에도 고정되도록 한다.

머티리얼

Public Render render;

void Start()
{
	render.material.color = Color.red; 
    //머티리얼의 복사본을 만들어 단일 적용, Play 종료 시 원본으로 복구
	render.sharedMaterial.color = Color.red; 
    //머티리얼의 원본을 변경하여 전체 오브젝트에 적용, Play 종료시 변경사항 유지
}

render.material.color = Color.red; 를 사용할수록 머티리얼이 생성되어 배치콜이 증가한다.

Public Render render;
Public Material nomalMat;
Public Material highLighyMat;

void Start()
{
	render.material = nomalMat; 
	render.material = highLighyMat; 
}

이런식으로 변경할 색상의 머티리얼을 미리 생성하여 사용하는게 최적화에 도움이 된다.

라이트매핑

라이트매핑은 씬의 표면 밝기를 미리 계산하고 계산 결과를 나중에 사용하기 위해 차트 또는 “라이트맵”에 저장하는 프로세스이다.

Mixed: Static인 오브젝트에 광원을 그려넣고 Static이 아닌 오브젝트에는 Realtime을 계속 적용한다.
Baked: Static인 오브젝트에 광원을 그려넣는 기능만 사용하므로 Bake 이후 Light 오브젝트를 비활성화해도 무관하다.


Window - Rendering - Lighting

*결과

라이트 프로브(Light Probes)

Static인 큐브를 Bake했을 때 그려진 그림자에 다른 오브젝트가 진입해도 음영이 발생하지 않는다.


Ctrl+D 로 원점 복사
빛의 변화가 큰 곳을 지정하여 Bake
*결과

반사 프로브 (Reflection Probe)

범위를 지정하여 Bake

반사가 잘되도록 머티리얼을 조정하여 적용

*결과

오큘루전 컬링(Occlusion Culling)

카메라에 담기지 않는 Static오브젝트의 머티리얼을 비활성화 한다.

Window - Occlusion

*결과

Level of Detail

카메라와의 거리에 따라 디테일 조절
LOD 컴포넌트를 추가하고 거리에 따라 변경할 모델을 각각 참조(프레임드랍 없다면 None → Cross Fade)

*결과

카메라 Clipping Planes

카메라 시야범위 제한

+Fog를 사용하여 시야범위 제한을 자연스럽게 연출

profile
기록하는 것이 기억된다.

0개의 댓글