Unity HLSL 셰이더 데이터 타입 및 정밀도

이 문서는 Unity에서 HLSL(Higher Level Shading Language)과 관련하여 데이터 타입 및 정밀도에 대해 설명합니다. 여러 플랫폼에서 최적의 성능을 내기 위한 데이터 타입의 선택이 중요한데, 이를 이해하고 활용하는 것이 중요합니다.


기본 데이터 타입

Unity에서 지원하는 주요 데이터 타입은 다음과 같습니다:

데이터 타입 설명
float 고정밀도의 부동 소수점 데이터 타입으로, 일반적으로 32비트입니다.
half 중정밀도의 부동 소수점 데이터 타입으로, 16비트입니다. 성능 개선을 위해 사용됩니다.
fixed 저정밀도의 데이터 타입, 일반적으로 11비트입니다. OpenGL ES 2.0에서만 지원됩니다.

정밀도 비교

  • 고정밀도 (float): 실세계 좌표나 텍스처 좌표와 같은 정밀도가 중요한 계산에 사용합니다.
  • 중정밀도 (half): 방향 벡터나 색상 같은 비교적 정밀도가 덜 중요한 계산에 적합합니다.
  • 저정밀도 (fixed): 그래픽 성능이 중요한 경우 사용되며, 특히 저항력 있는 모바일 장치에서 유용합니다.

부동 소수점 숫자 사용

부동 소수점 숫자는 성능과 메모리 사용에 영향을 미칩니다. Unity의 셰이더 컴파일러가 접미사를 무시하기 때문에, 접미사 없이 직접 정의하는 것이 효율적입니다.

예제

다음은 부동 소수점 계산 방식의 예입니다.

half3 packedNormal = ...;
half3 normal = packedNormal * half(2.0) - half(1.0);

이 코드에서는 half 타입을 이용하여 성능을 최적화합니다.


정수 데이터 타입

정수 데이터 타입은 주로 루프 카운터나 배열 인덱스로 사용됩니다. GPU마다 지원되는 정수 타입이 다를 수 있으므로, 타겟 플랫폼을 고려해야 합니다.


벡터/매트릭스 타입

HLSL에서는 다양한 벡터 및 매트릭스 타입을 제공합니다. 이러한 타입들은 기본 데이터 타입을 기반으로 만들어집니다.

데이터 타입 설명
float3 3D 벡터
float4 4D 벡터
float4x4 4x4 변환 매트릭스

예제

float4 myColor = ...;
float redValue = myColor.r;

이 코드는 색상 벡터에서 빨간색 값만 추출합니다.


텍스처/샘플러 타입

HLSL 코드에서는 일반적으로 텍스처를 다음과 같이 선언합니다.

sampler2D _MainTex;
samplerCUBE _Cubemap;

모바일 플랫폼의 경우, 저정밀도 샘플러로 변환되어 메모리 효율성을 높일 수 있습니다.


성능 및 하드웨어 지원

각 플랫폼의 GPU는 부동 소수점 데이터 타입에 대한 지원이 다릅니다. 다음은 대표적인 모바일 GPU에서 지원되는 데이터 타입의 예시입니다.

GPU 제품군 float half fixed
PowerVR Series 6 32 16 16
Qualcomm Adreno 32 16 16
ARM Mali 32 16 16

성능 팁

  • 모바일 환경에서는 halffixed 타입 사용을 권장합니다.
  • 필요한 경우에만 정밀도를 높일 것을 권장합니다.

결론

Unity에서 HLSL 데이터 타입과 정밀도를 이해하고 적절한 타입을 선택하는 것은 중요합니다. 이를 통해 성능을 최적화하고 메모리 사용량을 줄일 수 있습니다. 더 나은 결과를 얻기 위해 각 타입의 특성을 잘 이해하고 활용해야 합니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA