공부/Unity

24.06.07

월러비 2024. 6. 10. 17:33
  • Probe Group Light 테스트
  • GI : Grobal Illumination (전역조명)
  • 간접광
  • Deffored Rendering : 매쉬 하나 그리면 라이팅을 계산한다.
    • 1 Pass : IA → VS → RS → PS(조명 계산 정보를 기록만 해놓는다.) → OM (1pass ; 랜더링 파이프라인 과정을 한번 거쳤다)
    • 2 Pass : IA → VS → RS → PS(기록해놓은 계산 정보를 가지고 그린다.) → OM
    • M + L ⇒ 지금은 이 방식을 사용한다.
  • Forward Rendering : 매쉬마다 라이팅을 미리 계산하고 그린다.
    • IA → VS(애니메이션 계산) → RS (그려진다) → PS(조명 계산이 이뤄진다.) → OM(캐릭터 하나가 랜더링된다.)
      • PS 단계에서 FOrward Rendering 이 실행된다.
    • M * L
  • Bake 조명은 ‘static’만 받을 수 있고 다른 조건에서도 받고싶다면 Prob Group으로 범위를 조절하면 조명을 받을 수 있다.
  • Surface - Skinned Mesh Renderer - Probes - Anchor Override : 한 부위에 조명을 집중적으로 받을 수 있다. (여러개를 넣을 수 있다.)

 

  • 26번 Occlusion 프로젝트 생성
  • BackFaceCulling
  • VS 에서 정점이 탈락하는 과정 : Culling ⇒ 그리지 말라고 탈락시키는 과정이다. ⇒ 퍼포먼스가 떨어지니까)

 

  • MSAA : 2X 4X 8X 옵션이 있는 이것은 blur처럼 주변 픽셀의 평균을 내서 조명? 그림자? 계산을 하는 옵션이다.

깊이가 다른 두 오브젝트 렌더링 과정 (깊이버퍼)

  • 그림자가 생기는 과정이다.
  • 파란 오브젝트 : 0.8 / 빨간 오브젝트 : 0.3
  • 1 Pass : IA → VS → RS(3D가 2D로 변하는 과정) → PS(2D) → OM(2D를 3D로 변하는 과정) ⇒ 파란 오브젝트 렌더링
  • 2 Pass : IA → VS → RS → PS → OM ⇒ 0.8깊이를 가진 파란오브젝트 위에 빨간 오브젝트 렌더링
    • 0.8 깊이 > 0.3 깊이이니 겹치는 부분이 0.3 깊이보다 큰 부분은 그림자가 생성된다.
    • 이것을 ‘깊이 버퍼’라고 한다.
    • 한번 렌더링을 찍어놓고 0.3이 0.8을 가렸으니 그 부분은 그림자가 생길것이다 라고 생각하고 계산하는 것이다.
    • 이 방법은 문제가 있다.
      1. 가장 먼저 발생하는 문제 : 싶이가 다른 가른 오브젝트를 같이 렌더링하기 때문에 ‘Z Fighitng(겹쳐서 깨지는 문제)’가 발생한다.
        1. 깊이가 판단이 안되기 때문이다.
        2. 그림자도 같이 깨져 보인다.
        3. VS 과정에서
  • Z FIghting이 발생한다면?
    • 1 Pass : Backface Culling ⇒ 앞면만 두번 그리니 그냥 전면을 안그려버린다.
    • 2 Pass : Backface Culling ⇒ 정상적으로 Backface Culling을 실행해서 전면만 그린다.
      • 깊이 차이가 생겨 G fighing이 발생하지 않는다.
    • 결과 : 1 Pass에 후면(음영부분)만 렌더링된다.
      • 2 Pass에 전면(앞에서 보이는 부분)이 렌더링된다.
      • 두 렌더링에서 깊이차이가 발생하여 그림자부분이 그려진다.
  • 그림자 그리는 문제 3가지
    1. Z - Fighing
      1. 1 Pass 컬링을 뒤집어서 해결한다. (먼저 보이는 전면을 안그리고 후면(음영부분) 먼저 렌더링한다.)
      2. 이 방법으로 그림자를 선명하게 할 수 있지만, 그림자를 선명하게 한다고 그림자 픽셀 수를 증가시킨다면 퍼포먼스가 증가하여 FPS 프레임 수가 급감한다. (컴퓨터 사양이 좋아야 프레임수가 안떨어진다)
    2. PCF (Percentage Closer F?) - 해상도문제
      1. 그림자가 칠해질 바로 근처에 그림자가 칠해지지 않는 부분을 약간만 그림자를 그려서 조금 더 부드럽게 만들어준다.
        1. 여전히 자글거려서 약간의 도움밖에 안된다.
    3. 블러 (Blur) - 피터 패닝
      1. 그림자 주변 픽셀의 경계선을 전부더해서 평균픽셀로 만든다음 계산한다.
        1. 그림자가 조금 흐려지긴 하지만 이전보다는 자연스러워보인다.

 

  • 기본적으로는 고정된 큰 건물에 적용한다.
    • 뒤에 가려지는 건물이 많아서이다.
    • 그래서, 가장 큰 건물에는 ‘오클루더 스테틱’ 설정으로 준다.
    • 작은 건물에는 ‘오클루디 스테틱’ 설정을 준다.
  • Window - Rendering - Occlusion Culling (클릭)

 

  • 27 NavMesh 프로젝트 생성
  • UnitTest Obtacle(장애물) 생성
    • Navigation 장애물 스테틱설정
    • 동적 장애물 테스트
  • 피해 갈 장애물에 Navigation static 설정을 하고 Navigation에서 Bake를 누르면 장애물을 피해간다.
    • 하지만, 갑자기 사라지는 장애물이 있을때 장애물이 사라지더라도 있던 자리를 피해서 돌아간다.
    • Add Component - Nav Mesh Obstacle : 동적 장애물로 설정해주는 컴포넌트
      • 스테틱 설정을 하지 않더라도 동적 장애물로 설정된다.
      • Carve : 계속된 연산을 진행해서 부드럽게 장애물을 피하라는 속성이다.
        • Move Threshold : 장애물을 피하러 움직일때 정해진 거리만큼 다시 연산하라는 속성이다.
        • Time To Stationary : 일정 시간마다 다시 연산하라는 속성이다.
        • 연산량이 너무 많아 부하가 걸린다.
  • UnitTest OffMeshLink 생성
    • 지붕에 있는 적이 플레이어를 쫒을때 사용하는 기능이다.

'공부 > Unity' 카테고리의 다른 글

24.06.12  (1) 2024.06.12
24.06.11  (1) 2024.06.11
24.06.05  (1) 2024.06.10
24.06.04  (0) 2024.06.10
24.06.03  (0) 2024.06.10