Interior Craft : Создание поэтажного генплана

🔍Поиск по всей документации — мгновенный поиск по 87 страницам

Структура

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

FloorGP_02.pngFloorGP_03.png

Разделение здания на этажи

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

FloorGP_05.png

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

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

Создание подложки и стен.

Архив с отрисовками содержит планы типовых этажей и квартир. Необходимо смоделировать каждый типовой этаж.

Для этого откройте отрисовку svg, пересохраните ее в png. В редакторе обрежьте этаж по границам внешних стен и установите разрешение кратное 8 (512*512, 1024*1024 и.т.д.)

FloorGP_08.png

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

FloorGP_09.png

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

FloorGP_10.png

Добавьте, опираясь на dwg этажа, проемы высотой 2100 мм. (масштаб 1:1), которые не отображаются на отрисовках. На чертежах они чаще всего располагаются на слоях с дверьми или стенами.

FloorGP_11.png

Разделите этаж с подложкой на квартиры и МОП (место общественного пользования) и дайте им названия в соответствии с названиями отрисовок квартир

Квартиры: подложка с планом для квартиры в качестве пола, стены с дверьми и окнами.

Моп: верхние полигоны стен всего этажа, подложка с планом для МОП, стены

FloorGP_12.png

Скорректируйте материалы МОПов, так чтобы они стали темнее квартир. Для этого создайте дубликаты материалов стен, подложки и дверей и попишите 0.5 в параметре Diffuse Multiplier. Остальные параметры оставьте без изменений.

image-20241114-092217.pngimage-20241114-092412.png

Создание окон и дверей

Окна для проектов без детализации

Ориентируясь на разрезы и фасады, прорежьте в фасадных стенах проемы под окна. Обратите внимание, что балконные двери/витражные окна могут идти с порожком или в пол. Углубите проемы окно на 2/3 толщины фасадной стены, так чтобы они не выходили за пределы фасада. Закройте проемы полигонами.

FloorGP_14.png

Опираясь на фасад, создайте карты Opacity для всех видов окон в корпусе. Наложите материалы с получившимися картами на оконные проемы. Обратите внимание, во всех материалах внешних и внутренних стен и окон должен быть отключен параметр Double-sided.

FloorGP_13.pngFloorGP_15.png

Окна для проектов с детализацией

Сделайте материал модели оконных рам на фасаде двухсторонним. (Включите параметр Double-sided) Вытяните по периметру рамы полигоны, образовав тем самым оконные откосы. Соедините эти откосы с внутренними полигонами стены, образовав оконный проем.

FloorGP_17.png

Обратите внимание, что балконные двери/витражные окна могут идти с порожком или в пол.

Двери

Стандартная высота дверного проема 2050 мм. (масштаб 1:1). Закройте дверные проемы межкомнатных и входных дверей, а так же лифтовые проемы упрощенными моделями дверей.

FloorGP_16.png

Нейминг

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

Корпус - KorpНомер корпуса (К примеру Korp1, Korp1.2)

Секция - SecНомер секции (К примеру Sec1, Sec1.2). Если секция относится к корпусу, то в азвании секции следует указать корпус (К примеру Korp1_Sec2)

Этаж - Номер Этажаfloor (К примеру 22floor). В названии этажа так же должны присутствовать номер корпуса и секции (если есть), к которым он относится (К примеру Korp1_Sec2_22floor или Korp1_22floor, если секции нет)

Квартира - KorpНомер корпуса_SecНомер секции_Номер этажаfloor_Номер квартиры на этаже_Название квартиры (К примеру, Korp1_Sec1_19floor_N1_3ELТТО). Номер на этаже и название квартиры указаны в название отрисовки, а так же на планах dwg.

МОП - KorpНомер корпуса_SecНомер секции_Номер этажаfloor_MOP (К примеру, Korp1_Sec1_19floor_N1_MOP)

Коммерческая недвижимость - KorpНомер корпуса_SecНомер секции_Номер этажаfloor_Общая площадь помещения, указанная в названии отрисовки (К примеру, Korp1_Sec1_19floor_N1_101.6)

Dummy квартиры - Icon_KorpНомер корпуса_SecНомер секции_Номер этажаfloor_Номер квартиры на этаже_Название квартиры (К примеру, Icon_Korp1_Sec1_19floor_N1_3ELТТО)

Dummy коммерческой недвижимости - Icon_KorpНомер корпуса_SecНомер секции_Номер этажаfloor_Общая площадь помещения, указанная в названии отрисовки (К примеру, Icon_Korp1_Sec1_19floor_N1_101.6)

Настройка Main camera

1. Настройка зума

Подберите параметр minDistance в настройках Main camera так, чтобы при выборе этажа, камера подлетала близко к нему и этаж занимал большую часть экрана.

FloorGP_20.png

После настройки minDistance и экспорта сцены в движок скорректируйте параметр zoomAmount в json файле сцены, так чтобы максимальное приближение из начального положения происходило за 3 клика, а максимальное отдаление за 4 клика. То есть зум должен иметь всего 4 итерации (4 клика)

2. Настройка высоты камеры

Чтобы камера в движке захватывала весь корпус целиком, выставьте в параметре maxPanPosition в настройках Main camera значение в сантиметрах самой высокой точки генплана по оси Z.

FloorGP_19.png

3. Настройка клиппинга камеры

Клиппинг позволяет определить ближнюю и дальнюю точки отрисовки изображения. Все объекты выходящие за эту область отрисовываться не будут. Для включения функции добавьте в камеру параметры "nearPlane" и "farPlane", где nearPlane - это расстояние от камеры, перед которым ничего не будет отрисовываться, а farPlane - это расстояние от камеры, после которого ничего не будет отображаться.

  "nearPlane": 130,
  "farPlane": 10000,
