최근에 최적화 관련돼서 누군가 Streaming Mipmaps이 효과가 있을 거라는 이야기가 있어서 이 기능이 정확히 무엇을 하는지 다시 알아봤습니다.

예전 Generate Mipmaps과 도무지 무슨 기술적인 차이인지 영어원문을 보고 해석을 하는데 도무지 이해가 안 되더군요.

(해석이 잘 안 되었던 거 같습니다.) 적당한 예도 잘 찾지 못했습니다. 시간이 상당히 흘러서인지 이번에는 좀 더 명확하게 내용을 이해할 수 있었습니다.

 

Generate Mipmaps은 우리가 흔히 아는 멀리 있으면 텍스쳐를 작게 만들어, 눈에 피로도를 줄이는 역할을 합니다.

시각적인 품질을 높이는 중요한 역할을 한다고 할 수 있습니다. 그래서 원본 텍스쳐부터 작아진 텍스쳐까지 단계별로 메모리에 저장되어 있기 때문에 다소 메모리를 차지합니다. 텍스쳐 작아지면 렌더링 될 때 전체를 그리지 않기 때문에 렌더링에 잇점이 발생할 수 있습니다.

 

Streaming Mipmaps은 Generate Mipmaps과는 좀 다릅니다. 이 기능은 지역과 지역을 이동하는데 수많은 오브젝트가 있을 때 여기에 있는 텍스쳐들을 동적으로 불러오는 역할을 합니다.  즉, A 지역에서 B지역으로 이동 시에 A지역에 있던 텍스쳐는 더 이상 렌더링 되지 않기 때문에 삭제해 버리고, B지역의 텍스쳐를 실시간으로 로딩하는 겁니다. 카메라 거리에 따라 텍스처 해상도를 결정하고, 실행 중 필요 없는 해상도의 텍스처를 메모리에서 제거하기 때문에 GPU 리소스를 절약합니다.

그래서, 경우에 따라서는 메모리에 불러오는 과정에서 텍스쳐 품질 변동이나 로딩 지연이 발생 할 수 있다고 합니다.

(한마디로 적절한 프로젝트에 적절하게 써야 한다는 거죠.)

 

하여, Streaming Mipmaps은 엄청 큰 오픈월드가 아닌 경우 크게 효과를 보지 못할 수 있다는 게... 제가 내린 결론입니다.

 

저희 게임은 오픈형이 아니라 화면이 거의 고정형이라 크게 의미가 없는거 같더군요.(테스트 때도 유의미한 수치를 확인하지 못했습니다.)

추후에 큰 월드를 테스트할 기회가 있다면, 그때 직접 테스트 해봐야 얼마만큼 이득이 있는지를 알 수 있을거 같습니다.

 

 

 

 

 

 

'업무일지' 카테고리의 다른 글

업무일지 <젠킨스 svn에러>  (0) 2023.08.03
업무일지 <Vulkan>  (0) 2023.08.02
업무일지 <Hair>  (0) 2023.07.25
업무일지 <메모리누수>  (0) 2023.07.04
업무일지 <테스트공지>  (0) 2023.07.03

해외 모델팀에서 머리카락을 자연스럽지 못하다는 의견이 있어 R&D를 요청이 있었습니다.

모델링을 안한지 3년이 넘어서 버벅거리지만 대략적으로 한번 만들어봤습니다.

(저도 이렇게 한가닥 한가닥이 보이는 헤어는 해본 적이 없던 터라 좀 헤매긴 했습니다.)

막상 해보니 특별한 기술은 없는 거 같고, 작업자의 세심함이 필요한 거라 생각이 드는군요.

테스트를 앞두고 메모리 누수 문제가 발생하는 거 같다고 합니다.

이럴 때는 그래픽을 의심하는 경우가 많아서 적극적으로 원인을 같이 찾아봐야 합니다.

메모리 프로파일러(Memory Profiler)는 이럴 때 참 유용한 도구입니다.

같은 환경에서 게임을 실행시키고 메모리 프로파일러로 캡처를 우선합니다.

그리고, 게임을 계속 진행한 후에 다시 캡쳐를 추가하였습니다.

메모리에 문제가 있긴 합니다 Heap 메모리가 자꾸 늘어나는 걸 볼 수 있습니다.

Graphics는 약간에 변화가 있지만 그렇게 큰 영향은 없습니다. 아트 쪽 문제는 아니니 이걸 처리하는 것은 클라이언트 쪽이니 클라 쪽에서 해결해야 합니다.

 

그리고 범인은.. DontDestroyOnLoad였습니다. DontDestroyOnLoad는 항상 들고 있어야 할 데이터를 지우지 않고 처리하는 놈인데, 이 놈이 계속 뭔가를 호출하면서 쌓고 있습니다.

