Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Аватара пользователя
A1iv
 
Сообщения: 442
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Имя: Алексей
Блог: Просмотр блога (10)
Поиск в блогах

1 из 52 из 53 из 54 из 55 из 5

Камеры в Railworks

Постоянная ссылка A1iv 12.05.2014, 23:52

Камеры в Railworks


Возникло желание внести какое-то небольшое разнообразие, и для всего ПС желательно. Вот так возникла идея поковыряться в камерах для локомотива, а в итоге получился практически целый гид, который описывает все возможности камер в RW. :blink:

Изменение и добавление камер возможно как для локомотивов, так и для пассажирских вагонов.

СОДЕРЖАНИЕ:

1. Где камеры?
2. Извлечение кода камер для его редактирования
3. Изменение существующих камер
  • 3.1 Внешние камеры локомотива (боковые)
  • 3.2 Внутренние камеры локомотива (камеры в кабине управления)
  • 3.3 Внутренние камеры (камеры в пассажирском вагоне)
4. Описание дополнительных параметров камер
  • 4.1 Поле зрения
  • 4.2 Симуляция динамики человека в вагоне, кабине относительно движения поезда
5. Добавление новых камер у локомотива и вагона

6. Скриптование камер (в следующей статье в моем блоге)

1. Где камеры?

Все существующие типы камер в RW и их стандартные шаблоны прописаны в папке cameras в:
ДИСК:\Steam\steamapps\common\railworks\Assets\Kuju\RailSimulatorCore\Cameras

Названия камер для справки (пригодится для их вызова скриптом):
1. CabCamera - камера в кабине локомотива.
2. CarriageCamera - камера в салоне вагона.
3. CinematicCamera - кинематографическая камера, неподвижная и движущаяся (запуск с помощью скрипта), используется в сценариях - для создания видео заставок полета камеры перед началом сценария или посреди него, для указания объекта и др.
4. CouplingCamera - камера вида сверху на сцепку.
5. Derailment camera - кружащаяся камера вокруг ПС при его сходе с рельс.
6. EditCamera - камера, используемая в редакторе вроде бы.
7. ExternalCamera - внешняя камера, привязанная к локомотиву, с видом на локомотив.
8. ShapeViewCamera - свободная камера, внешняя.
9. TracksideCamera - камера с автоматическим выборочным видом на некоторых расстояниях по ходу следования поезда.
10. Yard camera - камера "птичий полет" или вид высоко сверху.

Камеры, связанные с кабиной локомотива, обычно находятся в папке CabView, записаны в файле "Cam_cab.bin". Также в этой папке обычно есть файл, описывающий внешние 2 камеры локомотива, называемый ориентировочно "Cam_Headout.bin". Почему не точно? Потому что эта папка, а также файлы внутри могут быть названы чуть иначе, и даже находиться немного в другом месте - все зависит от автора. Но суть не меняется.
Иногда камеры прячут в такие места и запаковывают в такие форматы, что достать их просто так невозможно. Но это пока редкие случаи.

Вот пример расположения файла с описанием камер кабины электровоза BR101:
..\Railworks\Assets\Kuju\RailSimulator\RailVehicles\Electric\BR101\Default\CabView\br101 cab camera.bin

В случае с несколькими перекрасками локомотива, файл с камерами обычно один на всех, находится в одной из папок с перекраской, применен же ко всем перекраскам.
Камеры пассажирского вагона обычно находятся в папке PassView, в файле cо словами "passview" в названии.

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

2 Извлечение кода камер для его редактирования


Чтобы отредактировать код, нужно сначала перевести файл из формата Bin в Xml. Для этого имеются утилиты Railworks-а. В корневом каталоге симулятора находится утилита serz.exe, на которую нужно сделать ярлык и разместить его на рабочем столе.
Для конвертации файла, нужно накинуть Bin файл на ярлык serz.exe, и он сконвертирует его в Xml, разместив сконвертированный файл здесь же. Таким же способом возможен и обратный процесс - конвертация xml в bin, что тоже придется не однократно выполнять.
Можно было воспользоваться и утилитой serzmaster для конвертации - это по сути тоже самое, что serz.exe, только с интерфейсом. Однако в процессе редактирования камер конвертировать код приходится иногда 100 и более раз, каждый раз в симуляторе проверяя сделанный результат, поэтому здесь подойдет только serz.exe - с ним быстрее.

