3D 모델링 및 애니메이션의 경우 하루가 끝날 때 장면 및 모델이 많은 메모리를 사용하지 않는지 확인하는 것이 매우 중요합니다. 시작할 때는 별로 중요하지 않지만 전문적으로 일할 때는 꼭짓점 수를 최소로 유지해야 하기 때문입니다. 처음부터 메모리 최적화에 대해 알고 있는 경우에만 가능합니다. 내가 잘못한 것이 있으면 알려주세요! 항상 개선의 여지가 있습니다!
각고의 노력 끝에 최종 작품이 완성되었고 렌더링 할 준비 완료! 하지만 갑자기 GPU 렌더링이 평소보다 더 오래 걸리는가 하면 씬 충돌이나 잘못된 렌더링이 발생하여 제대로 초를 칩니다. 이런 때 필요한 것은 무엇일까요? 바로 GPU 렌더링 프로세스를 최적화해야 하는 것입니다. 일단, GPU 렌더링 프로세스를 보다 최적화하려면 메모리 사용량을 줄이는 것이 좋습니다.
렌더링 속도에 대하여 RAM이 미치는 영향
RAM 용량은 사실 렌더링 프로세스에 그닥 많은 영향을 미치지 않습니다. 가장 많은 영향을 미치는 요인은 바로 CPU와 GPU입니다. 물론 시스템에 RAM이 부족하고 더 많은 용량으로 확장하게 되면 GPU 렌더링 속도가 달라집니다. 이게 무슨 말인가 하면 시스템이 RAM에 더 많은 리소스를 할당 할 수 있으며 CPU와 GPU가 더 많은 리소스를 사용하여 더 효율적으로 작동 할 수 있도록 한다는 것입니다. 마감일을 맞추고 GPU 대여 비용을 절약하기 위해 여러 가지 방법으로 필수적인 GPU 렌더링 속도 향상방법에 대해서 알아보겠습니다.
그니까, 그럼에도 불구하고 RAM 사용량을 줄여야하는 이유는 무엇일까?
아티스트가 흔히 겪는 가장 힘든 문제는 바로 RAM 사용으로 인한 씬 충돌입니다. 매우 느린 렌더링 프로세스는 높은 RAM 소비로 인해 발생할 수 있는 또 다른 주요 문제이기 때문입니다. 이는 프로그램이 지속적으로 하드 드라이브에서 임시 데이터를 읽고 써야하는데, 하드 드라이브가 RAM보다 훨씬 느리기 때문에 발생합니다.
오류 메시지 팝업, 깜박이는 창, 잘못된 렌더링, 시스템 속도 저하 등 RAM 사용량이 갑작스럽게 증가하면 또 다른 손실이 발생할 수 있습니다. 렌더링 프로세스를 시작하기 전에 몇 가지 트릭을 적용하여 높은 메모리 소비를 줄일 수 있으며 이는 특히 중요합니다. (이 경우는 GPU 렌더링 에서에 해당되는 내용이니 참고 부탁드립니다)
GPU는 CPU에서처럼 선형이 아니라 동시에 작업을 처리 할 수 있습니다. 이러한 종류의 병렬화는 이미지가 동시에 섹션에서 렌더링 될 수있는 렌더링 처리에 이상적인 방식입니다.
그러나 GPU는 RAM에 의존하는 대신 VRAM이라는 자체 메모리를 사용하며 GPU는 제한된 양의 VRAM과 함께 제공됩니다. GPU 렌더링에서 여러 그래픽 카드를 사용할 수 있더라도 렌더링 엔진은 RAM이 가장 적은 카드의 VRAM 만 사용합니다.
이미지 : 높은 RAM 소비로 인한 오류 메시지 (출처 : 코로나 렌더러). 오류 메시지에서 마지막 5줄에 사용 된 메모리 양을 확인해보세요.
이미지 : Blender Cycles의 오류 메시지 (출처 : Blender stack exchange). GPU 렌더러는 제한된 VRAM으로 인해 특히이 오류에 취약합니다.NV-Link 와 같은 새로운 기술은 여러 GPU가 각 카드의 VRAM을 활용할 수 있도록하여 이 문제를 해결하고, 이렇게 최적화 된 씬은 항상 렌더링 프로세스에 적합합니다.
GPU 렌더링 프로세스 중에 VRAM을 최적화하고 사용량을 줄이는 방법 12가지 방법
최고의 그래픽 카드를 선택하라
렌더링 프로그램은 사용자 인터페이스를 만들기 위해 GPU 카드에 크게 의존합니다. 복잡한 씬을 자주 렌더링하지만 시스템에 부적절한 그래픽 카드가 있는 경우 업그레이드 해야합니다. 그래픽 카드가 편리하지 않은 경우 시스템 RAM이 얼마나 효율적인지는 중요하지 않습니다. 요구 사항을 확인하고 기존 그래픽 카드를 효율적인 그래픽 카드로 교체하는 것이 그냥 가장 베스트 입니다. 그래픽 카드 VRAM (Video- Random Access Memory)은 그래픽 카드에 통합되어 있습니다. CPU와 같이 선형이 아니라 동시에 작업을 처리합니다. 이러한 병렬화는 렌더링 처리를 더 빠르게합니다. 이미지는 한 번에 다양한 섹션에서 렌더링 될 수 있습니다. 따라서 그래픽 전원이 필요할 때마다 VRAM이 사용됩니다. 그래픽 카드는 VRAM에 의존하며 그래픽 텍스처와 3D 모델을 저장합니다.
RAM을 업그레이드 하라
GPU 렌더링 프로그램은 그래픽 카드의 VRAM을 사용 하지만 여러 프로세스는 시스템 RAM에 간접적으로 의존합니다. 일부 GPU 렌더링 소프트웨어는 V-Ray 및 Blender’s Cycles의 하이브리드 렌더링 기능과 같은 CPU 리소스도 사용할 수 있습니다. Pro Render와 같은 엔진의 Out-of-core 오프 로딩 기능을 사용하면 텍스처와 같은 요소를 먼저 RAM에 저장하고 VRAM에 점진적으로 로드하여 메모리 초킹을 방지 할 수 있습니다.
일반적으로 기본 3D 작업을하는 초보자에게는 16GB면 충분할 수 있습니다. 32GB RAM은 대부분의 3D 아티스트 또는 중급 아티스트에게 이상적입니다. 큰 텍스처 나 복잡한 씬을 렌더링해야하는 전문가나 하이 폴리 메시 작업을하는 경우 정도에 64GB RAM이 권장됩니다.
3D 렌더링에 가장 적합한 하드웨어를 선택하는 방법에 대해 자세히 알아 보려면 3D 아티스트에게 가장 적합한 하드웨어를 선택하는 방법 가이드를 읽어보시면 좋습니다.
Polycount를 관리하라
많은 수의 폴리 카운트는 렌더링 파일 크기를 증가시킵니다. 큰 파일을 렌더링하려면 더 많은 VRAM이 필요합니다. 대용량 파일은 GPU 렌더링 프로세스에 더 많은 시간이 걸립니다. 로컬로 렌더링 할 때 큰 문제는 아니지만 네트워크 렌더링에 더 많은 시간이 걸립니다. 상업용 렌더팜에서는 렌더링 시간이 길수록 비용이 높아지니까요. 텍스처와 마찬가지로 멀리있는 오브젝트의 세분화 수준을 줄일 수 있습니다.
불필요한 응용 프로그램들을 확인 및 종료하라
컴퓨터에서 여러 응용 프로그램을 실행하는 것은 여러번 눈에 띄지 않게 유지되어 생산적인 기능을 수행하지 않고도 많은 시스템 메모리를 소비합니다. 따라서 GPU 렌더링을 시작하기 전에 불필요한 응용 프로그램을 확인하고 종료해야합니다. 이렇게하면 해당 응용 프로그램에 사용되는 많은 메모리를 절약 할 수 있습니다. 저장된 GPU VRAM을 사용하여 3D 렌더링 프로세스의 기능을 향상시킬 수 있습니다. GPU 대여 서비스를 사용하여 네트워크에서 렌더링하는 동안 불필요한 애플리케이션을 계속 실행하면 렌더링 프로세스가 중단 될 수 있습니다. Xesktop은 GPU 대여 서비스를 통해 이용하고자 하는 모든 3D 아티스트에게 지속적인 지원을 제공합니다.
GPU 서버 대여 서비스에 대해 자세히 알아 보려면 다음 문서를 참고하세요. 3d 아티스트 를위한 GPU 서버 대여 가이드, 자세한 내용은 Xesktop을 직접 방문해서 알아보세요. 어떻게 원격 서버에 연결하여 사용하는지에 대해 설명하는 단계별 비디오를 통해 쉽게 듀토리얼을 파악할 수 있습니다.
원치 않는 렌더링 설정 탐색 및 변경
각 렌더링 소프트웨어는 사용자 정의 설정과 함께 제공됩니다. 일반적으로 대부분의 아티스트는 이러한 설정을 간과하시는데요. 하지만 이것을 충분히 고려하고 소프트웨어의 설정 영역을 발견하면 많은 GPU 메모리와 시간을 소비하는 일부 설정들을 찾아낼 수 있습니다. 일부 설정은 VRAM 또는 시간을 소비하지만 GPU 렌더링 프로세스에 전혀 기여하지 않거든요.
여기서는 그러한 설정을 탐색하고 다른 더 나은 옵션으로 변경하기만 하면 됩니다. 설정에 대해 이야기 할 때 일부 초보자 또는 숙련 된 아티스트는 폴리 카운트, 샘플링 및 품질과 같은 고급 설정을 사용하여 렌더링 시간을 늘릴 수 있습니다.
거리에 따라 텍스처 크기 줄이기
일반적으로 사물과 같은 질감이 대부분의 저장 공간을 차지합니다. 카메라에 더 가까운 오브젝트에 대해 이미지 텍스처를 예약합니다. 더 멀리 있거나 피사계 심도에 의해 흐려지는 것은 대형 맵이 제공하는 세부 정보가 필요하지 않습니다. 압축 된 텍스처 형식을 사용하여 파일 크기를 줄이는 것이 좋습니다. 충분한 파일 형식을 줄이는 데 실패하면 텍스처 이미지의 픽셀 단위로 물리적 크기를 줄여보세요. 압축 된 텍스처를 사용하여 텍스처 크기를 줄이는 것입니다.
modifiers 최적화
modifiers 설정을 탐색하여 모델에서 많은 수의 폴리를 줄여야합니다. 물론 카메라에서 물체까지의 거리와 물체에 대한 기타 요인에 따라 다릅니다. 높은 다각형은 모델에서 더 많은 세부 정보를 만들어야하는 경우에만 필요합니다. 파도와 같은 특정 모양이 없는 오브젝트는 여기에서 정확한 모양을 유지할 필요가 없습니다. modifiers 설정을 적용하여 다각형 수를 줄일 수 있습니다. 이를 통하여 VRAM 소비를 최소화합니다.
렌더링 프로세스를 향상시키기 위해 최적화 할 수있는 여러 modifiers는 MultiRes modifier, Prooptimizer modifier, 최적화 modifiers, 배치 프로 modifiers 유틸리티 입니다. 이러한 modifiers에 대해 자세히 알아 보려면 이 링크를 확인해보세요.
instancing 사용
잔디, 벽돌 또는 나무 덩어리와 같이 장면에서 반복되는 오브젝트는 한 오브젝트의 인스턴스가 될 수 있으며 소스 오브젝트를 렌더링하는 데 대략적인 양의 RAM 만 필요합니다. 메시 GPU 렌더 프로그램을 복사하면 또 다른 메시가 생성되고 RAM 및 하드 드라이브의 씬에 저장되어 폴리 카운트 수가 증가합니다.
하지만 “인스턴스”를 만들 때 GPU 렌더 프로그램은 장면의 다른 위치에서 메시 사본을 사용할 수 있다는 정보 만 저장하지만 씬 파일과 메모리에 단일 메시의 데이터 만 저장합니다. 인스턴싱을 사용하면 많은 수의 복사 된 객체를 씬에 넣을 수 있지만 동일한 양의 VRAM이 단일 객체와 동일한 파일 크기로 사용됩니다.
장면의 개별요소
전경, 중간, 배경을 별도로 렌더링하고 나중에 함께 합성하면 복잡한 씬을 GPU에서 렌더링 할 수 있습니다. 머리카락과 같은 다른 기억 집약적 요소에 대해서도 마찬가지입니다. 따라서 필요한 경우 modifiers를 모델에 쉽게 적용 할 수 있습니다. 따라서 GPU 대여 서비스를 사용하여 네트워크에서 렌더링 할 때 비용을 최소화하는 데 필요한 렌더링 속도가 증가합니다.
메시 및 애니메이션 압축
메시 및 애니메이션 압축은 CPU 및 GPU의 부하를 줄이는 데 더 좋습니다. 모델에 가장 적합한 메시 압축 수준을 실험하여 메시 압축을 낮음, 중간 또는 높음 수준으로 설정할 수 있습니다. 양자화(Quantization)는 저장 공간을 덜 차지하지만 압축으로 인해 부정확 할 수있는 메시 및 애니메이션 압축에 사용됩니다.
LOD 및 레이어 별 cull distances
개체를 컬링하여 개체를 보이지 않게합니다. CPU와 GPU의 부담을 줄이는 또 다른 방법입니다. 대부분의 게임에서 게이머의 경험을 손상시키지 않고 이를 수행하는 빠르고 효과적인 방법은 작은 개체를 큰 개체보다 더 공격적으로 이동하는 것입니다. 마찬가지로 작은 바위는 먼 거리에서 사라질 수 있지만 더 큰 건물은 계속 볼 수 있습니다.
모델 축소시기
씬을 렌더링하기 전에 최적화 modifiers 가 있는 모델을 축소해야 합니다. 이렇게 하면 VRAM 사용, 하드 드라이브의 파일 크기 및 렌더링 시간이 줄어듭니다. GPU 대여 서비스를 사용하여 렌더링하는 동안 비용 절감을 위해 속도 문제를 렌더링합니다. 그러나 메쉬 해상도를 높이는 수식어가 있는 모델은 메쉬 밀도가 너무 높을 경우 보정할 수 있는 반면 파일은 하드 드라이브에 부담을 덜 주기 때문에 축소되지 않는 것이 좋습니다.
향상된 3D 렌더링 경험을 위한 빠른 체크리스트
- 다양한 개체간에 최대한 많은 재료를 공유하기
- 가능한 경우 텍스처 맵 크기 최소화하기
- 폴리 감소 modifiers를 사용하여 먼 지오메트리 최적화 하기
- 중복 모델에 인스턴스 사용하기
- 불필요한 응용 프로그램 닫기
레퍼런스 :
비디오 레퍼런스 : https://youtu.be/3Hkm7XJ1B9k
기사 레퍼런스 : https://www.easyrender.com/a/3d-rendering-and-how-to-optimize-your-approach-for-maximum-speed https://www.videomaker.com/how-much-ram-do-you-need# https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html https://docs.unity3d.com/Manual/ReducingFilesize.html