Laya 성능 최적화 선택 콘텐츠 편집

첫 번째는 LayaAir 엔진 에 내장된 성능 통계 도구인 성능 통계 도구 입니다. 코드에 Laya.Stat.show();를 추가합니다.

엔진 내장 성능 통계 도구

이 도구를 연 후 이를 사용하여 성능을 관찰할 수 있으며, FPS가 높을수록 좋고, 다른 값은 낮을수록 좋습니다. 여기서 DrawCall 개수에 특히 주의하세요. 이는 중요한 최적화 지표이므로 100 이하로 조절해 보세요.

두 번째는 LayaAir 엔진과 함께 제공되는 디버깅 도구인 DebugPanel 디버깅 도구입니다. DIV 디버깅 창과 유사하며 페이지의 각 하위 요소를 검토할 수 있습니다. 요소 속성을 보고 수정하고 다시 그리기를 확인하여 영역에서는 프로젝트의 최적화 및 개발을 촉진할 수 있습니다. 스테이지를 초기화한 후 DebugPanel.init()를 통해 엽니다. (구체적인 사용법은 Layabox 공식 웹사이트 문서의 자세한 지침을 참조하세요.)

DebugPanel 디버깅 도구

세 번째는 Chrome 성능 분석기입니다. Chrome은 H5 게임에 일반적으로 사용되는 개발 및 디버깅 환경입니다. 성능 분석기 프로필은 게임 개발자에게 가장 중요한 최적화 도구 중 하나이며 일반적으로 메모리 및 CPU 사용량을 분석하고 확인하는 데 사용됩니다. 타겟 최적화를 수행합니다. (Layabox 공식 웹사이트 문서에 자세한 지침이 있습니다)

Chrome 성능 분석기 프로필

최적화: DrawCall 감소

1. 크로스 렌더링을 피하세요

DrawCall을 줄이려면 먼저 기본 렌더링 원리를 이해해야 합니다. 인접하고 동일한 아틀라스는 렌더링 중에 자동으로 병합되므로 DrawCall이 줄어듭니다. 따라서 아틀라스에 있는 그림의 렌더링 순서가 서로 옆에 있도록 주의해야 하며, 크로스 렌더링인 경우 DrawCall이 증가합니다.

그렇다면 사진의 렌더링 순서를 변경하는 방법은 무엇입니까? LayaAirIDE의 UI 편집기에는 실제로 UI 인터페이스의 최적화 기능이 포함되어 있으며, UI 편집기의 계층 관리자를 열면 각 이미지 리소스의 계층 관계를 직관적으로 볼 수 있습니다. 그리고 다양한 색상의 점으로 구분됩니다. 동일한 색상의 도트가 교차로 인해 방해를 받으면 DrawCall의 개수가 늘어나게 되므로 동일한 색상의 도트의 리소스가 순서대로 배열되도록 계층적 관계를 조정해야 합니다.

LayaAirIDE의 UI 편집기를 통해 DrawCall 최적화

또한 제출 일괄 처리 수를 줄이기 위해 동일한 패널의 모든 리소스가 하나의 아틀라스를 사용하도록 하세요.

2. 3D 자료 재사용

3D 게임의 DrawCall 개수는 주로 소재의 영향을 받으며, 같은 화면에 소재가 많을수록 DrawCall 개수도 많아집니다. 따라서 가능한 한 소재를 재사용하도록 노력하세요. LayaAir 엔진은 재사용된 소재를 병합하고 최적화하므로 DrawCall 횟수가 상대적으로 줄어듭니다.

3. 일반적으로 사용되는 모델의 면 수를 제어합니다.

LayaAir 엔진은 특수 효과, 총알 등 20개 미만의 얼굴이 포함된 동일한 모델을 자동으로 동적으로 병합합니다. 따라서 아트 리소스를 만들 때 아트에 대한 요구 사항을 제시하고 반복적으로 사용되는 모델의 면 수를 조절해야 합니다.