Вот и все, xml файл получен, можно его редактировать. Для редактирования можно использовать xml редактор, или же обычный блокнот. Удобен Wordpad.

3. Изменение существующих камер


3.1 - внешние камеры локомотива (боковые)

На простом примере: редактирование файла, описывающего внешние 2 камеры сбоку локомотива. Это файл "Cam_Headout.xml" или с аналогичным названием.
В этом файле прописаны камеры для внешней модели локомотива - боковые, вызываемые по сочетанию клавиш shift 2 или нажатием значка боковых камер при нахождении в кабине. Судя по названию, их бы правильно располагать на расстоянии высунутой из окна кабины головы, как в реальности. Но разработчики их часто помещают на большом расстоянии от кабины (видимо это связано с не высоким качеством внешней модели локомотива и для улучшения обзорности в длину состава). Это не всем нравится, это не реалистично и это можно переделать. Нужно изменить координаты камер.
Если взглянуть на содержание кода в файле "Cam_Headout.xml", где я специально отделил строки для редактирования от шаблона пробелами,

Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<cBlueprintLoader xmlns:d="http://www.kuju.com/TnT/2003/Delta" d:version="1.0">
   <Blueprint>
      <cHeadOutCameraBlueprint>
         <Name d:type="cDeltaString"></Name>
         <RenderComponent>
            <cCameraRenderBlueprint/>
         </RenderComponent>
         <UpdateComponent>


            <cHeadOutCameraUpdateBlueprint>
               <camType d:type="sUInt32">0</camType>
               <PrimarySide d:type="cDeltaString">Right</PrimarySide>
               <CameraLeftOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="00000000000000C0" d:precision="string">-2</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000006066660640" d:precision="string">2.9</Y>
                     <Z d:type="sFloat32" d:alt_encoding="0000000000001C40" d:precision="string">5</Z>
                  </cRVector3>
               </CameraLeftOffset>
               <CameraRightOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000006066660640" d:precision="string">2.9</Y>
                     <Z d:type="sFloat32" d:alt_encoding="0000000000001C40" d:precision="string">5</Z>
                  </cRVector3>
               </CameraRightOffset>
            </cHeadOutCameraUpdateBlueprint>


         </UpdateComponent>
         <PosOriComponent>
            <cPosOriBlueprint/>
         </PosOriComponent>
      </cHeadOutCameraBlueprint>
   </Blueprint>
</cBlueprintLoader>


то активный (изменяемый) код начинается с задающего тега <cHeadOutCameraUpdateBlueprint> и заканчивается закрывающим </cHeadOutCameraUpdateBlueprint> тэгом. Все, что между ними, поддается редактированию. Итак, что здесь есть?

<camType d:type="sUInt32">0</camType> - задает тип камер от 0 до 5 (что встречалось). Чем ниже тип камеры, тем меньше у нее редактируемых параметров и возможностей, как предполагаю. 0, поэтому боковые - это самые простые камеры, без дополнительных эффектов и возможностей. Им задают только местоположение и направление. Остальные параметры некоторые все же присутствуют, но заданы по умолчанию, не изменяемые. Заданные по умолчанию, типы камер обычно не нужно менять, а их изменение симулятором игнорируется.
<PrimarySide d:type="cDeltaString">Right</PrimarySide>- выбрать приоритетную камеру из двух возможных. Это параметр для указания на какую из камер попадешь при нажатии горячей клавиши. Можно попробовать его прописать, например, и для кабины. Но обычно не нужно.
<CameraLeftOffset> - в пределах блока этого тега задана боковая камера слева локомотива (по трем координатам, xyz).
<CameraRightOffset> - в пределах блока этого тега задана боковая камера справа локомотива (по трем координатам, xyz).

