• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, спешите принять участие в поэтическом конкурсе "Весенние поэты 2024"!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Помощь по спейсеру

Kirey

Участник форума
Регистрация
28 Май 2007
Сообщения
106
Благодарности
4
Баллы
165
  • Первое сообщение
  • #1
У меня вопрос ко второй части с аддоном. Там для неёё есть такая прога - спейсер2. Как я понял. это чё то типа моо маппера для ГТА Вайс Сити. Пробую загрузить зен-файлы, там локации. Обещали что можно бужет просмотреть, музыку послушать. А у мя только чёрный экран и 100 ФПС показывает и грузится мгновенно. Что делать, умные, помогите!

Unsubdued

Здравствуйте, когда-то у меня глючил Spacer2. Тогда я воспользовался советом из этой темы и создал батник с содержимым:
Код:
@echo off
start / Spacer2.exe -zMaxFramerate:60
вроде как-то так.

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

Код:
@echo off
start /affinity 1 Spacer2.exe -zMaxFramerate:60

Spacer запускается через него на одном ядре.

Может кому-нибудь поможет)))))

Дополнено:
У многих возникает проблема с НЕ падение FPS, а с его ростом, в результате чего возникают жуткие тормоза в программе.
Вот мой код для запуска Спейсера(проверено, протестено, работает):
Код:
PsExec -a 0 "F:\games\Gothic II\System\Spacer2.exe"
весь архив распаковал в папку C:\Windows\System32\
Мах FPS поднимается до 500, тормоза, где даже с -zmaxframerate 50 были... они пропали...
Если кому интересно, вот небольшая статейка по использованию PsExec
Сама программа в комплекте PsTools
Теперь описание и прога здесь.
Такой своевременный вопросец *nice meeting*
В Spacer можно изменить дальность прорисовки?
Ctrl + F1 -> ZSET LEVELFARCLIPZSCALER <number> (1 as default)
 
Последнее редактирование модератором:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
возможно ли хоть как то менять уровень прозрачности текстуры медузы
Возможность однозначно есть.
Тест с помощью инструментов Union:
MorphHead.jpg


Вопрос лишь в реализации. Конечно, желательно иметь исходник этой медузы, чтобы посмотреть есть ли в нём какая-то информация о материале и его прозрачности. Если ничего нет, значит нужно придумать как эту прозрачность указать и как потом считать. Например, сделать описание в скриптах или в каком-то спец. файле. В общем, нужен механизм.
Либо пойти путём "конкретный плагин под конкретный мод".
На всякий оставлю тестовый кусок кода:
C++:
// Выполнить однократно на загруженной локации

// поиск воба под определённым названием
zCVob* pVob = ogame->world->SearchVobByName("HUM_HEAD_UNICORN"); // vobname

if (pVob)
{
    zCMorphMesh* pMorphMesh = dynamic_cast<zCMorphMesh*>(pVob->visual);

    if (pMorphMesh)
    {
        if (pMorphMesh->morphMesh)
        {
            // цикл по группам материалов в меше (1 - голова, 2 - зубы, 3- язык и т.д. )
            for(int i = 0; i < pMorphMesh->morphMesh->numSubMeshes; i++)
            {
                zCProgMeshProto::zCSubMesh* pSubMesh = &pMorphMesh->morphMesh->subMeshList[i];
                zCMaterial* pMaterial = pSubMesh->material;
                    
                // установка альфа-смешивания
                pMaterial->rndAlphaBlendFunc = zTRnd_AlphaBlendFunc::zRND_ALPHA_FUNC_ADD;
                
                // прозрачность
                pMaterial->color.alpha = 100;
            }
        }
    }
}
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
И раз уж я начал эту тему, то возможно ли хоть как то менять уровень прозрачности текстуры медузы по мимо способов переключение между blend, add, sub, mul и тд?
Можно регулировать прозрачность материала в его свойствах.

Полупрозрачный материал.jpg

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

Другое дело, будет ли движок правильно отрисовывать модель с таким материалом? В Г1 наблюдаются косяки очерёдности отрисовки, когда непрозрачный предмет позади полупрозрачного объекта рисуется, как бы, на переднем плане.
 

Lev-Lion


Модостроитель
Регистрация
25 Апр 2006
Сообщения
181
Благодарности
273
Баллы
230
А лод вообще реально отключить от морф объектов (анимированных вобов) и заставить прозрачность работать на них? Есть ли в Юнион такая фишка?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
лод вообще реально отключить от морф объектов (анимированных вобов)
Параметр, влияющий на степень влияния LODа на модель, содержится внутри скомпилированной модели. В стандартной модели. И стандартный движок умеет его читать. Камрад Керракс в Генжине реализовал возможность компиляции моделей с заранее заданным значением этого параметра. Такие модели можно использовать в модах для Г1. Есть ли способ проделывать то же самое для Г2, я не знаю. Возможно, компилятор моделей из состава GS 3.15 такое умеет.

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
А лод вообще реально отключить от морф объектов (анимированных вобов) и заставить прозрачность работать на них? Есть ли в Юнион такая фишка?
Да реально, там можно сделать что угодно с каждой моделью поштучно и для каждой проставить свою систему лода или без него вообще.. только не помню сейчас куда это пихали в редактор или в юню, вроде в последний.. *lupa*


