Показать сообщение отдельно
Старый 09.06.2012, 17:11   #41
E69
Лентяй и флудер
 
Аватар для E69
 
Регистрация: 10.04.2007
Адрес: Транссиб, 3339 км.
Сообщений: 5,645
Вы сказали Спасибо: 2,049
Поблагодарили 2,350 раз(а) в 777 сообщениях
E69 хороший собеседник
По умолчанию

Про добавление новых текстур:
Цитата:
Добавление собственных текстур земли в маршрут – важный и интересный вопрос. Думаю, не я один попал в ловушку Blueprint Editor’а, создав маршрут, где можно выбрать только одну. Мне было известно, что существуют и другие текстуры, но до сих пор не понимал, как их использовать. Знаю, что не открою Америку, но расскажу немного о том, как редактирую текстуры сам.
Прежде всего, мне нужно знать, какой BIN-файл с текстурами использует мой маршрут. Я могу определить это через файл RouteProperties.xml. НО! Прежде чем это сделать, я всегда создаю его резервную копию, так как любые случайные изменения приведут к ошибке.
После этого я открываю RouteProperties.xml и ищу там раздел TerrainBlueprint. Вот как он выглядит. Не спрашивайте, почему я выбрал именно EUTexturing (европейский набор) для американского маршрута – просто не нашлось ничего лучше:

<TerrainBlueprint>
<iBlueprintLibrary-cAbsoluteBlueprintID>
<BlueprintSetID>
<iBlueprintLibrary-cBlueprintSetID>
<Provider d:type="cDeltaString">Kuju</Provider>
<Product d:type="cDeltaString">RailSimulator</Product>
</iBlueprintLibrary-cBlueprintSetID>
</BlueprintSetID>
<BlueprintID d:type="cDeltaString">Environment\Terrain\EUTextur ing.xml</BlueprintID>
</iBlueprintLibrary-cAbsoluteBlueprintID>
</TerrainBlueprint>

Теперь я знаю, какой BIN использует мой маршрут, и могу скопировать (и переименовать) его в папку своих assets, после чего отредактировать поля Provider и Product (а так же имя файла) в свойствах своего маршрута:

<TerrainBlueprint>
<iBlueprintLibrary-cAbsoluteBlueprintID>
<BlueprintSetID>
<iBlueprintLibrary-cBlueprintSetID>
<Provider d:type="cDeltaString">DMV</Provider>
<Product d:type="cDeltaString">CC_Route</Product>
</iBlueprintLibrary-cBlueprintSetID>
</BlueprintSetID>
<BlueprintID d:type="cDeltaString">Environment\Terrain\Texturin g.xml</BlueprintID>
</iBlueprintLibrary-cAbsoluteBlueprintID>
</TerrainBlueprint>

Причина, по которой я создал копию именно того BIN-файла, который ранее использовался маршрутом, в том, что RailWorks запоминает последовательность, в которой там перечисляются текстуры. И если, например, Dry Grass была второй на момент создания маршрута, а потом я добавил что-то перед ней, скажем Corn Fields, то при очередной загрузке маршрута меня будет ждать сюрприз – ведь Мичиган до сих пор не был знаменит кукурузными полями.
Теперь я поэкспериментирую с добавлением текстур земли в BIN.
Прежде всего, я не спешу делать это на рабочем маршруте. Если я сделаю что-нибудь лишнее, то после удаления текстуры из BIN-а результат может быть непредсказуем, вплоть до вылета игры. Так что я экспериментирую на клоне TestTrak. В случае ошибки я всегда могу удалить маршрут, создать новый клон и начать сначала.
Итак, я создал в нем копию BIN-файла, переименовав EUTexturing.bin в TestTexturing.bin.

<BlueprintID d:type="cDeltaString">Environment\Terrain\TestText uring.xml</BlueprintID>

Для его редактирования я использую RWTools. В нем много интересных настроек, но пока я хочу лишь найти последнюю упомянутую текстуру.

</cMixTexDescriptor>
</MixTex>

