카메라 뷰 밖에있는 게임 오브젝트는 Unity에서 컴퓨터 / 모바일 리소스를 사용합니까?


11

통일하여, 내 카메라에는 보이지 않는 게임 오브젝트가 있고 게임이 실행되는 동안 렌더링되지 않는다고 가정 해 봅시다.

게임이 실행될 때이 게임 오브젝트가 컴퓨터 / 모바일 리소스를 소비합니까?

이와 같은 사용법에 대한 세부 정보는 어디서 찾을 수 있습니까?

답변:


13

원하는 것은 Unity에있는 메모리 프로파일 러입니다. 여기 : http://docs.unity3d.com/Manual/ProfilerMemory.html

그러나 게임 오브젝트가 카메라에 보이지 않으면 그려지지 않고 더 적은 리소스를 사용하지만 여전히 일부를 소비해야합니다. gameObject는 모든 텍스처, 모델 스크립트 등 메모리에 여전히 존재합니다. 또한 Update 및 FixedUpdate 메소드 (및 여기에 설명 된 다양한 기타 )를 통해 CPU 시간을 소비 합니다.

그러나 일반적으로 주요 둔화는 도면이며, 소량의 CPU 시간이 사용되어 객체가 카메라 절두체 (경계) 밖에 있음을 확인하지만 도면이 작성되지 않습니다.


5

Frustrum Culling 또는 숨겨진 표면 제거에 대해서도 알아야한다고 생각합니다. http://en.wikipedia.org/wiki/Hidden_surface_determination

주어진 프레임에서 오브젝트가 절두체 내부에 있지 않더라도 (즉, 보이는) 일부 드로우 콜 (쉐이더)이 여전히 실행되어 성능이 저하되기 때문에 이것은 게임 최적화의 중요한 부분입니다.


2
@ Gissipi_453,이 라인을 따라 연구하면서, 쿼드 및 옥트 트리 (공간 데이터 정렬)도 연구
Jon

3

짧은 대답은 "예"입니다. 게임에서 사용할 준비가 된 것은 메모리를 차지하는 것입니다.

고려해야 할 또 다른 사항은 프레임 속도에 따른 비용입니다.

5 개의 개별 텍스처로 5 개의 오브젝트를 별도로 그리면 상태 변경이 필요합니다. 사용되지 않은 텍스처를 언로드하여 메모리를 절약 할 수 있습니다.

모든 개별 텍스처를 단일 아틀라스 텍스처에로드하면 메모리 공간이 고정되어 더 이상 개별 텍스처를 언로드 할 수 없습니다. 일단 생성되면 모든 객체를 그리려면 아틀라스를 한 번만 바인딩하면됩니다.

또 다른 예는 간단한 정점 및 인덱스 버퍼입니다. 많은 포인트가 자주 표시되거나 보이지 않는 상태로 전환되는 경우 정점 버퍼에 "stale"포인트를두고 새 인덱스 버퍼 만 업로드하는 것이 더 빠릅니다.

증가 된 사전 메모리 비용이 많은 상태 변경보다 선호되는 경우가 많습니다.

카메라를 회전해도 모르는 경우가 아니면 해당 오브젝트를 완전히 파괴하지 않습니다. 해당 오브젝트를 확인하기 위해 카메라가 다시 회전하지는 않습니다. "– Katu

예를 들어 사이드 스크롤러를 사용하여 오른쪽으로 만 이동할 수있는 경우 (맵만 왼쪽으로 스크롤) 화면 왼쪽에서 스크롤되는 객체는 다시 사용하지 않으므로 영구적으로 언로드 할 수 있습니다. 또한 객체가 오른쪽에서 화면으로 스크롤되기 직전에 객체에 대한 컨텐츠를로드 할 수 있습니다.


1

많은 답변이 주로 질문의 그래픽 측면을 고려하고 있습니다.

사실 그들은 다양한 리소스를 사용하고 객체를 그리는 데 비해 얼마나 비싸다는 것이 고정되어 있지 않습니다. 구성 요소가 드로잉보다 더 많은 비용을 들여 작업을 수행한다는 암묵적인 답변만큼 드문 일이 아니지만 사용하는 리소스 수를 최소화 할 수 있습니다. 또한 GameObject는 적은 양의 메모리를 차지하므로 구성 요소도 마찬가지입니다. 구성 요소는 상당한 메모리를 차지하는 작업을 수행 할 수도 있습니다.