Параметр, влияющий на степень влияния LODа на модель, содержится внутри скомпилированной модели. В стандартной модели. И стандартный движок умеет его читать. Камрад Керракс в Генжине реализовал возможность компиляции моделей с заранее заданным значением этого параметра. Такие модели можно использовать в модах для Г1. Есть ли способ проделывать то же самое для Г2, я не знаю. Возможно, компилятор моделей из состава GS 3.15 такое умеет.
есть конечно, компилируешь как нужно в г1 и конвертишь в Г2 Сурсером.. но это лишено смысла сейчас, тк см., текст выше.. *bye*
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
А лод вообще реально отключить от морф объектов (анимированных вобов) и заставить прозрачность работать на них? Есть ли в Юнион такая фишка?
Если быть конкретным, то вот тебе пример работы с морф-мешами, так, как ты хочешь.
Для движка Г2А:
MorphMeshTest.zip

Извлечь файл в: "System\Autorun\"
Установить для тестовых медуз: vobName = "MEDUSE".
C++:
// рендерится ли в данный момент морф-меш
BOOL bRender_MorphMesh = FALSE;

//0x005A6370 public: virtual int __thiscall zCMorphMesh::Render(struct zTRenderContext &)
int __fastcall MorphMesh_Render(zCMorphMesh* _this, void* vt, zTRenderContext& context);
CInvoke <int(__thiscall*) (zCMorphMesh*, zTRenderContext&)> pMorphMesh_Render(0x005A6370, MorphMesh_Render, IVK_AUTO);
int __fastcall MorphMesh_Render(zCMorphMesh* _this, void* vt, zTRenderContext& context)
{
 
    bRender_MorphMesh = TRUE; // начало обёртки
    BOOL result = pMorphMesh_Render(_this, context);
    bRender_MorphMesh = FALSE; // конец обёртки
    return result;
}


// 0x005C8FA0 public: int __fastcall zCProgMeshProto::CalcLODRenderArgs(struct zTRenderContext const &,struct zCProgMeshProto::zTLODRenderArgs &)
static int __fastcall CalcLODRenderArgs(zCProgMeshProto* _this, zTRenderContext const& context, zCProgMeshProto::zTLODRenderArgs& LOD_Args);
static CInvoke <int(__fastcall*)(zCProgMeshProto*, zTRenderContext const&, zCProgMeshProto::zTLODRenderArgs&)> pCalcLODRenderArgs(0x005C8FA0, CalcLODRenderArgs, IVK_AUTO);
static int __fastcall CalcLODRenderArgs(zCProgMeshProto* _this, zTRenderContext const& context, zCProgMeshProto::zTLODRenderArgs& LOD_Args)
{
    // для рендера обычных мешей
    if (bRender_MorphMesh == FALSE)
        // вызываем оригинал
        return pCalcLODRenderArgs(_this, context, LOD_Args);
 
    // для морф-мешей включается нейтральный LOD
    LOD_Args.numPos                = _this->posList.GetNum();
    LOD_Args.numMinMorphPos        = LOD_Args.numPos;

    return TRUE;
}


void Apply_MorphMatProps()
{
    zCArray<zCVob*> pVobs;

    // ищем медуз в мире
    ogame->world->SearchVobListByName("MEDUSE", pVobs); // vobname

    // перебираем найденные вобы медуз
    for (int n = 0; n < pVobs.GetNum(); n++)
    {
        // пытаемся преобразовать визуал воба в морф-меш
        zCMorphMesh* pMorphMesh = dynamic_cast<zCMorphMesh*>(pVobs[n]->visual);

        // если преобразование прошло успешно и есть указатель на прог-меш
        if (pMorphMesh && pMorphMesh->morphMesh)
        {
            // перебираем различные группы материалов меша
            for(int i = 0; i < pMorphMesh->morphMesh->numSubMeshes; i++)
            {
                // берём саб-меш с группой полигонов одного материала
                zCProgMeshProto::zCSubMesh* pSubMesh = &pMorphMesh->morphMesh->subMeshList[i];

                // берём материал группы
                zCMaterial* pMaterial = pSubMesh->material;

                // устанавливаем тип альфа-смешивания
                pMaterial->rndAlphaBlendFunc = zTRnd_AlphaBlendFunc::zRND_ALPHA_FUNC_ADD;

                // значение прозрачности берётся из цвета материала
                // pMaterial->color.alpha = 100;
            }
        }
    }
}

// по окончанию загрузки локации
void LoadEnd()
{
    // применяем свойства материала для медуз
    Apply_MorphMatProps();
}

Можешь сам поэкспериментировать с кодом.
Но по идее нужно сделать систему в общем виде, т.е. для всех тех, кто этим заинтересован.
В данном примере смешивание применяется только для объектов под конкретными названиями.
Правда отсечение полигонов игнорируется для всех морф-мешей. Впрочем, если нужно, и здесь можно установить конкретику.

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

