다음을 통해 공유


그래픽 도구 표준 셰이더 — MRTK3

Graphics Tools Standard 음영 시스템은 Unity의 Standard(또는 Lit) 셰이더와 유사한 시각적 개체를 구현할 수 있는 유연한 셰이더를 활용합니다. Fluent Design 시스템 원칙을 구현하고 혼합 현실 디바이스에서 성능을 유지합니다.

표준 셰이더 재질 갤러리 샘플

샘플

Graphics Tools/Standard 셰이더 변형에 대한 여러 데모는 재질 갤러리 샘플을 참조하세요. Graphics Tools/Standard Canvas 예제는 UnityUI 샘플을 참조하세요.

Architecture

Graphics Tools/Standard 음영 시스템은 Unity의 셰이더 프로그램 변형 기능을 사용하여 재질 속성에 따라 최적의 셰이더 코드를 자동으로 생성하는 "uber 셰이더"입니다. 사용자가 재질 검사기에서 재질 속성을 선택하면 사용하도록 설정한 기능에 대한 성능 비용만 발생합니다.

기존 Unity 워크플로 및 UnityUI(캔버스) 워크플로를 더 잘 지원하기 위해 Graphics Tools/Standard 음영 시스템에는 두 개의 셰이더 진입점이 있습니다.

Context 기본값 UnityUI
Name Graphics Tools/Standard Graphics Tools/Standard Canvas
셰이더 GraphicsToolsStandard GraphicsToolsStandardCanvas

두 셰이더는 공통 셰이더 코드에 포함되는 항목을 공유하므로 대부분 동일합니다. Graphics Tools/Standard Canvas에는 UnityUI와 관련된 몇 가지 추가 논리가 포함되어 있습니다.

Graphics Tools/Standard 음영 시스템을 구동하는 셰이더 포함 항목은 다음과 같습니다.

포함 목적
GraphicsToolsStandardProgram 꼭짓점 및 조각 셰이더 진입점 메서드(핵심 구현)를 포함합니다.
GraphicsToolsStandardMetaProgram Unity에서 정적 조명에 사용하는 꼭짓점 및 조각 셰이더 진입점 메서드를 포함합니다(런타임에 사용되지 않음).
GraphicsToolsStandardInput 꼭짓점 특성, 꼭짓점 보간기, 텍스처, 텍스처 샘플러, 재질당 상수 버퍼, 전역 속성 및 상수에 대한 정의입니다.
GraphicsToolsCommon 재사용 가능한 메서드 및 정의입니다.

렌더링 파이프라인 지원

Unity에는 개발자가 선택할 수 있는 몇 가지 렌더링 파이프라인이 있습니다. Graphics Tools Standard 음영 시스템은 Unity의 기본 제공 렌더링 파이프라인 또는 URP(Universal Render Pipeline)에서 자동으로 작동하도록 설계되었습니다. 파이프라인에 따라 셰이더를 전환할 필요가 없습니다. 다음은 지원 매트릭스입니다.

파이프라인 지원됨 예외
기본 제공 렌더링 파이프라인 아크릴 "흐림 모드"는 지원되지 않습니다.
URP(Universal Render Pipeline)
HDRP(High Definition Render Pipeline)
Custom Render Pipeline 지원은 파이프라인을 빌드하는 방법에 따라 달라집니다.

UnityUI 지원

Graphics Tools Standard 음영 시스템은 UnityUI라는 Unity의 기본 제공 UI 시스템에서 작동합니다. Graphics Tools/Standard Canvas는 UnityUI 캔버스 내의 모든 재질에 사용해야 합니다.

Graphics Tools 내의 Canvas 또는 CanvasRenderer는 필요한 경우 ScaleMeshEffect.cs를 추가하라는 메시지를 표시합니다.

크기 조정 메시 효과 검사기 경고

UnityUI 구성 요소에서 unity_ObjectToWorld 행렬(URP의 UNITY_MATRIX_M)은 그래픽 구성 요소가 있는 로컬 변환의 변환 행렬이 아니라 부모 캔버스의 변환 행렬입니다. 많은 Graphics Tools/Standard Canvas 셰이더 효과를 사용하려면 개체 스케일링을 알려야 합니다. 이 문제를 해결하기 위해 ScaleMeshEffect.cs는 UI 메시 생성 중에 스케일링 정보를 UV 채널 특성에 저장합니다.

Unity 이미지 구성 요소를 사용하는 경우 Unity UI에서 추가 꼭짓점을 생성하지 못하도록 원본 이미지에 "없음(Sprite)"을 지정하는 것이 좋습니다.

