애니메이션 팀에서 최종 파일을 관리하는데, 다양한 작업들이 산적해있습니다.

애니메이터들의 주 업무와 크게 관련이 없는 다양한 컴포넌트 추가 작업들이 필요한데, 이것이 애니메이터들이 일상적으로 수행하는 작업이 아니라 보니, 종종 실수로 놓치는 경우가 있습니다.

(초반에는 제가 직접 처리하고 있었습니다. 헌데, 애니메이션 팀의 업무 효율을 위해 이 업무를 위임 하였는데, 놓치는 부분이 생기는군요.)

이 문제를 해결하기 위해 유니티 에디터에 추가 기능을 만들었습니다.

프리팹을 선택한 후 버튼을 클릭하면 필요한 컴포넌트가 자동으로 추가되도록 설정했습니다.

이 새로운 기능으로 앞으로는 이와 관련된 에러 발생이 크게 줄어들 것으로 기대하고 있습니다.

 

 

디아블로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

휴가를 갔다 와보니 outgame 팀에서 Quality 세팅을 수정을 했군요.

퀄리티가 너무 낮게 보였나 봅니다. (그게 목적인데....)

유니티에는 Quality에 따라 meshes의 bone에 영향력을 설정할 수 있습니다.

vertex 하나가 bone 몇개에 영향을 받는가에 대한 설정인데, 일반적으로 캐릭터 스킨 작업할 때 2개 이상의 bone에 영향을 받게 설계가 됩니다.

예전에 스킨 작업할때는 vetex당 bone을 3개 이상 쓰지 않도록 작업자에게 가이드했었지만, 요즘엔 그렇지는 않죠.

그래서 모바일에서는 2개에서 4개 정도로 설정하는 경우가 많은 걸로 알고 있습니다.

근데, 요즘엔 스펙이 좋아졌으므로 웬만하면 권장사양은 Unlimited로 해도 무방하지 않을까 싶습니다.

참고로 유니티는 퀄리티에 따라 텍스쳐 사이즈도 줄이는 기능도 있습니다.(메모리 절약에 도움이 됩니다.)

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

현재 게임이 60프레임 고정이다보니, 어느정도 프레임이 잘 나오는지, 낙폭이 어느정도인지 60프레임 고정시 정확히 알수가 없어서 프레임 고정을 해제하는 키를 게임에 살짝 넣었습니다.

 

더보기
using UnityEngine;

public class FrameRateController : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyDown(KeyCode.F))
        {
            if (Application.targetFrameRate == 60)
            {
                SetFrameRate(500, 0);
            }
            else
            {
                SetFrameRate(60, 1);
            }
        }
    }

    private void SetFrameRate(int target, int vSync)
    {
        QualitySettings.vSyncCount = vSync;
        Application.targetFrameRate = target;
    }
}

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

업무일지 <Shader Changer>  (0) 2023.05.25
업무일지 <HDRP CustomLight>  (0) 2023.05.23
업무일지 <연출 작업>  (0) 2023.05.18
업무일지 <Unlit Shader>  (0) 2023.05.16
업무일지 <메모리 사용량>  (0) 2023.05.12

캐릭터 입장씬에 대한 연출작업을 진행하고 있습니다.

초반에 설계가 아예 없던 내용이고 이미 정해져 있는 구조에서 끼워 넣으려니 뭔가 애매한 부분이 있습니다.

원하는 효과는 햇살과 페이인 아웃인데, 유니티 시네머신으로 만드는 것이 아니다 보니, 시간에 따라 코드로 효과를 빼고 넣는 연출을 넣었습니다.

처음에는 프로그램 팀에 부탁하려고 했는데, 이 순서대로 만드는 것을 일일이 설명하기 쉽지 않기 때문에 AI님과 작성하였습니다.

 

더보기
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using System.Collections;

public class ToggleLightVolumetrics : MonoBehaviour
{
    public Light directionalLight;
    private HDAdditionalLightData hdLightData;
    public float duration = 4.0f;
    public Volume volume;
    private Fog fog;

    void Start()
    {
        hdLightData = directionalLight.GetComponent<HDAdditionalLightData>();

        if (!volume.profile.TryGet(out fog))
        {
            Debug.LogError("Fog Component is missing");
        }
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F9))
        {
            hdLightData.affectsVolumetric = !hdLightData.affectsVolumetric;

            if (hdLightData.affectsVolumetric)
            {
                Debug.Log("Starting IncreaseVolumetricMultiplier Coroutine");
                StartCoroutine(IncreaseVolumetricMultiplier());
                fog.active = true;
            }
        }
    }

    IEnumerator IncreaseVolumetricMultiplier()
    {
        float startTime = Time.time;
        while (Time.time - startTime < duration)
        {
            float t = (Time.time - startTime) / duration;
            hdLightData.volumetricDimmer = Mathf.Lerp(0, 16, t);
            yield return null;
        }
        hdLightData.affectsVolumetric = false;
        fog.active = false;
        Debug.Log("Finished IncreaseVolumetricMultiplier Coroutine");
    }
}

 

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

업무일지 <HDRP CustomLight>  (0) 2023.05.23
업무일지 <Frame>  (0) 2023.05.22
업무일지 <Unlit Shader>  (0) 2023.05.16
업무일지 <메모리 사용량>  (0) 2023.05.12
업무일지 <분리작업>  (0) 2023.05.02

언제인가부터 저사양 컴에서 게임 포퍼먼스가 떨어지고 있습니다.
하여, 이를 보완할 방법을 찾고 있습니다.
Texture를 절반으로 줄인다든지 해서 메모리 사이즈를 늘려보았지만, 역시 간단하게 해결될 상황이 아닙니다.
최후의 방법으로 사용하려고 했던 방법인데, 아무래도 그 방법을 써야 할거 같군요.
가능하면 HDRP의 Shader기능을 최대한 활용해서 개발하고 싶었으나, 물리기반 Shader가 무겁기 때문에 이를 가벼운 Unlit Shader로 스위칭 할 방법을 써야 겠습니다.
 
대략적인 모든 오브젝트를 Unilt Shader로 변경하고 테스트한 결과 역시나... 60프레임으로 안정적으로 돌아갑니다.
Vsync를 끄니깐 100프레임도 나오는군요. 역시나 안정적입니다.
 
문제는 이걸 적용하려면 모든 오브젝트를 스위칭 해줘야하는 작업을 해줘야하고,
unlit 기반으로도 퀄리티가 어느정도 만족되게 만들어야한다는 숙제가 생깁니다.

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

업무일지 <Frame>  (0) 2023.05.22
업무일지 <연출 작업>  (0) 2023.05.18
업무일지 <메모리 사용량>  (0) 2023.05.12
업무일지 <분리작업>  (0) 2023.05.02
업무일지 <StreamingAssets>  (0) 2023.04.26

게임내 어떠한것들이 메모리를 많이 차지하고 있는지 알아보고 있습니다.

메모리상에서 거의 비어있는 스테이지와 차이는 약 500메가 군요.

 

오디오에서 왜이렇게 많이 차지하는지...

유니티로 비교하면 수치 변화 폭이 너무커서 빌드된 버전을 유니티 메모리 프로파일에 연결해서 스냅하였습니다.

 

메모리 프로파일로 빌드된 버전을 스냅하는 방법

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

업무일지 <연출 작업>  (0) 2023.05.18
업무일지 <Unlit Shader>  (0) 2023.05.16
업무일지 <분리작업>  (0) 2023.05.02
업무일지 <StreamingAssets>  (0) 2023.04.26
업무일지 <연출 툴 개선>  (0) 2023.04.21

애니메이션 연출툴 관련하여 외부에서 확인할 수 있는 빌드된 버전을 개발하는데 많은 시간과 인력과 노력이 필요해서 방법을 바꾸기로 했습니다.
그래서 새 프로젝트를 생성하고 애니메이션툴을 분리하여 외부에서 작업할 수 있도록 관리하기로 하였습니다.
중요한 포인트는 핵심 코드를 외부유출하지 않도록하는것인데, 혼자서 해결하려고 했지만, 너무도 많은 코드가 서로 걸쳐 있고 핵심 코드가 뭔지 알수가 없더군요.(코딩 초짜라)
우선 분리 작업만 하고 프로그램팀과 같이 공개되면 안 되는 소스를 제거해달라고 했네요.
거의 다 작업이 된듯합니다.
 

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

업무일지 <Unlit Shader>  (0) 2023.05.16
업무일지 <메모리 사용량>  (0) 2023.05.12
업무일지 <StreamingAssets>  (0) 2023.04.26
업무일지 <연출 툴 개선>  (0) 2023.04.21
업무일지 <헤어를 깔끔하게 만드는 방법>  (0) 2023.04.19

'AI' 카테고리의 다른 글

회사 프로젝트 : 원화  (0) 2024.06.10
Leonardo.Ai  (0) 2023.05.19
여자 히어로 (stable-diffusion-webui)  (0) 2023.04.13
여자모델 (stable-diffusion-webui)  (0) 2023.04.05
AutoHotkey와 ChatGPT  (0) 2023.03.14

외부에서 게임의 리소스를 수정해서 사용하고 싶다고 하여, 유니티에서 사용되는 전용툴을 빌드해서 사용할 수 있게 하자는 의견이 있어서 이걸 작업 중입니다.
그냥 유니티에서 사용하면되는데, 복잡한 보안적인 사안이네요...
제 능력밖의 일 같기는 한데... 삽질하고 있습니다.

유니티 기능중에서 StreamingAssets폴더를 생성하면 외부에서 수정이 가능하다는 기능을 찾기는 했습니다.
헌데, 이게 단순한 텍스트기반의 파일이면 상관이 없을듯한데, FBX파일 같은 게 제대로 될지 의문입니다.
StreamingAssets폴더에 들어가는 파일은 날것 그자체라 유니티형식으로 변환이 되질 않아서... 매우 회의적이군요... 

퇴사한 프로그래머분이 만들어 놓은 연출툴이 있는데, 사용 편의가 없어서 추가하는 작업을 진행하였습니다.
Inspector에 내용을 UI로 뿌리는 작업인데, 워낙 코딩엔 초보라 시간이 오래 걸렸습니다.
어찌되었던 완성은 시켰습니다. (AI없이는 못할거 같네요.ㅎ)
 

더보기
public class NumberDropdown : MonoBehaviour
{
    public TMP_Dropdown dropdown;
    public ManagerScene managerScene;
    public SceneTest sceneTest;
    public TMP_Dropdown dropdownA; //players 1 - 1

    private void Start()
    {
        PopulateDropdown();
        PopulateDropdownA();
        

        // Load the saved player index from PlayerPrefs
        if (PlayerPrefs.HasKey("SelectedPlayer"))
        {
            int selectedPlayerIndex = PlayerPrefs.GetInt("SelectedPlayer");
            dropdownA.value = selectedPlayerIndex;
        }

        if (PlayerPrefs.HasKey("SelectedScene"))
        {
            int selectedIndex = PlayerPrefs.GetInt("SelectedScene");
            dropdown.value = selectedIndex;
        }
        

    }

    public void PopulateDropdown()
    {
        dropdown.ClearOptions();

        List<string> options = new List<string>();

        foreach (ManagerScene.SceneInfo sceneInfo in managerScene.SceneInfos)
        {
            options.Add(sceneInfo.id.ToString());
        }

        dropdown.AddOptions(options);
    }

    public void PopulateDropdownA()
    {
        dropdownA.ClearOptions();

        List<string> options = new List<string>();

        int childCount = sceneTest.playersRoot.childCount;
        for (int i = 0; i < childCount; i++)
        {
            Transform playerTransform = sceneTest.playersRoot.GetChild(i);
            options.Add(playerTransform.gameObject.name);
        }

        dropdownA.AddOptions(options);
    }

    public void OnPlayButtonClick()
    {
        int selectedIndex = dropdown.value;
        int sceneID = managerScene.SceneInfos[selectedIndex].id;

        int selectedPlayerIndex = dropdownA.value;
        sceneTest.Group[0] = selectedPlayerIndex + 1;

        // Save the selected player index and scene ID in PlayerPrefs
        PlayerPrefs.SetInt("SelectedPlayer", selectedPlayerIndex);
        PlayerPrefs.SetInt("SelectedScene", selectedIndex);
        PlayerPrefs.Save();


        sceneTest.Group[0] = selectedPlayerIndex + 1;

        sceneTest.Play(sceneID);
    }

계속 모델링의 헤어가 지저분하게 만들어지는 현상에 대해서 개선이 필요하다고 하여, 소스를 좀 흩어봤는데

머리카락의 알파가 그라데이션으로 처리되어 있더군요.

그라데이션으로 처리하면, 알파블렌딩을 하든, 알파 테스트를 하든, 결과는 좋지 않습니다.

헤어자체를 한 땀 한 땀 잘 그려 넣어야 깔끔하게 나옵니다.

단순하지만... 노가다가 답인 경우가 있습니다.

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

업무일지 <StreamingAssets>  (0) 2023.04.26
업무일지 <연출 툴 개선>  (0) 2023.04.21
업무일지 <Toon화 시키는 post-process>  (0) 2023.04.13
업무일지 <Custom post-process>  (0) 2023.04.12
업무일지 <Fresnel>  (0) 2023.04.05

HDRP에서 Custom post-process를 만들고 있습니다.

코드가 셰이더 코드처럼 보이지만, 보던 형태가 아니라 어려움이 있었습니다.

코드도 오랜만이라 어려움이 있어서, AI 도움을 받았습니다.(AI 만쉐~)

원하는 결과를 얻었습니다.

추가된 코드

더보기
    float _Threshold;
    //float _Intensity;
    TEXTURE2D_X(_MainTex);

    float4 CustomPostProcess(Varyings input) : SV_Target
    {
        UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);

    // Note that if HDUtils.DrawFullScreen is used to render the post process, use ClampAndScaleUVForBilinearPostProcessTexture(input.texcoord.xy) to get the correct UVs

    float3 sourceColor = SAMPLE_TEXTURE2D_X(_MainTex, s_linear_clamp_sampler, input.texcoord).xyz;

    // Calculate grayscale value using Rec. 709 formula
    float luminance = dot(sourceColor, float3(0.2126, 0.7152, 0.0722));

    // Determine whether color is bright or dark
    float isBright = step(luminance, 0.07);

    // Convert to black or white
    float3 color = lerp(float3(1, 1, 1), float3(0, 0, 0), isBright);

    float3 oc = color* float3(1.0, 0.0, 0.0);

    return float4(oc, 1);


    }

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

업무일지 <연출 툴 개선>  (0) 2023.04.21
업무일지 <헤어를 깔끔하게 만드는 방법>  (0) 2023.04.19
업무일지 <Custom post-process>  (0) 2023.04.12
업무일지 <Fresnel>  (0) 2023.04.05
업무일지  (0) 2023.03.30

'AI' 카테고리의 다른 글

Leonardo.Ai  (0) 2023.05.19
로고 만들기 (stable-diffusion-webui)  (0) 2023.04.28
여자모델 (stable-diffusion-webui)  (0) 2023.04.05
AutoHotkey와 ChatGPT  (0) 2023.03.14
여자모델 (stable-diffusion-webui)  (0) 2023.02.22

HDRP의 Custom post-process을 사용할수 있어서 내용을 찾아보고 있습니다.

현재 제가 사용하고 있는 유니티 버전은 HDRP를 셰이더그래프로 만들수 있는 구조가 아니고, 코드로 만들어야하는 구조입니다.

셰이더 그래프에 이제 익숙해졌는데, 코드를 다시 봐야할거 같으니 머리가 지끈 거립니다.

우선, 두개의 파일을 만들어야합니다. 그리고 아랫처럼 Project Settings에도 추가해줘야합니다.

이렇게 되면 기본 셋팅이 됩니다.

TestSimple Shader를 이제 이용하면 셰이더 제작하듯이 하면 되는거 같습니다.

 

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

업무일지 <헤어를 깔끔하게 만드는 방법>  (0) 2023.04.19
업무일지 <Toon화 시키는 post-process>  (0) 2023.04.13
업무일지 <Fresnel>  (0) 2023.04.05
업무일지  (0) 2023.03.30
업무일지<Depth Write>  (0) 2023.03.27

ChatGPT에서 키워드를 뽑으니, 결과가 꽤 좋습니다.

'AI' 카테고리의 다른 글

로고 만들기 (stable-diffusion-webui)  (0) 2023.04.28
여자 히어로 (stable-diffusion-webui)  (0) 2023.04.13
AutoHotkey와 ChatGPT  (0) 2023.03.14
여자모델 (stable-diffusion-webui)  (0) 2023.02.22
Image To Image (stable-diffusion-webui)  (0) 2023.02.09