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.

3D 렌더링 제한 사항

소개

성능에 중점을 두기 때문에 실시간 렌더링 엔진에는 많은 제한 사항이 있습니다. Godot의 렌더러도 예외는 아닙니다. 이러한 제한 사항을 효과적으로 해결하려면 해당 제한 사항을 이해해야 합니다.

TextureRect

데스크톱 및 노트북의 경우 8192×8192보다 큰 텍스처는 구형 장치에서 지원되지 않을 수 있습니다. `GPUinfo.org <https://www.gpuinfo.org/>`__에서 대상 GPU의 제한 사항을 확인할 수 있습니다.

모바일 GPU는 일반적으로 4096×4096 텍스처로 제한됩니다. 또한 일부 모바일 GPU는 2의 거듭제곱 크기가 아닌 텍스처 반복을 지원하지 않습니다. 따라서 텍스처가 모든 플랫폼에서 올바르게 표시되도록 하려면 4096×4096보다 큰 텍스처를 사용하지 말고 텍스처가 반복되어야 하는 경우 2배수 크기를 사용해야 합니다.

너무 커서 렌더링할 수 없는 특정 텍스처의 크기를 제한하려면 프로세스 > 크기 제한 가져오기 옵션을 ``0``보다 큰 값으로 설정할 수 있습니다. 이렇게 하면 소스 파일에 영향을 주지 않고 가져올 때 텍스처의 크기가 줄어듭니다(가로세로 비율 유지).

컬러 밴딩

When using the Forward+ or Mobile rendering methods, Godot's 3D engine renders internally in HDR. However, the rendering output will typically be written to a lower precision buffer. This can result in visible banding, especially when using untextured materials. For performance reasons, color precision is also lower when using the Mobile rendering method compared to Forward+.

When using the Compatibility rendering method, internal HDR rendering is not used and the color precision is the lowest of all rendering methods. This also applies to 2D rendering, where banding may be visible when using smooth gradient textures.

이렇게 하고 싶어하는 몇 가지 이유가 있습니다:

  • Forward+ 또는 Forward Mobile 렌더링 방법을 사용하는 경우 **프로젝트 설정 > 렌더링 > 안티 앨리어싱**에서 :ref:`Use Debanding<class_ProjectSettings_property_rendering/anti_aliasing/quality/use_debanding>`를 활성화합니다. 이는 후처리 효과로 전체 화면 밴드 제거 셰이더를 적용하며 매우 저렴합니다.

  • 또는 텍스처에 약간의 노이즈를 굽습니다. 이는 주로 2D에서 효과적입니다. 비네팅 효과를 위해. 3D에서는 `맞춤형 밴드 제거 셰이더 <https://github.com/fractilegames/godot-gles2-debanding-material>`__을 사용하여 *재료*에 적용할 수도 있습니다. 이 기술은 프로젝트가 낮은 색상 정밀도로 렌더링되는 경우에도 작동합니다. 즉, 모바일 및 호환성 렌더링 방법을 사용할 때 작동한다는 의미입니다.

색상 밴딩 비교(가시성을 높이기 위해 대비를 높임)

색상 밴딩 비교(가시성을 높이기 위해 대비를 높임)

더 보기

밴딩 및 이에 대처하는 방법에 대한 자세한 내용은 `게임 내 밴딩: 시끄러운 호언장담(PDF) <https://loopit.dk/banding_in_games.pdf>`__을 참조하세요.

깊이 버퍼 정밀도

To sort objects in 3D space, rendering engines rely on a depth buffer (also called Z-buffer). This buffer has a finite precision: 32-bit on desktop platforms, 24-bit on mobile platforms (for performance reasons). If two different objects end up on the same buffer value, then Z-fighting will occur. This will materialize as textures flickering back and forth as the camera moves or rotates.

렌더링된 영역에서 깊이 버퍼를 더 정확하게 만들려면 카메라 노드의 Near 속성을 증가*해야 합니다. 하지만 주의하세요. 너무 높게 설정하면 플레이어가 근처의 형상을 꿰뚫어 볼 수 있습니다. 또한 카메라 노드의 **Far* 속성을 사용 사례에 허용되는 가장 낮은 값으로 감소*해야 합니다. 하지만 **Near* 속성만큼 정밀도에 영향을 미치지는 않는다는 점을 명심하세요.

