쉐이더 레퍼런스
쉐이더란?
화면에 출력하는 픽셀의 색을 정해주는 함수의 모음
메터리얼은 폴리곤 - 메터리얼 - 세이더 의 중간단계 일뿐
쉐이더 = 음영(입체감이 생기게해주는)
드로우 콜 (Draw call)
- gpu -> cpu에서 그려달라고 요청하는것, 텍스쳐링 한 장 당 하나씩 올라감
- 아틀라스르 묶어서 한 장으로 사용 했던 이유
랜더링 파이프 라인
1.오브젝트 데이터를 받아온다
2. 정점(Vertex) 쉐이더 -> 점을 이어서 면을
3. 래스터라이즈 -> 면을 쪼개서 칠 할 수있께 해준다.
4. 픽셀쉐이더 / 프래그먼트 쉐이더 ★
- 제작사 마다 처리하는 함수가 다르다.
- 유니티에서 만든 랩핑한 쉐이더랩을 배울것이다.
- CG라는 API 사용 할 것
----
쉐이더 공부 목적
즉, 프로그램내에서 2디가 될때 어떻게 되면서 되는가
한 픽셀의 색을 결정하는 코드를 픽셀쉐이더
RGB(100%, 100%, 100%) // (255, 255, 255) 어도비 // Float3(1.0 .1.0 1.0) //유니티내에서 float3로 사용
색상연산이 가능하다
float3(0.5,0.5,0.5) + float3(0.5,0.5,0.5) = float3(1 , 1, 1)
----
쉐이더 언어종류
HLSL
GLSL
CG //우리는 CG
----
픽셀 쉐이더는 해당 픽셀에 색을 연산해서 출력
알파포함시 float4
float3(2.0, 1.0, 0) // 표현은 1로 하지만 데이터는 2로 남아있음
유니티 쉐이더는 ShaderLab 자체 스크립트 언어사용
1.쉐이더 랩 (자동)
매우 가볍고 하드웨어 호환, 유니티 스크립터로만 되어있음
2.Suface Shader (반자동)
우리는 쉐이더 랩과 CG 서피스 쉐이더를 섞을거임
3. 버텍스 & 프래그먼트 쉐이더 (메뉴얼모드)
----
서피스쉐이더 코드 영역은 세가지로
1.프로퍼티스 (유니티 내에 있는 인스펙터)
2.subShader영역 (유니티 자체 쉐이더 스크립트, 3번 영역을 포함함(CG영역을 포함))
3.CG (CGPROGRAM 부터는 ENDCG까지 CG 프로그래밍 영역이면서도 유니티 스크립터도 사용함)
3번 CG 영역은 다시 3영역으로 나누어진다
1.설정부분
전처리라고도 할 수있고, 스니핏이라고한다
쉐이도의 조명설정, 세부적인 분기설정
2.인풋
이안에는 코드는 엔진으로부터 받아와야할 데이터를 가져온
3.서프함수
색상이나 이미지가 출력되는 부분
=== 우리가 채울 부분은 서프함수 부분이다.
-----
텍스처맵
알베도는 물체가 빛을 받았을때 반사하는 정도를 나타내는 단위
(색상과 빛의 연산을 한꺼번에)
Emission // 포면에 방출되는 빛의 색상과 강도를 제어
(쉽게말하면 _ 빛을 계산을 안한다.)
Shader data Types
float의 1/2 크기는 half, 더 작은 크기는 fixed이다.
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
= 뒤에 값이 c 에 들어간다.
c 를 빼니깐 에러가 뜰것이다.
c = 컬러를 결정하는 메서드
연산시 주의사항
같은 자리수만 연산된다
예외적으로는 한자리와는 언제나 가능하다
half3(1,0,0) + 1 (1,1,1) =
------
서프함수에서 변수도 사용가능
프로퍼티스 영역을 제거하면 밖에 인스펙터에서도 사라진다.
_Test2 ("Test 2", Float) = 1.3
_ 이름 ("밖에서 표현", 타입 또는 함수) = 초기값
tex2D // float 계열로 분류 되지 않는 sampler
// 텍스쳐는 UV 좌표와 함께 계산되어야지 float4로 출력 할 수있다.
// 아직 UV와 계산되지 않은 텍스쳐는 색상(float4)로 나타 낼 수 없다.
// 이때까지는 smapler 부른다. (아직 색상 정보를 알 수 없는 상태)
// 텍스처는 즉 uv와 함께 계산 되어야한다.
_TestTexture ("Test Texture!". 2D) = "White" {} // 이렇게 쓴다.
-----
프러퍼티는 세미콜론 안쓰고,
서프함수에서는 써야함
----
----
'Unity > 그래픽스프로그래밍' 카테고리의 다른 글
0503 _ 그래픽스 움직이는 불 만들기 (0) | 2021.05.03 |
---|---|
0503 _ 그래픽스 _Time.y (y/20 , y , y*2, y*3) 써서 UV 맵 움직이기 (0) | 2021.05.03 |
0503_그래픽스 UV 만 출력해보기, UV 움직여보기 (0) | 2021.05.03 |
0503 _ 그래픽스 이미지(알파 포함) 텍스쳐를 받아서 출력 //lerp 사용 (0) | 2021.05.03 |
0503 _ 그래픽스 프로퍼티 뚫고, 그 값으로 출력하기 (0) | 2021.05.03 |