Стандартные координаты для изменения положения любых камер. Изменяя координаты, изменяется местоположение камер.:
X - координата смещения влево или вправо от центра локомотива*.
Y - координата смещения вверх-вниз от уровня головки рельс.
Z - координата смещения вперед-назад* по ходу движения.


*Место начала отсчета задает опорная точка (pivot point) объекта локомотива, которую поставил автор.

Это был разбор простейших камер с минимум параметров. После изменения, файл нужно сохранить и сконвертировав с помощью утилиты serz.exe обратно в bin, положить в исходное место с заменой.

3.2 - Внутренние камеры локомотива (камеры в кабине управления)

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

Код: Выделить всё
 <cameraOffset>
   <строка>............</строка>
     <другая>...........</другая>
     <другая>...........</другая>
   <строка>............</строка>
</cameraOffset>

------------------------------------

К редактированию файла, описывающего внутренние камеры локомотива, а именно камеры в кабине управления. Это файл "Cam_Cab.xml".

Активный код здесь начинается после <cCabCameraUpdateBlueprint>, и вот что доступно для изменения:

<camType d:type="sUInt32">4</camType> - тип камеры. На этот раз это камера с многими доп. возможностями, о чем говорит 4-ый тип камеры. Изменение этого значения, скорее всего, ни на что не повлияет, как показывает практика.
<cameraOffset> и <cameraDirection> - в этих двух блоках кода задают камеру. Она следует в коде первой и обычно это камера машиниста. <cameraOffset> - местоположение камеры, а блок <cameraDirection> - ее направление взгляда. Все описано в координатах xyz, где 1 ед. равна 1метр предположительно.

Для местоположения камеры:
X - смещение влево-вправо относительно центра локомотива. (Центр указывает опорная точка pivot point, которую установил автор.)
Y - смещение вверх-вниз (от уровня головки рельс).
Z - смещение вперед-назад по ходу движения (от опорной точки).
Для направления камеры:
X - поворот влево-вправо. (0.5 равно повороту в 45 град. направо, 1 - 90град. направо.)
Y - наклон вверх-вниз (-0.5 равно наклону 45 град. вниз).
Z. 1 - направление по ходу движения, -1 это против движения. Против движения нужно для камеры помощника в кабине маневрового тепловоза, например. Другие значения здесь устанавливают очень редко.

<windowCameraOffset> и <windowCameraDirection> - это вторая основная камера в кабине, присутствующая обычно у всех локомотивов. Обычно ее располагают на месте помощника машиниста. Настраивается одинаково, как и камера выше.
<verticalDirectionalFreedom> и <horizontalDirectionalFreedom>- следуют сразу после кода основных камер и задают горизонтальную и вертикальную свободу вращения этим камерам. Задается числом.
0 - неподвижная камера.
1 - взгляд под углом не более 45 град. в каждую сторону, в сумме 90.
2 - взгляд под углом не более 90 град. в сторону, в сумме 180.
3 - взгляд в полный оборот. Для лучшей корректировки нужно задать 3.14 - это ровный оборот в 360 град.
4 - полностью свободная камера в этом направлении. Бесконечно обороты вокруг оси можно делать.

Про дополнительные возможности камер в кабине (добавлять их не обязательно):
- Уже начиная со стандартных камер кабины, тип их 4, можно выставлять еще один важный параметр - поле зрения - FOV. Он предназначен по большей части для доп. камер, поэтому будет рассмотрен отдельно. А здесь его тоже можно выставлять, после тегов свободы вращения камер обычно, но действовать он будет только на 1 камеру - машиниста которая.
- Дальше можно добавить теги динамики человека в поезде - <SpringCoefficient> и <DampingCoefficient>, что для кабины машиниста применяют не часто, а чаще для салона вагона. Описание их будет отдельно. Хотя хороший разработчик должен это реализовывать.

