Material & Shader

Like Big·2022년 11월 27일
0

개념

  • 유니티는 Material의 속성으로 Shader가 사용되며 서로 다름
  • 다른 게임 엔진은 같은 뜻으로 쓰기도함

그래픽스 라이브러리, API

  • 유니티는 멀티 플랫폼을 지원하며 다양한 그래픽 칩셋을 다음과 같이 지원
    -
  • OpenGL(Open Graphic Library)
  • 에디터에서의 그래픽 API가 타겟 디바이스와는 다르고 모든 그래픽 칩셋마다 깨지거나, 지원하지 않는 설정으로 표현되지 않을 수 있음
  • Auto Graphics API로 자동으로 어떤 API를 사용할것인지, 아니면 지정할 수 있음
  • Auto는 심플하지만 최적화나, 패키지 사이즈를 줄이거나, 버그가 생길때 대응하기 위해 운영체제 마다 그래픽스 API를 명시해주는것을 추천
  • API 마다 명령어가 다르긴하지만 렌더링 파이프라인이라는 공통 과정을 거침

렌더링 파이프라인

  • 렌더링 파이프 라인

메모리

  • CPU와 GPU가 사용하는 메모리는 다르며, 모바일은 메모리를 공용으로 쓰지만 영역이 분리되어있기도 함(아닌경우도 있나?)
  • 메시 데이터, 쉐이더, 머테리얼 데이터 모두 Memory가 위 사진처럼 전달

Rendering

  • 메모리에 올려진 데이터가 Render State 체크하여 그려지며, State가 바뀐다면 바뀐 오브젝트만 새로 GPU에게 그리라 명령
  • 상태 하나하를 바꾸기위해 CPU가 커맨드를 날려서 GPU에게 명령
  • 렌더링을 위해 많은수의 쉐이더 코드를 사용하며 각각 쉐이더가 프로그램이 되어 GPU에 올라가며 그 프로그램들을 이용하여 렌더링을 하게됨
  • 유니티는 쉐이더 코드가 하나인데 최종적으로 쪼개져서 메모리에 올라감
  • 쉐이더를 많이쓰거나, 쉐이더 variant가 많으면 위 프로그램이 자주 바꾸면서 성능에 영향을 줄 수 있음
  • 렌터링 파이프 라인을 다이렉트X 예시로 아래 코드로 간략히 설명
profile
개고운(개발,고양이,운동)

0개의 댓글