저야 클라가 아니므로 잘은 모르겠고, 클라쪽에 이야기를 해주니 뭔가 해법이 있는듯합니다.

잘 마무리가 되어야 할 건데...

https://www.bilibili.com/video/BV1dm4y1a7VW/?vd_source=ef601ff2b48ff3ffbb5c6c47b5a47daf 

 

《全民街篮》7.7热身测试 正式开赛_游戏资讯

1490 0 2023-06-30 11:00:00 未经作者授权,禁止转载

www.bilibili.com

공개 테스트 날짜가 정해졌네요.

 

배경에 셋팅할것이 너무 많고 무엇이 빠졌는지 모를 경우가 많아서 이를 보안할 검수 툴을 만들었습니다.

뭔가 빠지면 경고창과 함께 추가하라고 나옵니다.

 

 

'업무일지' 카테고리의 다른 글

업무일지 <Hair>  (0) 2023.07.25
업무일지 <메모리누수>  (0) 2023.07.04
업무일지 <자꾸 사라지는 메모리 프로파일>  (0) 2023.06.29
업무일지 <svn clean up>  (0) 2023.06.19
업무일지 <시스템 관리자>  (0) 2023.06.14

유니티 버전 2021.3.5f1는 알 수는 없지만, 설치된 memoryprofiler가 자꾸 사라집니다.

한참 작업하다... 어느날 보면 사라져 있습니다.

오늘도 사라졌군요. 아무래도 정식으로 들어간 버전이 아닌 실험 버전이라 그런 듯합니다.

(하지만, 유니티 개발 문서에는 2021.1 이후는 괜찮을 거라고... 거짓말쟁이...)

 

그래서 패키지 매니저에 들어가서 com.unity.memoryprofiler라고 주소를 치고 다시 다운로드 하려고하니 유니티 메뉴에 다시 활성화가 됩니다...

설치했지만... 설치안한듯.. 하지만 다시 나타나는... 매번 당황시키는군요... 하여간 버그는...

https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.0/manual/index.html

 

Memory Profiler | Memory Profiler | 1.0.0

Memory Profiler The Memory Profiler is a tool you can use to inspect the memory usage of your Unity application and the Unity Editor. The package adds a Memory Profiler window to the Unity Editor, which you can use to capture, inspect, and compare Snapshot

docs.unity3d.com

 

오늘은 종일 배경 최적화를 위한 기술적인 툴과 팁을 작성중에 있습니다.

'업무일지' 카테고리의 다른 글

업무일지 <메모리누수>  (0) 2023.07.04
업무일지 <테스트공지>  (0) 2023.07.03
업무일지 <svn clean up>  (0) 2023.06.19
업무일지 <시스템 관리자>  (0) 2023.06.14
업무일지 <배경추가>  (0) 2023.06.09

출근해 보니 주말내내 젠킨스 빌드가 실패가 되어있습니다.

알고보니... 빌드PC의 디스크가 꽉차서 빌드가 실패...

빌드PC에는 아무것도 없는데.... 왜 200기가가 가득 찼는지 알수가 없더군요.

 

svn 폴더를 보니... 20기가도 안될 용량이 100기가가 넘네요...ㅎ

svn을 계속 커밋만 하다보니 svn 히든 파일에 계속 누적이 되고 있었나 봅니다.

svn clean up을 실행하니, 용량이 100기가 20기가로 변경되는군요...

 

종종 svn clean up 작업을 해줘야겠네요.

'업무일지' 카테고리의 다른 글

업무일지 <테스트공지>  (0) 2023.07.03
업무일지 <자꾸 사라지는 메모리 프로파일>  (0) 2023.06.29
업무일지 <시스템 관리자>  (0) 2023.06.14
업무일지 <배경추가>  (0) 2023.06.09
업무일지 <Shader Changer>  (0) 2023.05.25

 

 

디아블로4를 팀원이 플레이중인데 GPU 3D가 0%가량 나오는게 신기하여 왜 이러지 하고 찾아봤습니다.

저희것은 3D항목이 53%정도 나오는데, 디아4는 왜 그럴까? 엄청나게 최적화를 잘한것일까??

알아본 결과, 자체엔진으로 개발된 게임은 저부분이 제대로 표시되지 않는것을 확인했습니다.

윈도우 시스템관리자도 전적으로 신뢰하면 안될거 같군요.

아래 설정을 하면 자체엔진 경우도 어느정도 표시가 되는걸 확인했습니다.

 

 

'업무일지' 카테고리의 다른 글

업무일지 <자꾸 사라지는 메모리 프로파일>  (0) 2023.06.29
업무일지 <svn clean up>  (0) 2023.06.19
업무일지 <배경추가>  (0) 2023.06.09
업무일지 <Shader Changer>  (0) 2023.05.25
업무일지 <HDRP CustomLight>  (0) 2023.05.23

