ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쉐이더(Shader)..(1)
    개발상식/쉐이더(Shader)

     

    안녕하세요.

     

    오늘은 쉐이더(Shaer)에 대해서 알아 보면서

     

    학습과 더불어 나중에 다시 찾아와 보기 위함으로 글을 작성하려고 합니다.


    쉐이더(Shader)에 대해 간략 하게 나마 정점 쉐이더(Vertex Shader)픽셀 쉐이더(Pixel Shader)라는 두가지 주요 구성 요소로 구성 되어 있다고 읽었으며,

    그래픽 처리 파이프라인에서 렌더링하는데 사용되는 프로그램 정도로만 알고 있었기에..

     

    직접 사용해 본적도 없을 뿐이거니와.. 쉐이더(Shader)에 대해 질문을 들었을 때 '아차!' 싶었습니다..

     


     

    우선.. 본론으로 들어가서

     

    셰이더 혹은 쉐이더 라고 불리우는데

     

    유니티 셰이더 라는 말은 똑같이 Unity 게임 엔진에서 사용되는 쉐이더(Shader)를 가리키는 말이며,

     

    물체의 표면에 빛을 반사하거나, 빛을 투과시키는 등의 시각적 효과를 생성하는 데 사용 된다고 합니다.

     

     

    Unity엔진은 다양한 종류의 쉐이더를 지원하며, 개발자들은 이를 사용하여 게임의 시각적 품질을 높이고 원하는 시각적 스타일을 구현 할 수 있다고 하는데요

    즉, 게임의 퀄리티를 높일수 있다는 말 같습니다.(오늘 들은말..)

     

    (쉽게 말해 쉐이더(Shader)를 3D컴퓨터 그래픽에서 물체의 3차원 위치를 나타내는 x,y,z 좌표나, 색상, 텍스처, 조명 등 다양한 시각적 효과를 계산하여 최종적으로 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수 라고 생각 하시면 됩니다.)

     

    *

     

    쉐이더(Shaer)의 언어는 몇가지의 종류가 존재 하는데

     

    그 중 가장 유명하고 보편적으로 넓게 쓰이는 것이 HLSL(High Level Shading Language)

     

    OpenGL에서 사용하는 언어인 GLSL(OpenGL Shading Language)

     

    엔비디아가 마이크로 소프트와 협력하여 만든 언어인 CG(C for Graphics)가 있다고 합니다.

     

    이 세가지 언어는 매우 유사 하기에, 한가지만 배우면 나머지 언어도 쉽게 터득 할 수 있다고 하는데요..

     

    여기에 Plus로 유니티 에서 자체 언어를 만들 었다고 합니다.

     

    정통? 코드가 아닌 스크립트로 이루어져 있다고 하며, 이 쉐이더를 짜는 방식에는 세가지가 있다고 합니다.

     

    1.Shader Lab

    ShaerLab은 유니티에서 쉐이더를 정의하고 구성하는 언어이며, 이 언어를 사용하여 쉐이더의 구조, 기능 및 동작을 제어하고 다양한 시각적 효과를 구현할 수 있습니다.

    ShaderLab을 사용하면 쉐이더의 서브 쉐이더(Subshader),패스(Pass),속성(Properties),태그(Tags) 등을 정의하고 구성 할 수 있다고 합니다.

    즉, 쉐이더의 논리적인 구조와 다양한 부분을 정의하는 언어로서 ShaderLab은 개발자가 복잡한 쉐이더 코드를 더 간단하게 작성 하고 관리할 수 있도록 도와 준다고 합니다.

     

    2.Surface Shader

    Surface Shader는 유니티 엔진에서 제공하는 고수준 쉐이더 프로그래밍 방식이며, 복잡한 쉐이더 코드 작성을 단순화 하여 표면의 머티리얼 특성과 조명에 집중을 할 수 있게 해준다고 합니다.

    Surface Shader를 사용하면 개발자는 주로 머티리얼의 색상,텍스처,반사 등을 정의하고 유니티 엔진이 내부적으로 정점 및 픽셀 쉐이더 코드를 생성하여 사용하며, 이렇게 함으로써 개발자는 더 높은 수준의 추상화로 쉐이더를 작성하고 그 결과를 실제로 렌더링 하는 복잡한 과정을 보다 간단하게 처리 할 수 있다고 합니다.

     

    3.Vertex & Fragment Shader

    Vertex Shader와 Fragment Shader(또는 Pixel Shader)는 렌더링 파이프 라인의 중요한 구성 요소라고 합니다.

     

    (1)Vertext

    정점 쉐이더는 3D모델의 정점 위치와 특성을 변형하고 계산하는 역할을 한다고 합니다.

    이것은 모델의 변형(이동,회전,크기,조절), 법선 벡터 계산, 조명과 카메라 행렬에 기반한 변환 등을 포함 합니다.

     

    (2)Frament Shader(Pixel Shader)

    픽셀 쉐이더는 렌더링된 화면의 각 픽셀에 대한 최종 색상 값을 계산하며, 조명, 그림자,반사,굴절,텍스처 캐핑 등 시각적 효과를 계산하여 화면에 그려 낸다고 합니다.

     

    정점 쉐이더는 모델의 변형과 정점 특성을 계산하고, 픽셀 쉐이더는 최종 색상을 계산하여 그림을 완성 하며,

    이에 반해 Surface Shader는 유니티의 높은 수준의 추상화로 이러한 복잡한 작업을 더욱 간단하게 처리 한다고 합니다.

     

    요약 하자면, Shader Lab은 쉐이더의 구조와 기능을 정의하는 언어.

    Surface Shader는 고수준 쉐이더 작성 방식으로 머티리얼 특성과 조명에 초점을 맞추고 복잡한 코드를 자동 생성.

    Vertex와 Fragment Shaer는 렌더링 파이프라인의 핵심 부분으로 정점 변형과 픽셀 색상 계산을 담당.

     

    한다고 하는데요.

    (제가 전부 이해하고 있고 사용을 할 줄 안다면, 간단 명료하게 작성을 할 텐데..

    실습을 직접 해보지 않아서 그런지 머릿속에 쉽게 그려지지 않습니다)


     

    또한 유니티 쉐이더는 주로 ShaderLab이라는 언어를 기반으로 작성 되고 이 언어를 사용하여 쉐이더의 다양한 단계를 정의 하고 제어 할 수 있다고 하며, (아직 까지 찾아본 바로는..?)

     

    (*정점 쉐이더(Vertex Shader)는 개별 정점의 위치, 법선, 텍스처 좌표 등을 변형하고

    *픽쉘 쉐이더(Pixel Shader)는 각 픽셀의 색상을 계산 한다고 합니다.)

     


    쉐이더(Shader)를 직접 실습 해보며 학습 하기 전,

    (블로그 & 영상 시청중)

     

    쉐이더에 대해 알아 보면서 몇가지 쉐이더에 대한 장점을 찾아 봤는데요.

     

    1.시각적 효과 커스터 마이징

    쉐이더를 이해하면 게임의 시각적 효과를 더욱 세밀하게 컨트롤 할 수 있으며,

    빛,그림자,반사,굴절 등 다양한 시각적 효과를 쉐이더를 사용하여 원하는 대로 조절이 가능하다.

     

    2.고유한 그래픽 스타일 구현

    쉐이더를 활용하여 게임에 독특하고 독창적인 그래픽 스타일을 부여 할 수 있으며,

    게임의 분위기나 테마에 맞는 시각적인 특징을 쉐이더를 통해 구현할 수 있습니다.

     

    3.퍼포먼스 최적화

    쉐이더를 최적화하면 게임의 성능을 향상 시킬 수 있고, 쉐이더 코드를 효율적으로 작성하고 불필요한 계산을 최소화 하여 그래픽 처리의 부담을 줄일 수 있다고 합니다.

     

    4.심화된 그래픽 이해

    쉐이더를 공부하면 그래픽 처리 파이프라인의 작동 방식을 이해할 수 있으며,

    게임 개발에 있어서 더 나은 그래픽 품질과 효율성을 달성하는 데 도움이 된다고 합니다.

     

    5.자원 활용

    쉐이더를 사용하여 텍스처와 모델의 자원 활용을 최적화 할 수 있다고 하는데요

    예를 들어, 쉐이더를 통해 텍스처 압축을 지원 하거나 더 적은 정점 수로 복잡한 모델을 렌더링 할 수 있다고 합니다.

     

    6.기술적인 발전과 경쟁력

    현대 게임 개발은 끊임없는 기술적 발전과 경쟁이 진행되고 있는 가운데, 쉐이더 기술을 익힘으로써 새로운 그래픽 효과를 적용 하거나 업계의 트렌드에 빠르게 대응 할 수 있다고 합니다.

     

    7.개인 창작 및 실험

    쉐이더는 창작적인 요소를 가지고 있으며,

    개발자들은 자신만의 아이디어를 구현하거나 새로운 시각적 실험을 할 수 있다고 합니다.

     

    8.다양한 플랫폼 지원

    유니티 엔진은 다양한 플랫폼을 지원 합니다. 쉐이더를 제대로 이해하고 활용 한다면 다양한 플랫폼에서 일관된 그래픽 경험을 제공할 수 있다고 합니다.


    +@ 되는 수많은 요소 들이 있겠지만.. 이렇게만 봐도 당연히? 개발자가 습득하고 알 고 있어야 하는 부분 인것 같습니다.

     

    아직 까진 어디 부터 해야 할 지 살짝 어려움이 있긴 하지만,

     

    이 모든것은 제 살이 되고 뼈가 되기에 빠르진 않더라고 천천히 하나씩 하나씩 나아 가겠습니다.

     

     

    이 쉐이더(Shader).카테고리 에서 다음 글 부터는 직접 실습하며 

     

    새롭게 알게 된 사실이나 잘못 된 점이 있다면 추가/삭제 및 수정을 하며 찾아 오도록 하겠습니다.

     

    감사합니다.

     

     

    '개발상식 > 쉐이더(Shader)' 카테고리의 다른 글

    쉐이더 그래프_아웃라인  (0) 2023.11.01

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net