재질 검사기

StandardShaderGUI.cs라는 Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더에 대한 사용자 지정 재질 검사기가 있습니다. 이 검사기는 렌더링 상태를 설정할 때 사용자 선택 및 보조 기능에 따라 셰이더 기능을 자동으로 사용하거나 사용하지 않도록 설정합니다. 각 기능에 대한 자세한 내용을 보려면 Unity 편집기에서 각 속성을 마우스로 가리켜 도구 설명을 봅니다.

참고

검사기 UI는 동적입니다. 기능을 사용하도록 설정하고 사용하지 않도록 설정하면 UI의 일부가 변경됩니다.

Graphics Tools/Standard용 재료 검사기

아래에 설명된 대로 검사기를 몇 가지 기능 영역으로 나눌 수 있습니다.

렌더링 모드

검사기의 첫 번째 부분은 재질의 렌더링 상태를 제어합니다. 렌더링 모드는 재질이 렌더링되는 시기와 방법을 결정합니다. Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더의 목적은 Unity/Standard 셰이더에 있는 렌더링 모드를 미러링하는 것입니다. Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더에는 완전한 사용자 제어를 위한 추가 렌더링 모드 및 사용자 지정 렌더링 모드도 포함됩니다.

렌더링 모드 설명
불투명 (기본값) 투명 영역이 없는 일반 단색 개체에 적합합니다.
그림 조각 불투명 영역과 투명 영역 사이에 정확한 가장자리가 있는 투명 효과를 만들 수 있습니다. 이 모드에서는 반투명 영역이 없거나 텍스처가 100% 불투명하거나 보이지 않습니다. 이는 투명도를 사용하여 식물과 같은 재질의 셰이프를 만들 때 유용합니다.
페이드 투명도 값이 반사 하이라이트 또는 반사를 포함하여 개체를 완전히 페이드 아웃할 수 있도록 허용합니다. 이 모드는 개체 페이드 인 또는 아웃에 애니메이션 효과를 주려는 경우에 유용합니다. 반사와 하이라이트도 페이드 아웃되므로 투명한 플라스틱이나 유리와 같은 사실적인 투명 재질을 렌더링하는 데는 적합하지 않습니다.
투명 투명 플라스틱 또는 유리와 같은 사실적인 투명 재질을 렌더링하는 데 적합합니다. 이 모드에서는 재질 자체가 투명도 값을 사용합니다(텍스처의 알파 채널과 색조 색의 알파에 따라). 그러나 반사 및 조명 하이라이트는 실제 투명 재질의 경우와 마찬가지로 완전히 선명하게 표시됩니다.
더하기 이전 픽셀 색을 현재 픽셀 색과 합산하는 가산 혼합 모드를 사용하도록 설정합니다. 이는 투명도 정렬 문제를 방지하기 위한 기본 투명도 모드입니다.
사용자 지정 렌더링 모드의 모든 측면을 수동으로 제어할 수 있습니다. 고급 사용 전용입니다.

렌더링 모드 예시 라인업

컬 모드

컬 모드 설명
끄기 면 컬링을 사용하지 않도록 설정합니다. 양면 메시가 필요한 경우에만 컬링을 끄기로 설정해야 합니다.
Front 전면 컬링을 사용하도록 설정합니다.
뒤로 (기본값) 후면 컬링을 사용하도록 설정합니다. 렌더링 성능을 향상시키려면 후면 컬링을 가능한 한 자주 사용하도록 설정해야 합니다.

기본 맵

이 섹션의 기본 함수는 재질의 albedo 색 및 물리적 기반 렌더링 옵션을 제어하는 것입니다.

픽셀 메탈릭당 Unity Standard 셰이더를 사용하여 패리티를 개선하기 위해 채널 패킹을 통해 평활도, 발광 및 폐색 값을 모두 제어할 수 있습니다.

채널 패킹을 사용하는 경우 4개의 개별 텍스처 대신 하나의 텍스처를 샘플링하고 메모리에 로드하기만 하면 됩니다. Substance 또는 Photoshop과 같은 프로그램에서 텍스처 맵을 작성할 때 다음과 같이 직접 패킹할 수 있습니다.

채널 속성
빨강 메탈릭
녹색 폐색
파랑 발광(회색조)
알파 평활도

기본 맵 섹션에는 삼각 매핑 및 슈퍼 샘플 앤티앨리어싱 옵션도 있습니다. Emission 확인란이 선택되면 색이 지정된 배출 텍스처 맵을 추가하는 옵션도 포함되어 있습니다.

