본문 바로가기

Unity3D/shader_스터디

[Unity 쉐이더] properties 추가

내용 정리

 

  • 쉐이더 언어
  • 유니티 쉐이더 언어

 

  • 레거시에서 쉐이더 생성
  • 이름 설정
  • properties 추가

코드로 돌아온 나

 

 

 

쉐이더 언어

프로그래밍 언어는 종류가 많다 각 소프트웨어, 플렛폼에 따라 주로 사용하는 언어가 다르듯이 쉐이더에도 주로 사용되는 언어들은 아래와 같습니다.

 

HLSL: 고급 쉐이더 언어 (High Level Shader Language) DirectX에 동작하는 언어.

GLSL: OpenGL 쉐이더 언어(OpenGL Shading Language) 이름대로 OpenGL에 동작하는 언어.

CG: (C for Graphics) nVidia에서 제작한 언어.

 

이 세 언어들은 서로 유사해 하나를 먼저 배우면 나머지 언어를 익히는데 큰 어려움이 없다고한다.

HLSL과 CG는 서로 공동 개발했고, 브랜딩 이름이 다른 거라고 함.

 

 

Shader Lab

유니티에서는 멀티 플렛폼 개발을 지원하죠. 여러 플렛폼에 대응하기 위한 자체 언어를 개발했는데 그것이 Shader Lab입니다.

코드를 작성하면 플렛폼에 따라 유니티내에서 자체 변환을 해주지만 자체 스크립트 언어만으로는 제약이 많았기 때문에 내부에서 CG를 같이 사용할 수 있게 하였습니다.

 

작성법,CG의 비율에 따라 나뉜 쉐이더를 만들 수 있는 방법이 나뉩니다.

- Surfase Shader

- Fragment Shader (Surfase Shader보다 더 세부적인 부분까지 수동으로 짤 수 있다. 숙련자용)

- Fixed function Shader

 

 

 


레거시로 진행합니다.

 

 

이제 직접 해봅시다. 지금 사용할 것은 Surfase Shader입니다. 

 

Standard Surface Shader를 클릭하면 쉐이더가 생성됩니다. 이 상태에서 이름도 바로 지어 줍니다.

처음 생성시 지정된 이름으로 쉐이더 내에서 이름으로 지정되기 때문에 후에 Project에서 이름을 변경해도 쉐이더 이름은 변경되지 않습니다.

 

 

 

새로 Standard Surface Shader를 생성해 이름을 지어줬습니다.

생성한 쉐이더 위에서 우클릭 후 머티리얼을 생성하면 해당 쉐이더가 적용된 머티리얼이 생성됩니다.

3D Object를 하나 생성해 머티리얼을 적용해 둡시다.

 


 

준비를 끝냈으면 생성한 쉐이더를 더블 클릭해 비쥬얼 스튜디오를 열어줍니다.

설치되어있지 않다면 실행되지 않습니다. 설치했는데도 열리지 않을 시 우클릭>Show in Explorer>쉐이더 파일에 직접 연결 프로그램을 설정해줍니다. 

 

비쥬얼 스튜디오가 실행되면 아래와같은 코드를 확인 할 수 있습니다.

SubShader블록의 CGPROGRAM와 CGEND 내에서는 CG를 사용하고 그 외는 Shader Lad을 사용합니다.

 

 

 

 

이름 변경

코드 맨 위에는 해당 쉐이더의 이름이 있습니다. 여기서 이름을 수정 가능합니다.

 

 


Properties

 

코알못도 알아볼 수 있는 Properties문법

하지만 2년 전에 찍어먹기만 했던 사람은 못 알아 듣는 용어가 많습니다.

 

 

Properties 문법은 주로 아래와 같은 구조로 이루어져 있습니다.

_변수이름 ("인터페이스 이름" , 프로퍼티 종류 ) = 디폴트값

 

 

변수가 뭐인지에서 부터 막힘.

변수는 간단히 설명하면 정보를 저장 할 수 있는 공간에 이름을 붙인 것입니다.

컴퓨터 메모리에 존재하며, 정보를 저장하기 위한 공간, 그 공간을 쉽게 찾기 위해 이름을 지정하는 것입니다.

그래서 비유로 상자 이미지가 많이 보이죠. 상자 만큼은 잘 기억하고있음

 

