Vray memory allocation failure урок

17 Sep, 2011 renderstuff (Staff Author)

В прошлом уроке про контроль адаптивности DMC Sampler, мы познакомились со способом глобального управления качеством и скоростью рендеринга в V-Ray. В этом уроке мы разберемся в настройках свитка V-Ray:: System вкладки Settings окна Render Scene (F10) в 3ds Max.

Этот урок ответит на следующие вопросы:

- Что делать если происходит краш 3ds Max из-за нехватки оперативной памяти?

- Что делать если V-ray вылетает при рендере?

- Как бороться с нехваткой ОЗУ в V-Ray?

- Как отрендерить сцену с огромным количеством полигонов?

- Что делать если, при рендеринге тормозит компьютер?

- Что такое Raycasting и как V-Ray ускоряет его работу?

- Что такое BSP tree и как выглядит его структура в V-Ray?

- Чем отличается Static Raycaster от Dynamic Raycaster?

- Когда V-Ray использует свопинг?

- Как переключить работу V-Ray на динамический рейкастер?

- Что такое бакеты V-Ray?

- Зачем нужны логи рендеринга VRay log?

- Как менять приоритет рендеринга V-Ray?

- Что делать если V-Ray вылетает при просчете Light Cache?

- Как высчитать оптимальный размер Dynamic Memory Limit?

оптимальные настройки vray 3.2 renderstuff

Проблемы Крэша V-Ray

При рендеринге сложных насыщенных сцен в V-Ray существует одно отвратительное явление, которое заставляет пользователей понервничать, а кого-то оно просто обезоруживает, убивая всякий энтузиазм продолжать любую дальнейшую работу над текущей сценой. Особенно неожиданным и каверзным это явление становится в момент, когда идет работа над коммерческой сценой и есть конкретные сроки, с четко обозначенным дедлайном. Все форумы, ведущие обсуждения V-Ray рендерера, просто завалены сообщениями с полу-умоляющими просьбами помочь не завалить сроки, выйти из критичной ситуации и закончить визуализацию сложной сцены :D

Разумеется, речь идет о нехватке оперативной памяти во время рендеринга, которая является причиной крэша 3ds Max и вылета сцены.

vray краш нехватка памяти, вставление планки памяти ОЗУ

Почему же это все-таки происходит? Что приводит к этой ошибке? Неужели нельзя ничего сделать? Неужели, чтобы завершить сложный проект, неминуемо потребуется увеличивать количество оперативной памяти, установленной в текущем компьютере? Правда ли что единственный выход это идти в магазин компьютерных комплектующих и банально докупать несколько планок ОЗУ?

Чтобы ответить на эти вопросы, давайте разберемся, как же V-Ray использует оперативную память и какие инструменты управления процессом ее использования нам доступны.

В любом программном обеспечении, управление оперативной памятью и способ размещения данных в ней, это очень сложный и рутинный материал. По крайней мере, для тридешника. Нет совершенно никакого смысла вдаваться в точнейшие подробности, описывая массивы данных и адресацию к ним, глубоко уходящие корнями в программирование. Для того, чтобы уметь гибко управлять оперативной памятью программы на уровне профессионального пользования, достаточно лишь условного представления о процессах, происходящих с ней. Тем более, что в любой программе, пользователь всецело ограничен ее интерфейсом. V-Ray – не исключение.

Raycasting, Основа Рендеринга V-Ray

Для того, чтобы V-Ray смог приступить к рендерингу, то есть, смог из трехмерной сцены сделать растровую картинку, ему перед началом просчета необходимо загрузить данные о геометрии в оперативную память, чтобы использовать их для вычисления цвета пикселей финального изображения. Это начальный аспект рендеринга. Осознав его, важность оперативной памяти в процессе визуализации сразу становится ясной. Но, конечно же, мы этим не ограничимся и пошагово последуем порядку рендеринга.

Как только данные загружены в память, V-Ray может начинать рендеринг. Просчет каждого пикселя начинается с базовой операции, а именно "прощупывания" геометрии с помощью специального алгоритма, так называемого Рейкастинга (Ray casting). Суть этого алгоритма в том, что из камеры выпускается луч по направлению сцены, который летит до первого столкновения с каким-либо объектом сцены. Каждое такое столкновение фиксируется и, таким образом, V-Ray определяет местоположение геометрии в сцене, ее базовые свойства и другую требуемую для последующего рендеринга информацию.

Недостатки Не Организованности Данных

Процесс просчета одиночного рейкаста, т.е. столкновения луча с геометрией и определение ее свойств, сам по себе не значителен по времени. Однако, количество таких рейкастов при фотореалистичном рендеринге, может во много раз превышать количество пикселей рендера, которых и самих немало. Например, рендер HD разрешения 1920х1080 состоит из более чем 2 миллионов пикселей. Такой масштаб кардинально меняет ситуацию, делая процесс рейкастинга очень ресурсоемким.

Давайте проведем формальную аналогию технически замысловатому алгоритму рейкастинга. Она здорово поможет понять конкретные проблемы использования оперативной памяти в V-Ray.

Итак, представим геометрию сцены совокупностью обычных зеленых листьев с дерева, а алгоритм рейкастинга – неустанным муравьем, которому нужно найти среди всех листьев самый вкусный желтенький лист. В нашей аналогии, этот желтый лист будет представлять требуемую информацию о геометрии, с которой пересекся луч рейкастинга, чтобы произвести рендер какой-то одной зоны изображения.

Изначально, данные о геометрии сцены, которым предстоит загрузка в оперативную память, с точки зрения процесса рейкастинга расположены хаотично. Поэтому пусть предполагаемые листья так же будут хаотично свалены в кучу.

Наш работяга-муравей знает, что ему нужно найти желтый листик среди огромного множества ненужных ему зеленых. Как ему это сделать? Конечно же, ему придется  последовательно перебрать кучу зеленых листочков, начиная с самого ближнего к нему и заканчивая самым дальним, пока не отыщется тот самый желтый, лакомый листик.

vray рейкастер без организации данных, листья сложно искать муравью

Подошел к первому, посмотрел, спелый ли он. Подошел ко второму, посмотрел, нужен ли ему второй. Подошел к третьему, посмотрел, желтый ли этот. И так, ему нужно перебрать буквально каждый листик в огромной куче, отсекая зеленые, чтобы найти заветный желтый.