OutGame 팀으로 부터 배경을 전달받아서 게임에 적용할 수 있도록 구성하였습니다.

게임에 쓸 수 있도록 여러 가지 세팅을 해줘야 하는데, 기존 배경에서 대충 설정을 가져와서 만든 거라 구성이 엉망이었네요.

제대로 된 구성이 아니다 보니, 버그가 있는데 찾는데 시간을 꽤 소요했습니다.

어떤 기능은 들어가 있고, 어떤 기능은 빠져있어서 처음부터 다시 세팅한다는 마음로 하나씩 뜯어서 다시 재설정하는 작업을 며칠간 진행했습니다.

 

'업무일지' 카테고리의 다른 글

업무일지 <svn clean up>  (0) 2023.06.19
업무일지 <시스템 관리자>  (0) 2023.06.14
업무일지 <Shader Changer>  (0) 2023.05.25
업무일지 <HDRP CustomLight>  (0) 2023.05.23
업무일지 <Frame>  (0) 2023.05.22

Test를 하기 위해서 게임중에서 Shader를 변형시키는 스크립트를 하나 만들었습니다.

셰이더가 프레임 영향에 엄청 준다는것을 다시한번 느끼게 하는 테스트 였습니다.

 

 

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShaderChangeAll : MonoBehaviour
{
    private bool isLow = false;

    void Update()
    {
        // F9 키가 눌려진 경우
        if (Input.GetKeyDown(KeyCode.F9))
        {
            if (isLow)
            {
                // 셰이더를 "BG/BG_Lit"로 변경합니다.
                ChangeShader("BG/BG_Lit_Low", "BG/BG_Lit");
                ChangeShader("BG/BG_GPU_instance_Low", "BG/BG_GPU_instance");
                ChangeShader("/BG/BG_Crowd_Low", "BG/BG_Crowd");

                isLow = false;
            }
            else
            {
                // 셰이더를 "BG/BG_Lit_LOW"로 변경합니다.
                ChangeShader("BG/BG_Lit", "BG/BG_Lit_Low");
                ChangeShader("BG/BG_GPU_instance", "BG/BG_GPU_instance_Low");
                ChangeShader("BG/BG_Crowd", "BG/BG_Crowd_Low");


                isLow = true;
            }
        }
    }

    void ChangeShader(string originalShader, string newShaderName)
    {
        Shader newShader = Shader.Find(newShaderName);

        // 모든 렌더러를 찾습니다.
        Renderer[] renderers = FindObjectsOfType<Renderer>();
        foreach (var renderer in renderers)
        {
            // Layer를 체크하여 변경하지 않을 오브젝트를 건너뛰기
            if (renderer.gameObject.layer == LayerMask.NameToLayer("BgSet"))
                continue;

            // 각각의 재질에 대해 셰이더를 변경합니다.
            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
            {
                Material material = renderer.sharedMaterials[i];

                // 현재 셰이더가 원래 셰이더인지 확인합니다.
                if (material.shader.name == originalShader)
                {
                    // 새 셰이더를 적용합니다.
                    material.shader = newShader;
                }
            }
        }
    }




}

'업무일지' 카테고리의 다른 글

업무일지 <시스템 관리자>  (0) 2023.06.14
업무일지 <배경추가>  (0) 2023.06.09
업무일지 <HDRP CustomLight>  (0) 2023.05.23
업무일지 <Frame>  (0) 2023.05.22
업무일지 <연출 작업>  (0) 2023.05.18

HDRP에서 가벼운 셰이더를 제작중입니다.

저사양 컴을 위해서 CustomLight를 만들어서 셰이더를 가볍게 만들 생각입니다.

URP는 CustomLight를 만드는 자료가 많이 있는데, HDRP는 찾을수가 없었습니다.

어찌어찌 찾고 찾아서... 방법을 알아 낸거 같군요.

 

URP

#ifdef SHADERGRAPH_PREVIEW
Direction = float3(1, 1, 1);
#else
Light light = GetMainLight();
Direction = light.direction;
#endif

 

HDRP 

#ifdef SHADERGRAPH_PREVIEW
Direction = float3(1, 1, 1);
#else
DirectionalLightData lightData = _DirectionalLightDatas[0];
Direction = -lightData.forward;
#endif

'업무일지' 카테고리의 다른 글

업무일지 <배경추가>  (0) 2023.06.09
업무일지 <Shader Changer>  (0) 2023.05.25
업무일지 <Frame>  (0) 2023.05.22
업무일지 <연출 작업>  (0) 2023.05.18
업무일지 <Unlit Shader>  (0) 2023.05.16