Unity 컴퓨트 셰이더 가이드

이 문서는 Unity의 컴퓨트 셰이더에 관한 기본 개념과 활용 방법을 설명합니다. 컴퓨트 셰이더는 GPU에서 실행되며 대량 병렬 GPGPU 알고리즘을 지원합니다. Unity에서의 활용 방법에 대해 자세히 알아보겠습니다.

컴퓨트 셰이더란?

  • 정의: 컴퓨트 셰이더는 노멀 렌더링 파이프라인과 별도로 GPU에서 실행되는 셰이더 프로그램입니다. 이를 통해 대량의 데이터 처리를 효율적으로 수행할 수 있습니다.
  • 사용 목적: 주로 게임의 성능 향상 혹은 복잡한 데이터 처리를 위해 사용됩니다.

지원 플랫폼

컴퓨트 셰이더는 다양한 플랫폼에서 지원됩니다:

플랫폼 API
Windows & Windows Store DirectX 11 / DirectX 12
Mac OS & iOS Metal
Android, Linux, Windows Vulkan
Linux, Windows OpenGL (최신 버전 지원)

컴퓨트 셰이더 파일

컴퓨트 셰이더 파일은 .compute 확장자를 가지며, HLSL 언어로 작성됩니다. 최소한 하나의 컴퓨트 커널을 포함해야 합니다.

기본 예제

다음은 출력 텍스처를 빨간색으로 채우는 기본 컴퓨트 셰이더 예제입니다:

// test.compute

#pragma kernel FillWithRed

RWTexture2D<float4> res;

[numthreads(1,1,1)]
void FillWithRed (uint3 dtid : SV_DispatchThreadID)
{
    res[dtid.xy] = float4(1,0,0,1);
}

컴퓨트 셰이더 호출하기

컴퓨트 셰이더를 호출하려면 ComputeShader 객체를 생성하고 Dispatch 메소드를 사용하여 실행합니다. ComputeBuffer를 사용하여 데이터를 정의할 수 있으며, 랜덤 쓰기 플래그가 설정된 RenderTextures도 쓸 수 있습니다.

텍스처 샘플러

컴퓨트 셰이더에서 텍스처와 샘플러는 분리된 객체로 다뤄집니다. 샘플러를 정의하려면 다음 규칙을 따릅니다:

  1. 텍스처 이름과 동일한 이름을 사용해야 함.
  2. 미리 정의된 샘플러를 사용해야 함.

예를 들어:

Texture2D MyTex;
SamplerState samplerMyTex;

크로스 플랫폼 지원

Unity는 HLSL을 사용해 컴퓨트 셰이더를 다른 언어로 변환합니다. 그러나 플랫폼마다 지원하는 기능이 다를 수 있으므로 주의가 필요합니다.

플랫폼별 고려사항

  • Metal: 원자 연산을 지원하지 않음.
  • OpenGL ES: 한 번에 4개 이상의 컴퓨트 버퍼 지원하지 않음.

표: RenderTexture GraphicsFormats와 HLSL 타입

GraphicsFormat RenderTextureFormat HLSL 타입 GLSL 이미지 포맷 한정자
R32G32B32A32_SFloat ARGBFloat float4 rgba32f
R16G16B16A16_SFloat ARGBHalf float4/half4 rgba16f
R32G32_SFloat RGFloat float2 rg32f
R32_SFloat RFloat float r32f
R8G8B8A8_UNorm ARGB32unorm float4 rgba8

결론

컴퓨트 셰이더는 Unity에서 복잡한 데이터 처리를 위한 강력한 도구입니다. 위에서 설명한 내용을 바탕으로 더 나아가 효과적인 컴퓨트 셰이더를 작성해 보세요. 추가적으로 Unity의 공식 문서나 커뮤니티 리소스를 통해 더 깊은 학습을 권장합니다.

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