Да, вероятна ситуация, что муравей попадет на желтенький листик в самом начале своего поиска. Но также нет абсолютно никакой гарантии, что желтый листик не окажется самым последним. Тогда, для отыскания одного единственного желтого листика ему придется пересмотреть всю огромную кучу зеленых.

Аналогичная ситуация произойдет с неорганизованными данными о геометрии сцены. Алгоритм рейкастинга будет вынужден последовательно перебирать все данные о геометрии для отыскания свойств единой точки в сцене, с которой пересекся выпущенный из камеры луч.

Такой способ поиска требуемой информации излишне утомителен и для нашего условного муравья, и для процессора, который вместо сугубо рендеринга, вынужден заниматься последовательным перебором данных в оперативной памяти.

BSP tree и Удобное Структурирование Данных

Для ускорения процесса определения свойств части сцены, с которой пересекся луч рейкастинга, V-Ray организовывает всю геометрию в удобную ему структуру.

V-Ray «раскладывает» данные о геометрии в оперативную память «по полочкам» иерархической древовидной структуры. Она называется Binary Space Partitioning (BSP) tree. Это особый метод представления массива данных в виде двоичной древовидной структуры.

Его общая суть в том, что все имеющиеся данные о геометрии делятся надвое, разделяя пространство сцены напополам. Таким образом, образуются две ветки, отходящие от исходной точки (всей сцены), которая называется корнем дерева – Root. После первого деления, каждая из веток данных, исходящая из корня, снова делится напополам, образовывая новые ветки. Точки, из которых исходят новые ветки, называют узлами дерева – Node. Процесс деления геометрии сцены и запись новых веток древовидной структуры в память продолжается до тех пор, пока не будет достигнут предельный уровень деления, который задается в параметрах создания двоичного дерева BSP tree. Результат последнего деления веток называется листьями дерева – Leaf. Таким образом, создается разветвленная структура геометрии всей сцены, по которой может происходить быстрый поиск свойств нужной области сцены.

Для условного, но наглядного представления того, как это происходит, давайте вернемся к нашему энтомологическому примеру. Аналогия с листиками и муравьем-сыщиком прекрасно показывает, как начальная организация помогает в поиске нужных данных.

bsp tree двоичное бинарное дерево vray организованные данные ускоряют рейкастинг

Если мы не будем сбрасывать листья в беспорядочную кучу, а аккуратно расположим их на ветках дерева, то мы можем в разы ускорить процесс нахождения желтого листика. Ведь тогда наш муравей, минуя все лишние ветки, прямиком отправится к заветному желтому листочку. Так, ему не придется  последовательно осматривать все листики. Вместо этого, он сразу глянет на дерево и, увидев на какой из веток растет желтый листик, быстренько заберется к нему своими цепкими лапками.

По такому принципу V-Ray структурирует данные о геометрии в сцене, не упуская  возможностей сэкономить наше драгоценное время даже на таких, казалось бы, мелких операциях.

Базовый принцип рендеринга на этом уровне достаточно прост: загрузил, структурировал, отыскал  нужные свойства и отрендерил :)

Теперь, когда мы познакомились с принципом структурирования данных для рейкастера, можно переходить к следующему шагу, который встречается на пути рендеринга насыщенных сцен в V-Ray.

Static Raycaster – Загрузка Всей Сцены в Память

Как мы теперь знаем, для начала процесса рендеринга, в память должна быть загружена геометрия сцены. В предыдущей главе мы рассмотрели древовидную структуру, решающую проблему медлительности рейкастинга.

Однако, на пути рендеринга встречается еще одна проблема, с упоминания которой мы начали этот урок. Всё гладко до тех пор, пока для загрузки геометрии в том или ином виде, не требуется  ОЗУ больше, чем физически установлено на текущем компьютере.

Дело в том, что в V-Ray есть разные типы алгоритмов рейкастинга. Самый простой из них – это так называемый Static Raycaster. Он загружает в память геометрию сцены сразу и целиком.

Представьте, что мы собираемся запустить рендеринг сцены со многими миллионами полигонов, а для всей ее загрузки не хватает доступного нам объема ОЗУ. Что происходит в таком случае? К сожалению, в таком случае происходит одна из самых неприятных неожиданностей V-Ray – краш программы.

v-ray exception, unhandeled exception: memory allocation failure, общий windows ошибка пример

Краш (англ. crash) – это программный сбой, непредвиденная критическая ошибка, приводящая к аварийному завершению программы. Этот самый сбой V-Ray происходит в тот момент, когда свободный объем ОЗУ исчерпан и дальнейшее заполнение памяти геометрией просто невозможно. Сообщение о создании в памяти древовидной структуры геометрии «Current Task: Buliding static raycast accelerator...» это, как правило, последнее, что видят 3d визуализаторы в информационном окне Rendering. Далее рендеринг, а за ним и работа 3ds Max с V-Ray, самопроизвольно обрываются, вызывая окно отчета об ошибке.

В нашей аналогии, например, это попытка использовать излишне ветвистое дерево для расположения листиков. Слишком тяжелое дерево, под массой огромного количества листьев и ветвей, просто рухнет, вырвавшись из держащей его земли.

крэш vray упавшее дерево вырвалось корнем из земли (памяти) из-за тяжелых листьев

Единственным выходом из подобной ситуации без увеличения объема ОЗУ, будет отказ от единоразовой загрузки всей сцены в память и поочередная загрузка ее отдельных частей, просчет которых должен происходить в данный конкретный момент рендеринга.

Как и следовало ожидать, V-Ray обладает таким способом загрузки геометрии в память. Этот способ воплощен в особом, динамическом типе рейкастера, который рассчитан как раз на подобную ситуацию.

Dynamic Raycaster – Загрузка Геометрии Порциями

В отличие от базового движка рейкастинга под названием Static, динамический Dynamic Raycaster позволяет динамически загружать лишь определенную часть геометрии, необходимую в данный момент рендеринга.

Dynamic Raycaster загружает в оперативную память лишь определенную порцию геометрии, не превышающую заданное нами количество мегабайт. После того, как загруженная порция геометрии использована в просчете текущей части изображения, эта часть оперативной памяти очищается и загружается новая порция геометрии, которая будет использована для просчета следующей части изображения.

Рендеринг с помощью Dynamic Raycaster позволяет избавиться от проблемы переполнения оперативной памяти не только благодаря лимитированию оперативной памяти используемой рендерером. Динамический рейкастер использует возможности операционной системы по распределению памяти. Даже если для просчета текущей части изображения придется загрузить объекты, общий размер которых превышает установленный нами лимит памяти, то операционная система сможет выделить ресурс для успешного продолжения рендеринга. В частности Windows, будет использовать т.н. свопинг, сохранение на жесткий диск не поместившихся в физическую оперативную память данных.

