Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [SDK] Фиксы для X-Ray SDK
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4
Yara
Цитата(xrModder @ 29.03.2019, 00:33) *
В SDK ЗП и ЧН при спавне Way Point координаты показывают по нулям как в SDK 0.4?

Не, в чн / зп с этим норм.

Слушай, а не можешь поправить в сдк тч (level editor) сброс выделения в окошке object list при удалении объекта (сразу сбрасывает на начало - терпимо, когда 100-200 объектов, но когда >1000... wallbash.gif
xrModder
Цитата(Yara @ 29.03.2019, 04:49) *
Слушай, а не можешь поправить в сдк тч (level editor) сброс выделения в окошке object list при удалении объекта (сразу сбрасывает на начало - терпимо, когда 100-200 объектов, но когда >1000... wallbash.gif

Посмотрю, но не сейчас.
xrModder
Патч для X-Ray SDK 0.4 от 28.01.2017

Изменения:
- Убран вкл. окно лога с сообщением* CSceneObject: 'file_name' different file version! (загрузка измененной версии объекта)
- Убран вкл. окно лога с сообщением* Can't find texture 'texture_name' (ошибка загрузки при отсутствии текстуры)

* За одно цвет фона сообщения переведен из красного в серый
Установка:
Скопировать папку bins в папку с SDK или использовать патчер.

Скачать: https://yadi.sk/d/IK3M6SjeSz2H3Q
aka_sektor
Может кто-то проверить, ошибки:
Код
Can't find any Glow Object
Can't find any Light Object


Это проверка SDK или ограничение движка?

Если проверка, то может ли кто сделать правку, её отключающую?
Kontro-zzz
Тестовая затычка на вылет "(Pos<=Size) && (Pos>=0)" при загрузке приложений СДК.
Патчим xrCoreB.dll.
Патчи для тч-чн-зп сдк.
https://yadi.sk/d/pW0tcsTf7Jtz6w
Kontro-zzz
PS
Добавлена еще одна затычка на вылет Description : Pos+cnt<=Size
https://yadi.sk/d/qHRtwj7fR2sUFw
Заткнуты примерно такие вылеты на СДК ЧН:
CODE

exp​ression : assertion failed
Function : X:\stalker_addon\sources\engine\xrCore\FS.h
File : X:\stalker_addon\sources\engine\xrCore\FS.h
Line : 276
Description : (Pos<=Size) && (Pos>=0)

stack trace:

exp​ression : assertion failed
Function : X:\stalker_addon\sources\engine\xrCore\FS.h
File : X:\stalker_addon\sources\engine\xrCore\FS.h
Line : 273
Description : (Pos<=Size) && (Pos>=0)

stack trace:

exp​ression : assertion failed
Function : X:\stalker_addon\sources\engine\xrCore\FS.cpp
File : X:\stalker_addon\sources\engine\xrCore\FS.cpp
Line : 388
Description : Pos+cnt<=Size

stack trace:


На СДК ЗП.

CODE

exp​ression : assertion failed
Function : X:\stalker_addon\sources\trunk\xrCore\FS.h
File : X:\stalker_addon\sources\trunk\xrCore\FS.h
Line : 278
Description : (Pos<=Size) && (Pos>=0)

stack trace:

exp​ression : assertion failed
Function : X:\stalker_addon\sources\trunk\xrCore\FS.cpp
File : X:\stalker_addon\sources\trunk\xrCore\FS.cpp
Line : 392
Description : Pos+cnt<=Size

stack trace:


Архив выше перезалит.
Rolan96
Подскажите как пользоваться правкой RayTwitty по инвалид фейсам для сдк ЗП.
Левел едитор пропатчил, но после компиляции локации всё равно на моделях есть удаленные треугольники.
macron
Хочу рассказать об одном хаке, который уже давно изредка использовал, но как-то не заморачивался с серьезными исследованиями. Речь о параметре "-noise" в батник для xrlc-компиляторов. Расшифровывается как "No isolated чего-то там...". На последних тестах оценил преимущества. Тестировал на r2 на конкретной карте, где много геометрии и мало деревьев, отвечаю только за это:

1. На 32-битном компиляторе, когда на навороченной карте в стандартном режиме начинаются вылеты по нехватке памяти, то если добавить "-noise", появляется небольшой дополнительный запас памяти и больше шансов скомпилить.

2. Исправились косяки с треугольниками на воде в месте ее перехода в лоды.




3. В среднем fps на карте немного вырос на пару кадров.




4. В паре мест fps существенно вырос.




Пока что одни плюсы. Если кто знает больше, обсуждайте.
Yara
Цитата(macron @ 13.01.2021, 04:08) *
Речь о параметре "-noise" в батник для xrlc-компиляторов.

Дополню, как оно есть в коде (но мне мало там понятного, и стоит-ли скипать эту фазу при компиле):
код

Ключ -noise устанавливает b_noise = TRUE;

\xrLC\xrFlex2OGF.cpp
...
CODE

if (!b_noise) // если без ключа
pOGF->MakeProgressive(c_PM_MetricLimit_static);

pOGF->MakeProgressive

\xrLC\OGF_Face.cpp
...
CODE

void OGF::MakeProgressive (float metric_limit)
{
// test
// there is no-sense to simplify small models
// for batch size 50,100,200 - we are CPU-limited anyway even on nv30
// for nv40 and up the better guess will probably be around 500
if (faces.size()<c_PM_FaceLimit) return ;

c_PM_FaceLimit

\xrLC\b_globals.h
...
CODE

const u32 c_LMAP_size = 1024; // pixels
const u32 c_VB_maxSize = 4096*1024; // bytes
const u32 c_VB_maxVertices = 65535; // count
const u32 c_vCacheSize = 24; // entries
const u32 c_SS_LowVertLimit = 64; // polys
const u32 c_SS_HighVertLimit = 2*1024; // polys
const u32 c_SS_maxsize = 32; // meters
const u32 c_PM_FaceLimit = 128; // face-limit
const float c_PM_MetricLimit_static = 0.10f; // vertex-count-simplification-limit
const float c_PM_MetricLimit_mu = 0.05f; // vertex-count-simplification-limit


CODE

//. AlexMX added for draft build mode
if (g_params.m_quality==ebqDraft) return ;

progressive_cs.Enter ();

//////////////////////////////////////////////////////////////////////////
// NORMAL
vecOGF_V _saved_vertices = vertices ;
vecOGF_F _saved_faces = faces ;

{
// prepare progressive geom
VIPM_Init ();
//clMsg("--- append v start .");
for (u32 v_idx=0; v_idx<vertices.size(); v_idx++)
VIPM_AppendVertex (vertices[v_idx].P, vertices[v_idx].UV[0] );
//clMsg("--- append f start .");
for (u32 f_idx=0; f_idx<faces.size(); f_idx++)
VIPM_AppendFace (faces[f_idx].v[0], faces[f_idx].v[1], faces[f_idx].v[2] );
//clMsg("--- append end.");

// Convert
VIPM_Result* VR = 0;
try {
VR = VIPM_Convert (u32(25),1.f,1);
} catch (...) {
progressive_clear () ;
clMsg ("* mesh simplification failed: access violation");
}
if (0==VR) {
progressive_clear () ;
clMsg ("* mesh simplification failed");
}
while (VR && VR->swr_records.size()>0) {
// test metric
u32 _full = vertices.size () ;
u32 _remove = VR->swr_records.size() ;
u32 _simple = _full - _remove ;
float _metric = float(_remove)/float(_full);
if (_metric<metric_limit) {
progressive_clear () ;
clMsg ("* mesh simplified from [%4dv] to [%4dv], nf[%4d] ==> em[%0.2f]-discarded",_full,_simple,VR->indices.size()/3,metric_limit);
break ;
} else {
clMsg ("* mesh simplified from [%4dv] to [%4dv], nf[%4d] ==> em[%0.2f]-accepted", _full,_simple,VR->indices.size()/3,metric_limit);
}

// OK
// Permute vertices
for(u32 i=0; i<vertices.size(); i++)
vertices[VR->permute_verts[i]]=_saved_vertices[i];

// Fill indices
faces.resize (VR->indices.size()/3);
for (u32 f_idx=0; f_idx<faces.size(); f_idx++){
faces[f_idx].v[0] = VR->indices[f_idx*3+0];
faces[f_idx].v[1] = VR->indices[f_idx*3+1];
faces[f_idx].v[2] = VR->indices[f_idx*3+2];
}
// Fill SWR
m_SWI.count = VR->swr_records.size();
m_SWI.sw = xr_alloc<FSlideWindow>(m_SWI.count);
for (u32 swr_idx=0; swr_idx!=m_SWI.count; swr_idx++){
FSlideWindow& dst = m_SWI.sw[swr_idx];
VIPM_SWR& src = VR->swr_records[swr_idx];
dst.num_tris = src.num_tris;
dst.num_verts = src.num_verts;
dst.offset = src.offset;
}

break ;
}
// cleanup
VIPM_Destroy ();
}

//////////////////////////////////////////////////////////////////////////
// FAST-PATH
if (progressive_test() && x_vertices.size() && x_faces.size())
{
// prepare progressive geom
VIPM_Init ();
Fvector2 zero; zero.set (0,0);
for (u32 v_idx=0; v_idx<x_vertices.size(); v_idx++) VIPM_AppendVertex (x_vertices[v_idx].P, zero );
for (u32 f_idx=0; f_idx<x_faces.size(); f_idx++) VIPM_AppendFace (x_faces[f_idx].v[0], x_faces[f_idx].v[1], x_faces[f_idx].v[2] );

VIPM_Result* VR = 0;
try {
VR = VIPM_Convert (u32(25),1.f,1);
} catch (...) {
faces = _saved_faces ;
vertices = _saved_vertices ;
progressive_clear () ;
clMsg ("* X-mesh simplification failed: access violation");
}
if (0==VR) {
faces = _saved_faces ;
vertices = _saved_vertices ;
progressive_clear () ;
clMsg ("* X-mesh simplification failed");
} else {
// Convert
/*
VIPM_Result* VR = VIPM_Convert (u32(25),1.f,1);
VERIFY (VR->swr_records.size()>0) ;
*/

// test metric
u32 _full = vertices.size () ;
u32 _remove = VR->swr_records.size() ;
u32 _simple = _full - _remove ;
float _metric = float(_remove)/float(_full);
clMsg ("X mesh simplified from [%4dv] to [%4dv], nf[%4d]",_full,_simple,VR ? VR->indices.size()/3 : 0);

// OK
vec_XV vertices_saved;

// Permute vertices
vertices_saved = x_vertices;
for(u32 i=0; i<x_vertices.size(); i++)
x_vertices[VR->permute_verts[i]]=vertices_saved[i];

// Fill indices
x_faces.resize (VR->indices.size()/3);
for (u32 f_idx=0; f_idx<x_faces.size(); f_idx++){
x_faces[f_idx].v[0] = VR->indices[f_idx*3+0];
x_faces[f_idx].v[1] = VR->indices[f_idx*3+1];
x_faces[f_idx].v[2] = VR->indices[f_idx*3+2];
}

// Fill SWR
x_SWI.count = VR->swr_records.size();
x_SWI.sw = xr_alloc<FSlideWindow>(x_SWI.count);
for (u32 swr_idx=0; swr_idx!=x_SWI.count; swr_idx++){
FSlideWindow& dst = x_SWI.sw[swr_idx];
VIPM_SWR& src = VR->swr_records[swr_idx];
dst.num_tris = src.num_tris;
dst.num_verts = src.num_verts;
dst.offset = src.offset;
}
}

// cleanup
VIPM_Destroy ();
}

progressive_cs.Leave ();
}


macron
Еще пара интересных "фишек", пока правил Либертисити. Это только для тех, кто знает толк в извращениях.

1. Возникло подозрение, что не у всех объектов включена альфа. То есть, вместо def_shaders\def_trans_v и def_shaders\def_aref_v для альфа-текстур прописано def_shaders\def_vertex. Но сначала надо было вычислить эти альфа-текстуры, а пересматривать около двух тысяч лень. Берем коммандер, и в каталоге с dds-текстурами игры ищем (Alt/F7) все с текстом dxt5 и dxt3. Нашлось около 170, их отдельно откладываем, открываем каталог с объектами уровня, и так же по Alt/F7 уже ищем все object-файлы, где в тексте упоминается имя конкретной текстуры. Нужный файл можно просто посмотреть по F3, также по F3 находится нужное имя, среди кракозябр будет видно название шейдера и материала.

2. Под конец недели после многочисленных затычек для всяких дырок и щелей в геометрии, практически исчерпались ресурсы 32-битного компилятора. Начал валиться по памяти на стадии " Building sectors...", даже с использованием -noise. Заметил, что компилятор (на одном и том же проекте build.prj) каждый раз оптимизирует геометрию по-разному. Выяснилось, что и память используется немного по разному. В итоге возник коварный план: перезапускать компиляцию 10 раз подряд и в 3 потока (так как используемый безлайтмапный ЧН-компилятор тов. Дизеля на большинстве этапов грузит мой i5 где-то на 25%, трех достаточно). Сбилдил уровень в SDK, потом в коммандере продублировал его в 30 каталогов, создал для xrlc три батника, в каждом указав на конкретные 10 каталогов, запустил и стал ждать. Еще добавил в батники всевозможные ключи для тихой работы в случае ошибки. Bugtrap не вылезал, но всё равно приходилось подходить, раз в 20-30 минут вручную жать табличку "Закрыть программу", тогда батники продолжали работать. Так что, полностью автоматизировать не удалось. Но результат оправдал затраты. Получилось несколько раз доработать карту, запустить такую компиляцию, три компилятора постоянно компилили проекты, в конце валились с ошибкой, но где-то 1-2 раза из 10-15 прокатывало удачно, хотя компилятор тихо продолжал грызть следующий проект. Быстро отличить готовый уровень от полуфабриката легко в коммандере по размеру - в полуфабрикате удачно компилятся только *.cform, а в готовом еще level/geom/geomx, что существенно влияет на размер каталога уровня. Самым сложным был последний билд, когда пришлось впихнуть еще несколько плоскостей, все компиляции валились с ошибкой. Только в седьмой партии один из трех как-то случайно проскочил. Пример батника (одного из трех):

хыы

@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet101
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet102
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet103
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet104
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet105
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet106
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet107
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet108
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet109
@del /F /Q /S "bin\xrLC_no_lmap_tweaked\ccc__temp__vertices"
@start /wait bin\xrLC_no_lmap_tweaked\xrLC.exe -nosmg -noise -silent -silent_error_mode -no_call_stack_assert -f liberty_city_packet110
RSFSR
macron,
Цитата
запустить такую компиляцию, три компилятора постоянно компилили проекты, в конце валились с ошибкой, но где-то 1-2 раза из 10-15 прокатывало удачно

Месье знает толк в извращениях. Использовать 64-битный компилятор религия не позволяет?
macron
Цитата(RSFSR @ 23.01.2021, 07:39) *
Использовать 64-битный компилятор религия не позволяет?

Можно и так сказать. 64-битные в плане быстрой безлайтмапной компиляции пока не изучал. Иногда проще дожать проверенное. Но надо будет сравнить.
WolfHeart
Цитата(K.D. @ 25.07.2012, 10:29) *
- Снято ограничение по добавлению большого количества моделей на сцену за один раз (через Multiple Append и т.п.). В оригинале было максимально 32 модели.

Скачать

У кого нибудь осталась эта правка для ЗП?
Yara
Цитата(WolfHeart @ 06.11.2021, 00:48) *
У кого нибудь осталась эта правка для ЗП?

https://drive.google.com/file/d/1kCmUj6w2rQ...iew?usp=sharing
(собраны все правки + описание)
WolfHeart
Цитата(Yara @ 06.11.2021, 05:11) *
https://drive.google.com/file/d/1kCmUj6w2rQ...iew?usp=sharing
(собраны все правки + описание)

Yara, спасибо! thank_you2.gif
Мне вообще-то нужна была правка отдельно. Просто хочу собрать все правки, а то смотрю ссылки потихоньку "сдыхают".
Ну да ничего, возьму из твоей сборки, ведь суть првки только в правке xrEPropsB.dll и она с другими не пересекается.

P.S. Кстати, может кто подскажет, RayTwitty когда-то обещал сделать вот эту правку и для ЗП:



Была такая правка или нет? Я ее что-то не нахожу.
WolfHeart
Цитата(Kontro-zzz @ 08.04.2019, 13:32) *
Тестовая затычка на вылет "(Pos<=Size) && (Pos>=0)" при загрузке приложений СДК.
Патчим xrCoreB.dll.
Патчи для тч-чн-зп сдк.
https://yadi.sk/d/pW0tcsTf7Jtz6w

Цитата(Kontro-zzz @ 10.04.2019, 00:19) *
PS
Добавлена еще одна затычка на вылет Description : Pos+cnt<=Size
https://yadi.sk/d/qHRtwj7fR2sUFw

Kontro-zzz, Не работают! Проверено.
WolfHeart
Цитата(WolfHeart @ 06.11.2021, 19:01) *
Kontro-zzz, Не работают! Проверено.

А если быть точнее, то вместо вылета (Pos<=Size) && (Pos>=0), СДК стал вылетать вот с таким логом:
Код
[error]Expression    : assertion failed
[error]Function      : X:\stalker_addon\sources\trunk\Layers\xrRender\TextureDescrManager.cpp
[error]File          : X:\stalker_addon\sources\trunk\Layers\xrRender\TextureDescrManager.cpp
[error]Line          : 50
[error]Description   : F->find_chunk(THM_CHUNK_TYPE)

Ошибка:
В директории с текстурами (gamedata\textures) находится неправильно сгенерированный файл .thm.
Этот файл, естественно я туда поместил.

Так что, я не совсем понимаю, то ли ты так и задумывал, так как вылет (Pos<=Size) && (Pos>=0) вобщемто полезный - дает понять что имеется "корявая" .thm, но тогда не понятен смысл подмены одного вылета другим.
А если всетаки задумывалось совсем избавится от вылета из за "не правильной" .thm, тогда нужно делать затычку еще и на [error]Description: F->find_chunk(THM_CHUNK_TYPE)[/code].
Yara
Цитата(WolfHeart @ 06.11.2021, 10:39) *
P.S. Кстати, может кто подскажет, RayTwitty когда-то обещал сделать вот эту правку и для ЗП:



Была такая правка или нет? Я ее что-то не нахожу.

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

https://drive.google.com/file/d/1xoyH8IX1MC...iew?usp=sharing
?

Для всех компиляторов увеличено количество потоков до 8.

Описание новых ключей (обо всех в xrLC_help.txt):

-norgb // отключить просчёт статического освещения (lmap#N_1.dds)
-nolmaps // отключить просчёт лайтмап
-lmap_quality число // качество лайтмап, число с типом float (замещает параметр "Pixel per meter" из настроек сцены в сдк)
-lmap_rgba // сохранять лайтмапы без сжатия (RGBA вместо DXT5)

-skip_aht_tess // пропустить тесселяцию полигонов
-skip_inv_face // пропустить проверку полигонов на правильность
-skip_optimize // пропустить оптимизацию геометрии (не удаляет мелкие полигоны, а также отключает проверку всех полигонов на правильность)
-skip_ter_imlc // пропустить просчёт лайтмапы террейна (terrain_level_name_lm)

-prior // повысить приоритет процесса с IDLE_PRIORITY_CLASS на NORMAL_PRIORITY_CLASS
WolfHeart
Цитата(Yara @ 07.11.2021, 11:57) *
Такого не видел, но если нужно, имеются пересобранные зп-компиляторы с этой/другими правками.

Конечно нужно!
И описане правок желательно.
RayTwitty
Цитата(WolfHeart @ 06.11.2021, 07:39) *
Кстати, может кто подскажет, RayTwitty когда-то обещал сделать вот эту правку и для ЗП

Я тогда спросил для какого компиля делать, никто не ответил. Может кто-то другой потом сделал... А вообще, вот тут есть все мои фиксы: http://files.xray-engine.org/raytwitty/sdk_fixes/
Можно выйти по каталогу выше и в других папках еще посмотреть.
Kontro-zzz
WolfHeart
Какой у тебя процессор и разрядность ОС? Эти правки делал на win-7x64, в Иде отлавливал, причем правки в 32 битной среде на процессоре интел. К сожалению забросил, так как угробил эту ось. Не возьмусь уже что-то исправлять, надо будет проверить у себя самого, на win10x64. Эти вылеты я затыкал для своего засравшимися многими текстурами в сдка, не хотелось чистить и разбираться просто. До сих пор не знаю, у кого сработало и помогло ли? happy.gif
WolfHeart
Цитата(Kontro-zzz @ 08.02.2022, 13:18) *
Какой у тебя процессор и разрядность ОС?

Процессор AMD FX-8370, win10x64.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.