전에 적었던 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을 이용하여 바꾸어 주었습니다. (그냥 값을 변동해주면 되는거라 원하는데로 하셔도 됩니다.)
이런식으로 코드를 마무리하고, 오브젝트에 넣어준 후 실행을 해보면, 잘되는것을 볼 수 있습니다.
이번글은 여기서 마무리 하도록 하겠습니다.