본문 바로가기
디지털노마드

챗GPT게임개발58: Unity에서 자연스러운 낮과 밤의 주기 구현하기(9)

by 인텔리노마드라이프 2024. 7. 3.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

오늘은 GPT-4, GPT-4o 활용해서 Unity에서 자연스러운 낮과 밤의 주기 구현하기를 살펴볼께요.

[오늘의 목표] GPT-4, GPT-4o 활용해서 Unity로 구현한 자연스러운 낮과 밤의 주기 구현하기
  1. DayLight 살펴보기
  2. NightLight 살펴보기
  3. AmbientLight 살펴보기
  4. SunRimLight 살펴보기
  5. MoonRimLight 살펴보기
  6. 그림자 각도 및 길이 설정
  7. 전체 조명과 그림자 통합하기
  8. 에디터에서 테스트하기
  9. 최적화 및 성능 고려 사항
  10. 결론 

*Happy Harvest - 2D Sample Project에서 구현한 내용을 설명해요.

[참고] 챗gpt를 활용하여 개발/배포한 게임(소요기간 : 3주)

아래 링크를 통해서 다운로드해보세요.

 

[APP Store]

https://apps.apple.com/kr/app/%EB%86%8D%EB%B6%80%EC%9D%98-%EA%BF%88/id6479183930

 

‎농부의 꿈

‎오래된 전설이 숨겨져 있는 [농부의 꿈]목장 한구석에서 ‘비밀의 문'과 '마법 책'이 발견되었어요. [변신하는 동물들] 병아리가 합쳐져 닭이 되고, 닭이 합쳐져 고슴도치로 변신하며, 점점 더

apps.apple.com

 

[Google Play]

https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share

 

농부의 꿈 - Google Play 앱

평화로운 목장에서 신나는 동물 합치기 무료게임 (바람, 뚫어뻥, 밧줄, 무중력 등 매직 아이템 활용해 병아리를 젖소로 키워보세요.)

play.google.com

 

최적화 및 성능 고려 사항

이번 글에서는 Unity 엔진을 활용해 자연스러운 낮과 밤의 주기를 구현하는 방법을 알아보려고 해요. 특히, 아홉 번째 단계로 조명과 그림자 설정의 최적화 및 성능 고려 사항에 대해 집중적으로 설명할게요.

최적화의 중요성

게임에서 조명과 그림자는 시각적인 몰입감을 제공하지만, 성능에 큰 영향을 미칠 수 있어요. 최적화를 통해 게임이 다양한 플랫폼에서 원활하게 실행되도록 보장하는 것이 중요해요.

주요 최적화 기술

  1. 동적 조명 사용 최소화
    • 동적 조명은 성능에 큰 영향을 줄 수 있어요. 필요한 경우에만 사용하고, 정적 조명이나 베이크드 라이트맵을 활용해요.
  2. 라이트맵 사용
    • 정적 오브젝트에 대해서는 라이트맵을 사용해 조명을 미리 계산하여 성능을 향상시킬 수 있어요. 이를 통해 런타임 동안 조명 계산을 줄일 수 있어요.
  3. LOD(Level of Detail) 사용
    • 멀리 있는 오브젝트에 대해 간단한 조명과 그림자 효과를 적용해요. 가까운 오브젝트에만 세부적인 조명과 그림자를 사용해요.
  4. 그림자 해상도 조절
    • 그림자의 해상도를 적절히 조절해요. 높은 해상도 그림자는 많은 계산을 필요로 하므로, 게임의 성능에 따라 해상도를 조절해요.
  5. 조명 거리 제한
    • 조명이 영향을 미치는 거리를 제한해요. 불필요하게 넓은 범위에 조명이 적용되지 않도록 하여 성능을 최적화해요.
  6. 실시간 조명 업데이트 최소화
    • 실시간으로 조명 색상이나 밝기를 업데이트하는 작업을 최소화해요. 필요할 때만 조명을 업데이트하고, 가능한 경우에는 정적 조명을 사용해요.

조명 최적화 코드 예시

조명과 그림자 업데이트를 최적화하는 방법을 코드 예시로 보여드릴게요.

public void UpdateLightingAndShadows(float ratio)
{
    if (!GameManager.Instance.Paused)
    {
        // 주간 조명 색상 업데이트
        if (DayLight != null)
            DayLight.color = DayLightGradient.Evaluate(ratio);

        // 야간 조명 색상 업데이트
        if (NightLight != null)
            NightLight.color = NightLightGradient.Evaluate(ratio);

#if UNITY_EDITOR
        if (AmbientLight != null)
#endif
            // 환경 조명 색상 업데이트
            AmbientLight.color = AmbientLightGradient.Evaluate(ratio);

#if UNITY_EDITOR
        if (SunRimLight != null)
#endif
            // 태양 가장자리 조명 색상 업데이트
            SunRimLight.color = SunRimLightGradient.Evaluate(ratio);

#if UNITY_EDITOR
        if (MoonRimLight != null)
#endif
            // 달 가장자리 조명 색상 업데이트
            MoonRimLight.color = MoonRimLightGradient.Evaluate(ratio);

        // 조명 루트 회전 업데이트 (태양/달의 움직임 시뮬레이션)
        LightsRoot.rotation = Quaternion.Euler(0, 0, 360.0f * ratio);

        // 그림자 업데이트
        UpdateShadow(ratio);
    }
}

void UpdateShadow(float ratio)
{
    var currentShadowAngle = ShadowAngle.Evaluate(ratio);
    var currentShadowLength = ShadowLength.Evaluate(ratio);

    foreach (var shadow in m_Shadows)
    {
        var t = shadow.transform;
        t.eulerAngles = new Vector3(0, 0, currentShadowAngle * 360.0f);
        t.localScale = new Vector3(1, 1f * shadow.BaseLength * currentShadowLength, 1);
    }
}
 

성능 최적화 체크리스트

  • 조명 베이킹: 정적 오브젝트에 대해 라이트맵을 사용하여 조명을 미리 계산해 두세요.
  • 리소스 사용 최소화: 사용하지 않는 조명과 그림자 효과는 비활성화하여 리소스를 절약하세요.
  • 멀티스레딩: 조명 계산을 멀티스레딩으로 처리하여 성능을 향상시키세요.
  • GC(가비지 컬렉션) 관리: 메모리 사용을 최적화하고 가비지 컬렉션이 게임 플레이에 영향을 미치지 않도록 관리하세요.
  • 성능 프로파일링: Unity의 프로파일러 도구를 사용하여 성능 병목 지점을 찾아 최적화하세요.

결론

조명과 그림자 설정의 최적화는 게임의 성능을 유지하면서도 시각적 품질을 높이는 중요한 단계에요. 최적화 기술을 적용하면, 다양한 플랫폼에서 게임이 원활하게 실행되도록 보장할 수 있어요.

 

다음 글에서는 구현 결과를 요약하고, 다음에 다룰 주제를 소개할게요. 기대해 주세요!

 

지금까지,

언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.

감사합니다.

728x90