Пример оригинального кода камер в кабине локомотива BR101. Доп. параметры камер, из которых здесь нету разве что поля зрения камер FOV, отделены тремя пробелами (пробелы убрать):

Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<cBlueprintLoader xmlns:d="http://www.kuju.com/TnT/2003/Delta" d:version="1.0">
   <Blueprint>
      <cCabCameraBlueprint>
         <Name d:type="cDeltaString"></Name>
         <RenderComponent>
            <cCameraRenderBlueprint/>
         </RenderComponent>
         <UpdateComponent>
            <cCabCameraUpdateBlueprint>

               <camType d:type="sUInt32">4</camType>
               <cameraOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="000000C0CCCCE43F" d:precision="string">0.65</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000000000000640" d:precision="string">2.75</Y>
                     <Z d:type="sFloat32" d:alt_encoding="0000004033331D40" d:precision="string">7.3</Z>
                  </cRVector3>
               </cameraOffset>
               <cameraDirection>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Z>
                  </cRVector3>
               </cameraDirection>
               <windowCameraOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="000000E07A14E6BF" d:precision="string">-0.69</X>
                     <Y d:type="sFloat32" d:alt_encoding="000000A099990540" d:precision="string">2.7</Y>
                     <Z d:type="sFloat32" d:alt_encoding="0000004033331D40" d:precision="string">7.3</Z>
                  </cRVector3>
               </windowCameraOffset>
               <windowCameraDirection>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Z>
                  </cRVector3>
               </windowCameraDirection>



               <verticalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</verticalDirectionalFreedom>
               <horizontalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000001040" d:precision="string">4</horizontalDirectionalFreedom>
               <SpringXCoefficient d:type="sFloat32" d:alt_encoding="000000A09999B93F" d:precision="string">0.1</SpringXCoefficient>
               <SpringYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8BE3F" d:precision="string">0.12</SpringYCoefficient>
               <SpringZCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8AE3F" d:precision="string">0.06</SpringZCoefficient>
               <DampingXCoefficient d:type="sFloat32" d:alt_encoding="00000080976E923F" d:precision="string">0.018</DampingXCoefficient>
               <DampingYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B88E3F" d:precision="string">0.015</DampingYCoefficient>
               <DampingZCoefficient d:type="sFloat32" d:alt_encoding="00000040E17A843F" d:precision="string">0.01</DampingZCoefficient>



            </cCabCameraUpdateBlueprint>
         </UpdateComponent>
         <PosOriComponent>
            <cPosOriBlueprint/>
         </PosOriComponent>
      </cCabCameraBlueprint>
   </Blueprint>
</cBlueprintLoader>


Свобода вращения камер и динамика человека в поезде в кабинах действуют на обе камеры.

3.3. Внутренние камеры (камеры в пассажирском вагоне)

Они находятся в файле с названием, обычно содержащим слова "passview". Пример: ДИСК:\Steam\steamapps\common\railworks\Assets\Kuju\RailSimulator\RailVehicles\Passenger\Bimz\Default\PassengerView

Редактирование их почти не отличается от редактирования камер кабины локомотива. Что тут есть?

<camType d:type="sUInt32">5</camType> - тип камеры. Камера с многими доп. возможностями, о чем говорит 5-ый тип камеры. Изменение его ни на что не повлияет.
Далее прописаны 2 стандартных камеры, как и в кабине локомотива, это тэги <cameraOffset> <cameraDirection> и <windowCameraOffset> <windowCameraDirection>. Можно указать одинаковые координты и получится "одна" камера в салоне.
<verticalDirectionalFreedom> и <horizontalDirectionalFreedom> - следуют сразу после кода основных камер и задают горизонтальную и вертикальную свободу вращения этим камерам. Было разобрано выше.
<MinFOV> и <MaxFOV> - мин. и макс. поле зрения. Задают поле зрения камеры и увеличение камеры, то есть и поле зрения человека тоже. Будет разобрано отдельно. А здесь эти тэги также можно и нужно добавлять, т.к. оригинальный зум камер например, составляет 60%, вместо 40% как делаю я.
<SpringCoefficient> и <DampingCoefficient> задают динамику пассажира в поезде и будут описаны далее отдельным пунктом. Для пасс. вагонов это часто применяют.