Как бы ни было хорошо с динамической загрузкой геометрии, следует понимать, что если бы она была на самом деле универсальным решением, то ненадежный «вылетающий» Static рейкастер был бы просто не нужен. Однако V-Ray по умолчанию использует именно static raycasting engine.

Вполне ожидаемо, что, как и на любые операции, на загрузку и выгрузку информации тратится драгоценное время. Даже если мы установим идеально подходящий под нашу ситуацию лимит ОЗУ, использование Dynamic Raycaster существенно скажется на общем времени рендеринга, увеличив его. А в случае необходимости использовать свопинг – время просчета возрастет еще больше.

Вкратце это и есть все основы работы рейкстера с оперативной памятью и причины проблем ее использования им. Теперь, когда мы познакомились с сутью работы Raycaster, давайте взглянем на практические настройки и хитрости управления им.

Raycaster Params – Настройки Двоичного Дерева

raycaster params настройки в свитке vray system скриншот

Начнем с настроек, представленных в зоне Raycaster parameters свитка V-Ray:: System.

Первые три параметра задают свойства акселерационной структуры, двоичного дерева BSP tree. Они несколько абстрактны, поэтому для начала определимся с действием каждого.

Max tree depth – параметр, ограничивающий глубину разветвлений дерева. То есть, этот параметр определяет количество делений пространства сцены. Числовое значение этого параметра отражает максимальное количество уровней от корня Root до листьев Leaf. Чем больше значение Max tree depth, тем более разветвленным становится дерево.

Min leaf size – параметр, ограничивающий структуру бинарного дерева минимальным размером листьев. Этот параметр позволяет прекратить деление геометрии в сцене, указав величину минимального размера листьев в системных единицах измерения. Маленькие значения Min leaf size позволяют не ограничивать степень разветвления дерева, и таким образом дают ему разрастись настолько, насколько это позволяет предыдущий параметр.

Face/level coef. параметр, определяющий максимальное количество треугольников (минимальных единиц геометрии) в одном листке Leaf. Меньшие значения этого параметра, как и с предыдущим Min leaf size, позволяют получать более разветвленное дерево, с большим количеством листьев.

Как нам известно, организация данных о геометрии в сцене в виде двоичного дерева BSP tree призвана ускорить процесс рейкастинга. Вполне логично предположить, что чем ветвистее наша древовидная структура, чем мельче у нее листья и чем меньше единиц геометрии содержит каждый лист, тем больше будет потенциал ускорения и тем больше места в оперативной памяти потребуется для удержания ее ветвей.

Но, этому ускорению существует предел. После некоторого порога, дальнейшее деление не имеет смысла, так как при чрезмерно разветвленной структуре BSP tree, работа с ним становится слишком ресурсозатратной.  Алгоритм рейкастинга будет банально тратить вычислительный ресурс на блуждание по огромному BSP tree, нивелируя выигрыш в скорости по сравнению с неорганизованным видом данных.

Как найти этот предел, а с ним и оптимальный размер BSP tree, настроив скорость работы рейкастера с геометрией сцены на максимум?

Ответ на этот вопрос не самый ободрительный: исключительно экспериментальным путем. Не существует настроек, которые бы дали максимальную производительность в любой сцене с любым количеством геометрии. Для каждой конкретной сцены оптимальная глубина BSP tree индивидуальна.

Для рендеринга статичных изображений возня и многочисленные эксперименты с вышеописанными параметрами совершенно неоправданы. Просто потому, что для определения оптимальных параметров BSP tree, их необходимо подбирать, тратя уйму времени. Согласитесь, это абсурд, проводить 10 раз финальный рендеринг в поисках оптимальных настроек BSP tree, чтобы в итоге провести его же в одиннадцатый раз, но на 10 минут быстрее :D

Как бы там ни было, параметры создания BSP tree это не просто демонстрация технических возможностей рендер-движка. Их назначение становится понятным, когда речь заходит об анимации. Например, необходимо просчитать секвенцию в 1000 кадров. Тогда можно смело проводить экспериментальный подбор оптимальных параметров BSP tree. Даже если для выбора лучших значений потребуется просчитать 10 или 20 финальных рендеров, но при этом скорость рендеринга каждого кадра увеличится на 20 секунд, то настройка будет весьма полезной. Ведь такой оптимизацией будет с легкостью сэкономлено более 5 часов вычислительного времени.

В практике статического рендеринга, необходимость изменять значения этих параметров существует лишь теоретически. Она может иметь смысл тогда, когда нужно уменьшить размер BSP tree и, ценой снижения скорости рендеринга, освободить часть оперативной памяти в угоду других нужд.

В универсальных стартовых настройках V-Ray, в параметрах, отвечающих за структуру BSP tree, следует оставлять номинально установленные значения, не внося в них свои коррективы без реальной необходимости.

Raycaster Params – Настройки Динамического Рейкастера

Dynamic memory limit – параметр, определяющий лимит оперативной памяти в мегабайтах, выделенный динамическому рейкастеру. Именно этот параметр определяет максимальный размер доли оперативной памяти, которая будет использована для каждой порции геометрии при работе dynamic raycaster. Буквально, установленное в этом параметре количество мегабайт делится между вычислительными потоками текущего компьютера. Низкие значения этого параметра могут существенно понизить производительность рейкастера, т.к. это может повысить частоту загрузки/выгрузки порций геометрии и частоту обращений к сравнительно медленному свопингу. Завышенные значения могут несколько замедлить работу рендерера и существенно повлияют на комфорт работы в операционной системе. Значение в 60–80% от общего количества оперативной памяти, доступного Вашей системе позволяет добиться наибольшей производительности. Именно его и следует использовать в универсальных настройках V-Ray.

Калькулятор Dynamic Memory Limit

Чтобы Вы не утруждали себя подсчетом, воспользуйтесь этим javascript калькулятором Dynamic memory limit для определения оптимального количества мегабайт для использования в этом параметре на Вашем компьютере:


Installed memory (RAM), GB:
Operating System:
Dynamic Memory limit, MB:


Default geometry – параметр, определяющий способ загрузки геометрии в оперативную память. Здесь можно выбрать тип рейкастера, которым будет просчитываться геометрия в текущей сцене. Параметр Default geometry управляется выпадающим списком, из которого можно выбрать тип рейкастинга.

