2부: 성능 및 최적화

이 두 번째 튜토리얼에서는 장면의 성능을 최적화하는 방법을 학습합니다.

동영상 캡션: 안녕하세요. 튜토리얼 시리즈의 두 번째 부분인 Autodesk VRED Professional용 실시간 및 VR에 대한 소개를 시작합니다. 앞부분에서 먼저 설명한 내용을 간략히 살펴보겠습니다. 질문이 있으면 의견을 게시해 주십시오. autodesk.com의 VRED 포럼에서도 질문, 일반 교환 및 기능 요청을 쉽게 확인할 수 있습니다.

지난 번에 형상에 대한 그림자와 라이트를 계산하는 여러 가지 방법을 살펴봤고, 오늘은 실시간 장면의 성능에 직접적으로 영향을 줄 수 있는 매개변수에 대한 간단한 개요를 설명하려고 합니다. 이 튜토리얼의 주 목적은 가능한 병목 현상을 식별하여 최적화할 수 있는 병목 현상을 가늠하는 것입니다. 장면을 최적화하는 것은 많은 시간과 인내가 필요할 수 있는 중요한 작업이지만 장면을 최적화하지 않고도 대부분의 스틸을 렌더링할 수 있습니다. 그러나 이 튜토리얼에서는 OpenGL을 계속 살펴볼 예정이며 여기서 중요한 점은 성능 문제를 나타내는 중요한 지표가 VRAM 부하라는 사실입니다. 따라서 항상 이 값에 주의하고 프레임 속도가 떨어지면 이 값을 먼저 확인하십시오. 항상 통계도 주시하십시오.

우선 개요를 살펴보겠습니다. 이미 알려져 있는 다른 렌더 엔진이나 VRED의 많은 기능이 도움이 될 수 있기를 바랍니다. 그럼 개요를 살펴보겠습니다. 순서는 중요하지 않습니다. 예를 들어, 폴리 개수를 먼저 다루겠지만 일반적으로 VRED에서는 그렇게 중요하지 않습니다.

일종의 체크리스트로 다음 개요를 고려해 보십시오. 우리가 확인할 내용은 다음과 같습니다.

형상을 가져오고 준비할 때 고려해야 할 사항은 무엇일까요? 재질에 대해 확인해야 하는 매개변수는 무엇입니까? 렌더 설정은 장면의 성능에 어떤 영향을 줄 수 있습니까? 마지막으로, 프레임 속도에 영향을 줄 수 있는 카메라 설정은 무엇입니까?

  1. 형상

    a. 가져오기(폴리 개수, NURBS 데이터) > 노드 정보

    b. NURBS와 폴리곤

    c. 장면 트리(계층, 사용되지 않은 노드, 재질 그룹, 노드 개수 > print len(getAllNodes()), Transformnodes, Shared Nodes)

  2. 재질

    a. 소개 + IBL 품질, 텍스처 양 + 크기 > 텍스처 통계

    b. 셰이더 매개변수(범프, 오렌지 필, 디스플레이스먼트)

    c. 특수 사례(직조 천, 멀티패스 + 레이어드 재질, .axfs / .substance)

    d. 알파 채널

  3. 렌더 설정

    a. 실시간 안티앨리어싱 및 DLSS

    b. 어클루젼 선별/안쪽 면 선별

  4. 카메라 설정

    a. 피사계 심도

    b. 라이트 플레어 + 글로우 + 글레어

형상

먼저 데이터 가져오기부터 시작하겠습니다. 기본적으로 테셀레이션 품질은 가능한 한 낮게 설정하는 것이 좋습니다. 특히 NURBS 데이터를 가져올 때 나중에 VRED에서 선택적으로 품질을 다시 조정할 수 있습니다. 예를 들어 나사와 같은 작은 부품이나 아이콘을 테셀레이션할 수 있습니다. 한편으로, 이 기능은 린 모델을 제공하며, 가져오기 중에 시간을 절약하고 가능한 최상의 성능을 실시간으로 유지할 수 있습니다. 이때 표면 데이터 유지가 활성화되어 있는지 확인하는 것이 중요합니다. 그래야 나중에 VRED에서 메쉬 밀도를 반복적으로 조정할 수 있습니다. 이때 집이나 도로와 같은 매우 큰 형상을 가져오기 위해, 테셀레이션 품질을 거침으로 설정하고 최대 코드 길이를 50000으로 설정할 수 있습니다(5미터에 해당). 쿼드가 있는 폴리곤 데이터 세트를 가져올 때는 Maya 또는 선택한 도구에서 삼각형으로 구성하는 것이 좋습니다. 또한 폴리곤 데이터를 가져올 때는 항상 .fbx 형식을 사용하는 것이 좋습니다. .obj 또는 .3ds와 비교할 때 이것이 보다 최신 형식이며 산업 표준이고 형상과 함께 카메라, 재질, 라이트 또는 애니메이션을 가져오거나 내보낼 수 있습니다. 또한 VRED에서는 가져오기 중에 이미 .fbx 데이터를 최적화합니다. .obj 및 .3ds 데이터를 사용하여 이러한 최적화를 수동으로 수행해야 합니다. 여기에 대해서는 나중에 설명하겠습니다.

