Применение Rhinoceros и MaxwellRender для создания сложных интерьерных сцен

Аннотация

В этом обзоре мы опишем процесс создания проекта интерьера на примере двух недавно выполненных работ. Для моделирования мы используем Rhinoceros версии 3.0 SR5b, а для визуализации — Maxwell Render версии 1.1.

Моделирование

План

Как обычно, в первую очередь нужно создать план помещения в Rhino по предоставленному архитектурному плану.

Исходный план помещения

Этот процесс автоматизировать практически невозможно, поэтому приходится просто внимательно переносить все размеры и углы один за другим. Затем плоский чертёж «вытягивается» командой _ExtrudeCrv на высоту стен. Затем в стенах вырезаются проёмы: для этого параллельно плоскости стены чертятся прямоугольники размерами с оконные (дверные) проёмы, затем эти прямоугольники «вытягиваются» той же командой _ExtrudeCrv с параметром Cap=No так, чтобы пересечь требуемую стену, после чего сначала командой Trim вырезаются проёмы в стене, а затем этой же командой убираются «торчащие» по обе стороны от стены части вытянутого проёма. Более простым и очевидным было бы применение команды _BooleanDifference, но использование булевых команд в Rhino имеет ряд особенностей и может привести к нежелательным последствиям, поэтому мысль о применении их при моделировании должна приходить последней. Более подробно об этом можно прочитать в соответствующем разделе справки (файл Rhino.hlp).

Стены и проёмы

«Ремонт»

После создания стен простейшей командой _PlanarSrf создаём пол и потолок. Дальнейшая последовательность работ мало чем отличается от таковой при «реальном» капитальном ремонте. Импортируем в сцену (команда _Import или просто  Сtrl   I ) «столярку» (окна, двери), трубы, батареи, сантехнику, ставим источники света и т. д. не забываем при этом соблюдать масштаб: многие зарубежные модели имеют размер в дюймах, а многие европейские и практически все отечественные — в миллиметрах.

Мебель

Теперь настал черёд мебели и встроенной техники, и на это мы хотим обратить особое внимание. Даже в замечательных, профессиональных с точки зрения художника, стилиста, осветителя студийных работах 3D-дизайнеры стараются обойти стороной проблему создания мебели в интерьере, а ведь это — одна из самых важных его составляющих. При этом часто авторы впадают в две крайности: либо они используют в одном интерьере с добрый десяток моделей разных предметов мебели в стиле Людовика XIV, отчего, например, обычная спальня становится похожей на салон антикварной мебели; либо же, понимая, что имеющиеся у них библиотечные модели не подходят по стилю, пытаются создать собственные модели, но из-за нехватки знаний о конструкции изделий делают их слишком простыми, несоразмерными или же такими, что их просто невозможно будет изготовить.

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

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

Кухня вразлёт

Вот и текст скрипта:

Option Explicit
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

 Next
 Rhino.EnableRedraw (vbTrue)
End Sub