셰이더 그래프가 있는 절차적 타일

부인 성명



게임 개발에 관해서는 저도 초보자입니다. 이 작업을 수행하는 가장 좋은 방법은 아니지만 온라인에서 다른 방법을 찾지 못하여 동료 초보자에게 도움이 될 수 있습니다.

실수를 발견하거나 더 나은 해결책이 있으면 의견에 지적하십시오.

목표



그래서 제가 만들고 싶었던 것은 셰이더입니다. 즉, 큐브에 할당한 다음 원하는 대로 크기를 조정할 수 있는 반복 텍스처가 있는 재료입니다. 모든 면에서 동일하게 보여야 했고 타일 크기는 일정해야 했습니다.

처음부터 분명히 하자면, 내가 아는 한 큐브를 사용하는 경우에만 올바르게 작동합니다.

텍스처 만들기



이 예제에서는 Rectangle 및 Eclipse 노드를 사용하여 중앙에 검은색 테두리와 작은 원이 있는 간단한 텍스처를 만들기로 결정했습니다.

여기서는 셰이더 그래프 셰이더를 생성하고 이를 재질에 할당하고 해당 재질을 객체에 할당하는 방법을 이미 알고 있다고 가정하겠습니다.



또한 이 부분은 설명이 필요하지 않다고 가정하겠습니다.

다음은 크기가 조정된 큐브의 텍스처입니다.



타일링 효과



타일링 효과를 만드는 것은 매우 간단합니다. 필요한 것은 Fraction 노드에 연결된 Tiling And Offset 노드뿐입니다. 그런 다음 이 노드를 텍스처 노드(이 경우에는 Rectangle 및 Eclipse)에 연결합니다.

그런 다음 Vector2를 타일링하여 타일 수를 선택할 수 있습니다. 오프셋 Vector2도 있지만 여기서는 사용하지 않겠습니다.



효과가 작동하는 것을 볼 수 있지만 이것은 여전히 ​​우리가 원하는 것이 아닙니다.



타일 ​​크기를 일정하게 만들기



물론 이것은 가장 어려운 부분입니다. 그러나 크기가 조정된 큐브를 개체로 사용하고 있으므로 개체의 배율을 사용하여 타일 수를 결정할 수 있습니다.

셰이더 그래프에서 객체의 스케일을 얻는 것은 매우 쉽습니다. Object 노드에서 얻는 두 가지 속성 중 하나입니다.

따라서 한 면의 타일 수를 얻으려면 스케일을 타일 크기로 나눌 수 있습니다.

타일 ​​크기를 정의하기 위해 Vector2 속성을 만들었습니다. 이 예에서는 .8로 설정했습니다.

하나의 작은 문제가 있다는 것을 알아차렸을 것입니다. 스케일은 Vector3 속성이고 타일링은 Vector2 속성입니다. 그렇다면 필요한 두 축을 어떻게 선택해야 할까요?

이 문제를 해결하려면 Normal Vector 노드로 액세스할 수 있는 법선 벡터가 필요합니다. 법선 벡터는 텍스처 면에 수직입니다. 즉, 법선 벡터를 반전시킨 다음 배율을 곱하면 관련 없는 축이 0인 Vector3를 얻게 됩니다.

음수 값을 피하기 위해 이 프로세스 어딘가에서 Absolute 노드를 사용해야 합니다. 또한 법선 벡터 공간을 Object로 설정합니다. 그렇지 않으면 큐브를 회전시키면 타일이 망가집니다.

마지막으로 할 일은 Vector3에서 0을 제거하여 타일링에 연결할 수 있는 Vector2로 바꾸는 것입니다.

이 문제에 어떻게 접근해야 할지 확신이 서지 않아서 세 개의 입력을 받아 가장 큰 두 개의 입력을 반환하는 다른 용도로 만든 사용자 지정 노드를 재사용했습니다.

내가 했던 것과 같은 방법을 사용하려면 사용자 지정 노드를 만들고 3개의 float 입력(A, B, C)과 2개의 float 출력(X, Y)을 지정합니다. 유형을 문자열로 설정하고 이 코드를 본문에 넣습니다.

bool a = A < B;

if (a) {
bool c=C<A;
Y=B;
X=c?A:C;
}

else {
bool b=C>B;
X=A;
Y=b?C:B;
}


그리고 그게 다야! 큐브는 이제 똑같이 큰 타일로 덮여 있습니다. 그리고 이 셰이더를 사용하여 벽, 바닥 등을 만들 수 있습니다.

다음은 마지막 부분의 구현입니다.



그리고 이것은 우리 큐브입니다. :디



타일이 표면에 완벽하게 맞도록 하려면 타일을 자르지 않고(그림에서처럼) 큐브 크기가 타일 크기로 나눌 수 있는지 확인합니다.

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기