TIL

2024/2/27 TIL

jhwoo1221 2024. 2. 27. 21:16

'오늘의 일에서 나는 어떤 것을 배웠는지' - 학습

그래픽스




버텍스 (점)
그래픽 객체의 꼭짓점

엣지 (선)
두개의 버텍스를 연결하는 선분

폴리곤 (면)
버텍스와 엣지로 둘러쌓인 면

서피스 (표면)
폴리곤이 모인 입체물

고정 기능 파이프라인
(고정됨, 개입 불가)

프로그래머블 파이프라인
(개입 가능) (사용자 정의 쉐이더)

리얼타임 렌더링 파이프라인

레이 트레이싱 파이프라인 

유니티 파이프라인
유니버럴 렌더링 파이프라인(URP)
경량화, 효율적, 최신형

하이브리드 렌더링 파이프라인(HRD)
범용성, 성능

유니티 렌더링 파이프라인(BRP)
기본적인 렌더링 파이프라인

고정 기능 파이프라인은 3D 그래픽 작업에서 일반적으로 사용되는 작업의 순서를 나타내며, 다양한 단계를 거쳐 최종 이미지를 생성합니다. 아래는 이러한 단계를 예시와 함께 설명한 것입니다.

  1. 로컬 (Local)
    • 설명: 모델의 로컬 좌표계에서 개별 객체 또는 구성 요소의 기하학을 조정합니다.
    • 예시: 개별 객체의 크기, 회전, 이동 등을 조절하여 로컬 변환을 적용합니다.
  2. 월드 (World)
    • 설명: 전역 좌표계에서 모델의 위치와 회전을 조절합니다.
    • 예시: 모델 전체를 월드 좌표계에서 이동하거나 회전시킵니다.
  3. 뷰 (View)
    • 설명: 카메라의 시점을 설정하고 뷰 좌표계로 변환합니다.
    • 예시: 카메라를 조절하여 원하는 시점에서 모델을 관찰합니다.
  4. 후면 추려내기 (Backface Culling)
    • 설명: 카메라에서 보이지 않는 후면 면을 제거하여 성능을 최적화합니다.
    • 예시: 모델의 뒷면 면을 제외하고 전면 면만 렌더링합니다.
  5. 조명 (Lighting)
    • 설명: 빛의 속성과 재질에 따른 조명 효과를 계산합니다.
    • 예시: 광원의 위치, 색상, 강도에 따라 객체에 조명 효과를 적용합니다.
  6. 클리핑 (Clipping)
    • 설명: 화면에 표시되는 부분을 제한하여 화면 밖의 불필요한 부분을 제거합니다.
    • 예시: 카메라의 시야에 들어오지 않는 부분을 제외하고 렌더링합니다.
  7. 투명 (Transparency)
    • 설명: 투명한 재질을 처리하고 객체의 투명도를 계산합니다.
    • 예시: 유리, 물 등 투명한 재질이 있는 객체를 적절히 처리합니다.
  8. 뷰포트 (Viewport)
    • 설명: 렌더된 이미지를 실제 화면에 표시하기 위해 뷰포트 좌표계로 변환합니다.
    • 예시: 뷰포트 크기에 따라 이미지를 조절하여 출력할 화면에 맞게 조절합니다.
  9. 래스터라이즈 (Rasterize)
    • 설명: 3D 모델을 2D 이미지로 변환하고 픽셀 단위로 렌더링합니다.
    • 예시: 모델의 표면을 픽셀로 변환하여 화면에 표시합니다.

이러한 단계들은 3D 그래픽 소프트웨어나 게임 엔진에서 사용되며, 고정 기능 파이프라인의 순서는 일반적으로 이러한 순서를 따릅니다.
https://www.evernote.com/shard/s417/client/snv?isnewsnv=true&noteGuid=b23540e3-51f4-4d14-be12-831907a9e6fd&noteKey=nqN2inBxaKZ78nxcgc6okXfMZeG4vQnjuHSNu3LwpJcLD5XOT5TX0Z3Szg&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs417%2Fsh%2Fb23540e3-51f4-4d14-be12-831907a9e6fd%2FnqN2inBxaKZ78nxcgc6okXfMZeG4vQnjuHSNu3LwpJcLD5XOT5TX0Z3Szg&title=%25EC%259D%25BD%25EA%25B8%25B0%2B%25EC%25A2%258B%25EC%259D%2580%2B%25EC%25BD%2594%25EB%2593%259C%25EA%25B0%2580%2B%25EC%25A2%258B%25EC%259D%2580%2B%25EC%25BD%2594%25EB%2593%259C%25EB%258B%25A4
읽기 좋은 코드가 좋은 코드다


'오늘의 나는 무엇을 잘했는지' - 성취

Public_Variable.cs 의 내용 일부

    [SerializeField]
    private float fullness = 100.0f;
    public float Fullness
    {
        get { return fullness; }
        set
        {
            fullness = Mathf.Clamp(value, 0f, 100f);
        }
    }

 

 

//

 

OverallManager.cs 의 내용 일부

    [SerializeField]
    private Public_Variable _PublicVariable;

    public Public_Variable PublicVariable
    {
        get { return _PublicVariable; }
    }

 

//

 

GameDataManager.cs 의 내용 일부

 

    public void RecoverStaminaAfterSleep()
    {
        if (OverallManager.Instance.PublicVariable.Fullness >= 100)
            OverallManager.Instance.PublicVariable.Stamina = 120.0f;
}

 

이렇게 

데이터들을 모아놓은 스크립트와

총괄 통합하고 터미널 역할을 하는 스크립트와

데이터들을 통해 메서드를 관리하는 스크립트를 분리하고도

정상적으로 메서드를 동작하게 하도록 구성했다.

 

코드 작성이 조금 번거롭긴 하지만

코드가 더 직관적이고 체계적이 된 것 같다.

한편으로는 이게 가장 효율적인 방법인게 맞나 싶기도 하지만

일단 깔끔한 건 확실한 것 같다.


'오늘의 나는 어떤 문제를 겪었는지, 앞으로 어떻게 해결할 것인지' - 개선
아직 참조와 접근자에 대한 이해가 조금 모자라서 코드 작성에 조금 헤맸는데, 

이번 경험을 발판삼아 다음에는 더 빠르게 작업할 수 있을 것 같다.

'TIL' 카테고리의 다른 글

2024/2/29 TIL  (0) 2024.02.29
2024/2/28 TIL  (1) 2024.02.28
2024/2/26 TIL  (0) 2024.02.26
2024/2/23 TIL  (0) 2024.02.23
2024/2/22 TIL  (0) 2024.02.22