4. 정적 장면의 최적화 방법

동일한 재질이 포함된 정적 장면의 경우 LayaAir 엔진은 DrawCall 수를 크게 줄일 수 있는 정적 병합 방법인 StaticBatchManager.combine()을 제공합니다.

최적화: 스프라이트 감소

1. 계층적 중첩을 줄입니다.

불필요한 중첩 수준을 최소화하면 스프라이트 수를 줄일 수 있습니다.

2. 보이지 않는 부분의 처리

보이지 않는 영역에 있는 개체는 표시 목록에서 최대한 제거하거나 개체를 visible = false로 설정해야 합니다. 설정하지 않으면 모든 표시 객체 노드가 순회됩니다. 개체 수가 많으면 성능이 저하됩니다.

3. 캐시As 속성을 설정합니다.

대량의 정적 콘텐츠나 자주 변경되지 않는 콘텐츠(예: 버튼)가 포함된 컨테이너의 경우 전체 컨테이너에 대해 캐시As 속성을 설정할 수 있으며, 이를 통해 Sprite 수를 크게 줄이고 성능을 크게 향상시킬 수 있습니다. 동적 콘텐츠가 있는 경우 정적 콘텐츠만 캐시되도록 정적 콘텐츠와 분리하는 것이 가장 좋습니다.

4. 3D 모델 수량 제어

3D 게임의 성능 최적화는 프로그램의 작업일 뿐만 아니라 예술 작품에 대한 엄격한 제작 기준도 필요합니다. 예를 들어 아트 리소스를 만들 때 효과 및 기능 요구 사항에 영향을 주지 않고 모델 수를 줄이기 위해 모델을 병합하면 스프라이트 수를 줄이고 엔진 렌더링 중 노드 탐색 시간을 줄일 수 있습니다.

5. 카메라 자르기 최적화

대규모 3D 장면의 경우, 모델에 얼굴과 소재가 많지만 먼 부분은 거의 보이지 않는 경우가 있는데, 이 경우 카메라 크롭 기능을 이용하면 멀리서 잘 보이지 않는 모델과 소재를 렌더링할 수 있습니다. 장면 안개 효과는 예술적 효과에 영향을 미치지 않지만 Sprite 및 DrawCall의 수를 줄일 수 있습니다.

최적화: CPU 소비 감소

크롬 성능 분석기를 통해 CPU 소모량을 확인할 수 있는데, 이를 줄이는 방법에 대해서도 많은 손님들이 언급해 주셨습니다. 여기에서는 대천사 마스터 Cheng Chen Ce가 공유한 최적화 경험을 정리하는 데 중점을 둡니다.

1. 별 길 찾기 호출을 줄입니다.

A-star 길 찾기는 게임에서 흔히 사용되지만, 경우에 따라 다른 방법을 사용하여 문제를 해결할 수도 있으므로 A-star 길 찾기를 사용하지 마십시오. 먼저 비교해 보겠습니다.

일반적으로 대각선 지점 A에서 지점 B까지 5*12 그리드 영역에 있다고 가정합니다. A-star 알고리즘을 사용하면 위 그림의 파란색 그리드 부분과 같이 많은 영역을 계산해야 합니다.

길이와 너비의 각 점을 움직일 수 있는지 여부만 판단하면 직선으로 갈 수 있는지 판단할 수 있습니다. 아래 사진의 파란색 그리드가 계산이 필요한 면적인데, 비교해 보면 확실히 A별에 비해 많이 적습니다.

따라서 두 점을 직선으로 이동할 수 있는지 판단하고, 그렇다면 CPU 작업을 줄일 수 있는 A별 길 찾기를 사용하지 마십시오.

2. 각 프레임에서 계산을 수행합니다.