플레이어가 멀리 볼 수 있는 경우에만 높은 정밀도가 필요한 경우 게임 조건에 따라 동적으로 변경할 수 있습니다. 예를 들어 플레이어가 비행기에 탑승하면 멀리서 Z-싸움을 피하기 위해 Near 속성을 일시적으로 늘릴 수 있습니다. 플레이어가 비행기에서 내리면 이 금액을 줄일 수 있습니다.

씬 및 보기 조건에 따라 플레이어에게 차이가 표시되지 않고 Z-싸움 개체를 더 멀리 이동할 수도 있습니다.

Z-싸움 비교(Label3D를 바닥에서 오프셋하여 씬을 조정하기 전과 후)

Z-싸움 비교(Label3D를 바닥에서 오프셋하여 씬을 조정하기 전과 후)

투명도 정렬

Godot에서는 불투명한 재질 다음에 투명한 재질이 그려집니다. 투명한 객체는 월드 공간의 정점 위치가 아닌 Node3D의 위치를 기준으로 그리기 전에 뒤에서 앞으로 정렬됩니다. 이로 인해 겹치는 개체가 순서 없이 정렬되는 경우가 많습니다. 잘못 정렬된 개체를 수정하려면 재질의 Render Priority 속성 또는 노드의 :ref:`Sorting Offset <class_VisualInstance3D_property_sorting_offset>`을 조정하세요. 렌더 우선순위는 특정 재료가 다른 투명한 재료의 앞이나 뒤에 나타나도록 하는 반면, 정렬 오프셋은 정렬을 위해 개체를 앞뒤로 이동합니다. 그렇더라도 이것만으로는 항상 충분하지 않을 수 있습니다.

투명한 개체는 불투명한 형상 다음에 그려지므로 일반 거칠기 버퍼로 렌더링되지 않습니다. 결과적으로 일반 거칠기 버퍼에 의존하는 기능은 투명 재질에 영향을 미치지 않습니다.

일부 렌더링 엔진은 이 문제를 완화하기 위해 순서 독립적인 투명도 기술을 제공하지만 GPU에서는 비용이 많이 듭니다. Godot는 현재 이 기능을 제공하지 않습니다. 이 문제를 피하는 방법에는 여러 가지가 있습니다.

  • 실제로 필요한 경우에만 재료를 투명하게 만드십시오. 재료에 작은 투명 부분만 있는 경우 별도의 재료로 분할하는 것을 고려하십시오. 이렇게 하면 불투명한 부분에 그림자가 생기고 성능도 향상됩니다.

  • 텍스처가 대부분 완전히 불투명하고 완전히 투명한 영역으로 구성된 경우 알파 블렌딩 대신 알파 테스트를 사용할 수 있습니다. 이 투명 모드는 렌더링 속도가 더 빠르며 투명도 문제가 발생하지 않습니다. StandardMaterial3D에서 **투명도 > 투명도**를 **알파 가위**로 활성화하고 필요한 경우 그에 따라 **투명도 > 알파 가위 임계값**을 조정합니다. MSAA는 재질 속성에서 알파 앤티앨리어싱이 활성화되어 있지 않으면 텍스처 가장자리를 앤티앨리어싱하지 않습니다. 그러나 FXAA, TAA 및 슈퍼샘플링은 재질에 알파 앤티앨리어싱이 활성화되어 있는지 여부에 관계없이 텍스처의 가장자리를 앤티앨리어싱할 수 있습니다.

  • 텍스처의 반투명 영역을 렌더링해야 하는 경우 알파 가위는 적합하지 않습니다. 대신 StandardMaterial3D의 Transparency > Transparency 속성을 Depth Pre-Pass**로 설정하면 성능 비용이 낮아지는 경우가 있습니다. **알파 해시 모드를 사용해 볼 수도 있습니다.

  • 거리에 따라 재질이 페이드되도록 하려면 픽셀 알파 대신 StandardMaterial3D 거리 페이드 모드 픽셀 디더 또는 **객체 디더**를 사용하세요. 이렇게 하면 재질이 불투명해지며 렌더링 속도도 빨라집니다.

투명도 정렬 비교(왼쪽의 알파 블렌드 재료, 오른쪽의 알파 가위 재료)

투명도 정렬 비교(왼쪽의 알파 블렌드 재료, 오른쪽의 알파 가위 재료)