До описания опций параметра Default Geometry, стоит упомянуть VRayProxy и VRayFur объекты. Особенностью рендеринга сцен с такими объектами является то, что в независимости от того, каково текущее значение Default geometry, эти объекты в обязательном порядке просчитываются динамическим рейкастером. Такие объекты по определению сверхвысокоплигональные и желательно всегда загружать их геометрию порционно, номинально избегая крушения программы.

Static – самый тривиальный режим рейкастинга. В режиме Static, все данные о геометрии сцены, необходимые для рендеринга, целиком загружаются в оперативную память перед началом визуализации.

Dynamic – компромиссный динамический режим Default geometry. В режиме Dynamic не происходит загрузки всех данных о геометрии сцены в оперативную память целиком. Они загружаются дозировано, в виде порций. Максимальный размер порции определяется количеством мегабайт, установленным в числовое поле Dynamic memory limit.

Auto – установленный по умолчанию параметр Default geometry. В этом режиме, V-Ray самостоятельно решает, какие объекты в сцене просчитывать статическим рейкастером, а какие – динамическим. Просчитывать ли тот или иной объект динамическим рейкастером, V-Ray решает на основании свойств самого объекта. А именно в зависимости от количества составляющих его полигонов и от количества его образцов (instances). Это гибридный способ загрузки геометрии, совмещающий работу и статического, и динамического рейкастеров.

Если сравнивать типы рейкастеров, то Dynamic это самый неприхотливый, но и самый медленный режим. С ним реже всего возникают проблемы краша 3ds Max, однако, в связи необходимостью постоянно заполнять и очищать ограниченный объем памяти, скорость рендеринга существенно замедляется. Когда просчет геометрии ведется Static raycaster, он самостоятельно распоряжается всем ресурсом доступного ОЗУ в данной системе. Это самый производительный, но и самый нестабильный режим. Если все данные о геометрии полностью умещаются в памяти, то рендеринг идет максимально быстро, ведь не нужно дозировать геометрию и ожидать загрузки/выгрузки очередной порции данных, и уж тем более использовать свопинг. Однако, если данных больше, чем может уместиться в доступной на данном компьютере, оперативной памяти, то это немедленно приведет к крушению программы, аварийно завершив ее работу. Вспомните картинку со сломленным деревом :)

Номинально, Default geometry установлен в режим Auto. Это самый универсальный режим из трех и именно его следует использовать в универсальных стартовых настройках V-Ray.

Параметры Бакетов

Настройки зоны Render region division системных настроек V-Ray рендерера позволяют выбирать размер и очередность рендеринга порций изображения, последовательно просчитываемых рендерером.

render region division настройки в свитке vray system скриншот

Render region division или, как его еще называют, бакет – это минимальный регион-порция финального изображения, на которые оно разбивается рендерером для последовательного многопоточного просчета. Суть такого разбиения аналогична сути параметра Number of passes для Light Cache. Бакеты – это те самые маленькие квадратики, которые весело (а иногда не очень :D) бегают по фрейм буферу, постепенно просчитывая и открывая нашему взору конечный результат рендеринга.

Как бы банально это не звучало, но собственно процесс рендеринга, который принято считать эталоном многозадачности, сам по себе не многозадачный. То есть само вычисление не может быть выполнено более чем одним ядром даже многоядерного процессора. Можно представить, во что может вылиться время рендеринга, если он будет вестись только одним ядром процессора, в то время как остальные ядра будут простаивать. Такой вариант совершенно неприемлем, и, конечно же, необходим выход из этой ситуации. Именно таким выходом и есть равноправное деление процесса рендеринга между разными вычислительными потоками. Для этого финальный рендер предварительно делится на множество самостоятельных частей, другими словами на множество маленьких рендеров, каждый из которых может быть просчитан отдельным вычислительным потоком. Таким образом, однообразное вычисление разделяется на несколько частей, позволяя полностью использовать ресурс всех вычислительных конвейеров, доступных системе. Так просчитываются все эти маленькие изображения (бакеты). Когда очередной бакет просчитан, он отображается во фрейм буфере, подобно детскому паззлу, собирающемуся из меленьких кусочков в одну финальную картинку, нарисованную на картонной коробке :) Для того, чтобы финальный рендер не выглядел как паззл или настенная мозайка, где четко различимы границы соседних ячеек,  производится их взаимное сглаживание.

X и Y значения определяют величину бакета в пикселях по горизонтали и вертикали соответственно. По умолчанию эти два числовых поля зависимы и равны. Однако достаточно отжать кнопку L (Lock) и станет доступным значение Y, которое можно будет задать независимо от значения X. Значения X и Y будут определять высоту и ширину бакета в пикселях, но лишь до тех пор, пока в выпадающем списке рядом (напротив X), выбрано значение Region W/H. Если же в нем установить значение Region Count, то числовые значения в полях X и Y будут определять количество бакетов, на которые будет разделен финальный рендер по горизонтали и вертикали.

Очевидно, что если финальное изображение разбивается на большое количество порций, то больше вычислительных ресурсов тратится на сглаживание их границ с соседними порциями. В тоже время, маленький размер порции-бакета служит залогом того, что в него попадет минимальное количество геометрии. Ведь бакет это и есть та порция просчитываемого изображения, которую загружает динамический рейкастер в ОЗУ. Уменьшение размера бакета может оказаться полезным, когда попадающие в бакет объекты превышают лимит оперативной памяти, доступной одному потоку. Меньший бакет теоретически может захватить меньший объем геометрии, что возможно избавит рендеринг от использования медленного свопинга. Как бы там ни было, такая ситуация сложно предсказуема и в стартовых настройках V-Ray следует использовать значения 64х64 Region W/H, установленные по умолчанию.

Region sequence – опция, задающая вид последовательности просчета порций или, другими словами, узор рендеринга бакетов. На выбор доступны шесть узоров рендеринга бакетов. Это Top/bottom, Left/right, Checker, Spiral, Hilbert curve и Triangulation.

Из названия первых четырех режимов вполне ясно, какой узор будут вычерчивать бакеты во фрейм буфере: сверху вниз, слева направо, шахматный узор и спираль, соответственно. В режиме Hilbert curve бакеты будут следовать друг за другом, словно змейка из кубиков в примитивном портативном тетрисе :)