일반적으로 대기 모드에서 진행되는 대부분의 전투에서는 클라이언트가 계산을 수행해야 합니다. 작업이 끝나면 서버에서 확인을 하게 됩니다. 예를 들어 몬스터와 싸우려면 적중 여부, 치명타 여부, 무적 여부 등 많은 속성 계산이 필요합니다. 하지만 대부분의 게임에서는 몬스터가 하나씩 나와서 싸우지는 않지만, 몬스터가 여러 마리 나오는 경우가 많습니다. 특히 하나의 게임 플레이에는 점점 더 많은 몬스터가 등장합니다. 몬스터 수가 100마리에 도달하면 실패로 간주됩니다. 공격할 때마다 몬스터의 상태를 100번 계산해야 한다면 더 많은 성능을 소모하게 됩니다.

그렇다면 소비를 줄이려면 어떻게 해야 할까요? 모든 대상(몬스터)을 목록에 넣고 게임 플레이에 따라 각 프레임에서 다른 수의 몬스터를 꺼냅니다. 예를 들어 몬스터가 많지 않으면 1~2마리를 취하고, 몬스터가 많으면 10마리를 취하고 나머지 몬스터는 다음 프레임에서 계산한다. 물론 표시 효과는 지연되지만 데미지나 기타 수치가 떠다니는 효과 등은 동시에 나타나지 않기 때문에 더욱 자연스러워 보일 것입니다. 가장 중요한 것은 CPU 소비가 감소한다는 것입니다.

3. 서버 측 푸시 데이터로 인한 컴퓨팅 능력

예를 들어, 클라이언트는 서버로부터 많은 양의 정보를 수신한 후 데이터를 구문 분석하여 해당 모듈의 컨트롤러에 통보한 다음 데이터 레이어를 업데이트하고 인터페이스 표시를 새로 고칩니다. 인터페이스에는 다양한 표시 객체 및 기타 작업을 추가하거나 삭제할 수 있으며, 서버가 데이터를 푸시할 때마다 많은 작업이 발생하면 일회성 작업이 중단됩니다.

LayaAir에는 이 프레임의 프레임 헤더부터 현재까지 얼마나 많은 시간이 경과했는지 확인하는 방법이 있으며, 경과된 시간이 프레임의 정상 시간에 도달하면 서버 측에서 데이터 처리를 시작합니다. 계산 시간이 줄어들지는 않지만, 막히는 현상은 없습니다.

4. 복잡한 인터페이스를 단계별로 처리

게임에는 배낭과 같은 복잡한 인터페이스가 많이 있으며, 배낭에 데이터가 많을 때 처음 열면 많은 수의 하위 개체가 생성됩니다. 이 때 인터페이스가 눌릴 수 있습니다. 서버 데이터 처리와 마찬가지로 각 프레임의 시간에 따라 단계적으로 처리됩니다. 이런 식으로 배낭을 열면 인터페이스의 하위 요소가 하나씩 나타나는 것을 느낄 수 있으며 지연이 없습니다 .

5. 개체 풀의 활용

객체가 생성될 때마다 CPU가 소모되므로 객체 풀을 사용하면 대량의 객체 생성을 피할 수 있습니다. 몬스터, 총알 등 사용할 때마다 풀에 물체를 넣어두었다가 몬스터가 죽어서 더 이상 필요하지 않으면 풀에 넣어둘 수 있으며, 다음 번에 사용할 때 풀에 넣을 수 있습니다. 풀에서 직접 가져옵니다. 개체 풀이 존재하지 않는 경우에만 생성해야 합니다.

다만, 오브젝트 풀은 부담 없이 사용할 수 있다는 점에 유의해야 하며 일반적으로 몬스터, 몬스터를 죽인 후 경험치 볼, 몬스터를 죽여서 떨어뜨린 소품, 스킬 효과, 떠다니는 캐릭터, 지도 등 자주 재사용 및 재활용되는 개체에 사용됩니다. 청킹 등등.

6. 스킬 특수효과 및 플로팅 캐릭터 수 제한