Пример кода камер в пасс. вагоне Bimz (пустые строки убрать):

Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<cBlueprintLoader xmlns:d="http://www.kuju.com/TnT/2003/Delta" d:version="1.0">
   <Blueprint>
      <cCabCameraBlueprint>
         <Name d:type="cDeltaString">Bimz Passenger View</Name>
         <RenderComponent>
            <cCameraRenderBlueprint/>
         </RenderComponent>
         <UpdateComponent>
            <cCabCameraUpdateBlueprint>


               <camType d:type="sUInt32">5</camType>
               <cameraOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000006066660240" d:precision="string">2.3</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000C0CCCC0040" d:precision="string">2.1</Z>
                  </cRVector3>
               </cameraOffset>
               <cameraDirection>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Z>
                  </cRVector3>
               </cameraDirection>
               <windowCameraOffset>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000006066660240" d:precision="string">2.3</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000C0CCCC0040" d:precision="string">2.1</Z>
                  </cRVector3>
               </windowCameraOffset>
               <windowCameraDirection>
                  <cRVector3>
                     <X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                     <Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                     <Z d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Z>
                  </cRVector3>
               </windowCameraDirection>


               <verticalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</verticalDirectionalFreedom>
               <horizontalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</horizontalDirectionalFreedom>

              <MinFOV d:type="sFloat32" d:alt_encoding="000000403333E33F" d:precision="string">0.6</MinFOV>
              <MaxFOV d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</MaxFOV>

               <SpringXCoefficient d:type="sFloat32" d:alt_encoding="000000A09999B93F" d:precision="string">0.1</SpringXCoefficient>
               <SpringYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8BE3F" d:precision="string">0.12</SpringYCoefficient>
               <SpringZCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8AE3F" d:precision="string">0.06</SpringZCoefficient>
               <DampingXCoefficient d:type="sFloat32" d:alt_encoding="00000080976E923F" d:precision="string">0.018</DampingXCoefficient>
               <DampingYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B88E3F" d:precision="string">0.015</DampingYCoefficient>
               <DampingZCoefficient d:type="sFloat32" d:alt_encoding="00000040E17A843F" d:precision="string">0.01</DampingZCoefficient>


            </cCabCameraUpdateBlueprint>
         </UpdateComponent>
         <PosOriComponent>
            <cPosOriBlueprint/>
         </PosOriComponent>
      </cCabCameraBlueprint>
   </Blueprint>
</cBlueprintLoader>


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

4. Описание дополнительных параметров камер

4.1 Поле зрения

В описании камер вагона выше, для них было добавлено поле зрения. Мин. и макс. поле зрения выставляют начиная с 4го типа камер (камеры в кабине) и далее - камеры в вагоне и дополнительные камеры где-либо. В других типах оно обычно задано по умолчанию и неизменяемо. Пример задания поля зрения для камер(ы):

<MinFOV d:type="sFloat32" d:alt_encoding="000000403333E33F" d:precision="string">0.6</MinFOV>
<MaxFOV d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</MaxFOV>


Выставлять можно:
1) в кабине (действует на одну из основных камер только, выставлять после кода, задающего камеру(ы).)
2) в салоне вагона (действует на обе основные камеры, выставлять после кода основных камер)
3) в качестве описания доп. камеры в кабине или в вагоне (выставлять для всех сразу или для каждой свое собств.)

MinFOV и MaxFOV - определяют поле зрения для камеры. Разница между ними является приближением камеры.
Ориентиром для установки значений должно служить макс. поле зрения, выставить которое нужно сначала, отталкиваясь от него уже получать какое-либо приближение. Макс. поле зрения значит:
0.9 - поле зрения, где предметы расположены далеко по направлению взгляда человека. Взгляд вдаль. Пример: леса, поля, горы, и т.д.
Применять на камерах, расположенных вне кабины и смотрящих вдаль или вокруг. Подойдут для камеры вне кабины локомотива, салона вагона. Значения 0.9-0.95 советую.
1.0 - поле зрения человека в закрытом или ограниченном по видимости пространстве. Подходит для кабины. Значения 0.95-1.0 советую.
1.1 - поле зрения человека в узком замкнутом пространстве или когда он наклонился, чтобы включить что-то. Но поскольку в кабине часто будем смотреть из окна вдаль, а не только на тумблер, то для узкого взгляда подойдет 1.0-1.05, не более - совет.

