황현동 블로그 개발, 인생, 유우머

251123 책리뷰 유니티 쉐이더 스타트업

Tags:

p34 쉐이더

  • 컴퓨터 그래픽에서 최종적으로 화면에 출력해하는 픽셀의 색을 정해주는 함수

p40 렌더링 파이프라인

  • 단계
    • 오브젝트 데이타 임포트
    • 버텍스 쉐이더
    • 래스터라이저
    • 프래그먼트 쉐이더

p41 오브젝트 받아오기

  • 버텍스의 정보
    • 인덱스 넘버
    • 포지션
    • 노멀
    • 컬러
    • UV(Texcoord)

p42 버텍스 쉐이더

  • 로컬좌표계
  • 월드변환행렬을 곱해서, 월드좌표계로 변환.
  • 카메라변환행렬을 곱해서, 카메라 중심점의 상대좌표로 변환.
    • 원근감은 아직 고려되지 않음.
    • 카메라 행렬은 뷰.
    • 오쏘그래픽 프로젝션
    • 모니터에 출력 가능한 상태
  • 프로젝션행렬 곱해서
    • 원근감 부여
    • 흔히 볼수 있는 뷰의 모습
    • 여기까지 하면 폴리곤 덩어리가 완성
    • 픽셀쉐이더를 거치지 않아서, 아직 모니터로 볼수 없음.
    • 단지 3D공간에 존재하는 오브젝트

p45 래스터라이저

  • 화면에 오브젝트를 출력할 준비
  • 래스터라이저
    • 오브젝트가 표시될때 어떤 픽셀로 표시될지 결정

p46 프래그먼트 쉐이더

  • 아직 텍스쳐, 라이팅 없음.
  • 조명, 텍스쳐, 각종 특수효과 연산

p46 간단한 렌더링 프로세스

  • 정점데이타
  • 버텍스 쉐이더
    • 정점좌표변환
  • 정점위치
  • 래스터라이저
  • 픽셀위치
  • 프래그먼트 쉐이더
    • 픽셀색상결정
  • 픽셀색상

p69 버텍스 프래그먼트 쉐이더 작성

Shader "Unlit/SingleColor"
{
    Properties
    {
        _MainColor("MainColor", Color) = (1, 1, 1, 1)
    }
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            float4 vert (float4 vertex : POSITION) : SV_POSITION
            {
                return mul(UNITY_MATRIX_MAP, vertex);
            }
            
            fixed4 _MainColor;
            
            fixed4 frag () : SV_TARGET
            {
                return _MainColor;
            }
            ENDCG
        }
    }
}

p82 쉐이더 프로퍼티

_MyFloat("MyFloat", Range(-10, 10)) = 0
_MyFloat("MyFloat", Float) = 1
_MyFloat("MyFloat", int) = 2

_MyFloat4("MyFloat4", Color) = (0, 0.1, 0.9, 1)
_MyFloat4("MyFloat4", Vector) = (10, 20, 30, 40)

_MySampler("MySampler", 2D) = "white" {}
_MySampler("MySampler", Rect)
_MySampler("MySampler", Cube)
_MySampler("MySampler", 3D)