오프 스크린 구성 요소의 영향을 최소화하는 가장 간단한 방법은 OnBecameVisibleOnBecameInvisible 콜백을 기반으로하는 시스템 입니다.

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

물론 오프 스크린 오브젝트가 게임에 영향을 미치기를 원할 때가 많기 때문에 유용성이 매우 제한적입니다. 그러나 가장 비싼 계산의 영향을 최소화 할 수있는 세분화 된 시스템을 위해 이러한 종류의 패턴을 확장 할 수 있습니다. 객체가 화면 밖일 때 스크립트를 따르는 경로의 품질과 같은 것을 줄이는 것만으로도 장기적으로 크게 절약 할 수 있습니다.


1

메모리를 유지하고 위치 및 기타 속성을 업데이트하십시오.

그러나 컴퓨터 / 모바일 그래픽 리소스는 보이지 않기 때문에 소비하지 않습니다.

그렇습니다. 메모리 리소스는 소비하지만 눈에 보이는 Game Object와 같은 그래픽 리소스는 소비하지 않습니다.


고마워 이것은 내가 찾던 매우 직접적인 대답입니다.
Gissipi_453

0

프로그램에있는 모든 것은 자원을 소비합니다. 당신은 프로그램이 단순히 희망과 꿈에서 실행된다고 생각하지 않습니까?

문제는 게임 오브젝트가 소비 않습니다 얼마나 많은 자원을해야하고,이를 위해 나는이 꽤 고체 대답은 생각 : http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consumer.html

요컨대, 그들은 무시할만한 자원을 스스로 소비합니다. 그러나 왜 게임에 아무것도하지 않고 많은 게임 오브젝트를 원하십니까? 하루가 끝날 무렵, 실제로 게임 오브젝트를 '수행'하게 만드는 것은 어떤 종류의 오버 헤드를 유발할 것이며, 필요한 자원이 사례별로 매우 많은 것입니다.


대단히 감사합니다. 게임이 실행되는 동안 카메라에서 보이지 않는 물체를 제거해야합니까?
Gissipi_453

1
나는이 답변이 실제로 귀하의 질문에 전혀 대답하려고하지는 않으므로 명백한 잘못이라고 생각합니다. 카메라를 회전시키는 경우, 알지 않는 한 해당 객체를 완전히 파괴하지는 않습니다. 해당 카메라는 해당 객체를 확인하기 위해 다시 회전하지 않습니다. 게임 세계가 존재하고 AI의 움직임, 조명은 환경을 보지 못하더라도 환경에 영향을 미칩니다.
Katu

@Katu, 그것은 또한 요점입니다. 감사. 오브젝트를 전혀 렌더링 할 필요가없는 한,이를 파괴해서는 안됩니다.
Gissipi_453

@Katu 나는 그 질문에 대답했다. "게임이 실행 중일 때이 게임 오브젝트 (카메라에서 보이지 않는 내 오브젝트)가 컴퓨터 / 모바일 리소스를 소비하고 있습니까?" 그 대답은 "예. 프로그램에있는 모든 것은 자원을 소비합니다"입니다. 그리고 장면에서 빈 게임 오브젝트의 영향과 리소스 비용에 대해 설명했습니다.
반환

2
@ Gissipi_453 질문에 대답하려면, 씬의 게임 오브젝트가 실제로하는 일, 생성 / 삭제 빈도 및 기타 고려 사항에 전적으로 달려 있습니다. 최적화시기를 아는 것은 그 자체의 기술이지만, 경험에 대한 걱정은 걱정할 것이있을 때까지 걱정하지 않는 것입니다. 추가 게임 오브젝트의 오버 헤드는 거의 없기 때문에 걱정하지 마십시오. 경우에 따라 개체를 자주 추가 / 제거하는 경우 개체 풀링이 생명을 구하는 데 도움이되고 다른 경우에는 다른 방법을 사용할 수 있습니다. 그것은 모두 존재하고 문제가 무엇인지에 달려 있습니다.
true를 반환
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.