И вот, то поле зрения 1.0, которое присутствует от разработчиков везде - и в камерах кабины, и на улице (на маршруте, когда поезд едет мимо камеры) - не правильное. Из-за этого приборы в кабине уходят вбок от прямого взгляда, а проезжающий мимо наблюдателя на улице поезд кажется длиннее процентов на 20. Оригинальное поле зрения должно быть 0.95-0.9 в кабине, так и на улице соотв. по моим экспериментам, но никак не 1.0. Это ошибка разработчиков, которую для внешних камер на маршруте уже не исправить наверное.

После выставления макс. поля зрения камеры, нужно задать минимальное - разница между ними создаст зум. 1.0-0.6 даст 40% зум. По умолчанию, в стандартных камерах стоит зум 60%, что не нормально. Я ставлю 40% для кабины и вагона, и 10-20% если куда-то наклонился, чтобы что-то нажать.

4.2 Симуляция динамики человека в вагоне, кабине относительно движения поезда

Этот параметр придает максимальную реалистичность камерам, делая их зависимыми от динамики движения поезда - трогание/остановка, поворот, движение на подъем/спуск, заход на другой путь поезда - влияют и на пассажира.
Рассчитывается это по трем координатам xyz, которые значат тоже самое, что уже было разобрано ранее:
x- движение влево-вправо, y - вверх-вниз, z - вперед-назад.
Координаты пишутся после кода основных камер и приписаны именно к ним. Пример динамики для камер в кабине BR101 по умолчанию, от авторов (настроены не очень):

<SpringXCoefficient d:type="sFloat32" d:alt_encoding="000000A09999B93F" d:precision="string">0.1</SpringXCoefficient>
<SpringYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8BE3F" d:precision="string">0.12</SpringYCoefficient>
<SpringZCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8AE3F" d:precision="string">0.06</SpringZCoefficient>
<DampingXCoefficient d:type="sFloat32" d:alt_encoding="00000080976E923F" d:precision="string">0.018</DampingXCoefficient>
<DampingYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B88E3F" d:precision="string">0.015</DampingYCoefficient>
<DampingZCoefficient d:type="sFloat32" d:alt_encoding="00000040E17A843F" d:precision="string">0.01</DampingZCoefficient>


Для каждой кабины и каждого вагона коэффициенты различны, и настраивать их нужно самостоятельно. Одни для электрички, другие для пасс. вагона, третьи для ЭП1М ). Времени тут на проверку уходит, и вот какие ориентиры есть, т.к. формул для описания динамики человека в поезде не нашлось.
Для начала нужно настроить главный коэф. - Z - что значит движение вперед-назад, которое проявляется при трогании поезда с места и торможении, и опробовать это на прямой. Это будет главный коэффициент, остальные (XY) можно при настройке Z временно поставить 0.001.
SpringCoefficient - это пружинистость, а DampingCoefficient - затухание.
Ориентиром при выставлении damping, после того, как настроен spring коэф. по оси Z, может служить то, что оно должно быть в 5-10 раз меньше пружинистости. После многих тестов для BR101, я остановился на таком варианте пружинистости вперед-назад и ее затухания:

0.2 - springZcoefficient 0.03 - dampingZcoefficient
0.2 - пружинистость, 0.03 - затухание. Больше пружинистость - не значит она станет сильнее, важна разница между параметрами.

Динамику по остальным осям нужно рассматривать отдельно. Ориентиром здесь могут служить видео обзоры поездки в кабине, личные поездки и логика. При движении на повороте, боковое качение в вагоне у пассажира (ось x) есть, но оно практически без пружинистости. И т.д.

5. Добавление новых камер у локомотива и вагона . :yes:

