티스토리 뷰

728x90

World space UVs

UV를 사용하여 셰이더에게 모델에 렌더링 할 텍스처 부분을 알려줍니다. 일반적으로 메시 UV 채널에 저장된 것을 사용하지만, 특히 사용 가능한 UV 좌표가없는 경우에는 fragment의 표준 공간 위치를 대신 사용하는 것도 유용 할 수 있습니다. 이것을 world space "투영(projected)된"(또는 정렬된) UV 및 평면 텍스처 매핑이라고도합니다.

 

그러나 Position 노드는 3D 벡터를 제공하며 Texture2D를 샘플링하는데 필요한 UV 좌표는 2차원입니다. 따라서 위치 벡터에서 두개의 구성요소만 사용할 수 있습니다. 예를 들어 X 및 Z 구성 요소 (split 노드에서 R및B로 표시됨)를 사용하여 텍스처를 샘플링 할 수 있습니다. Y축은 샘플에 포함되어 있지 않기 때문에 위/아래에서 텍스처를 "projecting"한 결과가 있습니다.

여기서는 스크롤링 텍스처 효과를 만들기 위해 시간이 지남에 따라 UV를 상쇄합니다. 물론 텍스처를 정적으로 만들고 싶다면 이것을 생략할 수 있습니다.

 

좌표가 월드 공간에 있기 때문에 장면에있는 오브젝트의 위치, 회전 및 배율은 좌표에 영향을주지 않습니다. 이것은 다른 크기에서도 여러평면을 사용할 수 있다는 장점이 있으며 텍스처가 원활하게 연결됩니다.

Multiply (또는 Tiling 및 Offset 노드 사용)를 통해 스케일링을 조정하고 Rotate 노드를 통해 회전을 변경할 수 있습니다. 크기 조정, 오프셋 및 회전 값이 개체간에 일관된 한 원활한 연결을 얻을 수 있습니다. 어떤 이유로 텍스처가 오브젝트와 함께 이동하도록하려면 오브젝트 노드에서 오브젝트의 월드 공간 위치를 사용하여 월드 공간 UV를 오프셋 할 수 있습니다. 그러나 이렇게하면 오프셋이 개체마다 다르기 때문에 여러 개체 간의 원활한 연결이 끊어 질 수 있습니다.

Triplanar Mapping

삼면 매핑은 WorldSpaceUV (또는 평면 매핑)를 사용하지만 각 축 방향에 대해 세번 사용합니다. 메쉬 세계 공간 Normal Vector를 기반으로 세가지 텍스처를 혼합합니다. 이는 UV가 텍스처를 너무 많이 늘리거나 메시에 사용할 수없는 경우에 유용 할 수 있습니다 (예 : UV를 생성하지 않는 절차적으로 생성된 콘텐츠).

 

삼면 매핑은 상당히 고급 주제로 간주 될 수 있지만 ShaderGraph에는 이에 대한 기본제공 노드가 있습니다. 하지만 텍스처 입력이 하나 뿐이지만 노드가 사용하는 코드는 입력이 더 많은 경우 여러 텍스처에서 쉽게 작업 할 수 있습니다.

 

위쪽 Y 축이 다른면 (음의 Y 축 포함)과 다른 텍스처를 갖도록하려면 추가 텍스처 샘플 2D 및 Normal Vector를 기반으로하는 마스크와 함께 Triplanar 노드를 사용할 수 있습니다.

 

다음과 같은 것이 작동합니다. 셰이더에 4개의 텍스처 샘플이 있습니다. 이는 나쁘지 않지만 현재는 알베도/색상만 샘플링하고 있습니다. 삼면 매핑을 사용하면서 메탈릭/스페큘러맵 또는 노멀맵을 적용하려는 경우 비용이 많이들 수 있습니다. 명확하게 말하면, 메시에 UV가 있는 경우 텍스처 간의 블렌드를 얻기 위해 삼면 매핑을 사용할 필요가 없습니다. 또한 Normal Vector 및 Lerp 노드를 사용하여 두개의 샘플텍스처2D노드 출력을 블렌딩 할 수 있습니다 (기본 UV을 사용하여 샘플링)

어떤 이유로 삼면 매핑의 각 축에 대해 다른 텍스처를 사용하려면 다중 텍스처 입력이 없기 때문에 삼면 노드가 수행하는 작업을 다시 만들어야합니다. 노드가 어떻게 작동하는지 확인하는데도 유용 할 수 있습니다. 이는 그래프 노드로 또는 사용자 정의 함수 노드를 통해 수행 할 수 있습니다. 문서 페이지에서 노드의 생성 된 코드를 복사 할 수 있으므로 커스텀 함수를 사용하는 것이 더 쉬울 수 있지만 아래에 노드 버전도 포함했습니다.

Multi-texture Triplanar (Albedo/Colour, using Nodes)

아래는 Triplanar 노드가 수행하는 작업을 복제하는 그래프입니다 (기본 유형 설정 사용). 각 샘플 텍스처 2D에 액세스 할 수 있으므로 각 노드에 서로 다른 텍스처를 연결할 수 있습니다. 혼합 기능은 각 축의 양쪽이 혼합되기를 원하기 때문에 절대 값을 사용하여 음수 값을 양수로 뒤집는 법선 벡터를 기반으로합니다. Power는 블렌딩의 양을 제어하며, Blend Vector1 속성 값이 높을수록 텍스처 간의 블렌딩이 더 선명 해집니다. Dot Product 및 Divide 부분은 텍스처가 없으면 결과가 더 어둡게 보이기 때문에 텍스처의 올바른 밝기를 유지하는 것입니다. 각 텍스처의 타일링을 개별적으로 제어하려면 Vector2와 Sample Texture 2D 노드 사이에 Tiling 및 Offset 노드를 추가합니다.

Multi-texture Triplanar (Albedo/Colour, using Custom Function)

void MultitextureTriplanar_float(Texture2D TextureA, Texture2D TextureB, Texture2D TextureC, SamplerState Sampler,
        float3 Position, float3 Normal, float Tile, float Blend, out float4 Out){
    float3 Node_UV = Position * Tile;
    float3 Node_Blend = pow(abs(Normal), Blend);
    Node_Blend /= dot(Node_Blend, 1.0);
    float4 Node_X = SAMPLE_TEXTURE2D(TextureA, Sampler, Node_UV.zy);
    float4 Node_Y = SAMPLE_TEXTURE2D(TextureB, Sampler, Node_UV.xz);
    float4 Node_Z = SAMPLE_TEXTURE2D(TextureC, Sampler, Node_UV.xy);
    Out = Node_X * Node_Blend.x + Node_Y * Node_Blend.y + Node_Z * Node_Blend.z;
}

Custom Function 노드를 사용하는 데 약간의 단점이 있습니다. Shadergraph는 전달 된 텍스처 입력 (텍스처 필터 및 랩 모드 포함)과 관련된 샘플러를 사용하는 방법이없는 것 같습니다. 샘플 텍스처 2D 노드 만이 주어진 텍스처에 대해 자동으로 샘플러를 사용할 수있는 것 같습니다. 사용자 정의 함수의 경우 대신 샘플러를 전달해야하며 입력을 비워두면 선형 필터링 및 반복 랩 모드의 기본값이 사용됩니다.

 

'Unity > Shader Graph' 카테고리의 다른 글

Orthographic Depth  (0) 2021.01.19
UV-Based Nodes  (3) 2021.01.18
Screen Position  (0) 2021.01.15
Voronoi  (0) 2021.01.15
Render Texture  (0) 2021.01.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31