AD님 요구로 연출때 써먹을 효과를 구성하고 있습니다.

Fresnel을 이용하여, 반반컬러을 만들어낼 방법을 찾았는데, 잘 안되더군요.

어제부터 삽질을 좀 한거 같은데, 방법을 찾은거 같습니다.

헌데, Error가 났습니다.

pow에서 음수가 발생해서 문제가 생기나 봅니다. 음수를 없애기 위해서는 Abs() 함수를 사용하여 절대값으로 변경하는게 좋다고 합니다. 사용하니, 에러가 사라졌습니다.

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

업무일지 <Toon화 시키는 post-process>  (0) 2023.04.13
업무일지 <Custom post-process>  (0) 2023.04.12
업무일지  (0) 2023.03.30
업무일지<Depth Write>  (0) 2023.03.27
업무일지<게임 맛보기>  (0) 2023.03.21

캐릭터 셰이더설정 작업

 

아웃포커싱 작업 중이었는데, 이상하게 아래와 같이 반짝이는 물체가 생겼습니다.

알고 보니 나뭇잎의 Smoothess값이 만땅이 되어있었네요.

(포스트프로세싱 테스트해보지 않으면 런칭되었어도 몰랐을 거 같군요.)

 

대마왕님 서적이 드디어 도착했군요.

찬찬히 흝어봐야겠지만, 대충 봤을 때는 다행히도 대부분 제가 알고 있는 내용들인 거 같습니다.

대마왕님 첫 서적이랑 유사하네요.(당시에 이해가 안되서 한 4,5번은 본 거 같습니다.)

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

업무일지 <Custom post-process>  (0) 2023.04.12
업무일지 <Fresnel>  (0) 2023.04.05
업무일지<Depth Write>  (0) 2023.03.27
업무일지<게임 맛보기>  (0) 2023.03.21
업무일지 <젠킨스 재구성>  (0) 2023.03.16

포스트 프로세싱을 적용 중인데, 알파 관련 이슈가 발생하였습니다.

구멍이 뚤린 부분이 아웃포커싱이 안 먹는 거...

A를 보면 알겠지만, 구멍 뚫린 부분이 아웃포커싱이 안 먹은 걸 알 수 있다.

제가 원하는 결과는 B입니다. B는 Depth Write를 끈 것입니다.

문제는 Depth Write 끄면 아래처럼 안쪽에 구가 다 보인다는 거...

원하는 결과는 C에서 더 알파가 자연스럽게 빠져야 하는 겁니다.

 

 

골치가 아프군요.

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

업무일지 <Fresnel>  (0) 2023.04.05
업무일지  (0) 2023.03.30
업무일지<게임 맛보기>  (0) 2023.03.21
업무일지 <젠킨스 재구성>  (0) 2023.03.16
업무일지 <GC효과>  (0) 2023.03.10

완전 공개 테스트가 아니다보니...  맛보기 영상...

더보기

 

 

 

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

업무일지  (0) 2023.03.30
업무일지<Depth Write>  (0) 2023.03.27
업무일지 <젠킨스 재구성>  (0) 2023.03.16
업무일지 <GC효과>  (0) 2023.03.10
업무일지<GC(garbage collector)>  (2) 2023.03.09

젠킨스쪽 다시 구성중.

 

젠킨스명령:  

-quit -batchmode -projectPath "C:/Test_F4" -logFile "C:/Work/buildlog_art.txt" -executeMethod MyBuildScript.BuildWindows

더보기
using UnityEditor;
using UnityEngine;
using System.IO;

public class MyBuildScript
{
    [MenuItem("Build/Build Windows")]
    public static void BuildWindows()
    {
        string buildFolderPath = "../LocalF4Client/F4_LOCAL/";
        if (Directory.Exists(buildFolderPath))
        {
            Directory.Delete(buildFolderPath, true);
        }
        Directory.CreateDirectory(buildFolderPath);

        string[] scenes = {
            "Assets/InGame/Scenes/LocalMode.unity",
            "Assets/InGame/Scenes/InGameScene.unity",
            "Assets/Graphics/Stage/Stage00/Stage00.unity",
            "Assets/Graphics/Stage/Stage01/Stage01.unity",
            "Assets/Graphics/Stage/Stage02/Stage02.unity",
            "Assets/Graphics/Stage/Stage03/Stage03.unity",
            "Assets/Graphics/Stage/Stage04/Stage04.unity",
            "Assets/Graphics/Stage/Stage05/Stage05.unity"
        };

        string buildPath = buildFolderPath + "Men.exe";
        BuildPlayerOptions buildOptions = new BuildPlayerOptions
        {
            scenes = scenes,
            locationPathName = buildPath,
            target = BuildTarget.StandaloneWindows64,
            options = BuildOptions.None
        };

        BuildPipeline.BuildPlayer(buildOptions);

        Directory.Delete(buildFolderPath + "Men_BackUpThisFolder_ButDontShipItWithYourGame", true);
        Directory.Delete(buildFolderPath + "Men_BurstDebugInformation_DoNotShip", true);
    }
}

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