플로팅 캐릭터 및 특수 효과의 개수를 제한하지 않으면 해당 효과가 전혀 보이지 않을 뿐만 아니라 CPU 소모도 많이 발생하기 쉬우므로 스킬 특수 효과 및 특수 효과의 생성 및 표시 개수를 제한합니다. 부동 문자도 CPU 소비를 최적화하기 위한 전략 중 하나입니다.

최적화: 메모리 사용량 감소

메모리는 게임에서도 매우 중요한 최적화 지표입니다. 일반적으로 휴대폰 게임의 경우 남은 용량이 많지 않으며, 특히 메모리에 대한 제어가 엄격한 iOS 시스템의 경우 메모리 사용량이 너무 많으면 게임이 중단될 수 있습니다. . 이것은 모든 손님이 언급할 최적화의 초점이기도 합니다. 메모리 사용량 확인 방법은 여기서는 소개하지 않으며, Layabox 공식 홈페이지 문서에서 확인하실 수 있습니다. 여기서는 게스트가 공유한 최적화 포인트를 정리하는 데 중점을 둡니다.

1. 자원 공개

개체 풀을 사용하면 CPU를 최적화할 수 있을 뿐만 아니라 개체 생성 시 메모리 소비도 줄일 수 있습니다. 따라서 2D 프로젝트이든 3D 프로젝트이든 자주 재사용되는 객체에 대해 객체 풀을 적절하게 사용해야 합니다.

사용하지 않는 리소스를 해제해야 합니다. 하지만 한동안 사용해야 한다면 쉽게 풀어주지 마세요. 릴리스 후 다시 로드하면 성능도 소모되기 때문입니다. 따라서 다양한 자원과 전략에 따라 상충관계가 있습니다.

예를 들어 플레이어가 UI 리소스를 열면 일정 시간 내에 다시 열리지 않습니다. 그런 다음 해당 UI 리소스가 다른 곳에서 사용되지 않는지 확인하고, 그렇지 않은 경우 제거할 수 있습니다.

UI에 애니메이션이 있는 경우 UI 인터페이스가 닫히면 다른 인터페이스에서는 이 애니메이션을 사용하지 않으므로 이 애니메이션을 즉시 삭제할 수 있습니다.

캐릭터, 스킬 애니메이션, 사운드 등은 모두 UI와 동일하며, 일정 기간 내에 다시 사용하지 않을 경우 다른 곳에서 사용되는지 확인하실 수 있으며, 사용되지 않는 경우 즉시 삭제하실 수 있습니다.

게임 내에서 맵을 전환해야 하는 경우 맵에 드롭된 소품을 즉시 삭제할 수 있습니다.

destroy() 메소드를 사용하여 표시 객체의 메모리를 지울 수 있다는 점에 유의해야 합니다. 이 메서드는 실제로 메모리에서 해당 리소스를 해제하고 null로 설정하지만 표시 개체에서 사용하는 리소스를 지우지는 않습니다.

리소스를 해제하는 방법에는 세 가지가 있습니다. 즉, 수동 해제 방법인clearRes() 및clearTextureRes()와 ResourceManager에서 autoRelease=true를 설정하여 자동 해제를 수행하는 것입니다.

프로젝트 규모가 큰 경우 자동 해제 기능을 사용하지 않는 것이 좋습니다. 이 함수는 메모리 제한을 초과한 경우에만 리소스를 해제하기 때문입니다. 그리고 자동으로 해제된 후에도 해제된 자원을 다른 곳에서 계속 사용하는 경우에는 해제되는 동안 계속 사용할 수 있습니다. 화면 깜박임이 발생합니다.

수동 릴리즈 방법 중 ClearTextureRes() 메소드 사용을 권장합니다. 이는 LayaAir 1.7.12 최신 버전의 새로운 방식입니다.

