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 00:26, 7 June 2022
Цель этой статьи - показать вам, как реализовать Thexa4's PBR шейдер в вашем Source SDK 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.
Вступление
- Основная статья: Physically Based Rendering
Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.
Реализация
Прежде чем делать что-то, нам нужно скачать файлы.
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "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 шейдеры.
Это также значительно сократит время компиляции.
Теперь откройте 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
- карта нормалей (новый вариант указания карты нормалей).
- $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
- Defaults to
env_cubemap
, allows you to use a custom one. - $surfaceprop - Связывает поверхность материала или модели с набором физических свойств.
$model
- Should have a value of "1" if the texture is used on a prop.
- $translucent
- Установка данного параметра на "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
- Список ключевых слов разделенных запятыми. Примеры ключевых слов: 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.