v3.9

Архив представляет собой пак компиляторов для проектов карт, созданных в SDK STALKER ТЧ и включает:

01)Обычный xrlc от GSC
02)Ускоренный xrlc от Haron
03)Ускоренный xrlc от Haron, принудительно использующий одно ядро на многоядерниках
04)Ускоренный xrlc от Bardak
05)xrlc, с возможностью обходить ошибки от Mortarion
06)xrlc, с возможностью обходить ошибки от Mortarion, принудительно использующий одно ядро на многоядерниках
07)переработанный xrlc от Bardak, принудительно использующий одно ядро на многоядерниках
08)переработанный xrlc от Bardak, принудительно использующий одно ядро на многоядерниках + экспериментальные улучшения by Macron
09)xrlc, с возможностью обходить ошибки от Haron
10)xrlc, с возможностью обходить ошибки от Haron, принудительно использующий одно ядро на многоядерниках
12)xrlc от Bardak, одновременно обрабатывающий 2 карты (только для многоядерных процессоров)
13)переработанный xrlc от Bardak, одновременно обрабатывающий 2 карты (только для многоядерных процессоров)
14)xrLC от билда 2215
15)xrLC от билда 2215, принудительно использующий одно ядро на многоядерниках
16)xrLC от билда 2365
17)xrLC от билда 2365, принудительно использующий одно ядро на многоядерниках
18)xrLC от билда 2588
19)xrLC от билда 2588, принудительно использующий одно ядро на многоядерниках

A)обычный xrDO_light от GSC
B)ускоренный xrDO_light от Haron
C)ускоренный xrDO_light от Bardak
D)xrDO_light от билда 2215
E)xrDO_light от билда 2365
F)xrDO_light от билда 2588



в !!!progs!!!:
Утилита QVis.exe просматривает *.smf-файлы, появляющиеся в папке с уровнем после компиляции.
Утилита project patcher для перевода проектов упровней (*.prj) изготовленных в SDK предыдущих версий в формат относительно совместимый с текущими компиляторами.
Утилита 2215 patcher для перевода готового уровня в формат 2215-совместимых билдов
Утилита Imagecfg патчит экзешники на поддержку Large Memory Aware и принудительное использование только одного ядра на многоядерниках.


Инструкция:

xrlc - компилятор геометрии
xrdolight - компилятор детейлов (травы)

Чтобы их использовать как бенчмарк, просто распаковать весь архив в любое место на диске и запускать батники 01-19,
сравнивая время компиляции, выводимое в самом конце. На самом деле это пустая трата времени, результаты тестов на синтетической карте будут в корне отличаться от результатов реальных карт.
Рекомендуется встроить пак в SDK и протестировать на небольшой реальной карте с террейном и строениями.

Чтобы интегрировать компиляторы в sdk, надо в sdk найти папку bins и в ней удалить папку compiler. А на ее место поместить папки compiler* отсюда. Все *.bat,fs.txt,fsgame.txt скопировать туда же, где ActorEditor.bat, LevelEditor.bat и другие.
Файлы fs.txt и fsgame.txt необходимы для работы компиляторов из билдов.
Файл fsgame.ltx в SDK лучше не заменять.

Затем как обычно - в SDK делаете Compile-build своей карты и используете выбранный батник со своими параметрами.
То есть, редактируя любой батник, вместо "-f BenchMap" нужно вписать "-f моя_карта"

Параметр -gi не рекомендуется использовать. Ничего кроме жуткой засветки вокруг лампочек в dx8 он вроде не дает, а время компиляции увеличивается на порядок.

Можно еще выводить меню доп.опций компиляции, если в батник добавить параметр -o. Например, "-f моя_карта -o". О реальной пользе меню см. Примечание 2 и 3.
Но в SDK качество HEMI для компиляторов 2215/2365 надо ставить не меньше 1, а то будет вылететь после меню опций.


Советы:

По предварительным тестам наиболее эффективен компилятор от Bardaka 04,07,08 (08-самый быстрый).