이전의clearRes()와 비교하여,clearTextureRes()메소드는 텍스처가 사용하는 이미지 리소스만 파괴하고 텍스처 리소스 쉘은 유지합니다.다음 렌더링 시 텍스처가 사용하는 이미지 리소스가 파괴되지 않는 것으로 확인되면 존재하는 경우 이미지 리소스가 자동으로 복원되어 표시됩니다. ClearRes는 더 이상 사용할 수 없도록 텍스처를 완전히 파괴합니다. 또한,clearTextureRes()는 파괴 실패에 대한 걱정 없이 이미지 리소스가 즉시 파괴되도록 보장할 수 있습니다. ClearRes()는 참조 카운팅을 사용하여 리소스를 파기합니다. 다른 곳에 리소스 참조가 있으면 리소스를 파기할 수 없습니다.

팁: 큰 이미지 컬렉션인 경우에는clearRes()나clearTextureRes()를 모두 삭제할 수 없습니다. 리소스를 수동으로 관리하려면 대용량 사진 자동 수집 기능을 끄거나 대용량 사진 수집 규칙을 변경하면 됩니다.

3D 리소스를 해제해야 하는 경우 수동으로만 관리하고 despose() 메서드를 사용하여 비디오 메모리에서 리소스를 제거할 수 있습니다. 리소스가 너무 많이 쌓이고 해제되지 않으면 크래시가 발생할 수 있으므로 개발자는 사용하지 않는 리소스를 수시로 제거하는 습관을 들이는 것이 필요합니다.

2. 앨범 제작 규칙

예를 들어, 위 그림의 버튼은 원래 138*305로 설계되었습니다. 왜냐하면 비디오 메모리가 자동으로 너비와 높이를 2의 정수 거듭제곱으로 채우기 때문입니다. 그래서 비디오 메모리에서는 256*512가 됩니다. 비례 스케일링을 수행하고 크기를 116*256으로 변경하면 비디오 메모리에는 128*256만 남게 됩니다. 메모리가 원래 크기의 1/4로 줄어듭니다.

3. 표시 영역에 없는 개체는 로드되지 않습니다.

일반적으로 RPG류 게임에서는 전체 맵이 상대적으로 크기 때문에 올인으로 로드하면 메모리를 더 많이 차지하게 되는데 이때 표시 영역에 없는 객체는 로드되지 않습니다. 메모리가 절약됩니다.

4. 시각적 초점에 맞지 않는 경우 적절하게 줄일 수 있습니다.

게임 플레이어의 시각적 초점 각도는 일반적으로 주인공에게 초점이 맞춰져 있으며, 시각적 초점 영역에 있지 않은 사용자의 경우 그림의 실제 크기가 비례하여 줄어들어 게임 내에서 100% 크기로 복원될 수 있습니다. 이 방법을 사용하면 메모리 사용량도 줄일 수 있습니다. 구체적인 감소 비율에 대해 대천사 쳉첸세(Cheng Chen Ce)는 몬스터, 무기, 날개는 67%, 스킬은 25% 또는 50%로 조정할 수 있다고 제안했습니다.

지능형 최적화

위의 수동 최적화 방법 외에도 LayaAir 엔진은 버전 2.0에서 지능형 최적화를 시작합니다. 주요 기능은 다수의 CacheAs 정적 캐시 최적화를 엔진의 수동 최적화에서 자동 최적화로 변환하는 것입니다.

가장 큰 이점은 개발자의 최적화 임계값을 크게 줄여준다는 점이며, 스마트 최적화를 켜거나 끄려면 속성만 설정하면 됩니다. 지능형 최적화를 활성화한 후 최적화 작업 부하를 최소 10일 단축할 수 있습니다. 그리고 한 번에 찾기 어려운 많은 최적화 포인트를 성공적으로 최적화할 수 있습니다. 최적화 효과 측면에서 프로젝트마다 다르며 FPS 증가는 2배 이상입니다.

재판

추천

출처blog.csdn.net/weixin_42565127/article/details/133987205