Вложения

  • MorphMeshTest.zip
    8,2 KB · Просмотры: 10

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.290
Благодарности
4.585
Баллы
625
Jr13San, для лода там все максимально просто, если отключать его централизованно для всех морфов.
В zCMorphMeshProto::ReadMorphRef происходит построение морф меша из ASC файла вызовом BuildProgMeshProto с определенным набором фрагов, сумма которых равна 0x3A. Из-за того, что во всех остальных классах происходят проверки на папку NOLOD, а в zCMorphMeshProto - нет, то и модель компилируется с сабдивами.
Чтобы скомпилировать морф модель без ЛОДа, необходимо в инструкцию 0x005A4FA2 push 3A приколхозить флаг zPM_BUILD_FLAG_NO_LOD (0x01), чтобы значение стало равно 0x3B:
Union:
#engine [G2A]
    #patch [NoLodMMB]
        HEX @0x005A4FA3 = '3B'
    #/patch
#/engine


OFFTOP

MEG@VOLT можно в icode шрифт побольше? Нифига не видно

 

Вложения

  • NoLodMMB.7z
    224 байт · Просмотры: 6

Lev-Lion


Модостроитель
Регистрация
25 Апр 2006
Сообщения
181
Благодарности
273
Баллы
230
К сожалению, оба метода от Gratt и Jr13San не помогли.
1) Патч Гратта NoLodMMB.patch скопировал в папку системс. Затем скомпилил mms морф в спайсере.
2) Патч Jr13San скопировал в System\Autorun\. Затем скомпилил mms морф в спайсере с vobName MEDUSE.

Во всех случаях присутвовал ЛОД который останавливал анимацию на довольно близком расстоянии. Проверялось на как на Юнион так и без него.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Во всех случаях присутвовал ЛОД который останавливал анимацию на довольно близком расстоянии.
LOD и анимация модели - это, как мне кажется, разные вещи. Посмотри на другие анимированные модели в игре. Их анимация не отключается при увеличении расстояния. Думаю, стоит внимательнее изучить окно со свойствами объекта в Спейсере. Возможно, там найдётся параметр, отвечающий за отключение анимации при увеличении расстояния. Также стоит посмотреть на названия других анимированных объектов. Возможно, в названиях есть некий элемент, который предписывает движку особое обращение с этими объектами. Сейчас нет под рукой Спейсера, сам не могу посмотреть.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.290
Благодарности
4.585
Баллы
625
Да, анимация и ЛОД никак не связаны - это раз. Во-вторых ни один плагин не запустится под спейсером. Патчи - можно, но при условии, что они написаны под спейсер. В данном случае - для G2A и только.
 

Lev-Lion


Модостроитель
Регистрация
25 Апр 2006
Сообщения
181
Благодарности
273
Баллы
230
Пожалуй проверю это в игре.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.290
Благодарности
4.585
Баллы
625
Пожалуй проверю это в игре.
Ну как ты понимаешь твой вопрос с анимацией это не решит. Будет убран только ЛОД модели при компиляции движком.
И да, там Jr13san патчик еще обновлял. Если кому-то надо такой патч именно для спейсера (crc32:0xB1B45718) - могу сделать.
 

Вложения

  • NoLodMMB.7z
    224 байт · Просмотры: 11

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Если кому-то надо такой патч именно для спейсера
А можно ли как-то сделать, чтобы Спейсер показывал реальное состояние света после его компиляции? Сейчас приходится проверять свет непосредственно в игре. То, что показывается в окне Спейсера, существенно отличается от того, что получается в игре.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.290
Благодарности
4.585
Баллы
625
А можно ли как-то сделать, чтобы Спейсер показывал реальное состояние света после его компиляции? Сейчас приходится проверять свет непосредственно в игре. То, что показывается в окне Спейсера, существенно отличается от того, что получается в игре.
Можно мне, как отдаленному от прикладного модостроения человеку, картиночки того, что ты имеешь в виду?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Одно и то же место в Спейсере и в игре:

Освещение Спейсер.jpg Освещение Игра.jpg

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

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
Одно и то же место в Спейсере и в игре:

Посмотреть вложение 95707 Посмотреть вложение 95708

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

Вложения

  • Безымянный.png
    Безымянный.png
    3,7 MB · Просмотры: 36

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.866
Благодарности
5.303
Баллы
910
Освещенность можно регулировать с помощью клавиш + и - на цифровой клавиатуре справа :)
Тоже хотел написать об этом.:)
Стоит ещё дополнить, вдруг не знают
/ и * на numpad позволяют настроить дальность прорисовки вобов
От 0.1 до 2
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.848
Благодарности
1.214
Баллы
440
Дополню еще посты камрадов - значение света от камеры (который в спейсере видим) отображается в верхнем левом углу.
1621232855513.png
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Спасибо, я этого не знал. Насколько я понял, происходит регулировка "дальнобойности" прожектора камеры. Если убрать до нуля, прожектор камеры не будет влиять на освещение сцены.
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.848
Благодарности
1.214
Баллы
440
Если убрать до нуля, прожектор камеры не будет влиять на освещение сцены.
Да, когда в спейсере работаешь с источниками света, отключай свет от камеры полностью.
 
Сверху Снизу