Компиляторы серии FIXXED тормознутее, но позволяют обходить вылеты с Invalid Faces при компиляции. Рекомендую использовать 06 или 10.
Если в начале компиляции возникает ошибка про Invalid Faces, говорим "продолжить" и компилим дальше.
Еще у этих компиляторов может проявляться небольшой глюк - текстуру террейна они могут сохранять в отдельной папке gamedata\levels\ixxed.

Компиляторы серии _1core на многоядерных процессорах используют только одно ядро, зато на 100%, и могут давать
существенный прирост на двухядерных Core2.

Компиляторы 12 и 13 на многоядерных процессорах позволяют одновременно компилировать две карты (за время одной).
Но на разных процессорах могут работать по разному. Поэтому сначала необходимо проверить оба на тестовой карте BenchMap. После выбора наибыстрого - отредактировать его батник, вписав в первую строчку название первой карты, а во вторую - второй.

Для компиляции травы рекомендуется C-xrDO_light_bardak.bat

Теоретически для получения высшего качества карты, в SDK, в свойствах своей карты (Scene->Options), где настраиваем качество
компиляции, сначала выбрать High, затем Custom и изменить Pixel per meter с 10.00 на 20.00, а затем уже компилить. Но на сложных картах такие параметры могут приводить к вылетам компиляции - тогда ставьте просто High, тем более что разницы не заметно.

Для относительно быстрой компиляции карты, но с качеством выше чем draft, в свойствах своей карты (Scene->Options),
где настраиваем качество компиляции, сначала выбрать Draft, затем Custom и выставить следующие значения:

Hemisphere quality    - 0
Sun Shadow quality    - 0
Pixel per Meter       - 0.30
Error (LM collapsing) - 4
Error (LM zero)       - 4
Jitter Samples        - medium

Только при Jitter Samples = medium или выше, не должны глючить заборы из металлической сетки или колючей проволоки (и при условии, что были правильно настроены через Actor Editor).



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




ПРИМЕЧАНИЯ:

Знаками /* */ указаны поздние правки от тов.FL!NTа.



Рекомендуемые настройки для Actoreditor /*или можно в LE в свойствах объекта*/
 для заборов из металлической сетки или колючей проволоки:

/* для сетки рабица и колючки*/
shader def_shaders\def_trans
compile def_shaders\def_translucensy
material materials\setka_rabica
2 sided да

/* этот вариант для решеток и решетчатых ферм и т.д.*/
shader def_shaders\def_aref
compile def_shaders\def_noshadow
material materials\setka_rabica
2 sided да

Рекомендуемые настройки для Actoreditor для воды:
текстура-  текстура вода (water), ряска (waterryaska) и т.д  water\water_pool2 или water\water_water (water_pool2 еще поблескивает на r1)
shader effects \ соответственно текстуре water…. 
compile def_shaders\def_vertex
material materials\water

Рекомендуемые настройки для Actoreditor для маскировочной сетки:
текстура prop\prop_mask_setka
shader def_shaders\def_trans_v
compile def_shaders\def_vertex_ghost
material default


ПРИМЕЧАНИЕ 1
Рекомендация для любых компиляторов, в том числе от ТЧ: чтобы компилятор запускался быстрее или не вылетал сразу - перед компиляцией рекомендуется зайти в папку rawdata-objects и временно перенести все из нее в другое место на HDD. Главное, чтобы вне RAWDATA.
По умолчанию все компиляторы зачем-то сканируют эту папку на объекты, хотя для компиляции они не нужны. Но в результате сканирования начинаются тормоза при запуске, а если файлов более 7000 - вообще вылеты.
Также временно перенести папку gamedata\textures\lod, если в ней тысячи файлов.


Аналогичный глюк есть и у левеледитора. Если в rawdata\objects\levels находится более 7000 файлов, возможны жуткие тормоза при запуске (до 20 минут).
Избежать просто - держите объекты неиспользуемых уровней из rawdata\objects\levels в отдельных (или одном общем) 7z-архивах. Для работы временно разархивируйте какие-нибудь 1-2.
Также можно до запуска левеледитора перенести все из rawdata\objects\levels в другое место, запустить левеледитор, свернуть по Alt-tab и перенести эти файлы обратно.

 