Screenshot_63.png

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

FloorGP_34.png

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

FloorGP_35.png

Для компенсации этого эффекта можно увеличить максимальный вертикальный угол камеры в настройке камеры ("maxPolarAngle"). Это не позволит камере опуститься низко и прорезать основание. Однако, не стоит ставить угол меньше 60 градусов. Так же компенсировать эффект можно увеличением угла FOV у камеры.

FloorGP_36.png

Коды

Корпуса с этажами

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

Для этого:

1. Определите первоначальный элемент иерархии. Это может быть корпус, блок или группа корпусов, имеющих на статике иконку с отдельным id.

FloorGP_18.png

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

{
  "type": "buildingBlock",
  "selectable": true,
  "props": {
      "id": "9860"
  }
}

Где параметр “id” = id иконки из кода с сайта (3. Настройка генплана под движок пункт 3.3)

FloorGP_22.png

К этому же dummy привяжите dummy с иконкой корпуса/блока/группы корпусов. В свойствах dummy иконки необходимо прописать:

{
  "type": "marker",
  "classId": "buildingBlock",
  "onClick": "centerCamera"
}
FloorGP_37.png

2. Далее определите следующий по величине элемент иерархии. Если вашим первоначальным элементом был блок или группа корпусов, то следующим элементом будет корпус (дом). Если вашим первоначальным элементом был корпус, перейдите к пункту 3

Для того чтобы выделить в группе корпусов или блоке, каждый корпус по отдельности, создайте внутри главного dummy еще по одному объединяющему dummy для каждого корпуса. Прикрепите геометрию корпусов (секции, этажи, квартиры) к их объединяющим dummy. В свойствах dummy необходимо прописать:

{
  "type": "buildingSectionGroup",
  "selectable": true,
  "props": {
      "id": "1"
  }
}

Где параметр “id” - номер корпуса (без знаков препинания)

FloorGP_23.png

3. Следующим по величине элементом после корпуса является секция. Если в вашей иерархии нет секций, перейдите к пункту 4.

Внутри предыдущего главного dummy или объединяющего dummy (смотря какой предыдущий элемент у вас был) создайте для каждой секции в ее основании свой dummy секции. Прикрепите геометрию соответствующих секций (этажи, квартиры) к их новым dummy. В свойствах dummy необходимо прописать:

{
  "type": "buildingSection",
  "selectable": true,
  "props": {
      "id": 1
  }
}

Где параметр “id” - номер секции (без знаков препинания)

FloorGP_24.png

4. Следующим по величине элементом являются этаж и крыша.

⦿ Пропишите в свойствах каждого этажа:

{
  "type": "buildingFloor",
  "selectable": true,
  "props": {
      "id": "18"
  }
}

Где параметр “id” - номер этажа

FloorGP_26.png

⦿ В свойствах крыши пропишите:

{
  "type": "buildingRoof",
  "props": {
      "id": "23"
  }
}

Где параметр “id” - номер последнего этажа+1. К примеру, если в корпусе 22 этажа, то id крыши будет 23.

FloorGP_27.png

5. Следующим элементами в иерархии являются: квартира, коммерческое помещение, Моп

⦿ Для каждой квартиры на каждом этаже пропишите код в object properties:

{
  "type": "buildingApartment",
  "selectable": true,
  "props": {
      "id": "1"
  }
}

Где параметр “id” - порядковый номер квартиры на этаже. Номер квартиры на этаже можно узнать в отрисовках поэтажек либо в названии индивидуальных отрисовок квартир.

Обратите внимание, количество и нумерация квартир на этаже может меняться в зависимости от этажа.

FloorGP_28.png

⦿ Для коммерческих помещений на первом этаже пропишите код в object properties:

{
  "type": "buildingApartment",
  "selectable": true,
  "props": {
      "id": "80.6"
  }
}

Где параметр “id” - общая площадь - название помещения. Запятые замените на точки. Если в корпусе два помещения с одинаковой площадью, добавьте к Id порядковое число. К примеру, площадь название двух помещений 80,6, тогда у одного помещения “id": “80.61”, а у второго “id": “80.62”.

FloorGP_30.png

⦿ Для Моп object properties не прописываются

FloorGP_29.png

6. Над каждой квартирой и коммерческим помещением на высоте 3.5 см. от верха стен до центра dummy создайте dummy и привяжите его к соответствующей квартире. В свойствах dummy необходимо прописать:

{
  "type": "marker",
  "classId": "buildingApartment"
}
FloorGP_32.png

Старайтесь размещать дамми по центру квартиры, на одной оси с соседними квартирами.

FloorGP_21.png

Примеры структуры:

⦿ Green park блок 8 содержит все элементы структуры, кроме коммерческих помещений и их dummy:

FloorGP_06.pngFloorGP_04.png

⦿ Если в корпус один и в нем нет секций, то структура будет выглядеть следующим образом:

FloorGP_33.png

Корпуса без этажей

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

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

1. В свойствах корпуса необходимо прописать:

{
  "type": "buildingBlock",
  "selectable": true,
  "props": {
      "id": "9860"
  }
}

Где параметр “id” = id иконки из кода с сайта (3. Настройка генплана под движок пункт 3.3)

FloorGP_39.png

2. В свойствах dummy иконки необходимо прописать:

{
  "type": "marker",
  "classId": "buildingBlock",
  "onClick": "centerCamera"
}
FloorGP_38.png