ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shader 기초지식 & 구에 색상 집어넣기
    유니티/게임그래픽 2024. 2. 18. 21:21
     

    Shader, Rendering Pipeline

    "화면에 출력할 픽셀의 위치와 색상을 계산하는 함수" "소프트웨어 명령의 집합으로 주로 그래픽 하드웨어의 렌더링 효과를 계산하는데 쓰임" "프로그래밍이 가능한 렌더링 파이프라인을 프로

    sangeun00.tistory.com

    우선 쉐이더와 렌더링 파이프라인에 대한 아주 간단한 설명글이다

     

    그 외에 실전에서 코드를 짜기 위한 아주 간단한 기초지식만 짚고 넘어가자

    우선 모니터의 색은 가산혼합이라는 방식으로 이루어진다. RGB가 기본에 색을 더할수록 밝아진다

    RGB 모두가 켜져있다면 (100,100,100)으로 흰색, 모두 꺼져있다면 (0,0,0)으로 검은색

                                       

                                                       빨간색은(100%,0%,0%)   노란색은(100%,100%,0%)

    이걸 float 단위로 적용하면           flaot3(1.0, 0, 0)                        float(1,1,0)   => 1.0, 1 둘다 가능

     

    만약 RGB 세가지의 색을 구현한다면 float3, 여기에 알파까지 추가한다면 float4로 표현한다

     

    flaot3 (0.5,0.5,0.5) + flaot3 (0.5,0.5,0.5) = flaot3 (1,1,1)

     

    flaot3 (1,1,0) + flaot3 (1,0,) = flaot3 (2,1,0)  하지만 실제로 보이는 색상은 (1,1,0) 데이터에는 (2,1,0)으로 저장되어 있다

     

    flaot3 (1,0,0) - flaot3 (0,0,1) = flaot3 (1,0,-1) 하지만 실제로 보이는 색상은 (1,0,0)           데이터는 마찬가지

     

    flaot3 (0.5,0.5,0.5) * flaot3 (0.5,0.5,0.5) = flaot3 (0.25,0.25,0.25)

     

    1 - flaot3(1,0,0) = flaot3(0,1,1)

     

    특히 1은 반전의 역할로 사용될수 있다

     

    여기까지가 알아둬야할 기초지식이었고 이제 실습을 해보자

     

     

    우선 3D에 가볍게 구를 하나 만들어주자

     

    Project 창에서 Shader - Standard Surface Shader 와 Material 을 각각 생성해준다

     

    그리고 Shader를 Material에 넣어줘야 하는데 방법은 두가지이다

    Shader를 잡고 끌어 Material에 드래그하여 넣거나, 아니면 Material안에서 직접 Shader의 이름을 찾아 넣어주거나

    둘 중 어떤 방법이 되었든 성공적으로 넣어준다면

    Material의 Inspector창에 Shader의 이름이 정상적으로 들어간것을 확인할 수 있다

     

    그리고 Material을 구 안 Mesh Renderer안에 넣어주자

    이번에 알게 된건데 드래그를 Scene뷰에 있는 구에 드래그해도 알아서 들어간다

     

    이제 프로젝트 창에 있는 Shader를 클릭하여 스크립트를 연다

     

    Properties 영역. 이곳에 무엇을 적느냐에 따라 Material의 Inspector 출력이 달라진다

    이곳에 코드를 작성하는 방법이다. 헷갈릴때마다 이걸보자. 

    정말 중요한건 Properties 영역에서는 세미콜론을 붙이지 않는다는것이다

     

     

    CGPROGRAM~ ENDCG 부분에 대한 설명이

     

    여기서 알아둬야할건

    1. Input이라는 이름을 가진 구조체에는 엔진으로부터 받아야할 데이터들을 적는다

    2. surf 함수에는 출력되는 부분을 적는다

    3. 이 부분은 아예 다른, CG쉐이더 언어가 적용되기 때문에 대부분의 경우 세미콜론을 붙인다

     

    3번이 정말 중요하다. 난 이거 안헷갈릴줄 알았는데 지난번에 세미콜론 붙여놓고 20분내내 해맸다

    Input 타입은 IN, 출력은 o 이것만 알아두자

    float의 절반이 half, half보다 더 작은건 fixed로 쓰인다

     

    우리가 정말 많이 쓰게 되는건 Albedo와 Emisson이다

    각각 넣고 실행을 돌려본 결과이다. 확실히 Albedo는 구체가 빛의 영향을 받는걸 볼수있다

    반면 Emission은 빛의 영향을 받지 않는것을 볼수 있고 이 때문에 순수한 결과물을 보기 위해서는 Emission을 사용한다고 한다

    '유니티 > 게임그래픽' 카테고리의 다른 글

    UV - Time  (2) 2024.02.20
    UV  (0) 2024.02.19
    이미지 흑백으로 만들기, Lerp 함수  (0) 2024.02.19
    텍스쳐 입력받기  (0) 2024.02.19
    Shader 응용  (1) 2024.02.19
Designed by Tistory.