MRTK2 Standard 음영 시스템은 Unity Standard 셰이더와 유사한 시각적 개체를 구현하고, Fluent Design 시스템 원칙을 구현하고, 혼합 현실 디바이스에서 성능을 유지할 수 있는 유연한 단일 셰이더를 활용합니다.
예제 장면
아래의 MaterialGallery 장면에서 MRTK/Examples/Demos/StandardShader/Scenes/셰이더 재질 예제를 찾을 수 있습니다. 이 장면의 모든 재질은 MRTK/Standard 셰이더를 사용합니다.
아래 StandardMaterialComparison 장면의 Unity/Standard 셰이더 예제와 MRTK/Standard 셰이더를 비교하고 테스트하는 비교 장면을 MRTK/Examples/Demos/StandardShader/Scenes/찾을 수 있습니다.
아키텍처
MRTK/Standard 음영 시스템은 Unity 셰이더 프로그램 변형 기능을 사용하여 재료 속성에 따라 최적의 셰이더 코드를 자동으로 생성하는 "uber 셰이더"입니다. 사용자가 재료 검사기에서 재질 속성을 선택하면 사용하도록 설정한 기능에 대한 성능 비용만 발생합니다.
재료 검사기
라는 MixedRealityStandardShaderGUI.csMRTK/Standard 셰이더에 대한 사용자 지정 재질 검사기가 있습니다. 검사기에서는 렌더링 상태를 설정할 때 사용자 선택 및 보조 기능에 따라 셰이더 기능을 자동으로 사용하거나 사용하지 않도록 설정합니다. 각 기능에 대한 자세한 내용은 도구 설명에 대한 Unity 편집기에서 각 속성을 마우스로 가리키세요.
검사기의 첫 번째 부분은 재질의 렌더링 상태를 제어합니다. 렌더링 모드 는 재질이 렌더링되는 시기와 방법을 결정합니다. MRTK/Standard 셰이더의 목적은 Unity/Standard 셰이더에 있는 렌더링 모드를 미러 것입니다. MRTK/Standard 셰이더에는 전체 사용자 제어를 위한 추가 렌더링 모드 및 사용자 지정 렌더링 모드도 포함되어 있습니다.
| 렌더링 모드 | 설명 |
|---|---|
| 불투명 | (기본값) 투명 영역이 없는 일반 단색 개체에 적합합니다. |
| 컷아웃 | 불투명 영역과 투명 영역 사이에 단단한 가장자리가 있는 투명 효과를 만들 수 있습니다. 이 모드에서는 반투명 영역이 없거나 텍스처가 100% 불투명하거나 보이지 않습니다. 투명도를 사용하여 식물과 같은 재료 모양을 만들 때 유용합니다. |
| 페이드 | 투명도 값이 있을 수 있는 반사 강조 표시 또는 반사를 포함하여 개체를 완전히 페이드 아웃할 수 있습니다. 이 모드는 개체가 페이드 인 또는 아웃되도록 애니메이션 효과를 주려는 경우에 유용합니다. 반사와 하이라이트도 퇴색하기 때문에 투명한 플라스틱이나 유리와 같은 현실적인 투명 재료를 렌더링하는 데 적합하지 않습니다. |
| 투명 | 투명 플라스틱 또는 유리와 같은 사실적인 투명 재질을 렌더링하는 데 적합합니다. 이 모드에서는 재질 자체가 투명도 값을 사용합니다(텍스처의 알파 채널과 색조 색의 알파를 기반으로). 그러나 반사 및 조명 하이라이트는 실제 투명 재료의 경우와 마찬가지로 완전히 선명하게 볼 수 있습니다. |
| 첨가제 | 이전 픽셀 색을 현재 픽셀 색과 합산하는 가산 혼합 모드를 사용하도록 설정합니다. 투명도 정렬 문제를 방지하기 위한 기본 투명도 모드입니다. |
| 사용자 지정 | 렌더링 모드의 모든 측면을 수동으로 제어할 수 있습니다. 고급 사용 전용입니다. |
| 컬 모드 | 설명 |
|---|---|
| 해제 | 얼굴 컬링을 사용하지 않도록 설정합니다. 양면 메시가 필요한 경우에만 컬링을 끄기로 설정해야 합니다. |
| 앞 | 전면 컬링을 사용하도록 설정합니다. |
| 뒤로 | (기본값) 백 페이스 컬링을 사용하도록 설정합니다. 렌더링 성능을 향상시키려면 백 페이스 컬링을 가능한 한 자주 사용하도록 설정해야 합니다. |
성능
Unity 표준 셰이더에 MRTK Standard 셰이더를 사용하는 주요 이점 중 하나는 성능입니다. MRTK Standard 셰이더는 활성화된 기능만 활용하기 위해 확장할 수 있습니다. 그러나 MRTK Standard 셰이더는 Unity Standard 셰이더와 비슷한 미적 결과를 제공하기 위해 작성되었지만 훨씬 저렴한 비용으로 작성되었습니다. 셰이더 성능을 비교하는 간단한 방법 중 하나는 GPU에서 수행해야 하는 작업 수를 사용하는 것입니다. 물론 계산의 크기는 사용 가능한 기능 및 기타 렌더링 구성에 따라 변동될 수 있습니다. 그러나 일반적으로 MRTK Standard 셰이더는 Unity Standard 셰이더보다 훨씬 적은 계산을 수행합니다.
Unity Standard 셰이더 통계 예제
MRTK Standard 셰이더 통계 예제
참고
이러한 결과는 Unity 검사기에서 셰이더 자산을 선택하고 본 다음 컴파일 및 코드 표시 단추를 클릭하여 생성할 수 있습니다.
조명
MRTK/Standard 조명에 간단한 근사치를 사용합니다. 이 셰이더는 물리적 정확성 및 에너지 보존을 계산하지 않으므로 빠르고 효율적으로 렌더링됩니다. Blinn-Phong 프레넬 및 이미지 기반 조명과 혼합되어 물리적 기반의 대략적인 조명에 혼합된 기본 조명 기술입니다. 셰이더는 다음과 같은 조명 기술을 지원합니다.
방향 광원
셰이더는 장면에서 첫 번째 Unity 방향 조명의 방향, 색 및 강도를 준수합니다(활성화된 경우). 동적 점 조명, 스폿 조명 또는 기타 Unity 조명은 실시간 조명에서 고려되지 않습니다.
구형 고조파
셰이더는 광원 프로브를 사용하여 활성화된 경우 구형 고조파를 사용하여 장면의 조명을 근사화합니다. 구형 고조파 계산은 계산 비용을 줄이기 위해 꼭짓점별로 수행됩니다.
라이트맵핑
정적 조명의 경우 셰이더는 Unity 라이트맵 시스템에서 빌드한 라이트맵을 준수합니다. 렌더러를 정적(또는 라이트맵 정적)으로 표시하여 라이트맵을 사용하기만 하면 됩니다.
가리키기 표시등
- 가리키기 표시등 참조
근접 조명
- 근접 조명 참조
경량 스크립팅 가능한 렌더링 파이프라인 지원
MRTK에는 개발자가 MRTK 셰이더를 사용하여 Unity LWRP(경량 스크립트 가능 렌더링 파이프라인)를 활용할 수 있도록 하는 업그레이드 경로가 포함되어 있습니다. Unity 2019.1.1f1 및 경량 RP 5.7.2 패키지에서 테스트되었습니다. LWRP 시작에 대한 지침은 이 페이지를 참조하세요.
MRTK 업그레이드를 수행하려면 Mixed Reality 도구 키트 - 유틸리티 ->> 경량 렌더링 파이프라인용 MRTK Standard 셰이더 업그레이드를 선택합니다.
업그레이드가 수행되면 MRTK/Standard 셰이더가 변경되고 마젠타(셰이더 오류) 재질이 수정되어야 합니다. 업그레이드가 성공적으로 수행되었는지 확인하려면 콘솔을 경량 렌더링 파이프라인에 사용할 업그레이드된 자산/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader로 검사.
UGUI 지원
MRTK Standard 음영 시스템은 Unity 기본 제공 UI 시스템에서 작동합니다. Unity UI 구성 요소에서 unity_ObjectToWorld 행렬은 그래픽 구성 요소가 있는 로컬 변환의 변환 행렬이 아니라 부모 Canvas의 변환 행렬입니다. 많은 MRTK/Standard 셰이더 효과를 사용하려면 개체 배율을 알려야 합니다. 이 문제를 해결하기 위해 는 ScaleMeshEffect.cs UI 메시를 생성하는 동안 크기 조정 정보를 UV 채널 특성에 저장합니다.
Unity 이미지 구성 요소를 사용하는 경우 Unity UI가 추가 꼭짓점을 생성하지 못하도록 원본 이미지에 대해 "None(Sprite)"을 지정하는 것이 좋습니다.
MRTK 내의 Canvas는 필요한 경우 를 ScaleMeshEffect.cs 추가하라는 메시지를 표시합니다.
텍스처 결합기
픽셀당 Unity Standard 셰이더를 사용하여 패리티를 개선하기 위해 채널 패킹을 통해 부드러움, 발광 및 폐색 값을 모두 제어할 수 있습니다. 예시:
채널 패킹을 사용하는 경우 4개의 개별 텍스처 대신 하나의 텍스처를 샘플링하고 메모리에 로드하기만 하면 됩니다. Substance 또는 Photoshop과 같은 프로그램에서 텍스처 맵을 작성할 때 다음과 같이 압축할 수 있습니다.
| 채널 | 속성 |
|---|---|
| 빨간색 | 금속 |
| 녹색 | 폐색 |
| 블루 | 배출(그레이스케일) |
| 알파 | 부드럽게 |
또는 MRTK 텍스처 결합자 도구를 사용할 수 있습니다. 도구를 열려면 Mixed Reality 도구 키트 - 유틸리티 ->> 텍스처 결합기를 선택하여 아래 창을 엽니다.
이 창은 Unity Standard 셰이더를 선택하고 "Standard 재질에서 자동 채우기"를 클릭하여 자동으로 채워질 수 있습니다. 또는 빨강, 녹색, 파랑 또는 알파 채널당 텍스처(또는 상수 값)를 수동으로 지정할 수 있습니다. 텍스처 조합은 GPU 가속이며 입력 텍스처가 CPU에 액세스할 수 있도록 요구하지 않습니다.
추가 기능 설명서
다음은 MRTK/Standard 셰이더에서 사용할 수 있는 몇 가지 기능 세부 정보에 대한 추가 세부 정보입니다.
기본 클리핑
- 기본형 클리핑을 참조하세요.
메시 윤곽선
많은 메시 개요 기술은 사후 처리 기술을 사용하여 수행됩니다. 사후 처리는 뛰어난 품질의 개요를 제공하지만 많은 Mixed Reality 디바이스에서 엄청나게 비용이 많이 들 수 있습니다. 아래의 OutlineExamples 장면에서 메시 윤곽선의 사용을 보여 주는 장면을 MRTK/Examples/Demos/StandardShader/Scenes/찾을 수 있습니다.
MeshOutline.cs 및 MeshOutlineHierarchy.cs 는 메시 렌더러 주위에 윤곽선을 렌더링하는 데 사용할 수 있습니다. 이 구성 요소를 사용하도록 설정하면 설명되는 개체의 추가 렌더링 패스가 도입되지만 모바일 Mixed Reality 디바이스에서 정상적으로 실행되도록 설계되었으며 사후 프로세스를 활용하지 않습니다. 이 효과의 제한 사항으로는 방수가 아니거나 양면이 필요한 개체에서 잘 작동하지 않으며 겹치는 개체에서 깊이 정렬 문제가 발생할 수 있습니다.
개요 동작은 MRTK/Standard 셰이더와 함께 사용하도록 설계되었습니다. 윤곽선 재질은 일반적으로 단색이 아닌 색이지만 다양한 효과를 발휘하도록 구성할 수 있습니다. 개요 자료의 기본 구성은 다음과 같습니다.
- 깊이 쓰기 - 윤곽선이 다른 개체의 렌더링을 방지하지 않도록 개요 재질에 대해 사용하지 않도록 설정해야 합니다.
- 꼭짓점 압출 - 개요를 렌더링하려면 사용하도록 설정해야 합니다.
- 부드러운 노멀 사용 - 이 설정은 일부 메시에 대해 선택 사항입니다. 압출은 꼭짓점 법선을 따라 꼭짓점을 이동하여 발생하며, 기본 법선을 따라 돌출되는 일부 메시에서는 윤곽선에서 불연속성이 발생합니다. 이러한 불연속성을 해결하기 위해 이 상자를 검사 에서 생성되는 또 다른 부드러운 정상 집합을 사용할 수 있습니다.
MeshSmoother.cs
MeshSmoother.cs 는 메시에서 부드러운 노멀을 자동으로 생성하는 데 사용할 수 있는 구성 요소입니다. 이 메서드는 공간에서 동일한 위치를 공유하는 메시의 꼭짓점을 그룹화한 다음 해당 꼭짓점의 평균을 계산합니다. 이 프로세스는 기본 메시의 복사본을 만들고 필요한 경우에만 사용해야 합니다.
- 을 통해
MeshSmoother.cs생성된 부드러운 노멀 - 사용되는 기본 정규체는 큐브 모서리 주위의 아티팩트입니다.
스텐실 테스트
다양한 효과를 얻기 위해 구성 가능한 스텐실 테스트 지원을 기본으로 제공합니다. 포털과 같은 경우:
인스턴스 색 지원
수천 개의 GPU 인스턴스 메시에 고유한 재질 속성을 제공하는 인스턴스화된 색 지원:
Triplanar 매핑
삼각 매핑은 프로그래밍 방식으로 메시를 텍스처하는 기술입니다. 지형, VS가 없는 메시 또는 셰이프 래프 해제가 어려운 경우에 자주 사용됩니다. 이 구현은 월드 또는 로컬 공간 프로젝션, 혼합 부드러움 사양 및 일반 맵 지원을 지원합니다. 사용되는 각 텍스처에는 3개의 텍스처 샘플이 필요하므로 성능이 중요한 상황에서는 드물게 사용합니다.
꼭짓점 압출
월드 공간의 꼭짓점 압출입니다. 압출 경계 볼륨 또는 인/아웃 메시 전환을 시각화하는 데 유용합니다.
기타
albedo 최적화를 제어하는 확인란입니다. albedo 텍스처가 지정되지 않은 경우 최적화 albedo 작업을 사용하지 않도록 설정합니다. 이는 원격 텍스처 로드를 제어하는 데 유용합니다.
이 상자를 검사.
픽셀당 클리핑 텍스처, 로컬 에지 기반 앤티앨리어싱 및 일반 맵 크기 조정이 지원됩니다.