Чтобы добавить текстуру, вы должны её иметь. Поскольку мой маршрут уже использует материалы Portland Terminal (PT), текстуру я позаимствую оттуда же. В будущем я планирую добавление собственных текстур таким же способом. Так, в bin-файле маршрута PT есть текстура Asphalt000, которой нет в bin-е моего нового маршрута:

<cMixTexDescriptor d:id="56736104">
<BaseTextureName d:type="cDeltaString">G-TraX\PortlandTerminal\Environment\Terrain\Urban\As phalt000</BaseTextureName>
<BaseSpringTextureName d:type="cDeltaString"></BaseSpringTextureName>
<BaseSummerTextureName d:type="cDeltaString"></BaseSummerTextureName>
<BaseAutumnTextureName d:type="cDeltaString"></BaseAutumnTextureName>
<BaseWinterTextureName d:type="cDeltaString">G-TraX\PortlandTerminal\Environment\Terrain\Urban\As phalt000_Wi</BaseWinterTextureName>
<DisplayName d:type="cDeltaString">Asphalt 00</DisplayName>
<LocalisedDisplayName>
<Localisation-cUserLocalisedString>
<English d:type="cDeltaString">Asphalt 00</English>
<French d:type="cDeltaString"></French>
<Italian d:type="cDeltaString"></Italian>
<German d:type="cDeltaString"></German>
<Spanish d:type="cDeltaString"></Spanish>
<Dutch d:type="cDeltaString"></Dutch>
<Polish d:type="cDeltaString"></Polish>
<Russian d:type="cDeltaString"></Russian>
<Other/>
<Key d:type="cDeltaString"></Key>
</Localisation-cUserLocalisedString>
</LocalisedDisplayName>
<Wang d:type="cDeltaString">eTrue</Wang>
<FloraIndex d:type="sUInt32">0</FloraIndex>
<FloraDensity d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0.0000</FloraDensity>
<Category d:type="cDeltaString">eConcrete</Category>
</cMixTexDescriptor>

Я копирую (не вырезаю!) и вставляю текстуру из bin-а Портленда в свой между двумя строками, указанными выше (</cMixTexDescriptor> и </MixTex>).
Наконец, последний шаг делается в редакторе маршрутов. Так как текстура взята из PT, я должен разрешить её использование через фильтр объектов (на скрине).



Дополнение: копирование маршрутов иногда приводит к тому, что поверхность земли в клонах оказывается пустой. Я пока не разобрался, почему это произошло и почему нормальная работа восстановилась, но готов поспорить, что это не моя ошибка.
Добавлено через 1 час 9 минут
Про сезонные настройки и процедурную траву:
Цитата:
Теперь пора заняться другими особенностями bin-а, такими как настройка сезонов. Я пойду по тесту файла сверху вниз, а вы можете редактировать его в любом порядке, всё будет работать.
В этих местах практически не бывает снега, так что первым делом я избавлюсь от зимы. Читая описание каждой текстуры в bin-е, я вижу записи для каждого из времен года. В большинстве случаев используются только базовая и зимняя текстуры. Я заменю зимнюю текстуру весенней, а где её нет – летней.
Исходный текст:

<cMixTexDescriptor d:id="15900888">
<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass000</BaseTextureName>
<BaseSpringTextureName d:type="cDeltaString"></BaseSpringTextureName>
<BaseSummerTextureName d:type="cDeltaString"></BaseSummerTextureName>
<BaseAutumnTextureName d:type="cDeltaString"></BaseAutumnTextureName>
<BaseWinterTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass000_Wi</BaseWinterTextureName>
<DisplayName d:type="cDeltaString">Green Grass</DisplayName>
<LocalisedDisplayName>
...

После редактирования:

