1 Уроки Rhino MaxwellRender для создания сложных интерьерных сцен 2 Пн Окт 04, 2010 8:46 am
Admin
Admin
В последнюю очередь создаются плинтусы, карнизы, интерьер наполняется предметами, имеющими второстепенную важность, однако, это позволяет придать помещению вид обжитого, что для фотореалистичной визуализации не менее важно, чем качество материалов пола, стен, мебели.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]КухняВанная
Визуализация
Что ж, вот, в двух словах, и закончен процесс моделирования. Теперь предстоит визуализация, но перед этим нам потребуется выполнить несколько манипуляций с 3D-объектами, поскольку экспорт и импорт сложных сцен таит в себе целый ряд «подводных камней».
Проблема экспорта
Самым очевидным способом переноса сцены в Maxwell Render (M~R), казалось бы, является экспорт сцены с помощью плагина Rhinoll. Для этого достаточно во вкладке Document Properties > Maxwell > Output поставить флажок Only Export MXS. После этого при нажатии на кнопку [Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] происходит только преобразование сцены в формат MXS, без визуализации. Теперь полученную сцену можно открыть в Maxwell Studio и заняться материалами. Но очень часто при наличии в сцене библиотечных объектов, импортированных из форматов 3DS, OBJ и DXF, не удаётся экспортировать сцену из-за ошибок, возникающих при преобразовании из этих форматов средствами Rhinoll.
Поэтому удобнее всего эскпортировать сцену по слоям в формат 3DS, а затем ипортировать полученные файлы в Maxwell Studio один за другим. Если поступить просто — выделять объекты каждого слоя и экспортировать выделенное в отдельный файл, то при импорте в Maxwell Studio мы заметим, что часть объектов «пропала». Поскольку и экспорт, и импорт происходит корректно, дело здесь не в формате файлов. Мы видим, что Maxwell Studio идентифицирует объекты по их именам (names), тогда как Rhino присваивает каждому объекту сцены глобальный уникальный идентификатор (GUID), а имена позволяет задавать любые, в том числе и совпадающие. При экспорте в 3DS, однако, Rhino использует в качестве идентификаторов именно имена, при этом, если в пределах одного экспортируемого файла имеются объекты с одинаковыми именами, — они будут переименованы, например: два из трёх объектов с именами Cylinder021 будут переименованы в Cylind_001 и Cylind_002 соответственно. Если же и в другом слое есть объекты, которые при экспорте будут переименованы автоматически, то им могут быть присвоены имена, совпадающие с именами объектов, прежде экспортированных из этого же файла. Например, если в другом слое есть два объекта с именами Cylinder479, то второй из них получит имя Cylind_001, а оно уже было присвоено объекту из другого слоя. Хотя Maxwell Studio и сравнивает имена импортируемых объектов с уже имеющимися в сцене, и даже может автоматически переименовать новый объект, но она (или всё-таки оно?) не проверяет, существует ли объект с именем, таким же, как и переименованный. Например, если в сцене есть объекты Obj_001 и Obj_001(1), то при импорте ещё одного Obj_001 Maxwell Studio автоматически переименует его в Obj_001(1), не смотря на то, что объект с таким именем уже существует. В результате первый из объектов будет потерян.
Решение проблемы
Что же делать? Нам пришлось написать небольшой скрипт, ниже приводится его текст, а вот описание того, что он делает:
Это позволяет:
OptionExplicit Sub ExportTo3dsByLayers
Dim arrLayers, strLayer, arrObjects, strObject, nL, nLE, DocPath, ExportName, DocName, woExt, lDocName, Time, TotalSize, fso, f, o, oL
Time = Timer
Set fso = CreateObject("Scripting.FileSystemObject")
TotalSize=0 nL = 0 nLE = 0 o = 0
DocPath = Rhino.DocumentPath
DocName = Mid(Rhino.DocumentName,1,Len(Rhino.DocumentName)-4)
arrLayers = Rhino.LayerNames
Rhino.UnselectAllObjects
If IsArray(arrLayers) Then
Rhino.EnableRedraw(vbFalse)
For Each strLayer In arrLayers
nL=nL+1
arrObjects = Rhino.ObjectsByLayer(strLayer, vbTrue)
If IsArray(arrObjects) Then
oL = 0
For Each strObject In arrObjects
o = o+1
oL = oL+1
Rhino.ObjectName strObject,strLayer
& "_" & Cstr(oL)
Next
ExportName = DocPath & DocName & "_" & strLayer & ".3ds"
If Rhino.Command("-Export " & ExportName & " D A A 10 S 1 D 0.5 G 1 M 0 I 1 Enter JaggedSeams=Yes Refine=Yes SimplePlane=Yes Weld=No Enter") Then
nLE = nLE+1 Set f = fso.GetFile(ExportName) TotalSize = TotalSize+f.Size End If End If Rhino.UnselectAllObjects Nextр Time = Timer-Time MsgBox "Statistics:" & Chr(13) & "Number of objects:" & Chr(9) & FormatNumber(o,0) & Chr(13) & "Layers exported:" & Chr(9) & Cstr(nLE) & " of " & Cstr(nL) & Chr(13) & "Total file size:" & Chr(9) & FormatNumber(TotalSize,0) & " bytes" & Chr(13) & "Time elapsed:" & Chr(9) & FormatNumber(Time,1) & " seconds" & Chr(13) & "Average speed:" & Chr(9) & FormatNumber(TotalSize/Time,0) & " bytes per second" & Chr(13) & "Export path:" & Chr(9) & DocPath & Chr(13) & "File names:" & Chr(9) & DocName & "_*.3ds",65,"ExportTo3dsByLayers"
Rhino.EnableRedraw(vbTrue)
End If
End Sub
Подключить скрипт к Rhino довольно просто: выполняем LoadScript, указываем имя файла с расширением RVB, в котором сохранён скрипт; затем командой RunScript, когда будет нужно, выбираем один из загруженных скриптов и выполняем его.
Теперь спокойно запускаем Maxwell Studio и импортируем все файлы. Именно все сразу — это очень удобно: в Проводнике (Explorer) или какой-то файловой оболочке (например, Total Commander) выделяем все нужные файлы и перетаскиваем в окно Maxwell Studio (drag-and-drop). Она (оно?) задумывается на несоклько минут, а затем нашему взору предстаёт вся сцена целиком.
Поскольку Maxwell Studio поддерживает группы объектов, мы без труда, ориентируясь по именам объектов, создаём из них группы, чтобы присвоить им соответствующие материалы. Материалы можно создавать для каждого проекта «с нуля», но это не очень быстро, поэтому, удобнее создать свою библиотеку материалов, откуда их и брать по мере необходимости. В Maxwell Studio есть удобная команда — экспорт всех материалов сцены. При этом каждый материал сохраняется в файле с именем, которое мы видим в окне Material List и расширением MXM. Команда эта находится в меню File редактора материалов (см. рисунок на следующей странице).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Экспорт всех материалов сцены
Чтобы применить материал, достаточно выделить в окне Object list объекты и/или группы и перетащить на них материал из окна Material list. После того, как материалы созданы, настроены и присвоены, важно посмотреть, как легли на объекты текстуры. Для этого в окне вида (Viewport window) меняем режим отображения (display mode) с Shaded (установлен по умолчанию) на Textured. Если к объекту применён материал, не содержащий текстур, — Maxwell Studio «натягивает» на него собственную текстуру, которая находится в файле %MAXWELL_ROOT%\images\griduv.png, где MAXWELL_ROOT — переменная окружения, указывающая путь к установленному M~R, обычно это C:\Program Files\Next Limit\Maxwell. Если же к объекту применён материал с текстурой, эту текстуру мы и видим на объекте.
На отрендеренном изображении текстуры на объектах будут выглядеть точно так, как мы их видим в режиме Shaded. К текстурам можно применять различные трансформации, для этого надо дважды щёлкнуть по проектору текстуры в окне Object params. В открывшемся окне Projectors params устанавливаем нужный тип проекции, положение, ориентацию и масштаб текстуры (часто лучше кнопкой Adjust). Все изменения тут же отображаются в окне вида.
Когда текстуры на всех объектах настроены должным образом, пора переходить к настройкам камеры. Если камера ещё не создана, создаём её нажатием Ctrl C , а затем настраиваем её параметры в окне Camera params. Разрешение сначала стóит утановить низкое (320×240 или менее), чтобы быстрее увидеть результат рендеринга (возможно, придётся ещё не раз что-то менять). Зажав Alt , левой кнопкой мыши мы вращаем камеру вокруг точки нацеливания (target), а зажав Alt Shift , — вращаем точку нацеливания вокруг камеры, которая остаётся неподвижной, то есть, практически, поворачиваем камеру вокруг себя самой, как если бы вращали реальную камеру, закреплённую на штативе.
Когда уже выбран нужный ракурс, установлены чувствительность, параметры затвора, фокусное расстояние, разрешение и т. п. — не забудьте выделить объект, на который «смотрит» камера, и нажать F — это установит фокус камеры на выделенный объект. Теперь остаётся только задать параметры самого процесса рендеринга. Из нашего опыта визуализации с помощью Maxwell Render, лучше всего установить вот такие значения параметров:
Остальные параметры не следует менять без чёткого понимания их назначения.
Теперь самое время сохранить сцену и приступить к предварительному рендерингу. Если изображение оказывается слишком тёмным или чересчур светлым — можно попробовать изменить параметры ISO и Shutter speed, что называется, «на ходу». Если же не устраивает что-то в самой сцене — смело останавливаем процесс и снова работаем со сценой. Наконец, когда уже не к чему придраться, устанавливаем нужное разрешение (максимум — около 3 мегапикселей на каждый гигабайт оперативной памяти компьютера, если не включена опция Multilight), запускаем процесс и оставляем компьютер наедине размышлять над поставленной задачей.
Как только качество изображения станет приемлемым, можно остановить процесс рендеринга и сохранить результат. Выбираем File > Save image и в открывшемся окне пишем название файла изображения обязательно вместе с расширением.
Чтобы устранить шум в изображении, используйте программу Neat Image, которая распространялась с бета-версией Maxwell Render. Что у нас получилось в результате — показано на следующей странице.]
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]КухняВанная
Визуализация
Что ж, вот, в двух словах, и закончен процесс моделирования. Теперь предстоит визуализация, но перед этим нам потребуется выполнить несколько манипуляций с 3D-объектами, поскольку экспорт и импорт сложных сцен таит в себе целый ряд «подводных камней».
Проблема экспорта
Самым очевидным способом переноса сцены в Maxwell Render (M~R), казалось бы, является экспорт сцены с помощью плагина Rhinoll. Для этого достаточно во вкладке Document Properties > Maxwell > Output поставить флажок Only Export MXS. После этого при нажатии на кнопку [Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] происходит только преобразование сцены в формат MXS, без визуализации. Теперь полученную сцену можно открыть в Maxwell Studio и заняться материалами. Но очень часто при наличии в сцене библиотечных объектов, импортированных из форматов 3DS, OBJ и DXF, не удаётся экспортировать сцену из-за ошибок, возникающих при преобразовании из этих форматов средствами Rhinoll.
Поэтому удобнее всего эскпортировать сцену по слоям в формат 3DS, а затем ипортировать полученные файлы в Maxwell Studio один за другим. Если поступить просто — выделять объекты каждого слоя и экспортировать выделенное в отдельный файл, то при импорте в Maxwell Studio мы заметим, что часть объектов «пропала». Поскольку и экспорт, и импорт происходит корректно, дело здесь не в формате файлов. Мы видим, что Maxwell Studio идентифицирует объекты по их именам (names), тогда как Rhino присваивает каждому объекту сцены глобальный уникальный идентификатор (GUID), а имена позволяет задавать любые, в том числе и совпадающие. При экспорте в 3DS, однако, Rhino использует в качестве идентификаторов именно имена, при этом, если в пределах одного экспортируемого файла имеются объекты с одинаковыми именами, — они будут переименованы, например: два из трёх объектов с именами Cylinder021 будут переименованы в Cylind_001 и Cylind_002 соответственно. Если же и в другом слое есть объекты, которые при экспорте будут переименованы автоматически, то им могут быть присвоены имена, совпадающие с именами объектов, прежде экспортированных из этого же файла. Например, если в другом слое есть два объекта с именами Cylinder479, то второй из них получит имя Cylind_001, а оно уже было присвоено объекту из другого слоя. Хотя Maxwell Studio и сравнивает имена импортируемых объектов с уже имеющимися в сцене, и даже может автоматически переименовать новый объект, но она (или всё-таки оно?) не проверяет, существует ли объект с именем, таким же, как и переименованный. Например, если в сцене есть объекты Obj_001 и Obj_001(1), то при импорте ещё одного Obj_001 Maxwell Studio автоматически переименует его в Obj_001(1), не смотря на то, что объект с таким именем уже существует. В результате первый из объектов будет потерян.
Решение проблемы
Что же делать? Нам пришлось написать небольшой скрипт, ниже приводится его текст, а вот описание того, что он делает:
- выделяет все объекты каждого слоя, переименовывает их так, что, например, все 1367 объектов слоя Glass получают имена от Glass_1 до Glass_1367;
- создаёт из NURBS-поверхностей каркас (mesh) с оптимальными размерами и детализацией (по крайней мере, для наших задач);
- сохраняет каждый слой в отдельный файл, так, что слой Glass файла House2.3dm сохраняется в файле House2_Glass.3ds.
Это позволяет:
- избежать совпадений имён и возникающих в связи с этим проблем;
- увидев в Maxwell Studio название объекта, понять, какой материал ему присвоить, в какую группу перенести. Заметьте, что Maxwell Studio принимает во внимание только первые 11 символов имени объекта, поэтому название слоя должно состоять не более, чем из 6 символов.
OptionExplicit Sub ExportTo3dsByLayers
Dim arrLayers, strLayer, arrObjects, strObject, nL, nLE, DocPath, ExportName, DocName, woExt, lDocName, Time, TotalSize, fso, f, o, oL
Time = Timer
Set fso = CreateObject("Scripting.FileSystemObject")
TotalSize=0 nL = 0 nLE = 0 o = 0
DocPath = Rhino.DocumentPath
DocName = Mid(Rhino.DocumentName,1,Len(Rhino.DocumentName)-4)
arrLayers = Rhino.LayerNames
Rhino.UnselectAllObjects
If IsArray(arrLayers) Then
Rhino.EnableRedraw(vbFalse)
For Each strLayer In arrLayers
nL=nL+1
arrObjects = Rhino.ObjectsByLayer(strLayer, vbTrue)
If IsArray(arrObjects) Then
oL = 0
For Each strObject In arrObjects
o = o+1
oL = oL+1
Rhino.ObjectName strObject,strLayer
& "_" & Cstr(oL)
Next
ExportName = DocPath & DocName & "_" & strLayer & ".3ds"
If Rhino.Command("-Export " & ExportName & " D A A 10 S 1 D 0.5 G 1 M 0 I 1 Enter JaggedSeams=Yes Refine=Yes SimplePlane=Yes Weld=No Enter") Then
nLE = nLE+1 Set f = fso.GetFile(ExportName) TotalSize = TotalSize+f.Size End If End If Rhino.UnselectAllObjects Nextр Time = Timer-Time MsgBox "Statistics:" & Chr(13) & "Number of objects:" & Chr(9) & FormatNumber(o,0) & Chr(13) & "Layers exported:" & Chr(9) & Cstr(nLE) & " of " & Cstr(nL) & Chr(13) & "Total file size:" & Chr(9) & FormatNumber(TotalSize,0) & " bytes" & Chr(13) & "Time elapsed:" & Chr(9) & FormatNumber(Time,1) & " seconds" & Chr(13) & "Average speed:" & Chr(9) & FormatNumber(TotalSize/Time,0) & " bytes per second" & Chr(13) & "Export path:" & Chr(9) & DocPath & Chr(13) & "File names:" & Chr(9) & DocName & "_*.3ds",65,"ExportTo3dsByLayers"
Rhino.EnableRedraw(vbTrue)
End If
End Sub
Подключить скрипт к Rhino довольно просто: выполняем LoadScript, указываем имя файла с расширением RVB, в котором сохранён скрипт; затем командой RunScript, когда будет нужно, выбираем один из загруженных скриптов и выполняем его.
Теперь спокойно запускаем Maxwell Studio и импортируем все файлы. Именно все сразу — это очень удобно: в Проводнике (Explorer) или какой-то файловой оболочке (например, Total Commander) выделяем все нужные файлы и перетаскиваем в окно Maxwell Studio (drag-and-drop). Она (оно?) задумывается на несоклько минут, а затем нашему взору предстаёт вся сцена целиком.
Поскольку Maxwell Studio поддерживает группы объектов, мы без труда, ориентируясь по именам объектов, создаём из них группы, чтобы присвоить им соответствующие материалы. Материалы можно создавать для каждого проекта «с нуля», но это не очень быстро, поэтому, удобнее создать свою библиотеку материалов, откуда их и брать по мере необходимости. В Maxwell Studio есть удобная команда — экспорт всех материалов сцены. При этом каждый материал сохраняется в файле с именем, которое мы видим в окне Material List и расширением MXM. Команда эта находится в меню File редактора материалов (см. рисунок на следующей странице).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Экспорт всех материалов сцены
Чтобы применить материал, достаточно выделить в окне Object list объекты и/или группы и перетащить на них материал из окна Material list. После того, как материалы созданы, настроены и присвоены, важно посмотреть, как легли на объекты текстуры. Для этого в окне вида (Viewport window) меняем режим отображения (display mode) с Shaded (установлен по умолчанию) на Textured. Если к объекту применён материал, не содержащий текстур, — Maxwell Studio «натягивает» на него собственную текстуру, которая находится в файле %MAXWELL_ROOT%\images\griduv.png, где MAXWELL_ROOT — переменная окружения, указывающая путь к установленному M~R, обычно это C:\Program Files\Next Limit\Maxwell. Если же к объекту применён материал с текстурой, эту текстуру мы и видим на объекте.
На отрендеренном изображении текстуры на объектах будут выглядеть точно так, как мы их видим в режиме Shaded. К текстурам можно применять различные трансформации, для этого надо дважды щёлкнуть по проектору текстуры в окне Object params. В открывшемся окне Projectors params устанавливаем нужный тип проекции, положение, ориентацию и масштаб текстуры (часто лучше кнопкой Adjust). Все изменения тут же отображаются в окне вида.
Когда текстуры на всех объектах настроены должным образом, пора переходить к настройкам камеры. Если камера ещё не создана, создаём её нажатием Ctrl C , а затем настраиваем её параметры в окне Camera params. Разрешение сначала стóит утановить низкое (320×240 или менее), чтобы быстрее увидеть результат рендеринга (возможно, придётся ещё не раз что-то менять). Зажав Alt , левой кнопкой мыши мы вращаем камеру вокруг точки нацеливания (target), а зажав Alt Shift , — вращаем точку нацеливания вокруг камеры, которая остаётся неподвижной, то есть, практически, поворачиваем камеру вокруг себя самой, как если бы вращали реальную камеру, закреплённую на штативе.
Когда уже выбран нужный ракурс, установлены чувствительность, параметры затвора, фокусное расстояние, разрешение и т. п. — не забудьте выделить объект, на который «смотрит» камера, и нажать F — это установит фокус камеры на выделенный объект. Теперь остаётся только задать параметры самого процесса рендеринга. Из нашего опыта визуализации с помощью Maxwell Render, лучше всего установить вот такие значения параметров:
Render time: | 1000000 |
Render threads: | 4 |
Sampling level: | 40 |
Burn: | 0.8 |
Gamma: | 2.2 |
Autoexposure: |
Теперь самое время сохранить сцену и приступить к предварительному рендерингу. Если изображение оказывается слишком тёмным или чересчур светлым — можно попробовать изменить параметры ISO и Shutter speed, что называется, «на ходу». Если же не устраивает что-то в самой сцене — смело останавливаем процесс и снова работаем со сценой. Наконец, когда уже не к чему придраться, устанавливаем нужное разрешение (максимум — около 3 мегапикселей на каждый гигабайт оперативной памяти компьютера, если не включена опция Multilight), запускаем процесс и оставляем компьютер наедине размышлять над поставленной задачей.
Как только качество изображения станет приемлемым, можно остановить процесс рендеринга и сохранить результат. Выбираем File > Save image и в открывшемся окне пишем название файла изображения обязательно вместе с расширением.
Чтобы устранить шум в изображении, используйте программу Neat Image, которая распространялась с бета-версией Maxwell Render. Что у нас получилось в результате — показано на следующей странице.]