먼저, 통계를 활성화하고 전역 폴리 개수를 살펴봄으로써 간단히 개요를 확인할 수 있습니다. 또는 특정 노드를 선택하고 정보를 마우스 오른쪽 버튼으로 클릭하여 장면 트리에서 폴리 개수를 확인할 수 있습니다. 부품이 너무 미세하게 테셀레이트되고 폴리곤을 저장할 수 있다면 가져온 데이터에 NURBS 정보가 저장되어 있는 경우 장면 > 형상 편집기 > 형상을 통해 해당 부품을 선택하고 다른 설정을 테스트할 수 있습니다. 여기서는 가져오는 동안 했던 것처럼 메쉬의 밀도를 늘리거나 줄일 수 있습니다. 마지막으로, 형상을 올바르게 표현하는 데 필요한 개수만큼만 폴리곤을 작성합니다. 단, 이 튜토리얼 시리즈의 첫 부분에 설명된 것처럼 정점 기반 조명 모드는 예외입니다.

사실 VRED는 다수의 폴리곤에도 문제가 없습니다. 하드웨어에 따라서는 5천만 개 이상의 폴리 개수도 문제가 되지 않습니다! NURBS 기반 데이터 세트가 더욱 중요합니다. 기본적으로 저장된 NURBS 데이터는 큰 이점을 제공하지만 실시간 프레젠테이션 중에 모형의 성능을 저하시킬 수 있습니다. 프레젠테이션 전에 모형을 폴리곤으로 변환할 수 있지만, 그 전에 백업을 만드십시오.

이 작은 직사각형 영역 기호로 NURBS 데이터를 식별할 수 있습니다. 폴리곤 데이터로 작업하는 경우 이 작은 삼각형으로 데이터를 식별할 수 있습니다. 변환하려면 장면 트리에서 원하는 노드를 선택하고 마우스 오른쪽 버튼을 클릭한 후 편집 > 표면 > 메쉬로 변환을 선택하면 됩니다. 그러나 변환하기 전에 NURBS 데이터를 포함하여 파일을 저장하십시오.

데이터를 가져와 테셀레이트한 후에는 장면 트리의 구조를 살펴보는 것이 좋습니다. 기본적으로 유기적인 워크플로우를 위해 구조를 깔끔하게 유지하는 것이 좋습니다. 동료들도 깔끔한 장면 트리를 좋아할 것입니다. 즉, 계층은 가능한 한 단순하게 유지해야 하며 가져오기 중에 작성된 불필요한 그룹 또는 재질 그룹은 제거해야 합니다. 또한, 함께 속한 부품은 가능하면 결합해야 합니다. 단축키 Ctrl+Shift+M을 사용하거나 장면 트리 > 편집 > 형상 > 형상 병합에서 선택한 형상을 마우스 오른쪽 버튼으로 클릭하여 형상을 병합하면 됩니다. 또는 최적화 모듈을 사용할 수 있지만 최적화 모듈을 통해 작업을 취소할 수 없으므로 적어도 수동으로 수행하는 방법을 알아야 합니다. 미리 구성된 바로 가기를 확인하려면 뷰 > 바로 가기 표시를 통해 목록을 볼 수 있습니다.

이제 장면 트리로 돌아가, 계층을 최적화하는 가장 쉽고 빠른 방법은 최적화 모듈이라는 것입니다. 장면 > 최적화 또는 장면 트리를 오른쪽 버튼으로 클릭하거나 편집 > 최적화 모듈 표시를 통해 최적화 모듈을 호출할 수 있습니다. 단일 그룹뿐만 아니라 전체 장면을 선택하여 최적화할 수 있습니다. 기본 설정은 이미 성능 향상에 기여하고 있을 수 있습니다. 이러한 설정은 파일 > 장면 최적화에도 저장되며 전체 파일을 최적화할 수 있습니다.

