3D Outline

Gusdnd_01·2024년 2월 24일
0

공부

목록 보기
6/16

전에 적었던 Dissolve랑 합쳐서 해볼게요


위 사진이 결과물입니다.


전체적인 노드입니다.


우선 이 그래프를 보게 되면, Position의 Space를 Object로 바꾸어 객체의 모양을 구합니다.
Position 노드는 버텍스나 프레그먼트의 위치를 구해다 주는 겁니다. 여기선 버텍스!

버텍스는 여러가지 정보를 갖고 있습니다. (위치, 노말값 등등...)
이 정보 중에서 노말값을 뽑아 와줍니다, 이러면 버텍스가 갖고있는 노말벡터, 즉 방향이 구해집니다.

Outline이라는 float형 프로퍼티를 추가하여 곱해줍니다.

그 다음 오브젝트의 버텍스 위치를 다시 구해 방향과 수치를 곱한 값을 더해줍니다.

이것을 Vertex의 Position에 연결 해줍니다.

이러면 객체의 버텍스 위치를 다시 연산 해주는 겁니다.(아마도)


그 다음 객체에 실질적으로 보이는 아웃라인을 만들어 보도록 하겠습니다.

아웃라인
우선 먼저 예시를 보았을 때, 실질 객체가 먼저 보이고, 그 다음에 랜더링 해야합니다.


Is Front Face라는 노드인데, 이 노드의 경우 전면이 렌더링 될 경우 true를 반환하고, 아닐 경우 false를 반환해줍니다.

그 후 Branch라는 노드에 Bool값으로 넣어주게 되는데, 이 노드는 Boolean값에 따라 값을 내보내 줍니다.

이 노드의 Out값을 Alpha에 넣어줍니다.

그렇게 되면, 오브젝트의 전면이 렌더링 될 경우, Alpha값은 0이 되고, 아닐 경우 Alpha값은 1이 됩니다.
면의 위치를 조금 옯기면, 면의 뒷면이 보이게 되는데, 이 뒷면을 검정색으로 렌더링 해주는 과정입니다.

근데 이렇게 만들어 놓으면, 전 글에 만들어 놨던 Dissolve와 같이 Material을 넣었을 때,


이런 식으로 검정 부분이 오브젝트의 형태로 남게 됩니다.

이 형상을 없애기 위해 Dissolve와 Outline을 합쳐보겠습니다.

우선 Dissolve같은 경우, Alpha값만 바꿔주면 되기에 전에 만들었던 Dissolve 그래프를 가져오겠습니다.

Dissolve같은 경우는 전 글에서 설명 했기 때문에, 생략 하겠습니다.

우선, Dissolve되는 값과 렌더링 값을 모두 보내주어야 하기 때문에, 둘을 곱해줍니다.

그 후 Alpha에 연결해주면, 끝입니다.

오브젝트에 넣을때에는 Materials 오브젝트에 하나 추가하는 형식으로 해주시면 됩니다.


결과물입니다.
물론 코드에서 값을 건드릴 수 있는데, 이것 같은 경우는 Material배열을 가져와 이름이 같은 값을 바꾸어줍니다.


우선 Material 배열을 선언하고, Awake에서 컴포넌트를 가져와서 그곳에 있는 materials라는 배열을 가져와 줍니다.

이렇게 하면 그 오브젝트에 있는 모든 Material을 가져올 수 있습니다.

그 후 Update에서 foreach문을 이용하여 Material의 프로퍼티값을 Sin을 이용하여 바꾸어 주었습니다. (그냥 값을 변동해주면 되는거라 원하는데로 하셔도 됩니다.)

이런식으로 코드를 마무리하고, 오브젝트에 넣어준 후 실행을 해보면, 잘되는것을 볼 수 있습니다.

이번글은 여기서 마무리 하도록 하겠습니다.

profile
테크와 아름다움을 좋아하는 게임 이펙터

0개의 댓글

관련 채용 정보