ShaderGraph를 만지다보면, lightDirecion 노드가 없다는걸 당황하게 됩니다.
Shader 를 조금 배우다 보면 바로 나오는 NdotL을 구현할 수 없다는데 당황하게 되는데요,
뭐.. 요샌 그게 추세이니까 -_- ;
그래서 .. 그냥은 못 쓰고 강제로 꺼내와야 쓸 수 있게 해 놓았습니다. (네가 왜 라이트를 건드리고 그래? 라는 느낌)
사실 여기 있는
내용인데요, 조금 쉽게 설명해 보겠습니다. 저도 공부할겸.
일단 언릿 그래프를 하나 만듭시다.
라이트 벡터를 받아와 보죠
유틸리티에 있는 커스텀 펑션을 하나 만듭시다.
커스텀 펑션 노드는 이케 생겼습니다.
경고문같은거 하나 떠 있죠. 초소한 하나의 아웃풋이라도 있어야 한다고.
이거 직접 hlsl 코드를 작성하는 노드입니다. 뭔가 좀 고급 기술을 쓰려면 다 있어야 하죠. 결국 코딩이다 으하하
그리고 톱니바퀴 아이콘을 눌러서 아래와 같이 셋팅합시다.
인풋은 필요 없습니다. 뭔가 값을 입력받을게 아니거든요. 있는 라이트 값을 받아올거기 때문에 아웃풋만 셋팅하면 됩니다.
일단 두 개를 셋팅하죠. 라이트의 방향과 라이트의 색상입니다.
둘 다 float3(vector3) 로 셋팅해 놓으면 되겠지요. 라이트 방향은 3차원 벡터이고 색상도 RGB 니까요.
그리고 그 아래에 Type 에서는 파일과 스트링을 선택할 수 있는데, 파일로 하면 외부 코드를 부를 수 있게 되는거고
스트링으로 하면 직접 입력할 수 있게 만들어 줍니다.
그다지 길지 않을 때에는 스트링으로 해버리는게 좋을듯.
그래서 스트링으로 해 줍니다.
그 다음에는 에러가 난 것 같은 저 꼴보기 싫은 마젠타색 체크박스를 일단 안보이게 해 보겠습니다.
아래와 같이 해 줍니다. 초기화 해주는 거죠.
- Name 에다가 반드시 이름을 써 주세요. 안그러면 에러가 납니다. 함수를 만들어야 하는데 이름이 없는 거거든요
- 그 후에 Direction과 Color 변수에 적절한 값을 넣어 줍니다. 변수 선언할 필요는 없습니다. 아웃풋에서 만든 것 만으로 선언은 충분!
적절한 값을 넣어주고 이름을 맞춰 주면 일단 보라보라의 저주는 풀리게 됩니다.
게다가 저걸 연결해서 출력하면 출력도 잘 된다규 !!!!
좋아요 조금 자신을 찾았으니까 이번엔 다른걸 해 봅시다
지금은 그냥 임의의 값을 넣은것 뿐이니까요 ,제대로 된 값을 넣어야죠
그럼 이번엔 아래처럼 작성해 봅시다
#if SHADERGRAPH_PREVIEW 구문으로, 프리뷰 상태일때에도 에러가 나지 않도록 처리해 줍니다.
그 후에 GetMainLight() 함수로 라이트 정보를 받아오고 이걸 Light 클래스의 light 변수 로 넣어 줍니다 1 2
그리고 거기서 받아와서 Direction 과 Color 에 올바른 값을 넣어 줍시다.
그렇게 하면 우리가 원하는 라이트벡터와 라이트 칼라를 받아올 수 있고, 우리가 아는 Lambert 계산을 할 수 있게 됩니다.
'Shader ' 카테고리의 다른 글
유니티 셰이더 그래프(Unity shadergraph) 칼라 덧셈과 곱셈의 이상한 결과물♥ (0) | 2019.12.28 |
---|---|
유니티 셰이더 그래프 ( Unity Shadergraph): 카메라가 가까이 왔을때 부드럽게 사라지기 (0) | 2019.12.25 |
LWRP(URP) 에서 굴절(Refraction) 만들기 (13) | 2019.10.28 |
유니티 내장 셰이더 함수들 (0) | 2019.09.13 |
Camera Depth Texture : 카메라 뎁스 텍스쳐 (4) | 2019.02.01 |
댓글