Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

RigidBody2D 사용하기

참고

데칼은 Forward+ 및 Mobile 렌더러에서만 지원되며 Compatibility 렌더러에서는 지원되지 않습니다.

호환성 렌더러를 사용하는 경우 (대부분) 평평한 표면에 데칼을 투영하기 위한 대안으로 Sprite3D를 사용하는 것이 좋습니다.

데칼은 3D에서 불투명하거나 투명한 표면에 적용되는 투영된 텍스처입니다. 이 투영은 실시간으로 이루어지며 메시 생성에 의존하지 않습니다. 이를 통해 복잡한 메시에 적용할 때에도 성능에 약간의 영향만 미치면서 프레임마다 데칼을 이동할 수 있습니다.

데칼은 투영된 표면에 실제 형상 세부 정보를 추가할 수 없지만 물리 기반 렌더링을 활용하여 완전한 PBR 재료에 유사한 속성을 제공할 수 있습니다.

이 가이드에서 다음 내용을 배울 것입니다:

  • 3D 편집기에서 데칼을 설정하는 방법.

  • 3D 씬에서 게임 플레이 중에 데칼을 만드는 방법(예: 총알 충격)

  • 성능과 품질 사이에서 데칼 구성의 균형을 맞추는 방법.

더 보기

예제 프로젝트를 확인하려면 OS 테스트 데모를 확인하세요: https://github.com/godotengine/godot-demo-projects/tree/master/misc/os_test

표면 위에 임의의 3D 텍스트를 쓰려면 데칼 노드 대신 표면 가까이에 배치된 :ref:`doc_3d_text`를 사용하세요.

사용 사례

정적 함수

때로는 씬에 텍스처 디테일을 추가하는 가장 빠른 방법은 데칼을 사용하는 것입니다. 특히 넓은 표면에 흩어져 있는 흙이나 모래 조각과 같은 유기적 세부 사항의 경우에 그렇습니다. 데칼은 장면에서 텍스처 반복을 끊고 패턴을 더욱 자연스럽게 보이게 만드는 데 도움이 될 수 있습니다. 더 작은 규모에서는 데칼을 사용하여 개체의 세부 변형을 만들 수도 있습니다. 예를 들어 데칼을 사용하여 딱딱한 표면 형상 위에 너트와 볼트를 추가할 수 있습니다.

데칼은 투영된 표면 위에 자체 PBR 속성을 주입할 수 있으므로 발자국이나 젖은 웅덩이를 만드는 데에도 사용할 수 있습니다.

데칼을 사용하여 레벨 지오메트리 위에 추가된 흙

데칼을 사용하여 레벨 지오메트리 위에 추가된 흙

역동적인 게임플레이 요소

데칼은 총알 충격, 폭발 그슬림과 같은 일시적이거나 지속적인 게임플레이 효과를 나타낼 수 있습니다.

AnimationPlayer 노드 또는 스크립트를 사용하면 시간이 지남에 따라 데칼이 희미해지도록(그런 다음 ``queue_free()``를 사용하여 제거) 성능을 향상시킬 수 있습니다.

그림자

얼룩 그림자는 모바일 프로젝트에서(또는 복고풍 아트 스타일을 따르기 위해) 자주 사용됩니다. 저가형 모바일 장치에서는 실시간 조명이 너무 비싼 경향이 있기 때문입니다. 그러나 완전히 구운 조명이 포함된 구운 라이트맵을 사용하는 경우 동적 개체는 해당 조명에서 어떤 그림자도 드리우지 않습니다. 이로 인해 라이트매핑된 장면의 동적 개체가 실시간 조명에 비해 평면적으로 보이고 동적 개체가 거의 떠 있는 것처럼 보입니다.

얼룩 그림자 덕분에 동적 개체는 여전히 대략적인 그림자를 투사할 수 있습니다. 이는 씬의 깊이 인식에 도움이 될 뿐만 아니라 특히 3D 플랫폼 게임에서 게임플레이 요소가 될 수도 있습니다. 얼룩 그림자의 길이를 연장하여 플레이어가 수직으로 떨어질 경우 어디에 착지할지 알 수 있습니다.