디폴트 값은 초기에 설정할 값을 입력합니다.

 

머티리얼의 Properties(속성)에서 볼 수 있는 인터페이스를 제작해봅시다.

노드를 이용해 쉐이더를 제작해봤다면 익숙한 단어들이 보입니다.

 


 

Range

inspector에 float1의 숫자값을 최소, 최대가 정해져 있는 슬라이더로 나타낼 수 있습니다. 노드에서는 Vecter1의 Slide 모드와 같습니다

Range는 주로 어떤 값의 수치를 빠르고 쉽게 지정하기 위해서 사용됩니다. (금속, 채도 같은 수치들)

  

슬라이더에는 최소, 최대 값을 지정할 필요가 있기 때문에 해당 프로퍼티를 지정 후 옆에 (최소값, 최대값)이 들어갑니다.

 

_Name ("display name" , Range (min,max)) = number

 

 

 

 

Float

inspectorfloat1의 숫자값을 나타낼 수 있습니다. 노드에서는 Vecter1과 같습니다.

제한 없이 수치를 조절할 수 있습니다. 정수 실수 모두 Float으로 가능

_Name ("display name" , Float) = number

 

 

 

Vector

 

inspector에서 float4의 숫자값을 지정할 수 있습니다. 

디폴트 값을 지정할 때도 float4(0,0,0,0)를 값을 입력해 줘야 합니다.

float을 세로로 나열하기 싫어서 쓰기도 한다고 함

  

_Name ("display name" , Vector) = (number, number, number, number)

 

 

Color

 

inspector에서 빠르게 색상을 지정할 수 있습니다. color에서는 디폴트 값을 지정할 때 float4(0,0,0,0)를 이용해 색상을 나타냅니다.  

 

기존 머티리얼에 있는 변수명과 전부 같게 하는바람에 디폴트값이 흰색으로 고정되는 일이 있었습니다. 머쓲ㅎㅎ 변수명 확인을 꼼꼼하게 하자!

 

_Name ("display name" , Color) = (number, number, number, number)

 

 

HDR을 붙이면 이미션과 같이 0~1이상, 이하의 수로 발광 효과도 나타낼 수 있습니다.

HDR은 High Dynamic Range의 약자로 0(검정)~1(흰색) d이상, 이하로 더 어둡고 더 밝음을 나타낼 수 있습니다. 

 

[HDR]_Name ("display name" , Color) = (number, number, number, number)

 

 

2D(Texture )

 

inspector에서 빠르게 텍스쳐를 지정할 수 있습니다. 

color에서는 디폴트 값을 지정할 때 색상 명으로 지정해 줍니다. 흰색, 검정 외에도 빨강, 초록 등의 색상으로도 지정이 가능하다합니다. 

 

텍스쳐의 디폴트값은 사용되는 텍스쳐에 맞게 지정해줍시다. 예를들어 Metallic이나 Smoothness 등 수치를 조절하는 텍스쳐일 경우 텍스쳐를 사용하지 않는 경우를 감안해 0인 검정으로 지정해두는 것이 좋습니다. 

  

_Name ("display name" , Color) = (number, number, number, number)

 

텍스쳐에는 2D 텍스쳐 외에도 다른 종류가 있습니다. (잘 사용안함)

Rect, Cube, 3D

 

 


 

 

이렇게 지금까지 프로퍼티 인터페이스를 추가해 보았습니다. 

이것저것 추가해서 건들었는데도 머티리얼에 변화가 없는 이유는 내부 코드랑 연결되지 않은 빈껍데기 인터페이스이기 때문입니다.

어서 뭔가 퐉퐉 만들어보고 싶네요.

 

 

코드 구경을 오랜만에 하니까 이세계같고 좋네요. 다음에 또 봅시다.

'Unity3D > shader_스터디' 카테고리의 다른 글

[Unity 쉐이더] Lerp  (0) 2021.03.15
[Unity 쉐이더] 색상 연산  (0) 2021.03.08
[쉐이더] 버텍스 컬러 활용  (0) 2021.02.12
[쉐이더]UV와 UV 애니메이션  (0) 2021.01.30
[쉐이더]색깔 놀이2_Lerp  (0) 2021.01.23