Наиболее же интересный режим, это Triangulation. С ним бакеты будут вычерчивать треугольники разного размера, последовательно покрывая все зоны фрейм буфера. Главная особенность Triangulation в том, что в нем последовательно очерчиваются очень плотные зоны изображения, что весьма полезно при работе динамического рейкастера. С таким узором есть большая вероятность того, что при просчете текущих бакетов, может быть использована информация о геометрии, которая была загружена в оперативную память для только что просчитанных бакетов. Это позволит сэкономить вычислительный ресурс, минуя лишние операции загрузки и выгрузки данных, ограниченных порцией Dynamic memory limit. Именно по этой причине, даже если Вам больше нравится змейка или шахматный узор, в номинальных стартовых настройках V-Ray всегда следует использовать узор просчета бакетов Triangulation.

Reverse sequence позволяет обратить направление последовательности просчета бакетов.  Эта опция всего-навсего меняет последовательность просчета по узору, заданному в параметре Region sequence. Например, если просчет ведется слева направо (Left/right), то активация опции Reverse sequence заставит бакеты просчитываться справа налево, то есть в реверсном направлении. По сути, эта функция никак не влияет на процесс рендеринга. Но она может быть весьма полезна в тех случаях, если рендеринг сцены по каким-то причинам остановлен до завершения. Тогда рендеринг можно возобновить, активировав реверсное направление просчета бакетов и продолжить просчет сцены с непросчитанной части изображения. В оптимальных стартовых настройках изменение данной опции не имеет никакого практического смысла.

Previous render – параметр, позволяющий задать действие, производимое с предыдущим изображением во фрейм буфере во время рендеринга нового. Оставить предыдущий рендер неизменным позволяет режим Unchanged. Перекрыть старую картинку затемняющим узором шахматной доски или чередующихся линий помогут режимы Cross и Fields. Режим Darken и Blue позволяют просто затемнить или же придать синий оттенок предыдущему рендеру для подчеркивания контраста. Самый полезный из перечисленных режимов это стандартный Unchanged, который позволяет четко наблюдать за изменениями в новом рендере. Его и следует использовать в начальных настройках V-Ray.

На этом все важные системные настройки V-Ray заканчиваются. Последующие зоны и настройки свитка V-Ray:: System не оказывают существенного влияния на суть рендеринга и являются второстепенными. С ними мы тоже познакомимся.

Статистика Frame stamp

Далее в свитке V-Ray:: System расположен раздел Frame stamp, управляющий единственной функцией с несколькими параметрами.

frame stamp настройки в свитке vray system скриншот

Это второстепенная функция, позволяющая включать отображение статистической информации на изображении финального рендера. С помощью этой функции в финальный рендер можно добавить полосочку с различной технической информацией. Такой, как время рендеринга текущего кадра, название процессора ведущего рендеринг, текущая версия V-Ray и даже размер финального изображения в пикселях. Эта специфическая возможность предназначена для особых случаев, например, для тестирования сцены на предмет того же оптимального размера двоичного дерева. Или же банальное желание похвастаться перед коллегами новым процессором и тем, как же классно и быстро он ренедерит Вашу сложнейшую сцену :D Разумеется, в универсальных стартовых настройках V-Ray активация Frame stamp совершенно ни к чему.

Настройки распределенного рендеринга

Следующая зона свитка V-Ray:: System активирует и вызывает настройки режима сетевого распределенного рендеринга Distributed rendering.

distributed rendering настройки в свитке vray system скриншот

Это одна из самых революционных возможностей современных рендер движков. Distributed rendering позволяет производить рендеринг одного изображения мощностями нескольких компьютеров. Для этого они должны быть настроены соответствующим образом и объединены в локальную сеть. V-Ray может распределять и отправлять отдельные бакеты всем доступным компьютерам, а затем собирать результаты их просчетов в едином фрейм буфере.

Это очень объемная и интересная тема, которая со временем будет раскрыта на страницах RenderStuff. Как бы там ни было, просчет изображения несколькими компьютерами не имеет отношения к стартовым настройкам V-Ray и, следовательно, опцию Distributed rendering активировать не нужно.

Журнал рендеринга V-Ray

Далее в свитке V-Ray:: System расположен раздел VRay log. Он весь, как и ранее рассмотренный раздел Frame stamp, отвечает за работу одной функции – журнала V-Ray.

vray log настройки в свитке vray system скриншот

В отличие от Frame stamp, полезность этой функции весьма очевидна. Активация чекбокса Show window в настройках VRay log позволяет вызывать информационное окно Vray messages, в котором будет отображены логи работы V-Ray во вре



18 Sep, 2011 maksvel
18 Sep, 2011 # Re: Vray memory allocation failure урок
Как всегда отличный материал 👍
О чем интересно будет следующий урок ?

18 Sep, 2011 Андрей
18 Sep, 2011 # Re: Vray memory allocation failure урок
Спасибо за очередной полезный тутор. Вы как всегда на высоте ребята! Молодцы! 🙂

19 Sep, 2011 Денис
19 Sep, 2011 # Re: Vray memory allocation failure урок
Плюсанул 👍 😁

19 Sep, 2011 Maks (Staff Author)
19 Sep, 2011 # Re: Vray memory allocation failure урок
Спасибо всем за хорошие отзывы! 🙂

Следующий урок будет подытоживать все оптимальные настройки V-Ray и описывать методы удобного использования их и V-Ray в целом.

19 Sep, 2011 Денис
24 Sep, 2011 # Re: Vray memory allocation failure урок
Попробовал калькулятор - все работает...
Возник попутный вопрос: почему значение в вашем калькуляторе Dynamic memory limit существенно отличается для разных операционок, например я поставил 1 Гб ОЗУ, Dynamic memory limit для Windows XP составил 420 Мб, а для Windows Vista и Windows 7 составляет всего 100 Мб?

26 Sep, 2011 Anton (Staff Author)
26 Sep, 2011 # Re: Vray memory allocation failure урок

Привет!

Номинально операционная система использует определенный объем физической оперативной памяти под свои нужды (напрмер, графический интерфейс), после исчерпания которого, операционная система начинает использовать свопинг. Что незамедлительно сказывается на общей производительности всего компьютера.

Важно сделать все, чтобы не пришлось использовать свопинг и система не начала тормозить.

Калькулятор Dynamic memory limit учитывает эту особенность и старается зарезервировать, под нужды системы рекомендованное количество оперативной памяти.

Для разных версий операционной системы рекомендован разный объем физической памяти под собственно нужды системы. Именно поэтому, для разных версий Windows рекомендованный размер Dynamic memory limit с учетом нужд системы, отличается.

