Применение Rhinoceros и MaxwellRender для создания сложных интерьерных сцен
Аннотация
В этом обзоре мы опишем процесс создания проекта интерьера на примере двух недавно выполненных работ. Для моделирования мы используем Rhinoceros версии 3.0 SR5b, а для визуализации — Maxwell Render версии 1.1.
Моделирование
План
Как обычно, в первую очередь нужно создать план помещения в Rhino по предоставленному архитектурному плану.
Исходный план помещения
Этот процесс автоматизировать практически невозможно, поэтому приходится просто внимательно переносить все размеры и углы один за другим. Затем плоский чертёж «вытягивается» командой _ExtrudeCrv на высоту стен. Затем в стенах вырезаются проёмы: для этого параллельно плоскости стены чертятся прямоугольники размерами с оконные (дверные) проёмы, затем эти прямоугольники «вытягиваются» той же командой _ExtrudeCrv с параметром Cap=No так, чтобы пересечь требуемую стену, после чего сначала командой Trim вырезаются проёмы в стене, а затем этой же командой убираются «торчащие» по обе стороны от стены части вытянутого проёма. Более простым и очевидным было бы применение команды _BooleanDifference, но использование булевых команд в Rhino имеет ряд особенностей и может привести к нежелательным последствиям, поэтому мысль о применении их при моделировании должна приходить последней. Более подробно об этом можно прочитать в соответствующем разделе справки (файл Rhino.hlp).
Стены и проёмы
«Ремонт»
После создания стен простейшей командой _PlanarSrf создаём пол и потолок. Дальнейшая последовательность работ мало чем отличается от таковой при «реальном» капитальном ремонте. Импортируем в сцену (команда _Import или просто СtrlI ) «столярку» (окна, двери), трубы, батареи, сантехнику, ставим источники света и т. д. не забываем при этом соблюдать масштаб: многие зарубежные модели имеют размер в дюймах, а многие европейские и практически все отечественные — в миллиметрах.
Мебель
Теперь настал черёд мебели и встроенной техники, и на это мы хотим обратить особое внимание. Даже в замечательных, профессиональных с точки зрения художника, стилиста, осветителя студийных работах 3D-дизайнеры стараются обойти стороной проблему создания мебели в интерьере, а ведь это — одна из самых важных его составляющих. При этом часто авторы впадают в две крайности: либо они используют в одном интерьере с добрый десяток моделей разных предметов мебели в стиле Людовика XIV, отчего, например, обычная спальня становится похожей на салон антикварной мебели; либо же, понимая, что имеющиеся у них библиотечные модели не подходят по стилю, пытаются создать собственные модели, но из-за нехватки знаний о конструкции изделий делают их слишком простыми, несоразмерными или же такими, что их просто невозможно будет изготовить.
Имея немалый опыт в разработке и производстве мебели, мы подходим к вопросу о меблировке помещения как производственники, хорошо представляя себе особенности местного рынка плитных, облицовочных материалов и фурнитуры. Поэтому в любом нашем проекте хотя бы копрусная мебель разрабатывается под заказчика индивидуально и её модели, имеющие технологически оправданные размеры, размещаются в сцене проекта. В большинстве случаев вместе с дизайном заказчик получает полный комплект доументации на изготовление изделий мебели и может обратиться с ней в любую профильную компанию. При необходимости мы также можем обеспечить авторский и технологический надзор.
В качестве иллюстрации приводим пример изображения, где изделия мебели показаны вразлёт, а также предоставляем текст скрипта, позволяющего создать этот эффект. Такой вид существенно облегчает понимание сборщиками конструкции и позволяет избежать многих типичных ошибок в процессе сборки.
Кухня вразлёт
Вот и текст скрипта:
Sub Scatter
Dim theGroup, bbGroup, theObject, bbObject, dist, distGroup, xg, yg, zg, xo, yo, zo, cg(2), co(2)
theGroup = Rhino.GetObjects("Select objects")
If Not IsArray(theGroup) Then Exit Sub
bbGroup = Rhino.BoundingBox(theGroup)
xg = Rhino.Distance(bbGroup(0), bbGroup(1))
yg = Rhino.Distance(bbGroup(0), bbGroup(3))
zg = Rhino.Distance(bbGroup(0), bbGroup(4))
distGroup = Sqr(xg*xg+yg*yg+zg*zg) cg(0) = bbGroup(0)(0)+0.5*xg
cg(1) = bbGroup(0)(1)+0.5*yg
cg(2) = bbGroup(0)(2)+0.5*zg
Rhino.EnableRedraw (vbFalse)
For Each theObject In theGroup
bbObject = Rhino.BoundingBox(theObject)
xo = Rhino.Distance(bbObject(0), bbObject(1))
yo = Rhino.Distance(bbObject(0), bbObject(3))
zo = Rhino.Distance(bbObject(0), bbObject(4))
co(0) = bbObject(0)(0)+0.5*xo
co(1) = bbObject(0)(1)+0.5*yo
co(2) = bbObject(0)(2)+0.5*zo
Rhino.MoveObject theObject, cg, co
NextRhino.EnableRedraw (vbTrue)
End Sub