이제 최적화 모듈의 가장 중요한 기능에 대해 살펴보겠습니다. 먼저, 불필요한 그룹을 모두 제거하려고 합니다. 이를 위해 "그룹 노드 정리"를 활성화합니다. 이제 VRED에서 하위 노드가 2개 미만인 모든 그룹을 제거합니다. "재질 그룹 노드 플러시"를 활성화하여 가져온 모든 재질 그룹을 제거하는 방식으로 동일한 작업을 수행하되, 수동으로 삭제할 수도 있습니다.

추가 단계로, 이전처럼 잠재적 관련 부품을 병합하여 노드 수를 줄일 수 있습니다. 이 경우 간단한 Python 명령을 통해 노드 수를 읽을 수 있습니다. VRED 터미널에 print len(getAllNodes()) 명령을 입력하면 모든 하위 및 상위 노드의 합계를 확인할 수 있습니다. 이 숫자가 낮을수록 좋습니다.

마지막으로 중요한 점은 더 이상 필요하지 않을 때에만 모든 변환 노드를 제거할 수 있다는 것입니다. 변환 노드는 그룹 아이콘 대신 이 작은 피벗 아이콘으로 인식될 수 있습니다. "변환 노드 플러시"를 활성화하면 각 노드의 좌표 및 배율 조정이 0 또는 1로 재설정되므로 형상 자체가 위치를 유지합니다. 참고: 이 기능은 노드(공유 노드)가 참조되는 즉시 사용할 수 없습니다. 많은 공유 노드가 사용되었기 때문에 잠시 후 항만 장면으로 다시 돌아갑니다.

가져온 .obj 또는 .3ds 데이터 아날로그를 .fbx 데이터로 최적화할 수 있는 간단한 방법을 설명하겠습니다. 최적화 모듈을 열고 16비트 길이와 16비트 인덱스가 활성화되어 있는지 확인한 다음 정점 통합, 색인 최적화 및 색인 정렬 등을 활성화합니다. 또한 필터에서 잘못된 텍스처 좌표 제거 및 역생성된 폴리곤 제거를 활성화할 수 있습니다. 이 기능은 사용자가 필터에서 직접 찾을 수 없지만 VRED 포럼에서 확인할 수 있습니다. 하지만 설정은 전역 최적화 설정에 저장됩니다.

VRED에서 호출되는 인스턴스나 공유 형상으로 다시 돌아옵니다. 공유 형상은 정확히 동일한 형상 구조를 갖는 장면에 여러 번 존재하는 형상입니다. 폴리곤을 저장하기 위해 동일한 형상이 장면에서 여러 번 사용됩니다. 일반적인 예로는 나사, 측면 미러 또는 림 및 타이어가 있습니다. 그러나 이 장면에서는 이러한 컨테이너를 사용하는 프로세스를 보여 드리겠습니다. 현재 두 개의 컨테이너가 있습니다. 회색의 40피트 변형과 노란색 20피트 변형입니다. 형상을 클릭하면 장면 트리의 밑줄 친 노드에서 인스턴스임을 확인할 수 있습니다. 이 재질을 간단히 지정할 수 있습니다.

현재 우리는 자체적으로 뛰어난 참조된 객체를 사용하여 작업하고 있습니다. 이 참조를 해제하여 성능에 영향을 미치는지 확인해 보겠습니다. 이를 위해 마우스 오른쪽 버튼 클릭 > 편집 > 공유해제 > 하위 트리 공유해제를 통해 장면 트리에서 전체 그룹의 참조를 제거할 수 있습니다. 프로세스에 약간의 시간이 걸리지만 프레임 속도가 감소하는 것을 이미 확인할 수 있으며 장면에는 시각적 차이가 없습니다. 형상을 다시 참조하려면 최적화 모듈로 돌아갑니다. 장면 트리 > 최적화 모듈 표시를 마우스 오른쪽 버튼으로 클릭하고 공유 아래에서 형상을 선택합니다. 이 작업이 제대로 수행되었는지 확인하려면 계층을 약간 확장하고 해당 노드에 밑줄이 다시 표시되는지 확인합니다. 이 경우 어클루젼 선별과 같은 렌더 설정은 이용할 수 없습니다!

재질

이제 형상 최적화 장을 종료하고 재질 및 텍스처를 확인하는 방법을 살펴보겠습니다. 지난 튜토리얼에서 설명한 대로 대부분의 경우 8-16k의 HDRI 맵으로 충분합니다. 모션 블러가 있는 스틸을 렌더링하는 경우 4k로도 가능합니다. 이 시점에서 상대적으로 새로운 기능 즉, 환경 재질의 광택 품질을 조정할 수 있는 기능을 소개하려고 합니다. 여기서는 더 높은 설정을 지정하면 시각적 품질이 향상되지만, 이와 동시에 계산 시간이 늘어난다는 점만 명심하면 됩니다. 이 설정을 개별적으로 확인하여 고품질 설정이 부가 가치를 제공하는지 검토하는 것이 좋습니다.

잠시 텍스처를 살펴보겠습니다. 기본적으로 사용되는 텍스처 수와 해당 크기는 그래픽 카드 메모리의 부하에 상당한 영향을 미칩니다. 또한 텍스처가 활성화되건 비활성화되건 중요하지 않습니다. VRED에서 텍스처를 삭제할 때만 점유한 메모리가 확보됩니다. 먼저 VRAM 사용량을 확인하는 것이 좋습니다. 다시 한번 말씀드리지만 항상 확인하는 것이 좋습니다. 재질 > 파일 > 통계에서 재질 및 텍스처 수와 메모리 사용량을 확인할 수도 있습니다.

빠르고 편리한 최적화를 위해 재질 편집기 > 편집 > 미사용 재질 제거 또는 재질 최적화에서 재질 편집기를 정리할 수도 있습니다.

그러나 다양한 형상을 최적화한 후에도 그래픽 카드 메모리가 부족한 경우 재질을 수동으로 재작업하는 것이 좋습니다. 두 가지 방법을 시도하거나 두 가지 방법을 결합할 수 있습니다. 한 가지 가능성은 텍스처의 해상도를 줄이는 것입니다. 예를 들어, 모든 곳에 8k 텍스처가 필요한지 또는 4k면 충분한지를 자문해 보십시오. 클로즈업에서도 일반적으로 4K 텍스처가 보기 좋습니다. 가장 쉬운 방법은 Photoshop 등에서 해당 텍스처의 배율을 조정하여 VRED에서 다시 로드하는 것입니다. 2의 거듭제곱에 주목하십시오. 즉, 1024픽셀, 2048픽셀, 4096픽셀 텍스처 등으로 작업합니다.

텍스처의 크기를 줄이는 것으로 원하는 결과가 나오지 않을 경우 모든 텍스처 채널이 정말로 필요한지 확인할 수 있습니다. 가까운 범위에서 재질이 보이지 않는 경우 다른 텍스처 채널을 확인하는 것이 좋습니다. 이 장벽을 예로 들어 보면 범프, 거칠기 및 광택 텍스처 모두 효과가 거의 없음을 알 수 있습니다. 또한 광택 색상 자체를 조정할 수 있으며 텍스처를 삭제할 수 있습니다.

또한 VRED는 기본적으로 모든 텍스처를 .vpb 파일에 인라인 배치한다는 사실을 알아야 합니다. 이 설정을 변경하고 텍스처만 링크하려면 편집 > 기본 설정 > 파일 IO > OSB/VPB > 내보내기에서 인라인 텍스처를 사용하지 않도록 설정할 수 있습니다.

재질 최적화에 대해 잠시 살펴보겠습니다. 특히 가상 현실 안경을 사용할 때 성능에 영향을 줄 수 있는 몇 가지 설정이 있습니다. 여기에는 범프와 같은 절차 셰이더 효과와 자동차 페인트 재질에 대한 클리어 코트 설정의 오렌지 필도 포함됩니다. 다른 렌더 엔진과 마찬가지로 디스플레이스먼트 맵의 사용에도 동일하게 적용됩니다. 대부분의 경우 프레임 속도가 즉시 감소하는 것을 볼 수 있습니다. 따라서 일부 중요한 셰이더 매개변수가 활성화되어 있는지 확인하기 위해 전체 형상을 재질 그룹으로 이동하는 것이 좋습니다.

이와 별도로, 몇 가지 특별한 경우가 있습니다. 절차 직조 천 셰이더를 사용할 때도 주의해야 합니다. 이 셰이더는 피하고 텍스처를 사용하여 재질을 구성합니다. 두 번째로 멀티패스 및 레이어드 재질은 계산하는 데 매우 집약적이며 반드시 필요한 경우에만 사용해야 합니다. 알파 채널이 있는 텍스처의 경우에도 마찬가지입니다. 현재 장면은 매우 최적화되어 있으므로 많은 멀티패스 재질은 중요하지 않습니다.

