Статья Как сделать кастомные чамсы

megaklop

Пользователь
Сообщения
18
Реакции
3
Репост с UC


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


Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

(должна быть той же версии, что и Rust). После загрузки создайте новый проект с этой версией Unity.

Шаг 2:

Чтобы разобраться с этим, мы загрузим плагин для последующего создания AssetBundle. Вы можете следовать этим шагам или просто заглянуть на

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

для получения дополнительной информации.

  • Откройте Unity [Package Manager] в вашем проекте (меню: Windows > Package Manager).
  • Нажмите кнопку + (Добавить) в левом верхнем углу окна.
  • Выберите Add package from git URL...
  • Введите

    Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

    в качестве URL-адреса и нажмите кнопку Добавить.

Шаг 3:

Здесь вы создадите новый 3D-проект, создадите .mat, .shader и протестируете шейдер. Однако если вы не знаете, с чего начать, просто посмотрите видеоурок или скачайте мой пример проекта который

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

На этом изображении вы увидите, что на вашем .mat должен быть установлен AssetBundle, если это не так, просто создайте новый и убедитесь, что оба ваших .shader и .mat установлены на него.



СВОЙСТВА ШЕЙДЕРА:

Это свойства, которые можно жестко задать в шейдере, если вы его редактируете или изменяете во время рисования шейдеров. В качестве примера ниже в коде set_shader вы можете сделать что-то вроде этого:

Код:

C++:
material->SetColor(Str(L"_Color"), Color(RGB_RAINBOW.Value.x, RGB_RAINBOW.Value.y, RGB_RAINBOW.Value.z, 1.f));
material->SetColor(Str(L"_Color2"), Color(RGB_RAINBOW.Value.x, 0, 0, 1.f));
Вы также можете сделать что-то подобное для таких свойств, как zTest:
Код:

C++:
material->SetInt(Str(L"_ZTest"), 8);

  • Для цветов в моем примере мы используем _Color (для видимого цвета) и _Color2 (для невидимого цвета).

  • Для zTest мы используем Less для видимого и Greater для невидимого, вот все свойства + пояснения.
  1. Меньше = Рисуйте геометрию, которая находится перед существующей геометрией. Не рисуйте геометрию, которая находится на том же расстоянии, что и существующая геометрия, или позади нее.
  2. LEqual = рисовать геометрию, которая находится перед существующей геометрией или на том же расстоянии от нее. Не рисовать геометрию, которая находится позади существующей геометрии.
  3. Это значение по умолчанию.
  4. Equal = Рисовать геометрию, которая находится на том же расстоянии, что и существующая геометрия. Не рисуйте геометрию, которая находится перед или за существующей геометрией.
  5. GEqual = Рисовать геометрию, которая находится позади или на том же расстоянии, что и существующая геометрия. Не рисуйте геометрию, которая находится перед существующей геометрией.
  6. Больше = Рисовать геометрию, которая находится позади существующей геометрии. Не рисуйте геометрию, которая находится на том же расстоянии или перед существующей геометрией.
  7. NotEqual = Нарисовать геометрию, которая не находится на том же расстоянии, что и существующая геометрия. Не рисовать геометрию, находящуюся на том же расстоянии, что и существующая геометрия.
  8. Всегда = Проверка глубины не производится. Рисуется вся геометрия, независимо от расстояния.
Существует множество других флагов, с которыми можно повозиться, но пока этого достаточно.

Шаг 4:

Ну что ж, пришло время, давайте откроем браузер assetbundle, нажав Window->AssetBundle Browser.
Открыв его, нажмите "Build" и запишите путь к сборке, потому что этот файл нам понадобится позже. Затем снова нажмите "Build" внизу и дождитесь сборки, как только она завершится, можете закрыть Unity.
Шаг 5: Рендер и чтение нашего шейдера

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

Вам нужно найти пакет активов, который вы создали с помощью unity, и переименовать его в whateveryouwouldlike.assets. После этого просто бросьте файл .assets в папку с файлами rust (в ту же папку, что и RustClient.exe и т.д.). Теперь сделайте так, чтобы приведенный ниже код работал для вашего чит-кода, а затем переименуйте шейдер + набор активов. ВАЖНО если вы поместите .shader/.mat в другую папку в проекте unity, вы должны знать директорию для него и настроить соответствующим образом; Пример:


Код:

shader = Renderer::LoadAsset(asset_bundle, L"assets/nameofurshader.shader");
Код, который я использую для рендеринга шейдера:
Код:

C++:
if (Visuals::Players::Chams)
{
static uintptr_t asset_bundle = 0x402402;
static uintptr_t shader = 0;
if (asset_bundle == 0x402402) // literally is just saying if asset_bundle == 0x402402 then set the actual one
{
asset_bundle = Renderer::LoadAssetBundle(L"nameofurassetfile.assets");
}
shader = Renderer::LoadAsset(asset_bundle, L"assets/nameofurshader.shader");

auto multimesh = player->playerModel()->_multiMesh();
if (multimesh)
{
auto mainRendList = multimesh->get_Renderers();
for (int idx = 0; idx < mainRendList->size(); idx++)
{
Renderer* renderer = mainRendList->value(idx);
if (mainRendList)
{
Material* material = renderer->get_material();
if (material)
{
if (shader != material->get_shader())
{
material->set_shader(shader);
}
//material->SetInt(Str(L"_ZTest"), 8); // hard coded in my shader so i dont need this
material->SetColor(Str(L"_Color"), Color(RGB_RAINBOW.Value.x, RGB_RAINBOW.Value.y, RGB_RAINBOW.Value.z, 1.f));
material->SetColor(Str(L"_Color2"), Color(RGB_RAINBOW.Value.x, 0, 0, 1.f));
}
}
}
}
}

Я мог пропустить некоторые шаги/ошибиться, это мой первый большой пост на UnknownCheats(не реклама), так что не знаю. Если у вас есть вопросы, не стесняйтесь писать мне, также я бы рекомендовал использовать это дерьмо только с взломанным ржавчиной или как они его называют... никогда не тестировал в реальности. Пример проекта, который я добавил, это просто самый базовый проект, и я бы рекомендовал изменить дизайн, чтобы соответствовать вам! Мои чамсы радужные и двигаются в зависимости от материала, установленного для них. Вот они без заданного материала




Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



данная тема отлично подойдет к большинству игр на юнити, например EFT
 
Верх Низ