В продожение разговора с JoofJi и irishman. Я поскреб по сусекам и приобрел подписку на месяц на Octane для 3DS Max, дабы провести тест.
Важный дисклеймер, я никогда не выступал и не выступаю против GPU или CPU рендереров. Так что, пожалуйста, не начинайте мне тут вот это вот... Каждый в своей работе волен использовать то, что ему удобнее по той или иной причине.
Я не ставил своей целью в очередной раз тестировать производительность CPU и GPU. Очевидно, что если сцена заводится и на GPU и на CPU, первая покажет лучший результат по скорости, за, возможно, редкими исключениями.
Моей целью было проверить мою, как мне дали понять, устаревшую информацию о том, что память GPU работает иначе, в ней можно разместить больше информации и как следствие это должно позволить работать на машине с меньшим ОЗУ или, что в принципе то же самое, размещать в GPU сцены размером чуть ли не в три или четыре раза большие чем собственно имеющийся объем видеопамяти.
Здесь не будет скриншотов и других документальных свидетельств, тому что я сейчас напишу, я просто выписывал данные в табличку. Процитирую JoofJi: “В чем прикол вранья?” Вот и я думаю, что смысла врать нет… Просто опишу свой эксперимент.
Прежде чем начать тестирование важно понять сделующие: GPU память ничем не отличается от обычной ОЗУ. GDDR5 технологически неотличим от DDR3, однако работает на более высоких частотах. Что никак не влияет на объем. Пруфы легко находятся по запросу «отличие GDDR5 от DDR3».
И так, моей целью было проверить работу рендерера со сценой, объем которой заведомо превысит имеющуюся видеопамять. В моей системе установлена GeForce GTX 1080 в модификации от Palit. С небольшим заводским разгоном. Объем видеопамяти — 8Гб. Часть этой памяти уходит на нужды системы (Win 10). Остается что-то порядка 6-6.5 Гб видеопамяти. Так же в системе присутствует DDR4 объемом 64Гб и два Xeon E5-2630v4. В сравнении учавствуют Corona 1.6 и Octane 3.05.1
Для обоих рендереров были созданы идентичные сцены в составе которых была модель дерева «model_004» из сборника Evermotion «Archmodels for Corona vol. 1», стандартный Plane(4x4), на котором размещалось дерево, стандартная камера и соответствующий рендерерам источник света: Corona Sun или Octane DayLight соответсвенно. Для Октана были переделаны материалы, однако не имея опыта работы с этим рендерером я не нашелся куда воткнуть карту для translucency - материал настроен без нее. Оба рендерера были настроены на работу Path Tracing, что впрочем никак не влияло на потребление памяти. Выходная картинка размером 4000x2500 px Все остальные настройки по умолчанию.
Результаты я записал следующим образом:
corona/octane_scene_RAM – объем который занимает сцена для указанного рендерера;
corona/octane_parsing-RAM – объем используемый при подготовки к рендерингу;
corona/octane_render_RAM – объем используемый непосредственно при рендеринге;
octane_VRAM – потребляемая видеопамять (только для Octane)
*очевидно, что во всех случаях кроме VRAM в значение присутствует собственно вес самого 3DS Max
Все нижеследующие цифры могут незначительно отклоняться в обе стороны, по причине их не статичности во время замера.
Результаты
Сцена первая. Одно дерево.
В сцене 1 301 212 полигонов.
octane_scene_RAM – 1 560 МБ
octane_parsing_RAM — 4 800 МБ
octane_render_RAM — 4 458 МБ
octane_VRAM — 1 183 МБ
Рендер прошел успешно.
corona_scene_RAM - 1540 МБ
corona_parsing_RAM - 2800 МБ
corona_render_RAM - 2916 МБ
Рендер прошел успешно.
Сцена вторая. 9 копий(!) деревьев.
В сцене 11 710 652 полигона
octane_scene_RAM – 6 593 МБ
octane_parsing_RAM — 27 500 МБ
octane_render_RAM — 15 514 МБ
octane_VRAM — 4 813 МБ Рендер прошел успешно.
corona_scene_RAM – 6 557 МБ
corona_parsing_RAM - 12 430 МБ
corona_render_RAM - 12 068 МБ
Рендер прошел успешно.
Сцена третья. 15 копий(!) деревьев.
В сцене 19 517 732 полигона
octane_scene_RAM – 10 365 МБ
octane_parsing_RAM — 47 700 МБ
octane_render_RAM — 24 357 МБ
octane_VRAM — NA
Результат не получен. Не смотря на то, что отслеживалась загрузка памяти, а окно Октана перешло в режим Rendering, никакого видимого изменения в нем не происходило. Продолжала висеть его шахматная заглушка. Я дал порядка 20 минут на обдумывание, после чего закрыл процесс.
corona_scene_RAM – 9 946 МБ
corona_parsing_RAM - 19 700 МБ
corona_render_RAM - 18 847 МБ
Рендер прошел успешно.
Анализ произошедшего
1. Сцена сохраненная под октан занимает немного больше места во всех случаях. Разница не велика, и думаю ее можно списать на естественные колебания в процессе работы 3DS Max.
2. В глаза бросается тот факт, что парсинг сцены для Октана требует значительно больше памяти! Это к вопросу о том, что на памяти можно немножко скрахаборить, если перейти на GPU рендеринг — в случае с октаном это не так. Более того скорее всего придется докупить. Так же замечу, что по времени парсинг Октана делается заметно дольше.
3. В процессе рендеринга октан потребляет примерно до полутора раз больше ОЗУ в сравнение с короной.
4. Что случилось в третьем эксперементе? Давайте попробуем разобраться. Обратим внимание на разницу corona_render_RAM и corona_scene_RAM и сравним это число с используемой октаном видеопамятью. Мы увидим, что эти значения примерно коррелируют между собой. Это собственно и есть тот объем памяти используемый рендерерами.
Сцена 1 2916-1540 = 1376 — столько МБ ОЗУ добрала корона в процессе рендеринга первой сцены.1183 МБ видеопамяти запросил Октан (при этом продолжая что-то размещать в ОЗУ)
Сцена 2 12068-6557 = 5511 — столько МБ ОЗУ добрала корона в процессе рендеринга второй сцены. 4813 Мб видеопамяти запросил Октан (продолжая хотеть память из ОЗУ)
Сцена 3 18847-9946=8901 — столько МБ ОЗУ добрала корона в процессе рендеринга третьей сцены. И вот тут хорошо видно, что не смотря на то что Октан уютно разместился в ОЗУ, запросив 24357 Мб, места в видеопамяти для сцены просто не нашлось. Результата не случилось.
Здесь я включил галочку Use CPU Memory в настройках Octane, и выделил 32 Гб для этого. Увы, результат оказался таким же.
В сцене испольщовалось 15 «уникальных» деревьев. Это много. Но ведь для экстерьеров вообще характерно использование большого кол-ва уникальных моделей, будь то растения, люди, автомобили, детские и спортивные площадки, я уже не говорю про собственно архитектуру, которая далеко не всегда типовая. Так что оказаться в ситуации когда ваша сцена запросит памяти больше чем есть у вашей видеокарты очень легко.
И еще раз, я ни в коем случае не предлагаю вам отказаться от GPU рендеринга, скорее напротив поддержу если очевидно оно даст прирост в производительности за меньшие деньги. Я лишь хочу показать, что чудес не бывает. И память она либо есть, либо ее нет. И если сцена в память не лезит — то это реальная проблема.
Спасибо тем, кто осилил это полотенце. Жду ваших комментариев о том, профув я не привел, что тест я провел не так, и все надо было сделать по другому, что бы было честно :)
PS простите за корявое форматирование. парсер упорно игноририрует тэг <br/>