top of page

(UnityShader) 13 URP Shader Graph

  • 작성자 사진: Nobody
    Nobody
  • 2020년 2월 6일
  • 1분 분량

최종 수정일: 2020년 5월 27일

Vertex Position


Vertex position이란 오브젝트를 이루는 정점의 위치 값을 말 하는 것입니다.


렌더링 파이프라인에 따르면 저 위의 포지션 / 탄젠트 / 노말은 픽셀 쉐이더의 이전 단계인 버텍스 쉐이더로 동작합니다.


ree

노드 옆의 입력 가능 데이터를 보니 Object space 를 넣어달라고 적혀 있습니다.


ree
ree

그렇기 때문에 버텍스 포지션을 변경하려면 같은 Position 노드를 사용합니다. 위의 경우 World position 값을 컬러로 출력한 결과입니다.


피벗의 중심이 월드의 (0,0,0) 이기 때문에 오브젝트의 좌표를 움직이면 색이 변하는 것을 관찰할 수 있습니다.


Object position 값을 컬러로 출력하면 피벗이 오브젝트의 중심이기 때문에 아무리 움직여도 변화가 없습니다.


ree

그렇다면 임의의 숫자를 추가하여 봅시다. 예를 들어 G 채널(y 좌표)에 1을 더해봅시다.


ree

y 축으로 모든 버텍스가 1미터 만큼 움직인 모습입니다.


ree
ree

Time 과 sine 함수를 이용해 y축을 위아래로 1미터 왕복운동으로 움직이도록 노드를 짰습니다.


버텍스 컬러를 사용해서 원하는 부분의 버텍스만 움직이도록 응용해봅시다.


ree

버텍스 컬러의 빨강색을 칠한 부분만 움직이도록 머리에 칠해봅시다.


색의 수치에 따라 움직임의 세기가 달라지게 하기 위해서 R채널 값을 1보다 낮은색으로도 칠합시다.


ree

위와 같이 lerp 함수를 사용해서 원래 오브젝트 포지션 값과 움직이는 오브젝트 포지션 값을 선형 보간 합니다.


ree

R채널의 수치에 따라 버텍스의 움직이는 세기이 다릅니다. 그렇다면 다른 방향으로 버텍스가 움직이게 해봅시다. 예를들어 노말 방향으로 움직이게 하는 것은 어떨까요?


ree

하프 램버트로 사인 타임 그래프를 수직-수평 이동 시켜서 0~1으로 제한하고 그 값을 노말 벡터와 곱해줍니다.


이 값을 포지션에 더해주면 노말 벡터 방향으로 버텍스가 움직입니다.


ree

노말 방향으로 움직이게 했더니 완전 호빵맨 처럼 부풀어버립니다. 수치가 너무 크기 때문입니다. 0.2 정도를 곱해서 움직임을 줄여줍시다.


ree

버텍스 컬러로 원하는 부분만 노말 방향으로 버텍스가 움직이게끔 노드를 작성했습니다.


ree

잘 작동합니다.

Comments


bottom of page