DirectX 11 및 OpenGL Core
컴퓨트 셰이더

OpenGL 코어 세부 정보(OpenGL Core Details)

OpenGL Core는 Windows, MacOS X, Linux의 최신 OpenGL 기능을 지원하는 새로운 백엔드입니다. OpenGL 드라이버 지원에 따라 OpenGL 3.2부터 OpenGL 4.5까지 있습니다.

새로운 OpenGL Core는 MacOS X와 Linux에서 기본으로 활용됩니다.

MacOSX OpenGL 드라이버 한계(MacOSX OpenGL driver limitations)

현재 OS X 에디터와 스탠드얼론은 새 기능으로 테셀레이션 및 지오메트리 셰이더 같은 OpenGL 3.x과 4.x의 기능을 가능하게 하는 새 OpenGL 백엔드를 지원합니다.

그러나 Apple은 OS X 데스크톱에서 OpenGL 버전을 4.1로 제한하기 때문에 모든 DirectX 11 기능(정렬되지 않은 액세스 뷰 또는 컴퓨트 셰이더 등)을 지원하지 않습니다. 다시 말해 Shader Level 5.0(#pragma target 50)을 타겟팅하도록 설정된 모든 셰이더는 OS X에서 로딩이 실패합니다.

이에 따라 #pragma target gl4.1이라는 새로운 셰이더 타겟 레벨이 도입됐습니다. 이 타겟 레벨의 최소 요구사양은 데스크톱에서 OpenGL 4.1이나 DirectX 11.0 Shader Level 5 또는 모바일에서 OpenGL ES 3.1 + Android Extension Pack입니다.

OpenGL Core 기능

새로운 OpenGL 백엔드는 새로운 기능을 다수 도입했습니다(이전에는 대부분 DX11/GLES3만 해당).

  • 컴퓨트 셰이더(또한 ComputeBuffers 및 “random write” 렌더 텍스처)
  • 테셀레이션과 지오메트리 셰이더
  • 간접적 드로우 (Graphics.DrawProcedural 및 Graphics.DrawProceduralIndirect)
  • 고급 블렌드 모드

셰이더 변경사항

기존의 #pragma 타겟을 활용할 때 다음의 GL 레벨을 매핑합니다:

  • \#pragma target 4.0 // OpenGL ES 3.1, desktop OpenGL 3.x, DX Shader Model 4.0
  • \#pragma target gl4.1 // Desktop OpenGL 4.1, SM 4.0 + MacOSX 10.9 성능에 매치시키는 테셀레이션
  • \#pragma target 5.0 // OpenGL ES 3.1 + Android Extension Pack, 데스크톱 OpenGL >= 4.2, DX Shader Model 5.0

특정 셰이더로 셰이더 플랫폼을 포함 및 제외하려면 다음의 #pragma only_renderers / exclude_renderers 타겟을 활용할 수 있습니다.

  • #pragma only_renderers glcore: 데스크톱 GL만 컴파일합니다. ES 3 타겟처럼 기본 셰이더가 GL 2.x를 지원하는 한편 SM5.0 기능을 요구하는 셰이더가 OpenGL 4.2+를 요구하는 모든 데스크톱 GL 버전을 포함하도록 스케일을 확대합니다.

OpenGL 코어 프로파일 커맨드 라인 인자

다음 커맨드 라인 인자를 활용해 OpenGL이 있는 플레이어나 에디터를 시작할 수 있습니다.

  • -force-opengl: 레거시 OpenGL 백엔드의 사용을 위한 것입니다.
  • -force-glcore: 새로운 OpenGL 백엔드를 사용을 위한 것입니다. Unity는 이 인자를 사용하여 최적의OpenGL 버전에서 플랫폼이 실행을 지원하는 모든 기능과 모든 사용 가능한 OpenGL 익스텐션을 감지합니다.
  • -force-glcoreXY: XY는 32, 33, 40, 41, 42, 43, 44 혹은 45일 수 있습니다. 각 번호는 OpenGL의 특정 버전을 나타냅니다. 플랫폼이 OpenGL의 특정 버전을 지원하지 않으면 Unity는 지원하는 버전으로 대체합니다.
  • -force-clamped: Unity가 여러 플랫폼이 동일한 코드 경로를 실행하도록 보장하는 OpenGL 익스텐션을 사용하지 않는다는 요청입니다. 문제가 플랫폼에 특정한지(예를 들어, 드라이버 버그) 테스트하는 접근법입니다.

데스크톱의 네이티브 OpenGL ES 커맨드 라인 인자

OpenGL ES 그래픽스 API는 드라이버가 OpenGL ES를 지원하는 NVIDIA GPU나 Intel이 탑재된 Windows 컴퓨터에서 사용 가능합니다.

  • -force-gles: OpenGL ES 모드에서 새로운 OpenGL 백엔드를 사용하기 위한 것입니다 이 인자를 사용해서 Unity는 실행시 플랫폼이 지원하는 가능한한 최적의 OpenGL ES 버전과 이용가능한 모든 OpenGL ES 익스텐션을 찾아낼 수 있습니다.
  • -force-glesXY: XY는20, 30, 31 혹은 31일 수 있습니다. 각 번호는 OpenGL ES의 특정 버전을 나타냅니다. 플랫폼이 OpenGL ES의 특정 버전을 지원하지 않으면 Unity는 지원하는 버전으로 대체합니다. 플랫폼이 OpenGL ES를 지원하지 않으면 Unity는 다른 그래픽스 API로 대체합니다.
  • -force-clamped: Unity가 여러 플랫폼이 동일한 코드 경로를 실행하도록 보장하는 OpenGL 익스텐션을 사용하지 않는다는 요청입니다. 문제가 플랫폼에 특정한지(예를 들어, 드라이버 버그) 테스트하는 접근법입니다.
DirectX 11 및 OpenGL Core
컴퓨트 셰이더