삼각 매핑은 프로그래밍 방식으로 메시의 질감을 만드는 기술입니다. 지형, UV가 없는 메시 또는 래프 해제가 어려운 셰이프에 자주 사용됩니다. 이 구현은 세계 또는 로컬 공간 프로젝션, 혼합 평활도 지정 및 표준 맵을 지원합니다. 사용되는 각 텍스처에는 세 가지 텍스처 샘플이 필요하므로 성능이 중요한 상황에서는 드물게 사용합니다.

멀리서 볼 때 디테일이 중요한 아이콘 또는 이미지를 표시하는 모든 재질에는 슈퍼 샘플 앤티앨리어싱을 사용해야 합니다.

렌더링 옵션

렌더링 옵션은 주로 재질의 조명 설정을 제어합니다. 이 재질 섹션에는 표면의 색, 반투명도 또는 위치를 제어하는 몇 가지 다른 기능도 포함되어 있습니다. 조명에 대한 자세한 내용은 아래를 참조하세요.

조명 비교

Fluent 옵션

Fluent는 Microsoft 제품의 UI 구성 요소에서 사용되는 디자인 프레임워크입니다. 이 섹션에는 임의의 표면에서 Fluent 디자인 시스템 원칙을 에뮬레이트하는 데 도움이 되는 몇 가지 기능이 포함되어 있습니다. 맞춤형 Fluent 셰이더를 원한다면 Graphics Tools/CanvasGraphics Tools/Non-Canvas 셰이더 네임스페이스에서 찾을 수 있습니다.

고급 옵션

Unity 기본 제공 셰이더의 고급 섹션과 유사합니다. 이 섹션에서는 렌더링 순서 및 GPU 인스턴스화 변형을 빌드해야 하는지 여부를 제어합니다. 또한 다양한 효과를 얻기 위해 구성 가능한 스텐실 테스트가 지원됩니다. 예를 들면 포털이 있습니다.

포털 예제

조명

Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더는 조명에 간단한 근사값을 사용합니다. 셰이더는 물리적 정확성 및 에너지 보존을 계산하지 않으므로 빠르고 효율적으로 렌더링합니다. Blinn-Phong은 사용되는 기본 조명 기술이며 프레넬 및 이미지 기반 조명과 혼합되어 물리적 기반 조명을 근사화합니다. 셰이더는 다음과 같은 조명 기술을 지원합니다.

방향성 광원

셰이더가 장면에서 첫 번째 Unity Directional Light의 방향, 색 및 강도를 반영합니다(사용하도록 설정된 경우).

중요

동적 포인트 조명, 스포트라이트 또는 기타 Unity 조명은 실시간 조명에서 고려되지 않습니다. 현재 조명 마스크는 지원되지 않습니다.

구형 고조파

셰이더는 조명 프로브를 사용하여 구형 고조파를 통해 장면의 조명을 근사화합니다(사용하도록 설정된 경우).

중요

구형 고조파 계산은 꼭짓점별로 수행되며 계산 비용을 줄이기 위해 조명 프로브는 혼합되지 않습니다.

라이트맵

정적 조명의 경우 셰이더가 Unity의 라이트맵 시스템에서 빌드한 라이트맵을 반영합니다. 렌더러를 라이트맵을 사용하도록 정적(또는 라이트맵 정적)으로 표시합니다.

성능

Unity Standard 셰이더를 통해 Graphics Tools 표준 음영 시스템을 사용할 때 주요 이점 중 하나는 성능입니다. Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더는 사용하도록 설정된 기능만 활용하도록 설계되었습니다. 그러나 Graphics Tools/StandardGraphics Tools/Standard Canvas 셰이더는 훨씬 더 저렴한 비용으로 Unity Standard 셰이더와 비슷한 미적 결과를 제공하도록 작성되었습니다. 셰이더 성능을 비교하는 간단한 방법 중 하나는 GPU에서 수행되어야 하는 연산 수를 사용하는 것입니다. 계산의 크기는 사용하도록 설정된 기능 및 기타 렌더링 구성에 따라 변동될 수 있습니다.

일반적으로 모바일 혼합 현실 디바이스의 기본 제공 셰이더보다 Graphics Tools Standard 셰이더를 사용해야 합니다. 그러나 RenderDoc와 같은 도구를 사용하여 시나리오를 프로파일하는 것이 항상 좋습니다.

참고 항목