실시간 조명을 사용하더라도 얼룩 그림자는 SSAO가 화면 공간 특성으로 인해 너무 비싸거나 너무 불안정한 상황에서 주변 폐색의 한 형태로 여전히 유용할 수 있습니다. 예를 들어 차량의 아래쪽 그림자는 얼룩 그림자를 사용하여 잘 표현됩니다.

개체 비교 시 얼룩 그림자

개체 비교 시 얼룩 그림자

빠른 시작 가이드

노드에서 시그널 연결하기

  1. 노드에서 시그널 연결하기

  2. 인스펙터에서 Textures 섹션을 확장하고 **Textures > Albedo**에서 텍스처를 로드합니다.

  3. 데칼 노드를 개체 쪽으로 이동한 다음 데칼이 보이도록(그리고 올바른 방향으로) 회전합니다. 데칼이 거울처럼 나타나면 180도 회전해 보십시오. **매개변수 > 일반 페이드**를 0.5로 늘려 올바른 방향인지 다시 확인할 수 있습니다. 이렇게 하면 데칼을 마주하지 않는 표면에 데칼이 투영되는 것을 방지할 수 있습니다.

  4. 데칼이 정적 개체에만 영향을 미치도록 의도된 경우 동적 개체에 영향을 주지 않도록 구성하십시오(또는 그 반대). 이렇게 하려면 데칼의 Cull Mask 속성을 변경하여 특정 레이어를 제외하세요. 이 작업을 수행한 후 동적 개체의 MeshInstance3D 노드를 수정하여 가시성 레이어를 변경합니다. 예를 들어 레이어 1에서 레이어 2로 이동한 다음 데칼의 Cull Mask 속성에서 레이어 2를 비활성화할 수 있습니다.

노드 속성(Node Property)

  • 범위: 데칼의 크기입니다. Y축은 데칼의 투영 길이를 결정합니다. 컬링 기회를 개선하여 성능을 향상시키려면 투영 길이를 최대한 짧게 유지하십시오.

텍스처

  • 알베도: 데칼에 사용할 알베도(확산/색상) 맵입니다. 대부분의 경우 이것이 먼저 설정하려는 텍스처입니다. 일반 또는 ORM 맵을 사용하는 경우 알파 채널을 제공하도록 알베도 맵을 반드시 설정해야 합니다. 이 알파 채널은 노멀/ORM 맵이 기본 표면에 얼마나 영향을 미칠지 결정하기 위한 마스크로 사용됩니다.

  • 일반: 데칼에 사용할 일반 맵입니다. 이는 빛이 데칼에 반응하는 방식을 수정하여 데칼에 대한 인지된 디테일을 높이는 데 사용할 수 있습니다. 이 텍스처의 영향은 알베도 텍스처의 알파 채널로 곱해집니다(**알베도 믹스**는 아님).

  • ORM: 데칼에 사용할 폐색/거칠기/금속 맵입니다. 이는 PBR 재질 맵을 저장하는 데 최적화된 형식입니다. 주변 폐색 맵은 빨간색 채널에 저장되고, 거칠기 맵은 녹색 채널에, 금속 맵은 파란색 채널에 저장됩니다. 이 텍스처의 영향은 알베도 텍스처의 알파 채널로 곱해집니다(**알베도 믹스**는 아님).

  • 방출: 데칼에 사용할 방사 텍스처입니다. **알베도**와 달리 이 텍스처는 어둠 속에서 빛나는 것처럼 보입니다.

