Unity 공식 가이드 문서 요약 및 활용 예제

이 문서는 Unity에서 여러 그래픽스 API를 위한 셰이더 작성에 관한 내용을 다루고 있으며, 다양한 플랫폼 간의 차이점을 이해하고 관리하는 방법을 설명합니다.

그래픽스 API 간의 차이점

Unity는 다양한 그래픽스 API에서 그래픽 렌더링을 관리하는데, 이들 간의 중요한 차이점을 정리하였습니다.

1. 렌더 텍스처 좌표

그래픽스 API 좌표 규칙
Direct3D 타입 좌표가 위쪽에서 0, 아래로 갈수록 증가
OpenGL 타입 좌표가 아래쪽에서 0, 위로 갈수록 증가

이러한 차이는 이미지 이펙트 및 UV 공간에서 렌더링할 때 문제가 될 수 있습니다.

2. 이미지 이펙트

Direct3D 타입 플랫폼에서 이미지 효과의 소스 텍스처가 OpenGL 타입 규칙에 맞게 플립되지 않을 수 있습니다. 예를 들어, 안티앨리어싱을 적용한 후 화면에 다시 렌더링하는 경우, 좌표를 표준화해야 합니다.

코드 예제

// Flip sampling of the Texture: 
// The main Texture
// texel size will have negative Y).
# if UNITY_UV_STARTS_AT_TOP
if (_MainTex_TexelSize.y < 0)
    uv.y = 1 - uv.y;
# endif

3. UV 공간에서 렌더링

Direct3D 타입 투사 좌표가 OpenGL 타입과 일치하도록 좌표를 조정해야 합니다. 이때 ProjectionParams.x 변수의 값을 확인하여 UV 좌표를 변환할 수 있습니다.

코드 예제

float4 vert(float2 uv : TEXCOORD0) : SV_POSITION
{
    float4 pos;
    pos.xy = uv;
    // 指的是上下翻转的投影
    if (_ProjectionParams.x < 0)
        pos.y = 1 - pos.y;
    pos.z = 0;
    pos.w = 1;
    return pos;
}

클립 공간 좌표

그래픽스 API 클립 공간 뎁스의 범위
Direct3D 타입 +1.0 (근접 평면) ~ 0.0 (원거리 평면)
OpenGL 타입 -1.0 (근접 평면) ~ +1.0 (원거리 평면)

클립 공간 좌표의 차이를 해결하기 위해 특정 매크로를 사용하여 자동으로 변환할 수 있습니다.

셰이더 정밀도

모바일 장치와 PC에서 GPU는 데이터 처리 방식이 다릅니다. 따라서 각 플랫폼에서 셰이더의 정밀도를 테스트하는 것이 중요합니다.

4. 셰이더에서의 Const 선언

  • HLSL의 const는 읽기 전용 변수입니다.
  • GLSL의 const는 컴파일 시간 상수입니다.

일관성을 위해 변수를 정의할 때 적절한 타입과 선언 방식을 사용하는 것이 필수적입니다.

셰이더 시맨틱

시맨틱 용도
SV_POSITION 클립 공간 포지션을 출력할 때 사용
SV_Target 프래그먼트 셰이더의 컬러 출력을 지정할 때 사용
PSIZE 버텍스 셰이더에서 메시 포인트의 크기를 정의할 때 사용

Conclusion

이 문서에서는 Unity에서 다양한 그래픽스 API 간의 차이점을 이해하고 이를 해결하기 위한 방법들을 제안했습니다. 각 API의 특성을 고려하여 셰이더를 작성함으로써 최적의 그래픽 성능을 이끌어내는 것이 가능합니다.

추가적으로, 위에서 설명한 코드 스니펫은 필요에 따라 사용자 정의 셰이더에서 직접 활용할 수 있습니다. 이를 통해 더 복잡하고 효과적인 이미지 효과나 렌더링 전략을 구현해 보시기 바랍니다.

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