Вкратце, если ты хочешь узнать, сколько мегабайт ставить в Dynamic memory limit, то просто используй этот калькулятор. Больше додумывать ничего не нужно 😉


26 Sep, 2011 KostYAn
26 Sep, 2011 # Re: Vray memory allocation failure урок
Разъясните пожалуйста, dynamic memory limit выделяется только для динамической геометрии (то есть для прокси, дисплейсмента и меха виреевского)?

19 Sep, 2011 Денис
26 Sep, 2011 # Re: Vray memory allocation failure урок
Спасибо за разъяснение, Антон! 👍 Теперь все стало на свои места. Судя из всего сказанного Windows XP наиболее рациональна в использовании этого метода.

27 Sep, 2011 Алексей
27 Sep, 2011 # Re: Vray memory allocation failure урок
У меня винда 7 и 8 гигов оперативы, т.е по вашему калькулятору я должен ставить в Dynamic memory limit 6200, однако в максе эта цифра не поднимаеться выше 3000, эт так и должно быть?

19 Sep, 2011 Maks (Staff Author)
27 Sep, 2011 # Re: Vray memory allocation failure урок
KostYAn, так и есть, парамаетр Dynamic memory limit устанавливает размер памяти для просчета объектов исключительно динамическим рейкастером. Не забывай, что некоторые объекты просчитываются с помощью dynamic raycaster не зависимо от того, какой режим default geometry выбран 😉


Денис, Windows XP просто менее требователен к ресурсам системы и, разумеется, с в нем можно использовать больше памяти под нужды V-Ray 👌


Алексей, судя по всему ты используешь 32-битную операционную систему или 32-битный 3ds Max и V-Ray, которые не могут использовать более 2800-3000 Мб оперативной памяти в силу технических ограничений. Другими словами, твои 5 гигабайт оперативной памяти в текущий момент остаются не у дел. Разумеется, в такой ситуации, так не должно быть. Убедись, что у тебя 64-битная Windows и установи 64-битный 3ds Max и соответствующий V-Ray, тогда ты сможешь использовать рекомендованные значения и заодно возможности своего компьютера полноценно.

12 Oct, 2011 Victor Skea
12 Oct, 2011 # Re: Vray memory allocation failure урок
Спасибо за полезную информацию. Давно ищу обучающую литературу по в-рею, которая написана живым языком и с объяснением тонкостей и хитростей. От официального мануала меня тошнит уже, из-за общих и поверхностей объяснений принципов, без углубления в "что хорошо, что плохо".

Но я вот сейчас поставил memory limit на 14400Мб. А на расходе это никак не сказалось. Он как использовал 25% памяти, так и использует. Хотя сцена 1,5 миллиона полигонов и видов материалов штук 150, большая часть из которых текстурные с бампом и всеми делами.

26 Sep, 2011 Anton (Staff Author)
12 Oct, 2011 # Re: Vray memory allocation failure урок

Привет!

Не заморачивася тем сколько оно использует. Рендерер использует столько, сколько ему необходимо из того, что ты ему выделил. Просто ставь оптимальное для твоей системы и компа значение, и больше к этому вопросу не возвращайся 😉

Кроме того, если ты в винде смотришь расход ОЗУ, то это лишь вводит тебя в заблуждение. Она не показывает объективно. А с SuperFetch, так ты в жизни не увидишь реальный расход ОЗУ, так как система сама целенаправленно его забивает «под завязку» 😁


12 Oct, 2011 Victor Skea
12 Oct, 2011 # Re: Vray memory allocation failure урок
Привет, Антон. Я может и не заморачивался бы этим. Но проблема в том, что макс (2010 х64) стал бессовестно падать. Причем самым подлым образом он может упасть во время, когда я жму на CTRL+S. Вместо того, чтобы сохранить мои последние труды и усилия он предлагает мне пожаловаться в Autodesk.
Я возможно не там ищу источник болезни, потому что симптомы проявляются самые разные, например, меню программы сворачивается, когда я наведу на него мышкой. Но чаще всего он падает конечно, когда я хотя бы раз порендерю сцену v-ray 1,5 SP4. Но что любопытно когда я рендерю с помощью v-ray RT, падения случаются гораздо реже.

26 Sep, 2011 Anton (Staff Author)
12 Oct, 2011 # Re: Vray memory allocation failure урок
Пути решения проблем вылета 3ds max, описанные в данном уроке, отсносятся исключительно к вылетам во время рендеринга V-Ray насыщенных сцен.

Вот, загляни в обсуждения вылетает 3d max и тормозит V-Ray, там может быть нужный тебе ответ 😉


12 Oct, 2011 Victor Skea
12 Oct, 2011 # Re: Vray memory allocation failure урок
Огромное спасибо за помощь!)

18 Oct, 2011 negro
18 Oct, 2011 # Re: Vray memory allocation failure урок
GRACIAS Obrigado СПАСИБО !!!


18 Oct, 2011 kiteman
18 Oct, 2011 # Re: Vray memory allocation failure урок
Спасибо за эту статью, очень интересно. Я решил много вопросов, которые я всегда хотел знать. С уважением


18 Oct, 2011 RenderStuff (Staff Author)
18 Oct, 2011 # Re: Vray memory allocation failure урок
Спасибо за теплые комментарии 👌


19 Oct, 2011 Pedro
19 Oct, 2011 # Re: Vray memory allocation failure урок

Привет:

это работает для Vray в SketchUp?


18 Oct, 2011 RenderStuff (Staff Author)
19 Oct, 2011 # Re: Vray memory allocation failure урок

Привет Педро,

несмотря есть небольшие различия в некоторых параметрах, эта информация касается всех Виреев. Принципы рейкастинга V-Ray, описанные в данном уроке, применимы в V-Ray для 3ds Max, V-Ray для Maya, V-Ray для Rhino, V-Ray для SketchUp, V-Ray для Softimage, V-Ray для Cinema 4d, и V-Ray для Blender.


15 Nov, 2011 George M.
15 Nov, 2011 # Re: Vray memory allocation failure урок
Привет RenderStuff, у меня есть проблема довольно долгое время, и я надеюсь, что вы можете помочь мне. Когда я пытаюсь сделать в первый раз после открытия сцены, рендеринга, компьютер, все идет отвечать на запросы в течение некоторого времени (например, 5-8 минут), когда он вычисляет статический raycast в V-Ray. После этого Everyting переходит в нормальное состояние, и продолжает оказывать. Это происходит только один раз после того, как я открыть сцену в 3ds Max. Если закрыть 3ds Max и откройте сцену снова, это происходит снова. Raycast задается значениями по умолчанию. Если я объединить объекты в другой пустой сцене, эта проблема уходит, но только для первых 2 или 3 спасает. Можете ли вы дать мне, возможно, какие-то советы? Спасибо!


18 Oct, 2011 RenderStuff (Staff Author)
15 Nov, 2011 # Re: Vray memory allocation failure урок
Привет Джордж, Это, безусловно, не хватает оперативной памяти для сцены, которую вы пытаетесь вынести. Вы должны либо купить несколько RAM палочки, или принести оптимизацию в ваш подход создания сцен. Убедитесь, что у вас есть адекватное количество полигонов для 3D-моделей, использовать экземпляры для объектов в сцене столько, сколько вы можете проверить, если используются текстуры число и разрешение являются оптимальными. Что же касается, почему это происходит только в первый раз, это просто. Данные заполняются в памяти только один раз; все последующие раз большая часть данных остается готова к использованию * Pardon *


15 Nov, 2011 George M.
16 Nov, 2011 # Re: Vray memory allocation failure урок
Благодарим Вас за быстрое и эффективное Well..things ответов больше смысла прямо сейчас 👍 Моя сцена очень тяжелая на самом деле. Я исключил эту возможность на некоторое время, потому что я думал, 8 ГБ оперативной памяти было достаточно. Теперь, когда вы сказали мне, я перепроверил использование оперативной памяти, и он идет внезапно до 99% при raycasting. Я постараюсь сделать некоторые оптимизации, возможно, некоторые VRay Proxys и экземпляры, как вы предложили. Я также прочитал ваши другие учебники, и у меня есть небольшой вопрос относительно гамма 2.2 рабочий процесс, который я использую его в течение некоторого времени, но я до сих пор есть некоторые пробелы. Я отправлю его там. Я надеюсь, что я не очень раздражает, разместив много вопросов. 😁


18 Oct, 2011 RenderStuff (Staff Author)
16 Nov, 2011 # Re: Vray memory allocation failure урок
Недавно мы решили сделать обновление аппаратного и обнаружил, что память DDR3 очень доступным в настоящее время. $ 50 может принести вам следующий 8 Гб оперативной памяти. Если ваша система работает с DDR3, конечно 🙂 Джордж М., безусловно, задавайте свои вопросы в соответствующем руководстве. Если у вас возникнет вопрос, который не связан с какой-либо из нынешних учебников, не стесняйтесь, чтобы создать новое обсуждение😉


28 Dec, 2011 moroz
28 Dec, 2011 # Re: Vray memory allocation failure урок
Здравствуйте Антон. Недавно столкнулся с проблемой такого характера: скачал недавно травку (IGrass) с инета и начал рассаживать ее Multi Scatterom (траву конечно в прокси перевел), еще использую деревья евермоушенские (тоже прокси), материалов в сцене использую немного. Суть в том, что раньше делал примерно такую же работу, но траву делал сам и деревья те же самые использовал и рендер у меня шел намного быстрей. Сейчас же при использовании 2,7 гб оберативки (у меня всего 4гб) в окне рендеринга всплывает заместо так скажем считаемого препасса сообщение такого рода: "Unloading geometry".Я так полагаю что памяти оперативной не хватает.Долго мучился но на каком то ресурсе вычитал, что можно в динамик мемори лимит 0 прописывать и макс будет использовать всю свободную память.Сделал так, но просчет затянулся на очень долго и проц работал всего на 50% своей мощности. Подскажите, пожалуйста, как можно возможно сэкономить время рендера в моей ситуации.Заранее благодарен

26 Sep, 2011 Anton (Staff Author)
28 Dec, 2011 # Re: Vray memory allocation failure урок
Привет!

Все верно. В режиме Dynamic, рендерер полностью загружает выделенные ему 2,7 гб оберативки и передает управление памятью операционной системе. Которая, в свою очередь, не имя в распоряжении свободной памяти (ведь ее только что «съел» рендерер), начинает подгружать данные в файл подкачки на жестком диске. И по этому, все тормозит на стадии загрузки геометрии (Unloading geometry).

Выставив Dynamic memory limit на ноль, скорее всего (я сам такое некогда не делал, по этому могу лишь догадываться), рендерер минует стадию загрузки геометрии в ОЗУ и сразу же передает управление памятью операционной системе. А она, попросту, решает ресурсоёмкий процесс сразу же закачать прямиком в своп файл, оставив оперативную память для других приложений. Типа инстинкта сохранения 😁

Вот и выходит, что в этом случае вся информация о геометрии находится не в быстрой оперативной памяти, а на медлительном жестком диске.

Конечно же в этом случае рендер будет длится бесконечность 🙂

Рациональный выход в этом случае только один – покупка больше озу. Теме более, что сейчас цены на память очень упали. Хороший повод для апгрейда.

Нерациональный - регионом рендерить сцену, чтобы для текущего рендера пришлось загружать меньше геометрии и она вся помещалась в свободную оперативную память, без свопинга на диск.

28 Dec, 2011 moroz
28 Dec, 2011 # Re: Vray memory allocation failure урок
Спасибо, Антон. Сегодня прикупил 8 гб ОЗУ и рад безумно. Рендер той же сцены занял всего 15 мин, заместо 2 часов.

28 Dec, 2011 moroz
28 Dec, 2011 # Re: Vray memory allocation failure урок
Тут еще раз внимательно прочитал ваши догадки по поводу обращения к памяти на медлительный жесткий диск и возник вопрос. Сейчас есть SSD винчестеры и они намного намного быстрей обычных. Так вот если иметь его и не иметь достаточного количества оперативной памяти и выставлять в динамик мемори лимит 0 то будет ли рендер идти быстрей, т.к. обращение к жесткому диску будет идти быстрей за счет его быстроты обмена процессами???

19 Sep, 2011 Maks (Staff Author)
28 Dec, 2011 # Re: Vray memory allocation failure урок
moroz, выставлять DML в ноль это изнчально странная затея. Возможно, в каких-то версиях V-Ray (например для c4d), значение Dynamic Memory Limit = 0 означает автоматическое определение лимита. Но, для V-Ray for 3ds Max этот вариант мало того что недокументированный, на практике он выглядит именно как фактический отказ использования оперативной памяти рендерером напрямую и передача этой заботы операционной системе. Поэтому, нет ситуации, в которой значение 0 даст хоть какой-то прирост производительности.

Что касается SSD, то он однозначно быстрее HDD и, в случае использования свопинга при нехватке физической оперативной памяти, его использование позволит провести быструю загрузку текстур и немного ускорит рендеринг. Но эту скорость (в самых дорогих SSD - до 150-255 Мб/с) никак нельзя даже примерно сравнивать со скоростью ОЗУ (самая дешевая ddr3 - до 10-30 Гб/с).

28 Dec, 2011 moroz
28 Dec, 2011 # Re: Vray memory allocation failure урок
Спасибо, теперь всё стало ясно и понятно, интересно же всё таки как этот вирей работает 🙂 Да выставление в ноль DML производительности не даст никакой это уже понятно, но зато есть возможность отрендрить сцену если недостаточное количество ОЗУ (если терпения хватит 😁 ), ну это ИМХО.У меня в принципе этот вариант работает на 3d max design 2010 и VRAy 2.0 и с VRAy 1.5 проходило.

12 Jan, 2012 Natalia
12 Jan, 2012 # Re: Vray memory allocation failure урок
Спасибо большое за материал! 👍 Все уроки на одном дыхании. Все очень подробно и доходчиво!!! Респект авторам 👍

24 Jan, 2012 Rekha Maurya
24 Jan, 2012 # Re: Vray memory allocation failure урок
выдающийся объяснение ...... гуд работа :🙂


18 Sep, 2011 maksvel
1 Feb, 2012 # Re: Vray memory allocation failure урок
👍 Хотелось бы узнать, когда будут уроки по рендеру с уклоном в анимацию?

26 Sep, 2011 Anton (Staff Author)
1 Feb, 2012 # Re: Vray memory allocation failure урок
6 Feb, 2012 Homelioff
6 Feb, 2012 # Re: Vray memory allocation failure урок
Начав читать первый урок по рендирингу, не смог остановится и прочитал весь материал который тут находится в один присест) Очень познавательные, структурированные уроки! После их изучения наконец-то появилось чувство того, что я знаю V-Rey и понимаю суть его работы! Настроив все как предлагалось в уроках, отрендерил свою старую сцену за 20 мин в приличном качестве, хотя не так давно я ее рендерил 9 часов и качество было на том же уровне. Если взять в учет гамму и контрастность, то картинка стала гораздо лучше прежней, даже без фотошопа, а с отключением Antialiasing filter в фотошопе действительно стало гораздо больше простора для дальнейшей обработки!
Спасибо вам большое за такие полезные уроки! Это лучший материал, который я встречал за время своего обучения 3D)

7 Feb, 2012 uiti
7 Feb, 2012 # Re: Vray memory allocation failure урок
Спасибо за эти Vray учебник, мне очень помогают !!!


20 Feb, 2012 vªN²
20 Feb, 2012 # Re: Vray memory allocation failure урок
ты гений !!!! ............ спасибо. 😁


5 Mar, 2012 Peps
5 Mar, 2012 # Re: Vray memory allocation failure урок
При рендере картинки в окне rendering есть две кнопки pause и cancel, только pause у меня не активная. Как сделать ее активной?

6 Mar, 2012 gibson1980
6 Mar, 2012 # Re: Vray memory allocation failure урок
Никак 🙂

26 Sep, 2011 Anton (Staff Author)
6 Mar, 2012 # Re: Vray memory allocation failure урок

Peps, дело в том, что диалог Rendering, не относится непосредственно к V-Ray рендереру.
Это стандартный интерфейс рендеринга для самого 3ds Max. Как, собственно, и кнопка Pause.
Вне зависимости от того, какой рендерер используется в 3ds Max, вызывается этот диалог.
Например, Scanline – поддерживает функцию паузы,  mental ray – тоже. По этому в них она активна.
А вот V-Ray – нет. Поэтому, при рендеринге V-Ray рендерером, кнопка Pause неактивна и выглядит приглушенной.
Так что gibson1980 – прав 😉


5 Mar, 2012 Peps
7 Mar, 2012 # Re: Vray memory allocation failure урок
спасибо, желаю разработчикам поработать над паузой.

27 Jun, 2012 James
27 Jun, 2012 # Re: Vray memory allocation failure урок
Были в игре в течение 8 лет, и я нашел свои учебники, чтобы быть BRILLANT! Ответ на вопросы, которые я обдумывал на протяжении многих лет. Лучшие окна записи на Vray я прочитал - период.


28 Jun, 2012 APVM
28 Jun, 2012 # Re: Vray memory allocation failure урок
Большая статья, спасибо !! Вопросов; Я использую SU8 + VRay Возможно ли в VRay для SU выбирать между статическим или динамическим raycasting? Если да, то где я могу найти его? Он не появляется в системном свитка. С уважением, PJ


19 Jul, 2012 Antonio Neto
19 Jul, 2012 # Re: Vray memory allocation failure урок
Congrats для этого хороший информативный веб-сайт. У меня есть один вопрос: Вы знаете, что это различию между типами дерева сборки низкой, avarege, высокая? В чем плюсы и минусы? Если рендер будет быстрее или замедлить?


4 Aug, 2012 matias
4 Aug, 2012 # Re: Vray memory allocation failure урок
Спасибо за все ваши учебники, на самом деле большой материал. Не могли бы вы сделать учебник, показывающий, чтобы составить изображение ан пост, с Vray зеркальными, VRayLighting, VRay отражений карты? К сожалению мой английский, надеюсь, вы понимаете меня.


10 Jan, 2013 Lydia
10 Jan, 2013 # Re: Vray memory allocation failure урок
Я чуть не заплакала, читая это !!! вы двое лучший !!


23 Jan, 2013 Ioan Alex
23 Jan, 2013 # Re: Vray memory allocation failure урок
СПАСИБО !!!


16 Jun, 2013 Guilty
16 Jun, 2013 # Re: Vray memory allocation failure урок
Спасибо вам тааак много для этого ты лучший


27 Jan, 2015 Prashant
27 Jan, 2015 # Re: Vray memory allocation failure урок
Спасибо за лучшее учение когда-либо 👍


Комментировать

Имя:  


Анти-спам (отметьте пункты, с которыми Вы согласны, и уберите отметку, с которыми - нет)
Да, я спам-бот.
Да, я человек.
Правила Пользования Сайтом

RenderStuff © 2008