본문 바로가기

유니티 쉐이더 스타트업

(11)
[ 유니티 쉐이더 스타트업 ] 09 . Lambert / Blinn Phong [ 유니티 내장 라이팅 구조 ] [ Standard Shader ] 유니티 5부터 기본으로 적용된 쉐이더인 Standard Stader의 라이팅은 좋은 라이팅 구조이지만 물리기반 쉐이더 라이트이기에 모바일과 같은 저사양 기기에서 구동하기는 무겁다 . 그렇기에 유니티 내부에는 4버전 이전부터 사용하던 라이트 구조가 남아있다 . 물리 기반 쉐이더보다 품질은 떨어지지만 상대적으로 가볍기에 물리기반 쉐이더를 사용 할 필요 없이 가볍게 처리해야 하는 모바일 프로젝트에 적합한 쉐이더 구조이다 . [ Standard Shader의 구조체 ] 다음은 물리기반쉐이더의 구조체이다 . struct SurfaceOutputStandard { fixed3 Albedo; (물체의 기본 색상) fixed3 Normal; (Norm..
[ 유니티 쉐이더 스타트업 ] 08 . SurfaceOutputStandard 사용하기 [ Standard Shader (스탠다드 쉐이더) ] [ 물리 기반 쉐이더 ] 유니티 5.0이 되면서 , 유니티도 물리 기반 쉐이더 시스템을 도입하였다 . 물리 기반 쉐이더란 ? =>주변 환경에 따른 재질 변화를 물리 법칙에 기반하여 실시간으로 재질을 구현해주는 사실적인 쉐이더 표현 기법이다 . [ Standard Shader ] 유니티의 기본 쉐이더 Standard Shader는 대표적인 물리 기반 쉐이더이다 . 지금까지 사용했던 o.Albedo / o.Emission등이 모두 물리 기반 쉐이더의 요소이다 . SurfaceOutputStandard 구조체의 요소는 다음과 같다 . struct SurfaceOutputStandard { fixed3 Albedo; fixed3 Normal; fixed3 ..
[ 유니티 쉐이더 스타트업 ] 07 . 버텍스 컬러 이용하기 [ 버텍스 컬러 적용하기 ] [ Vertex Color ] UV와 같이 버텍스 내부에 내장된 값은 Input구조체에 정해진 약속을 통해 받아왔다 . UV외에도 위치 (Position),컬러(Color),노멀(Normal),탄젠트(Tangent) 등이 있다 . 이중 버텍스 컬러를 사용해보자 . [ Vertex Color의 적용 ] 아무것도 하지 않은 버텍스의 컬러는 White : float4 (1,1,1,1) 이다 . 버텍스 컬러의 적용법은 두가지이다 . 3dsMax등의 3D DCC를 통해 그리기 엔진의 자체 기능 이용하기 유니티에서는 PolyBrush를 통해 칠할 수 있다 . https://unity.com/kr/features/polybrush Polybrush Polybrush의 다양한 기능에 대해 ..
[ 유니티 쉐이더 스타트업 ] 06 . UV를 이용하는 법 배우기 [ UV의 기본개념 ] [ UV ] x , y, z의 3차원의 좌표를 u,v 라는 2차원의 좌표로 나타낸 것 (x,y,z 바로 앞의 알파벳 u,v,w중 높이인 w를 뺀 것) UV는 float2로 이루어진 숫자이다 . 2차원 좌표이므로 float2 이고 , 0~1까지로 표현 가능하다 . 유니티와 언리얼은 UV의 배치가 다르다 . [ UV를 시각적으로 확인해보기 ] [ UV ] 텍스쳐 한 장 받는 쉐이더로부터 시작하자 . uv는 두자리 숫자이기에 float2 이다 . 또한 버텍스에 이미 들어가 있는 데이터이기에 유니티로 부터 받아야 한다 . 이와 같이 유니티 내부로 부터 받는 데이터는 Input 구조체 안에 선언해야 한다 . 그러므로 uv_MainTex가 _MainTex의 uv이다 . 또한 해당 uv는 su..
[ 유니티 쉐이더 스타트업 ] 05 - 2 . Surface Shader를 활용한 텍스쳐 제어 [ 텍스쳐 한장만 출력하는 쉐이더 만들기] [ 불필요한 코드 지우기 ] 새로운 Surface Shader를 생성한다 . _Color / _Methalic / _Glossiness와 기타 주석 , 전처리기등을 지운 텍스쳐만을 출력하는 코드이다 . 위 코드는 앞으로 하게될 작업의 기본적인 코드가 될 것이다 . [ 텍스쳐 출력 살펴보기 ] 1 . Properties _MainText ("Alvedo (RGB)",2D)="White"{} 텍스쳐를 입력받는 인터페이스를 만드는 곳이다 . 각 부분을 자세히 뜯어보자면 _MainTex : 텍스쳐를 입력받는 변수 "Albedo (RGB)" : 이 부분은 Albedo 텍스쳐를 넣는 곳이고 , 알파를 제외한 RGB 채널만 사용한다는 의미이다 . 2D : 해당 인터페이스가 ..
[ 유니티 쉐이더 스타트업 ] 05 - 1 . 기초적인 Surface Shader [ 오브젝트에 마테리얼 적용해보기 ] [ Surface 쉐이더를 Material에 적용하기 ] Assets에서 Create - Shader - Standard Surface Shader로 새로운 Surface 쉐이더를 생성해준다 . Assets에서 Create - Material을 통해 새로운 마테리얼을 생성해준다 . 1 - 2 순으로 드레그 앤 드롭하여 쉐이더를 마테리얼에 -> 마테리얼을 오브젝트에 적용해준다 . [ 쉐이더 코드를 열어 이름을 바꾸기 ] [ Surface 쉐이더 열어보기 ] 생성했던 Surface 쉐이더를 더블클릭하면 위와 같이 비주얼 스튜디오를 통해 열 수 있을 것이다 . 그 전에 배운 구조를 볼 수 있고 , 일반적으로 {} 를 통해 구분하고 있다 . [ 쉐이더 이름 바꾸기 ] 상단의..
[ 유니티 쉐이더 스타트업 ] 04 . 쉐이더랩에 관하여 [ 쉐이더 랩 ] [ 쉐이더랩] https://docs.unity3d.com/kr/530/Manual/SL-Shader.html ShaderLab 구문 - Unity 매뉴얼 Unity의 모든 셰이더 파일은 “ShaderLab”이라는 선언형 언어로 작성되어 있습니다. 이 파일에서 중첩 중괄호 구문은 셰이더를 서술하는 다양한 요소를 선언합니다. 예를 들어, 어떤 셰이더 프로퍼 docs.unity3d.com 유니티 쉐이더의 자체 스크립트 언어를 쉐이더랩이라고 한다 . 다양한 경우의 분기를 쉐이더랩이 자동을 작성해줌으로 사용자는 쉐이더랩의 문법에 맞추어 하나의 쉐이더만 작성하면 된다. [ 제작방식의 종류 ] 쉐이더랩을 이용한 제작방식은 크게 세가지로 나뉜다 . ShaderLab (쉐이더랩)으로만 작성하기 Sur..
[ 유니티 쉐이더 스타트업 ] 03 - 2 . 렌더링 파이프 라인 - 레스터라이저와 프래그먼트 셰이더 [ 레스터라이저] [직전의 상황] 버텍스쉐이더에서 정점3개를 클립공간의 정점3개로 변환하여 레스터이저에게 전달함 레스터라이저는 전달받은 정점으로부터 삼각형을 구성하고, 삼각형을 채우는 프래그먼트를 생성하여 프래그먼트 쉐이더에게 전달할 것이다 . [ 레스터 라이저 ] 이때 , 프리미티브란 원시적인 도형을 말한다 . 스캔변환은 정점들도부터 프리미티브 생성 , 프리미티브를 채우는 점들을 찾아낸다 . 레스터라이저는 생성된 프래그먼트의 값들을 정점들 사이 어떤 위치에 있냐에 따라 보간하여 값 결정한다 . 뷰포트 변환 2*2*1짜리 직육면체 공간에 있던 정점들을 스크린에 대응되는 공간인 스크린 공간으로 옮겨준다 . 스크린 공간은 실제 윈도우 화면(창의 해상)에 맞춰서 구성된다 . 뷰포트 변환을 적용하게 되면 공간의..