<cMixTexDescriptor d:id="15900888">
<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass000</BaseTextureName>
<BaseSpringTextureName d:type="cDeltaString"></BaseSpringTextureName>
<BaseSummerTextureName d:type="cDeltaString"></BaseSummerTextureName>
<BaseAutumnTextureName d:type="cDeltaString"></BaseAutumnTextureName>
<BaseWinterTextureName d:type="cDeltaString"></BaseWinterTextureName>
<DisplayName d:type="cDeltaString">Green Grass</DisplayName>
<LocalisedDisplayName>
...

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


Холмы здесь живые, но – пожухлые. Издали они выглядят зелеными (а зимой серыми), но вблизи желтеют. Но вблизи побережья зимой и весной, да и в остальные сухие дни, они должны быть зелеными. Я решил, что смогу изменить это через свойство DistantTerrainColour. Чтобы сделать их коричневыми, я попробовал вот такие настройки:

<DistantTerrainColour>
<cHcColour>
<Red d:type="sFloat32" d:alt_encoding="00000020D49ADA3F" d:precision="string">0.4157</Red>
<Green d:type="sFloat32" d:alt_encoding="000000A03E57D73F" d:precision="string">0.3647</Green>
<Blue d:type="sFloat32" d:alt_encoding="000000C00E9CCB3F" d:precision="string">0.2157</Blue>
<Alpha d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1.0000</Alpha>
</cHcColour>
</DistantTerrainColour>

Чтобы сделать это, пришлось немного похитрить. 1.0 соответствует числу 255 в описании цвета стандартом RGB. Вместо вычислений я сделал скриншот, определил параметры цвета в паинте и использовал blueprint editior для того, чтобы соотнести их числам в формате RW:


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


Спустимся с гор в прерии к седому океану… Так вот, о седине. Тут мы находим удобный способ автоматизировать поведение местности. Вы можете задать текстуры для трех разных высот, и они будут автоматически смешаны для вас. Вот дефолтные значения:

<LowGroundTextureIndex d:type="sUInt32">1</LowGroundTextureIndex>
<MidGroundTextureIndex d:type="sUInt32">2</MidGroundTextureIndex>
<HighGroundTextureIndex d:type="sUInt32">16</HighGroundTextureIndex>

Об этом сказано в Developer Wiki, но стоит повторить и здесь. Число – это номер текстуры в списке, начиная считать с 1 (не с 0). У меня первая текстура - это

<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass000</BaseTextureName>

Вторая:

<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass001</BaseTextureName>

16-я:

<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Snow\Snow000_A</BaseTextureName>

Чуть ниже этого мы видим:

<LowToMidHeightPoint d:type="sFloat32" d:alt_encoding="0000000000008940" d:precision="string">800.0000</LowToMidHeightPoint>
<LowToMidThreshold d:type="sFloat32" d:alt_encoding="0000000000C06240" d:precision="string">150.0000</LowToMidThreshold>
<MidToHighHeightPoint d:type="sFloat32" d:alt_encoding="0000000000C09240" d:precision="string">1200.0000</MidToHighHeightPoint>
<MidToHighThreshold d:type="sFloat32" d:alt_encoding="0000000000C06240" d:precision="string">150.0000</MidToHighThreshold>

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

<LowGroundTextureIndex d:type="sUInt32">1</LowGroundTextureIndex>
<MidGroundTextureIndex d:type="sUInt32">40</MidGroundTextureIndex>
<HighGroundTextureIndex d:type="sUInt32">4</HighGroundTextureIndex>

и так:

<LowToMidHeightPoint d:type="sFloat32" d:alt_encoding="0000000000008940" d:precision="string">100.0000</LowToMidHeightPoint>

Возможно, вы задумались, что такое текстура №40. Это клон текстуры №4 (очень сухая трава) специально для холмов, в котором плотность травы увеличена до 5000 (а можно и больше!). Это сделает холмы более естественными.


Как лучше вырастить камни?) Для этого есть специальный раздел.

<RockTextureIndex d:type="sUInt32">1</RockTextureIndex>

Эта строка задает номер текстуры камней (RockTexture).