Хотелось бы сделать хождение по кабине, но похоже пока это не предусмотрено, так как теги движения камеры здесь игнорируются. Зато теперь можно добавлять новые камеры, и в большом количестве. :) Добавлять новые камеры можно как в кабину локомотива, так и в салон вагона.
Итак, добавление камер осуществляется вставкой добавочного блока кода <TimelineEntry>, внутри которого задается шаблон <cCabCameraPosition>, а в шаблоне - описание новой камеры. По названию та, что есть в любом коде - <CameraOffset>). Но обязательно среди ее параметров нужно выставить параметр
<TransitionIn d:type="cDeltaString">eTrue</TransitionIn>
<TransitionOut d:type="cDeltaString">eTrue</TransitionOut>

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

Код: Выделить всё
 <TimelineEntry>
                  <cCabCameraPosition>
                     <CameraOffset>
                        <cRVector3>
                           <X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                           <Y d:type="sFloat32" d:alt_encoding="000000A099990D40" d:precision="string">3.7</Y>
                           <Z d:type="sFloat32" d:alt_encoding="00000060666614C0" d:precision="string">-5.1</Z>
                        </cRVector3>
                     </CameraOffset>
                     <CameraDirection>
                        <cRVector3>
                           <X d:type="sFloat32" d:alt_encoding="00000000000000C0" d:precision="string">-2</X>
                           <Y d:type="sFloat32" d:alt_encoding="000000403333E3BF" d:precision="string">-0.6</Y>
                           <Z d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Z>
                        </cRVector3>
                     </CameraDirection>
                     <VerticalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</VerticalDirectionalFreedom>
                     <HorizontalDirectionalFreedom d:type="sFloat32" d:alt_encoding="0000000000001040" d:precision="string">4</HorizontalDirectionalFreedom>
                     <TransitionIn d:type="cDeltaString">eTrue</TransitionIn>
                     <TransitionOut d:type="cDeltaString">eTrue</TransitionOut>
                     <MinFOV d:type="sFloat32" d:alt_encoding="000000403333E33F" d:precision="string">0.6</MinFOV>
                     <MaxFOV d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</MaxFOV>
                     <SpringXCoefficient d:type="sFloat32" d:alt_encoding="000000E051B8BE3F" d:precision="string">0.12</SpringXCoefficient>
                     <SpringYCoefficient d:type="sFloat32" d:alt_encoding="000000403333C33F" d:precision="string">0.15</SpringYCoefficient>
                     <SpringZCoefficient d:type="sFloat32" d:alt_encoding="00000040E17AB43F" d:precision="string">0.08</SpringZCoefficient>
                     <DampingXCoefficient d:type="sFloat32" d:alt_encoding="00000080976E923F" d:precision="string">0.018</DampingXCoefficient>
                     <DampingYCoefficient d:type="sFloat32" d:alt_encoding="000000E051B88E3F" d:precision="string">0.015</DampingYCoefficient>
                     <DampingZCoefficient d:type="sFloat32" d:alt_encoding="00000040E17A843F" d:precision="string">0.01</DampingZCoefficient>
                  </cCabCameraPosition>
 </TimelineEntry>


Я в нем кроме камеры ввел заодно максимум возможных для нее свойств и обязательный здесь тег скорости перехода между камерами (либо плавный переход - eTrue, либо мгновенный - eFalse.
<TransitionIn d:type="cDeltaString">eTrue</TransitionIn>
<TransitionOut d:type="cDeltaString">eTrue</TransitionOut>.

(Но не все параметры, как оказалось, принимаются. Параметры динамики человека наследуются из предыдущих камер; хотя здесь указаны собственные, они не читаются.)
Дополнительных камер можно добавлять много: как путем нескольких блоков кода с описанием камеры (от <cCabCameraPosition>до</cCabCameraPosition> друг за другом), так и взяв куски кода побольше - от <TimelineEntry> до </TimelineEntry>. Порядок переключения от камеры к камере при добавлении нескольких штук будет отсчитываться снизу кода вверх (при использовании кусков кода от <TimelineEntry>до</TimelineEntry> именно так).

6. Про скриптование камер в следующей статье в моем блоге, т.к. тема большая.
----------------------------------------------
Последний раз редактировалось A1iv 14.07.2014, 15:06, всего редактировалось 31 раз(а).

0 комментариев 210740 просмотров

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Yandex [Bot]