ПРИМЕЧАНИЕ 2
Насчет вылетов в начале компиляции с сообщением об Invalid faces:

Если получаем такой вылет на одном из быстрых компиляторов, то первым делом запускаем его с параметром -o. В опциях выставляем weld distance в 0 и пытаемся компилить. Если не помогло, тогда пользуемся тормознутыми компилями, обходящими ошибки (см. Советы).
Или в SDK, в свойствах своей карты (Scene->Options), где настраиваем качество компиляции, выставить Custom и weld distance = 0 (вместо 0,0050), но он срабатывает не всегда. Если не помогло, тогда пользуемся тормознутыми компилями, обходящими ошибки (см. Советы).



ПРИМЕЧАНИЕ 3
Если при компиляции на максимальном качестве компилятор слетает на фазе Light Implicit в момент сохранения террейна - добавьте в батник после "-f имя_карты" еще параметр -o, запустите, зайдите в пункт progressive и уберите галку "Convert to progressive". Террейн в этом случае компилиться не будет (хотя полученные файлы будут на него ссылаться). После этого сохранить полученную геометрию где-нибудь на диске.

А чтобы все же скомпилировать террейн + его лайтмап (terrain_имякарты_lm.dds) на максимальном качестве и не получить вылета на фазе Light Implicit - попробуйте с такими параметрами:

Hemisphere quality    - 0
Sun Shadow quality    - 3
Pixel per Meter       - 0.10
Error (LM collapsing) - 4
Error (LM zero)       - 4
Jitter Samples        - high

После удачного прохождения стадии Light Implicit компилятор можно прервать, а полученный террейн присоединить к ранее сохраненной геометрии.



ПРИМЕЧАНИЕ 4
Замечено, что террейн на современных компиляторах получается сильно засвеченным. Даже трава на его фоне резко контрастирует (кажется темной). После компиляции карты рекомендуется открыть файл террейна через редактор типа paint.net или фотожоп с dds-плагином и вручную снижать яркость (а иногда и цветность(saturation)) террейна. Также можно повышать прозрачность. Чем террейн прозрачнее, тем темнее он будет смотреться в dx8. Сохранять файл как DXT5 без мип-мапов.
Еще можно попробовать в папке с полученным уровнем взять build_details.dds, и через paint.net пересохранить как DXT1 с мип-мапами.


ПРИМЕЧАНИЕ 5
Иногда (очень редко в самых страшных экспериментах) для фикса некоторых глюков с тенями необходимо совсем убрать альфу (прозрачность), открыв террейн через paint.net или фотожоп и сохранив как R8G8B8. Затем открыть снова и задать свою прозрачность. Сохранять файл как DXT5 без мип-мапов.


ПРИМЕЧАНИЕ 6
Насчет маски террейна, которая нужна, чтобы в dx9 не глючило (terrain_имякарты_mask.dds). Создать можно тупо из копии текстуры террейна, залив через paint.net или фотожоп соответствующими цветами.

Вот таблица цветов под разные участки маски: Заливать - ими. 
Асфальт: RGB - 0:252:0 
Земля: RGB - 248:0:0 
Овраги, вода RGB - 0:0:248 
Под домами: Просто чёрный цвет 
(Справедливо для стандартных GSCих шейдеров, для тех кому лень ковырять.)
Но в конце не забыть добавить прозрачность, а то в dx9 все будет совсем темное. Повышать (через paint.net) прозрачность с 255 почти до максимума (до 15-5). Чем прозрачнее, тем ярче будет выглядеть картинка на r2. Сохранять файл как DXT5 без мип-мапов.