렌더 설정

결론은 간단합니다. 아시다시피 장면의 성능은 여러 매개변수에 따라 달라지며 절충이 필요한 경우가 많습니다. 따라서 다음 참고에서는 OpenGL의 렌더 설정이라는 또 다른 기본 구성요소를 다룹니다.

기본적으로 VRED에서 안티앨리어싱을 사용하는 방법에는 두 가지가 있습니다. 한편으로는 인터페이스를 통해 표준 스틸 프레임 안티앨리어싱 모드를 트리거하거나 스페이스 바 단축키를 사용할 수 있습니다. 또 한편으로는 실시간 안티앨리어싱을 사용하여 안티앨리어싱을 영구적으로 활성화할 수 있습니다. 이 설정은 가시화 > 실시간 안티앨리어싱 아래에서 찾을 수 있으며, 여기에는 5가지 사전 설정도 제공됩니다. 여기에서는 값이 높을수록 좋지만 프레임 속도가 저하될 수 있습니다. 성능과 품질 간에 적절한 절충 지점을 나타내는 설정을 테스트하면 됩니다.

또는 DLSS라는 새로운 딥 러닝 슈퍼샘플링을 시도해 볼 수도 있습니다. 일반 실시간 안티앨리어싱 설정을 비활성화하고 다른 설정을 테스트하면 됩니다.

즉, VR 글래스를 사용하는 경우 가변 속도 쉐이딩을 테스트하거나 가상 현실 아래의 기본 설정에서 포비티드 렌더링을 활성화하는 것도 좋습니다.

마지막으로 가시화 > 고급 OpenGL 설정에서 안쪽 면 선별 및/또는 어클루젼 선별 설정을 반드시 테스트해야 합니다. VRED에서는 안쪽 면 선별을 사용하여 카메라에 정렬된 표면 노멀만 렌더링합니다. 어클루젼 선별 기능은 다른 형상으로 가려진 모든 표면을 무시합니다. 따라서 여러 인스턴스에서 작동하지 않습니다.

카메라 설정

항목을 정리하기 위해 성능에 영향을 줄 수 있는 카메라 설정을 간단히 살펴보겠습니다. 먼저, 실시간 피사계 심도 설정이 있습니다. F 스톱 및 대화식 DOF 품질에 따라 프레임 속도가 저하되는 것을 확인할 수 있습니다. 따라서 피사계 심도가 실제로 필요하지 않은 경우 비활성화하는 것이 좋습니다.

또한 사실적 값으로 작업하는 것이 좋습니다. 즉 실제 카메라 렌즈로 이미지화할 수 있는 영역에 카메라의 초점 거리 및 F 스톱을 그대로 두는 것이 좋습니다. 빠른 팁을 드리자면, 마우스 오른쪽 버튼을 두 번 클릭하여 초점을 설정할 수 있습니다.

다른 중요한 카메라 매개변수는 카메라의 이미지 처리 아래에서 찾을 수 있습니다. 글로우, 글레어, 안개 및 렌즈 플레어 효과는 기본적으로 비활성화되어 있지만 사용 시 일부 프레임 손실이 발생할 수도 있습니다. 이러한 효과가 필요한지 고려하여 필요하지 않은 경우 장면을 표시할 때 비활성화하십시오!

요약

마무리를 위해 첫 번째 튜토리얼의 밤 장면을 활성화했습니다. 장면의 성능은 다양한 매개변수에 따라 달라질 수 있다는 점을 다시 한 번 말씀드립니다. 또한 일부 최적화는 다른 파일보다 특정 파일에서 더 잘 작동합니다. 따라서 적절한 최적화, 적절하지 않은 최적화, 추가된 가치에 비해 지나친 비용이 드는 최적화에 대한 감각을 키우는 것이 중요합니다. 기본적으로 가능한 한 적은 노드를 사용하고 관련 영역을 병합하는 동시에 폴리 개수를 줄이며 실제로 필요한 만큼의 텍스처만 로드하고 저해상도를 선택해야 합니다.

질문이나 의견이 있으시면 댓글로 남겨 주십시오. 관심을 가져주셔서 다시 한 번 감사드립니다. 유익한 시간이 되셨기를 바랍니다. 다음에 뵙겠습니다!