Ru/Adding PBR to Your Mod: Difference between revisions
(Дополнение переводы и исправления) |
mNo edit summary |
||
| Line 11: | Line 11: | ||
== Вступление == | == Вступление == | ||
{{main:ru|Physically Based Rendering}} | {{main:ru|Physically Based Rendering}} {{en}} | ||
== Требования == | == Требования == | ||
| Line 19: | Line 19: | ||
{{note:ru|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в Source Engine, рекомендуется сначала прочитать эти статьи: [[Shader Authoring:ru| | {{note:ru|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в Source Engine, рекомендуется сначала прочитать эти статьи: [[Shader Authoring:ru|Разработка шейдеров]] & [[Source_SDK_2013:_Your_First_Shader|Ваш первый шейдер]] {{en}}}} | ||
== Реализация == | == Реализация == | ||
| Line 109: | Line 109: | ||
</pre> | </pre> | ||
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные [[LightmappedGeneric]] шейдеры. | Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные [[LightmappedGeneric]] {{en}} шейдеры. | ||
Это также значительно сократит время компиляции. | Это также значительно сократит время компиляции. | ||
| Line 150: | Line 150: | ||
После этого, мы можем начать компиляцию нашего шейдера запустив '''buildhl2mpshaders.bat''', '''buildhl2shaders.bat''' или '''buildepisodicshaders.bat''' в зависимости от того, на чем базируется ваш мод. | После этого, мы можем начать компиляцию нашего шейдера запустив '''buildhl2mpshaders.bat''', '''buildhl2shaders.bat''' или '''buildepisodicshaders.bat''' в зависимости от того, на чем базируется ваш мод. | ||
Убедитесь что следовали статье [[Shader Authoring:ru| | Убедитесь что следовали статье [[Shader Authoring:ru|Разработка шейдеров]] до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода '''shaders/fxc/'''. | ||
{{note:ru|В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.}} | {{note:ru|В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.}} | ||
| Line 166: | Line 166: | ||
Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации. | Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации. | ||
Вы можете обойти это написав <code>r_PhysPropStaticLighting 0</code> в | Вы можете обойти это написав <code>r_PhysPropStaticLighting 0</code> в консоли или прописать в '''src/game/client/c_physicsprop.cpp'''. | ||
Вот, как вы можете прописать это в коде: | |||
Вот | |||
Под <code>#include "tier0/memdbgon.h"</code> добавьте это: | Под <code>#include "tier0/memdbgon.h"</code> добавьте это: | ||
| Line 194: | Line 193: | ||
* '''$useenvambient''' <<code>[[boolean:ru|bool]]</code>> - Makes it use the lowest mip level of the cubemap for ambient light instead of the ambient cubes. Can cause artifacts with moving props. | * '''$useenvambient''' <<code>[[boolean:ru|bool]]</code>> - Makes it use the lowest mip level of the cubemap for ambient light instead of the ambient cubes. Can cause artifacts with moving props. | ||
* {{ent|$envmap}}{{en}} - Defaults to <code>env_cubemap</code>, allows you to use a custom one. | * {{ent|$envmap}}{{en}} - Defaults to <code>env_cubemap</code>, allows you to use a custom one. | ||
* {{ent:ru|$surfaceprop}} - | * {{ent:ru|$surfaceprop}} - Связывает поверхность [[material:ru|материала]] или [[model:ru|модели]] с набором физических свойств. | ||
* <code>[[$model (VMT)|$model]]</code>{{en}} - Should have a value of "1" if the texture is used on a prop. | *<code>[[$model (VMT)|$model]]</code>{{en}} - Should have a value of "1" if the texture is used on a prop. | ||
* {{ent|$translucent}}{{en}} - | * {{ent|$translucent}}{{en}} - Установка данного параметра на "1" включает Alpha-смешивание. | ||
* {{ent:ru|$basetexturetransform}} - Looks like this: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" for a 2m by 2m texture. | * {{ent:ru|$basetexturetransform}} - Looks like this: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" for a 2m by 2m texture. | ||
* {{ent:ru|$alphatest}} - Enables clipping the pixel when the alpha goes below $alphatestreference. | * {{ent:ru|$alphatest}} - Enables clipping the pixel when the alpha goes below $alphatestreference. | ||
* {{ent:ru|$alphatestreference}} - Specifies the minimum color value of the alpha channel in which the effect is rounded to 255. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape. | * {{ent:ru|$alphatestreference}} - Specifies the minimum color value of the alpha channel in which the effect is rounded to 255. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape. | ||
* {{ent|%keywords}}{{en}} - | * {{ent|%keywords}}{{en}} - Список ключевых слов разделенных запятыми. Примеры ключевых слов: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor | ||
| Line 242: | Line 241: | ||
=== Модель, образец материала с картой отражений === | === Модель, образец материала с картой отражений === | ||
{{Note:ru|Metalness | {{Note:ru|Канал Metalness игнорируется и {{ent:ru|$basetexture}} обрабатывается как diffuse.}} | ||
<pre> | <pre> | ||
PBR | PBR | ||
| Line 260: | Line 259: | ||
{{note:ru|{{ent|$envmap}}{{en}} should just be left as <code>env_cubemap</code>.}} | {{note:ru|{{ent|$envmap}}{{en}} should just be left as <code>env_cubemap</code>.}} | ||
{{warning:ru|<code>[[$model_(VMT)|$model 1]]</code>{{en}} ''''' | {{warning:ru|Для работы материалов моделей, с использованием PBR, <code>[[$model_(VMT)|$model 1]]</code>{{en}} '''''ДОЛЖЕН''''' быть добавлен в материал!}} | ||
== Вывод == | == Вывод == | ||
Revision as of 23:26, 6 June 2022
Цель этой статьи - показать вам, как реализовать Thexa4's PBR шейдер в вашем Source SDK 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.
Вступление
- Основная статья: Physically Based Rendering
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.
Реализация
Прежде чем делать что-то, нам нужно скачать файлы.
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".
Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в src/materialsystem/stdshaders/.
После того как вы завершите сохранение файлов, откройте game_shader_dx9_*.vpc в соответствии с базированием вашего мода (base/hl2mp/hl2/episodic), и добавьте файлы PBR внутрь $Project "Shaders" вот так:
$Project "Shaders"
{
$Folder "Header Files"
{
$File "common_vertexlitgeneric_dx9.h"
$File "common_lightmappedgeneric_fxc.h"
$File "common_flashlight_fxc.h"
}
$Folder "Shader Source"
{
$Folder "fxc"
{
$File "pbr_ps30.fxc"
$File "pbr_vs30.fxc"
$File "pbr_ps20b.fxc"
$File "pbr_vs20b.fxc"
}
$Folder "Headers"
{
$File "pbr_common_ps2_3_x.h"
}
$File "mymod_dx9_30.txt"
$File "mymod_dx9_20b.txt"
}
$Folder "Source Files"
{
$File "pbr_dx9.cpp"
}
}
Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений.
Компиляция шейдеров
Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в src/materialsystem/stdshaders/ с именем mymod_dx9_30.txt и mymod_dx9_20b.txt, и вставьте это внутрь:
mymod_dx9_30.txt
// // vs 3.0 ps 3.0 shaders collection // // These shaders are forced to compile as shader model 3.0 // using the new compiler. // _ps30.vcs // _vs30.vcs // pbr_vs30.fxc pbr_ps30.fxc
mymod_dx9_20b.txt
// // Standard shaders collection // // These shaders are compiled as the following shader models: // _ps20.vcs // _ps20b.vcs // _vs20.vcs // pbr_vs20b.fxc pbr_ps20b.fxc
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные LightmappedGeneric
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
шейдеры.
Это также значительно сократит время компиляции.
Теперь откройте buildsdkshaders.bat используя текстовый редактор и измените эту часть:
C:
%BUILD_SHADER% stdshader_dx9_20b -game %GAMEDIR% -source %SOURCEDIR% %BUILD_SHADER% stdshader_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30
На:
%BUILD_SHADER% mymod_dx9_20b -game %GAMEDIR% -source %SOURCEDIR% %BUILD_SHADER% mymod_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30
Это позволит вам использовать наши текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер.
C:
call "%VS100COMNTOOLS%vsvars32.bat"
На:
call "%VS120COMNTOOLS%vsvars32.bat"
После этого, мы можем начать компиляцию нашего шейдера запустив buildhl2mpshaders.bat, buildhl2shaders.bat или buildepisodicshaders.bat в зависимости от того, на чем базируется ваш мод.
Убедитесь что следовали статье Разработка шейдеров до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода shaders/fxc/.
Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом /src/ и запустите createallprojects.bat.
Откройте решение и скомпилируйте шейдеры в Release.
Исправления
Физические пропы становятся черными, если используют материал с 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 - Albedo текстура.
- $normaltexture - карта нормалей (для обратной совместимости).
- $bumpmap
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
- карта нормалей (новый вариант указания карты нормалей).
- $mraotexture - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале.
- $speculartexture - Enables use of colored F0 (specular map), overrides metalness from MRAO texture.
- $emissiontexture - Allows setting an emission texture. Enabled self illumination.
- $useenvambient <
bool> - Makes it use the lowest mip level of the cubemap for ambient light instead of the ambient cubes. Can cause artifacts with moving props. - $envmap
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
- Defaults to env_cubemap, allows you to use a custom one.
- $surfaceprop - Связывает поверхность материала или модели с набором физических свойств.
$model
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
- Should have a value of "1" if the texture is used on a prop.
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
- Установка данного параметра на "1" включает Alpha-смешивание.
- $basetexturetransform - Looks like this: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" for a 2m by 2m texture.
- $alphatest - Enables clipping the pixel when the alpha goes below $alphatestreference.
- $alphatestreference - Specifies the minimum color value of the alpha channel in which the effect is rounded to 255. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape.
- %keywords
Administrators / Moderators - Remember to check if anything links here and the page history before deleting.
- Список ключевых слов разделенных запятыми. Примеры ключевых слов: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor
- $useparallax <
bool> - Использовать Parallax Occlusion Mapping. - $parallaxdepth <float> - Гулибна Parallax карты.
- $parallaxcenter <float> - Средняя глубина Parallax карты
Примеры
Браш (не модельные поверхности), образец материала
PBR
{
$basetexture "pbr_asset/texture_albedo"
$bumpmap "pbr_asset/texture_normal"
$mraotexture "pbr_asset/texture_mrao"
$envmap "env_cubemap"
$surfaceprop "metal"
$model 0
}
Модель, образец материала
PBR
{
$basetexture "models/pbr_asset/texture_albedo"
$bumpmap "models/pbr_asset/texture_normal"
$mraotexture "models/pbr_asset/texture_mrao"
$envmap "env_cubemap"
$surfaceprop "metal"
$model 1
}
Модель, образец материала с картой отражений
PBR
{
$basetexture "models/pbr_asset/texture_diffuse"
$bumpmap "models/pbr_asset/texture_normal"
$mraotexture "models/pbr_asset/texture_mrao"
$speculartexture "models/pbr_asset/texture_specular"
$envmap "env_cubemap"
$surfaceprop "metal"
$model 1
}
Вывод
Вот и все! Теперь в вашем моде есть PBR.