매개변수

  • 방출 에너지: 방출 텍스처의 밝기입니다.

  • 변조: 알베도 및 방출 텍스처의 색상을 곱합니다. 데칼에 색조를 적용하려면 이 옵션을 사용합니다(예: 데칼 페인트 또는 각 데칼의 변조를 무작위로 지정하여 변형 증가).

  • 알베도 믹스: 알베도 텍스처의 불투명도입니다. 더 투명한 알파 채널이 있는 알베도 텍스처를 사용하는 것과 달리 이 값을 1.0 아래로 줄이면 기본 표면에 대한 일반/ORM 텍스처의 영향이 줄어들지 않습니다. 발자국이나 젖은 웅덩이와 같은 일반/ORM 전용 데칼을 생성할 때 이를 ``0.0``로 설정합니다.

  • 일반 페이드: 데칼의 AABB(축 정렬 경계 상자)`와 대상 표면 사이의 각도가 너무 커지면 데칼이 페이드됩니다. ``0.0` 값은 각도에 관계없이 데칼을 투영하는 반면, 0.999 값은 데칼을 거의 수직인 표면으로 제한합니다. **Normal Fade**를 ``0.0``보다 큰 값으로 설정하면 추가된 일반 각도 계산으로 인해 성능 비용이 적습니다.

세로 페이드

  • 상부 페이드: 표면이 :abbr:`AABB(축 정렬 경계 상자)`(데칼의 투영 각도 방향) 중심에서 멀어짐에 따라 데칼이 페이드되는 곡선입니다. 양수 값만 유효합니다.

  • 낮은 페이드: 표면이 :abbr:`AABB(축 정렬 경계 상자)`(데칼의 투영 각도에서 멀어짐)의 중심에서 멀어짐에 따라 데칼이 페이드되는 곡선입니다. 양수 값만 유효합니다.

거리 페이드

  • 활성화됨: 거리 페이드(LOD 형식)의 활성화 여부를 제어합니다. 데칼은 **Begin + Length**에 걸쳐 페이드 아웃되며, 그 이후에는 컬링되어 셰이더로 전혀 전송되지 않습니다. 이를 사용하면 씬의 활성 데칼 수를 줄여 성능을 향상시킬 수 있습니다.

  • 시작: 데칼이 희미해지기 시작하는 카메라로부터의 거리입니다(3D 단위).

  • 길이: 데칼이 페이드되는 거리(3D 단위)입니다. 데칼은 이 거리에 걸쳐 점차 투명해지며 끝 부분에서는 완전히 보이지 않게 됩니다. 값이 높을수록 페이드아웃 전환이 더 부드러워지며, 이는 카메라가 빠르게 움직일 때 더 적합합니다.

컬링 마스크

  • Cull Mask: 이 데칼이 투영될 VisualInstance3D 레이어를 지정합니다. 기본적으로 데칼은 모든 레이어에 영향을 미칩니다. 이는 데칼을 받는 객체 유형과 그렇지 않은 객체 유형을 지정할 수 있도록 사용됩니다. 이는 동적 개체가 그 아래 지형에 대한 데칼을 실수로 수신하지 않도록 보장할 수 있으므로 특히 유용합니다.

데칼 렌더링 순서

기본적으로 데칼은 :abbr:`AABB(축 정렬 경계 상자)`의 크기와 카메라까지의 거리를 기준으로 정렬됩니다. 카메라에 더 가까운 AABB가 먼저 렌더링됩니다. 즉, 일부 데칼이 동일한 위치에 배치되면 카메라 위치에 따라 데칼 렌더링 순서가 변경되는 것처럼 보일 수 있습니다.

이 문제를 해결하려면 데칼 노드 검사기의 VisualInstance3D 섹션에서 정렬 오프셋 속성을 조정할 수 있습니다. 이 오프셋은 엄격한 우선순위 순서는 아니지만 렌더러가 AABB 크기로 사용할 지침*은 여전히 데칼 정렬 작동 방식에 영향을 미칩니다. 따라서 값이 높을수록 *항상 데칼은 정렬 오프셋이 낮은 다른 데칼 위에 그려지게 됩니다.