<RockGradient d:type="sFloat32" d:alt_encoding="0000000000002440" d:precision="string">10.0000</RockGradient>
<RockThreshold d:type="sFloat32" d:alt_encoding="0000006066661A40" d:precision="string">6.6000</RockThreshold>

Уклон и порог задают условия её использования. Я поиграл с этими значениями и решил оставить их дефолтными, потому что результат всё равно не соответствует реальности. Так что я доработаю склоны вручную, порыв их текстурами камня и своей «№40». Результат на скрине неплох, но всё же больше напоминает тени, чем выходы камня.


Мои любимые «сорянки» (Brachypodium distachyon) были завезены в Калифорнию конкистадорами и вытеснили в этих краях местные растения. Нечто похожее на них есть в одном из европейских *.TxDc, но там только одна сезонная текстура. Чтобы изменить процедурную растительность, вы должны знать номер нужного растения. Определить его поможет вики-справка:
http://www.railsimdownloads.com/wiki...ocedural+flora
Увы, я не могу сослаться на существующий номер, иначе это приведет к появлению луговых цветов зимой и летом. Поэтому я клонирую текстуры в свою папку и перекрашиваю каждый сезон. Для новой травы я использую свободный номер 15. Также я заменяю зимнюю текстуру весенней. Ещё один момент! Вы должны указать цвет, соответствующий прозрачному, чтобы альфа-канал заработал в игре.


Всё, теперь я могу заменить номер растительности в своей 40-й текстуре поверхности на 15:

<cMixTexDescriptor d:id="15900888">
<BaseTextureName d:type="cDeltaString">Kuju\RailSimulator\Environme nt\Terrain\Grass\Grass003</BaseTextureName>
<BaseSpringTextureName d:type="cDeltaString"></BaseSpringTextureName>
<BaseSummerTextureName d:type="cDeltaString"></BaseSummerTextureName>
<BaseAutumnTextureName d:type="cDeltaString"></BaseAutumnTextureName>
<BaseWinterTextureName d:type="cDeltaString"></BaseWinterTextureName>
<DisplayName d:type="cDeltaString">Very Dry Grass (Hills)</DisplayName>
<LocalisedDisplayName>
<Localisation-cUserLocalisedString>
<English d:type="cDeltaString">Very Dry Grass (Hills)</English>
<French d:type="cDeltaString"></French>
<Italian d:type="cDeltaString"></Italian>
<German d:type="cDeltaString"></German>
<Spanish d:type="cDeltaString">Hierba verde</Spanish>
<Dutch d:type="cDeltaString"></Dutch>
<Polish d:type="cDeltaString"></Polish>
<Russian d:type="cDeltaString"></Russian>
<Other/>
<Key d:type="cDeltaString"></Key>
</Localisation-cUserLocalisedString>
</LocalisedDisplayName>
<Wang d:type="cDeltaString">eTrue</Wang>
<FloraIndex d:type="sUInt32">15</FloraIndex>
<FloraDensity d:type="sFloat32" d:alt_encoding="000000000000E03F" d:precision="string">0.5000</FloraDensity>
<Category d:type="cDeltaString">eGrass</Category>
</cMixTexDescriptor>


Есть ещё одна вещь, которую создателям не удалось автоматизировать. В игру стоило включить возможность задать отдельную текстуру для северных или южных склонов холмов и гор. В этих краях растительность сильнее растет на защищенных от солнца северных склонах, и я пользовался бы такой функцией.
Я не создал всё это, но научился им пользоваться. Потребовалось время на поиски в сети, и я знаю, что написанное уже применяется маршрутостроителями. Зная всё это, я бы начал строить собственный маршрут иначе и сэкономил бы некоторое время. Меня удивляет, почему эта информация не опубликована или не находится нигде более?
Наконец, хотел бы поблагодарить блог Derek’а The Art of RailWorks и вики-справку RW (увы, весьма неполную). Стоит также упомянуть неиспользуемый мной KRSTool2.
__________________
🚆🚆🚆
E69 вне форума   Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо E69 за это полезное сообщение:
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА