Добавление PBR в ваш мод
src/utils/common/utilmatlib.cpp найдите метод InitMaterialSystem и в самом конце добавьте g_pMaterialSystem->ModInit();, и попробуйте пересобрать инструменты.
Цель этой статьи - показать вам, как реализовать Thexa4's PBR шейдер в вашем
Source 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.
Для ознакомления с видео-версией этого руководства, перейдите к
видео-руководству от Сойки на YouTube.
Вступление
Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.
Реализация
Прежде чем делать что-то, нам нужно скачать файлы.
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".
Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в ![]()
src/materialsystem/stdshaders/.
После того как вы завершите сохранение файлов, откройте ![]()
src/materialsystem/stdshaders/game_shader_dx9_*.vpc в соответствии с базированием вашего мода (base/hl2mp/hl2/episodic), и добавьте файлы PBR внутрь $Project "Shaders" вот так:
Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений.
Компиляция шейдеров
Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в ![]()
src/materialsystem/stdshaders/ с именем mymod_dx9_30.txt и mymod_dx9_20b.txt, и вставьте это внутрь:
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные
LightmappedGeneric шейдеры.
Это также значительно сократит время компиляции.
Теперь откройте ![]()
buildsdkshaders.bat используя текстовый редактор и измените эту часть:
C:
На:
Это позволит вам использовать наши текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер.
buildsdkshaders.bat
C:
На:
После этого, мы можем начать компиляцию нашего шейдера запустив ![]()
buildhl2mpshaders.bat, ![]()
buildhl2shaders.bat или ![]()
buildepisodicshaders.bat в зависимости от того, на чем базируется ваш мод.
Убедитесь что следовали статье Разработка шейдеров до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода ![]()
shaders/fxc/.
Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом ![]()
src/ и запустите ![]()
createallprojects.bat.
Откройте решение и скомпилируйте шейдеры в Release.
pbr_dx9.cpp нету в Shader проекте. Убедитесь, что вы правильно подключили его в .vpc файле который вы редактировали ранее.
Исправления
Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации.
Вы можете обойти это написав r_PhysPropStaticLighting 0 в консоли или прописать в ![]()
src/game/client/c_physicsprop.cpp.
Вот, как вы можете прописать это в коде:
Под #include "tier0/memdbgon.h" добавьте это:
#define PBR_CHANGE
Затем найдите ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1"); и замените его данным условием:
#ifdef PBR_CHANGE
ConVar r_PhysPropStaticLighting( "r_PhysPropStaticLighting", "0" );
#else
ConVar r_PhysPropStaticLighting( "r_PhysPropStaticLighting", "1" );
#endif
Параметры
Примеры
Браш (не модельные поверхности), образец материала
Модель, образец материала
Модель, образец материала с картой отражений
$basetexture обрабатывается как diffuse.
$envmap следует оставить"env_cubemap".$model 1 ДОЛЖЕН быть добавлен в материал!Вывод
Вот и все! Теперь в вашем моде есть PBR.