데칼이 항상 다른 데칼 위에 렌더링되도록 하려면 정렬 오프셋 속성을 겹쳐질 수 있는 가장 큰 데칼의 AABB 길이보다 큰 양수 값으로 설정해야 합니다. 대신 이 데칼을 다른 데칼 뒤에 그리려면 **정렬 오프셋**을 동일한 음수 값으로 설정하세요.

데칼의 VisualInstance3D 정렬 오프셋 비교

데칼의 VisualInstance3D 정렬 오프셋 비교

성능

데칼 렌더링 성능은 대부분 화면 적용 범위뿐만 아니라 개수에 따라 결정됩니다. 일반적으로 화면 대부분을 덮는 몇 개의 큰 데칼은 주변에 흩어져 있는 많은 작은 데칼보다 렌더링 비용이 더 많이 듭니다.

렌더링 성능을 향상시키려면 위에서 설명한 대로 Distance Fade 속성을 활성화하면 됩니다. 이렇게 하면 먼 데칼이 카메라에서 멀리 떨어져 있을 때 페이드 아웃됩니다(최종 씬 렌더링에는 거의 또는 전혀 영향을 미치지 않을 수 있음). 노드 그룹을 사용하면 사용자 구성에 따라 필수적이지 않은 장식 데칼이 생성되는 것을 방지할 수도 있습니다.

데칼이 렌더링되는 방식도 성능에 영향을 미칩니다. Rendering > Textures > Decals > Filter 고급 프로젝트 설정을 사용하면 데칼 텍스처를 필터링하는 방법을 제어할 수 있습니다. **가장 가까운/선형**은 밉맵을 사용하지 않습니다. 그러나 데칼은 멀리서 보면 거칠게 보입니다. **가장 가까운/선형 밉맵**은 멀리서 보면 더 부드럽게 보이지만 비스듬한 각도에서 보면 데칼이 흐릿하게 보입니다. 이 문제는 최고 품질을 제공하지만 렌더링 속도가 느린 **가장 가까운/선형 Mipmaps Anisotropic**을 사용하여 해결할 수 있습니다.

프로젝트에 픽셀 아트 스타일이 있는 경우 데칼이 가장 가까운 이웃 필터링을 사용하도록 필터를 가장 가까운 값 중 하나로 설정하는 것이 좋습니다. 그렇지 않으면 **선형**을 고수하세요.

제한 사항

데칼은 높이(시차 매핑의 경우)와 같이 위에 나열된 것 이외의 재료 특성에 영향을 줄 수 없습니다.

성능상의 이유로 데칼은 순수하게 고정된 렌더링 로직을 사용합니다. 이는 데칼이 사용자 정의 셰이더를 사용할 수 없음을 의미합니다. 그러나 투영된 표면의 사용자 정의 셰이더는 거칠기 및 금속성 등 그 위에 있는 데칼에 의해 무시되는 정보를 읽을 수 있습니다.

Forward+ 렌더러를 사용할 때 Godot는 데칼 렌더링을 위해 클러스터링 접근 방식을 사용합니다. 데칼은 원하는 만큼 추가할 수 있습니다(성능이 허용하는 한). 그러나 현재 카메라 뷰에 표시될 수 있는 *클러스터 요소*는 기본적으로 512개로 제한됩니다. 클러스터된 요소는 옴니 라이트, 스포트 라이트, decal 또는 :ref:`반사 프로브 <doc_reflection_probes>`입니다. **프로젝트 설정 > 렌더링 > 제한 > 클러스터 빌더**에서 :ref:`Max Clustered Elements<class_ProjectSettings_property_rendering/limits/cluster_builder/max_clustered_elements>`를 조정하여 이 제한을 늘릴 수 있습니다.

모바일 렌더러를 사용할 때 각 개별 메시 *리소스*에는 8개의 데칼만 적용할 수 있습니다. 단일 메시에 영향을 미치는 데칼이 더 많은 경우, 그 중 일부가 메시에 렌더링되지는 않습니다.