/*
Альфу добавлять при использовании 4х типов материалов террайна (при 3х прекрасно обходится без нее см. оригинальные файлы маск).
Сохранять файл как DXT5 без мип-мапов. 
Для маски каждый из каналов маски соответствует определенному типу материала (грунт, трава, асфальт и т.д. до 4х)  и заданному ему шейдеру. Шейдеры можно подобрать в levels или создать свои в шадередитор. Интенсивность цвета каждого из каналов и их порядок наложения соответствует интенсивности прорисовки дет текстур. Порядок наложения обратный RGBA. Для R2 сам терраин может быть создан с одним типом поверхности, все дет текстуры будут наложены по маске единственное, что будет глючить это звуковые шейдеры. Надо также учитывать маска и текстура детейлов в отличие от терраин текстуры не имеет полигональной привязки, а растягивается по максимальным линейным размерам карты.
*/

ПРИМЕЧАНИЕ 7
Порой, казавшаяся травянистой в dx8 земля, в dx9 выглядит голой и каменистой. Типичный пример тому - Припять в ТЧ. Как фиксим:
в файле уровня gamedata\levels\l11_pripyat\level находим ссылки на шейдеры, связанные с текстурой террейна. Это levels\pripyat_grass и levels\pripyat_asfalt.

Далее через Shadereditor редактируем shaders.xr. Если у вас свой shaders.xr, то  на время помещаем его в sdk в папку gamedata взамен имеющегося и запускаем Shadereditor. Там на вкладке Engine находим шейдер levels\pripyat_grass

и меняем

R2-R detail\detail_grnd_grass
R2-G detail\detail_grnd_asphalt
R2-B detail\detail_grnd_earth
R2-A detail\detail_grnd_yantar

на 

R2-R detail\detail_grnd_grass
R2-G detail\detail_grnd_asphalt
R2-B detail\detail_grnd_grass
R2-A detail\detail_grnd_yantar


затем находим шейдер levels\pripyat_asfalt и делаем то же самое. Сохраняемся и переносим новый shaders.xr к себе в игру.

/* Для понимания что делаешь читай пункт 6  см выше*/

ПРИМЕЧАНИЕ 8
Непосредственно для игры не нужны следующие файлы (можно удалять): build.cform, build.prj, build.lights, *.smf, *.uvm.


ПРИМЕЧАНИЕ 9
Список параметров для батников компиляции:
-f имя_карты  (обязательный параметр)
-gi (глобальное освещение) - поганит картинку и тормозит компиляцию
-o  (дополнительные опции)
-h  -? (помощь)

малоизученные параметры:
-nosun - вроде для компиляции подземных лок, чтобы не плодить лишние лайтмапы от солнца
-noise
-premul (возможно связан с альфа-каналом текстур лайтмапов и т.п.)

Справка:
Premultiplied alpha - это значит в каналах r, g, и b текстуры хранится r*alpha, g*alpha, b*alpha. Это позволяет выводить текстуры с прозрачностью через glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) вместо glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), что дает накоторые плюсы. 
Premultiplied Alpha (Умноженный в обратном порядке альфа-канал)
При включении Premultiplied Alpha при наложении текстуры будут перемножаться, и яркость будет увеличиваться.

If an alpha channel is used in an image, it is common to also multiply the color by the alpha value, to save on additional multiplications during compositing. This is usually referred to as premultiplied alpha. Thus, assuming that the pixel color is expressed using RGBA tuples, a pixel value of (0.0, 0.5, 0.0, 0.5) implies a pixel which is fully green and has 50% coverage. (Explanation: The RGB values are the first three values, (0, 0.5, 0) and the alpha value is the fourth, 0.5. If the color were fully green, its RGB would be (0, 1, 0). Since this pixel is using a premultiplied alpha, all of the RGB values in the ordered triplet (0, 1, 0) are multiplied by 0.5 and then the alpha is added to the end to yield (0, 0.5, 0, 0.5).) Premultiplied alpha also has some advantages over normal alpha blending because premultiplied alpha blending is associative and linear interpolation gives better results.



ПРИМЕЧАНИЕ 10
О других ошибках компиляции читайте в файле errors.chm
/*
P.S. в errors.chm есть тоже некоторые несоответствия))
*/



17.09.2012
02.06.2010

DIABLO
FL!NT
Haron
Macron
Loxotron
Bardak
Mortarion