업무일지<Depth Write>  (0) 2023.03.27
업무일지<게임 맛보기>  (0) 2023.03.21
업무일지 <GC효과>  (0) 2023.03.10
업무일지<GC(garbage collector)>  (2) 2023.03.09
업무일지 <유저테스트준비중>  (0) 2023.03.03

(GC)가비지 컬렉터의 효과는 유니티상에서는 있어 보였지만, 실제로 게임에서는 그다지 효과가 나타나질 않았습니다.

빌드가 잘못된거 아닌가해서 다시 확인하였지만... 똑같군요.

역시 빌드를 해서 직접확인을 해야지, 수치만으로는 믿을 수 없습니다.

좀 아쉽긴 하지만, 그래도 적용하는게 좋을거 같습니다.

 

테스트등록을 시작하였네요.

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

업무일지<게임 맛보기>  (0) 2023.03.21
업무일지 <젠킨스 재구성>  (0) 2023.03.16
업무일지<GC(garbage collector)>  (2) 2023.03.09
업무일지 <유저테스트준비중>  (0) 2023.03.03
업무일지<shaderloader>  (0) 2023.02.24

Player 세팅에 보면 GC(garbage collector)에 대한 옵션이 있습니다.

이게 활용에 따라 독이 될 수도 있고, 득이 될 수도 있다고 합니다.

게임을 테스트 해봤는데, GC를 킨 경우 프레임이 잘 관리가 되고 있는 거 같네요.

실제 빌드로 테스트를 해보기로 하였습니다.

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

업무일지 <젠킨스 재구성>  (0) 2023.03.16
업무일지 <GC효과>  (0) 2023.03.10
업무일지 <유저테스트준비중>  (0) 2023.03.03
업무일지<shaderloader>  (0) 2023.02.24
업무일지<Memory>  (0) 2023.02.17

유저 테스트를 준비하고 있습니다.
모니터별 밝기가 다르고 사람마다 시각적인 차이가 있다고 하여 감마 보정하는 걸 넣기로 하였습니다.
근데 gamma 보다는 밝기는 gain이 더 나은 거 같은데 중국에서 감마로 하자고 하니 그렇게 하기로...
각 스테이지마다 볼륨을 넣는 건 좀 번거로운 일이라 씬로더에  감마를 조종하기 위한 볼륨을 추가하여 어느 스테이지를 오픈하더라도 문제없게 구성하였습니다.

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

업무일지 <GC효과>  (0) 2023.03.10
업무일지<GC(garbage collector)>  (2) 2023.03.09
업무일지<shaderloader>  (0) 2023.02.24
업무일지<Memory>  (0) 2023.02.17
업무일지<Tree / Occlusion>  (0) 2023.02.13

머터리얼 컬렉터를 수정하였습니다. 중복된 오브젝트가 많아서 소요되는 로드시간을 수정할 필요가 있다고 생각했습니다.

추가적으로 어떤 오브젝트들이 중복되었는지 출력하도록 코드를 수정하였습니다.(AI 도움을 받았습니다.ChatGPT짱!!)

 

더보기
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using TMPro;
using UnityEditor;
using UnityEngine;

#if UNITY_EDITOR

[CustomEditor(typeof(ShaderLoader))]
public class ShaderLoaderEditor : Editor
{
    ShaderLoader ShaderLoaderThis;
    public void OnEnable()
    {
        ShaderLoaderThis = target as ShaderLoader;
    }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        if (GUILayout.Button("Create Shader Object") == true)
        {
            ShaderLoaderThis.CreateShaderSphere();
        }

        if (GUILayout.Button("Remove Duplicate Objects") == true)
        {
            ShaderLoaderThis.RemoveDuplicateObjects();
        }
    }
}

public class ShaderLoader : MonoBehaviour
{

    public GameObject IngameField;
    [SerializeField]
    public List<string> PathList;
    [SerializeField]
    public GameObject PathString;
    [SerializeField]
    public GameObject PathObjectStore;
    // Start is called before the first frame update
    [SerializeField]
    float PosfirstX = -20.31f;
    [SerializeField]
    float PosfirstZ = 3.94f;
    float Gap = 1.5f;
    int CountCol = 12;
    int CountRow = 12;
    void Start()
    {
        CreateShaderSphere();
    }

    public void CreateShaderSphere()
    {
        int numberRow = 0;
        var ingamepos = GameObject.Find("Ingame");
        if (PathObjectStore != null)
            DestroyImmediate(PathObjectStore);
        PathObjectStore = new GameObject();
        PathObjectStore.name = "OBJStore";
        PathObjectStore.transform.SetParent(ingamepos.transform);
        for (int i = 0; i < PathList.Count; i++)
        {
            List<Material> paths = new List<Material>();
            GetDirectoriesRecursive(PathList[i], ref paths);
            //var pathString = Instantiate(PathString);
            //pathString.GetComponent<TextMeshPro>().text = PathList[i].ToString();
            //pathString.GetComponent<TextMeshPro>().alignment = TextAlignmentOptions.BottomRight;
            //pathString.transform.position = new Vector3(PosfirstX - 5f, 0f, PosfirstZ + -Gap * numberRow);
            //pathString.transform.SetParent(PathObjectStore.transform);
            for (int j = 0; j < paths.Count; j++)
            {
                var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.GetComponent<Renderer>().material = paths[j];
                numberRow = (j / CountRow);
                sphere.transform.position = new Vector3(PosfirstX + Gap * (j % CountCol), 0f, PosfirstZ + -Gap * numberRow);
                sphere.name = paths[j].name;
                sphere.transform.SetParent(PathObjectStore.transform);
            }
            numberRow++;
        }
    }


    public void RemoveDuplicateObjects()
    {
        var allObjects = PathObjectStore.GetComponentsInChildren<Transform>();
        var duplicates = new List<Transform>();
        var names = new HashSet<string>();
        var duplicateNames = new List<string>();

        for (int i = 0; i < allObjects.Length; i++)
        {
            if (names.Contains(allObjects[i].name))
            {
                duplicates.Add(allObjects[i]);
                duplicateNames.Add(allObjects[i].name);
            }
            else
            {
                names.Add(allObjects[i].name);
            }
        }

        // Keep the first object of each group and delete the rest
        for (int i = 1; i < duplicates.Count; i++)
        {
            DestroyImmediate(duplicates[i].gameObject);
        }

        // Save the list of duplicate object names to a text file
        if (duplicateNames.Count > 0)
        {
            string dateTimeString = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
            var filePath = "Assets/InGame/Scenes/SamapleShader/duplicate_names_" + dateTimeString + ".txt";
            using (StreamWriter writer = new StreamWriter(filePath))
            {
                writer.WriteLine("Duplicate object names:");
                foreach (var name in duplicateNames)
                {
                    writer.WriteLine(name);
                }
            }
        }

    }




    // Update is called once per frame
    void Update()
    {

    }

    static private void GetDirectoriesRecursive(string path, ref List<Material> list)
    {

        string[] guids = UnityEditor.AssetDatabase.FindAssets("t:material", new string[] { path });
        List<UnityEngine.Object> returnval = new List<UnityEngine.Object>();
        Dictionary<string, int> overlapchacker = new Dictionary<string, int>();
        for (int i = 0; i < guids.Length; i++)
        {
            if (overlapchacker.ContainsKey(guids[i]))
                continue;
            overlapchacker.Add(guids[i], 1);
            var datas = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(UnityEditor.AssetDatabase.GUIDToAssetPath(guids[i]));
            foreach (var data in datas)
            {
                if (data is Material)
                {
                    list.Add(data as Material);
                }
            }

        }

    }

}
#endif

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

업무일지<GC(garbage collector)>  (2) 2023.03.09
업무일지 <유저테스트준비중>  (0) 2023.03.03
업무일지<Memory>  (0) 2023.02.17
업무일지<Tree / Occlusion>  (0) 2023.02.13
업무일지<어드레서블 시스템>  (0) 2023.02.01

항상 처음부터 메모리 부터 봐야하는데, 이상하게 자주 착각을 한다 메모리는 문제 없을거라는...

항상 맨 먼저 확인해야하는 버릇이 필요하군요. 줄여지가 꽤 있었군요..

 

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

업무일지 <유저테스트준비중>  (0) 2023.03.03
업무일지<shaderloader>  (0) 2023.02.24
업무일지<Tree / Occlusion>  (0) 2023.02.13
업무일지<어드레서블 시스템>  (0) 2023.02.01
업무일지<Terrain을 수동으로>  (0) 2023.01.19