언어:
페이지 정보
태그:
엔진 버전:
언리얼 엔진

인밸리데이션 박스

언리얼 엔진

이 기능은 현재 개발중으로, 실험단계 기능입니다. 그렇기에 특정 기능이 예상대로 작동하지 않을 수 있습니다.

이 페이지의 내용:

설명

인밸리데이션(무효화) 박스에 둘러싸인 위젯은 그 자손 위젯 지오메트리를 캐시에 담아 슬레이트 렌더링 속도를 올릴 수 있습니다. 인밸리데이션 박스로 인해 캐시에 담긴 위젯은 프리패스(Prepass), 틱, 페인트 처리되지 않습니다.

일반적으로 프로젝트 최적화 방법을 찾는 경우, 특정 위젯을 인밸리데이션 박스로 묶으면 퍼포먼스가 향상될 수 있습니다 (특히 모바일 프로젝트나 UI 디스플레이가 복잡한 경우). 지속적으로 변하지 않는 위젯의 경우, 인밸리데이션 박스 안에 넣어두면 페인트, 틱, 프리패스 도중의 대상으로 고려되지 않고 캐시가 됩니다.

하지만 위젯이 변하는 경우, 무효화가 될 것이기에 수동으로 캐시를 무효화시켜 줘야 실질적으로 버리게 되어 다음 페인트 패스에 강제로 다시 그리게 될 것입니다. 위젯의 시각적인 모양을 변경하는 것은 어느 것이든 무효화시켜 줘야 합니다. 여기에 유일한 예외는 해당 위젯의 버텍스 버퍼에 저장되지 않는 변경사항 뿐입니다 (예를 들면 머티리얼이 그런데, 머티리얼 파라미터를 변경해도 위젯 무효화가 필요치 않기 때문입니다).

디테일

배치된 무효화 박스디테일 패널에 보면, 위젯에 관련해서 설정할 수 있는 옵션이 몇 가지 있습니다.

InvalidationBox.png

옵션

설명

Cache Relative Transforms

상대 트랜스폼 캐시 - 인밸리데이션 박스의 자손 드로 엘리먼트의 위치를 캐시에 담아, 매 프레임 그리기의 부하가 추가됩니다. 하지만 무효화 박스의 위치가 매 프레임 변하는 경우, 오히려 크게 절약될 수 있습니다.

Is Volatile

휘발성인지 - true 면 위젯이나 그 자손의 지오메트리 또는 레이아웃 정보를 캐시에 저장하지 않도록 합니다. 이 위젯이 매 프레임 변경되나 여전히 무효화 패널에 있도록 하려면, 매 프레임 무효화시키기 보다는 휘발성으로 만들어야, 무효화 패널이 실제로 캐시에 담지 못하도록 할 수 있습니다.

IsVolatile 체크 박스 관련해서, 어떤 위젯이든 휘발성으로 설정할 수 있습니다. 휘발성 위젯은 일반 슬레이트 위젯의 무효화 이전처럼 작동합니다. 그 자손을 모두 포함해서, 매 프레임 다시 그려집니다. 무효화 패널과 함께하면, UI 의 가장 동적인 부분만 다시 그리도록 할 수 있는데, 전체 패널을 무효화시키는 것은 훨씬 비쌀 수 있기 때문입니다.

함수

인밸리데이션 박스 사용시, 자손 노드를 강제로 무효화시키기 위해서는, 사용자가 C++ 또는 자손 위젯에서 (아래 그림과 같은) Invalidate Layout And Volatility 노드를 통해 Invalidate 를 호출해야 합니다.

BPInvalidateNode.png

현재 일부 코어 위젯에서는 특정 프로퍼티 변경시 이 작업을 자동으로 해 주고 있으며, 차차 지원되는 것이 많아질 것입니다.

디버깅

위젯 리플렉터 (CTRL+Shift+W) 와 Invalidation Debugging (무효화 디버깅) 토글을 사용해서 인밸리데이션 박스를 디버깅할 수 있습니다.

이미지를 클릭하면 원래 크기로 봅니다.

위젯 리플렉터를 띄우고 무효화 디버깅을 켰을 때 보이는 것들은 다음과 같습니다:

  • 하양/빨강 점멸 - 무효화에 대한 위젯 반응입니다.

  • 초록 테두리 - 무효화 패널입니다 (이 프레임에 캐시됨).

  • 빨강 테두리 - 무효화 패널 용입니다 (이 프레임에 무효화된 캐시).

  • 노랑 점선 테두리 - 휘발성 위젯을 나타냅니다.

ExampleDebugging.png

위에서 인밸리데이션 박스로 둘러싼 테두리 안에 휘발성으로 마킹된 이미지가 있습니다. 이미지가 휘발성 마킹되어 있으므로, 테두리(나 변하지 않는 이미지 주변에 나타나도록 하고픈 다른 아트 애셋)가 캐시에 저장된 동안에는 게임플레이 도중 동적으로 업데이트 가능합니다.