Ru/Adding PBR to Your Mod: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified)
 
(52 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{otherlang2
{{LanguageBar|title = Добавление PBR в ваш мод}}
| title = Добавление PBR в ваш мод
 
| en = Adding_PBR_to_your_mod
 
{{warning
|text = ''Этот шейдер не работает с LightMapped брашами, однако технически он совместим с ними.''
{{code fix|text = В {{Path|src/utils/common/utilmatlib|cpp|icon=file}} найдите метод {{code|InitMaterialSystem}} и в самом конце добавьте {{code|g_pMaterialSystem->ModInit();}}, и попробуйте пересобрать инструменты. ''}}
{{note| В некоторых сторонних версиях {{L|VBSP}} эта проблема исправлена. Например в {{strata|2}}, {{mapbase|2}} & {{slamminsrc|2}}.}}
}}
}}
[[File:PBR_comparison.png|500px|thumb|right|Слева: Базовый шейдер Source Engine.<br> Справа: PBR шейдер.]]


{{Distinguish|Adapting PBR Textures to Source}}


Цель этой статьи - показать вам, как реализовать [https://github.com/thexa4/source-pbr Thexa4's PBR шейдер] в вашем Source SDK 2013 моде. Реализация этого шейдера позволит вам использовать металличные/шераховатые PBR поверхности в материалах. *
[[File:PBR comparison.png|420px|thumb|right|<center>'''Сравнение PBR'''</center><br> Слева: Базовый шейдер Source Engine.<br> Справа: PBR шейдер.]]
 
{{distinguish|Adapting PBR Textures to Source}}
 
Цель этой статьи - показать вам, как реализовать [https://github.com/thexa4/source-pbr Thexa4's PBR шейдер] в вашем {{src13|4}} моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.
 


== Вступление ==
== Вступление ==
Line 19: Line 26:




{{note:ru|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в Source Engine, рекомендуется сначала прочитать эти статьи: [[Shader Authoring]] & [[Source_SDK_2013:_Your_First_Shader|Your First Shader]]}}
{{note|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в {{src|4}}, рекомендуется сначала прочитать эти статьи: {{L|Shader Authoring|Разработка шейдеров}} & {{L|Source_SDK_2013:_Your_First_Shader|Ваш первый шейдер}}}}


== Реализация ==  
== Реализация ==  
Line 26: Line 33:




Вы можете сделать это, перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".


Then all you have to do is save each one of the files to your Source mod's code directory under '''src/materialsystem/stdshaders/'''.
Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в {{Path|src/materialsystem/stdshaders/}}.


* [https://github.com/thexa4/source-pbr/blob/feature/pbr-base/mp/src/materialsystem/stdshaders/pbr_dx9.cpp pbr_dx9.cpp]
* [https://github.com/thexa4/source-pbr/blob/feature/pbr-base/mp/src/materialsystem/stdshaders/pbr_dx9.cpp pbr_dx9.cpp]
Line 37: Line 44:
* [https://github.com/thexa4/source-pbr/blob/feature/pbr-base/mp/src/materialsystem/stdshaders/pbr_common_ps2_3_x.h pbr_common_ps2_3_x.h]
* [https://github.com/thexa4/source-pbr/blob/feature/pbr-base/mp/src/materialsystem/stdshaders/pbr_common_ps2_3_x.h pbr_common_ps2_3_x.h]


После того как вы завершите сохранение файлов, откройте файл '''game_shader_dx9_*.vpc''' соответствующий вашей ситуации (base/hl2mp/hl2/episodic), и добавьте файлы PBR внутрь <code>$Project "Shaders"</code> вот так:
 
<pre>
После того как вы завершите сохранение файлов, откройте {{Path|src/materialsystem/stdshaders/game_shader_dx9_*|vpc|icon=file}} в соответствии с базированием вашего мода (base/hl2mp/hl2/episodic), и добавьте файлы PBR внутрь {{Code|select=all|$Project "Shaders"}} вот так:
$Project "Shaders"
{{CodeBlock|lines=33|<nowiki>$Project "Shaders"
{
{
$Folder "Header Files"
$Folder "Header Files"
Line 71: Line 78:
$File "pbr_dx9.cpp"
$File "pbr_dx9.cpp"
}
}
}
}</nowiki>}}
</pre>
 
Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений.


We do this so that when we refresh the solution they will appear in the solution explorer.


=== Компиляция шейдеров ===
=== Компиляция шейдеров ===


Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в '''src/materialsystem/stdshaders/''' с именем '''mymod_dx9_30.txt''' и '''mymod_dx9_20b.txt''', и вставьте это внутрь:
Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в {{Path|src/materialsystem/stdshaders/}} с именем {{Code|select=all|mymod_dx9_30.txt}} и {{Code|select=all|mymod_dx9_20b.txt}}, и вставьте это внутрь:
==== mymod_dx9_30.txt ====
{{CodeBlock|lines=11|src=mymod_dx9_30.txt|<nowiki>//
<pre>
//
// vs 3.0  ps 3.0  shaders collection
// vs 3.0  ps 3.0  shaders collection
//
//
Line 91: Line 96:


pbr_vs30.fxc
pbr_vs30.fxc
pbr_ps30.fxc
pbr_ps30.fxc</nowiki>}}
</pre>


==== mymod_dx9_20b.txt ====
{{CodeBlock|lines=11|src=mymod_dx9_20b.txt|<nowiki>//
<pre>
//
// Standard shaders collection
// Standard shaders collection
//
//
Line 106: Line 108:


pbr_vs20b.fxc
pbr_vs20b.fxc
pbr_ps20b.fxc
pbr_ps20b.fxc</nowiki>}}
</pre>
 
 
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные {{Shader_Name|LightmappedGeneric}} шейдеры.
 
Это также значительно сократит время компиляции.
 
 
 
Теперь откройте {{Path|buildsdkshaders|bat|icon=file}} используя текстовый редактор и измените эту часть:
 
C:
{{CodeBlock|%BUILD_SHADER% stdshader_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% stdshader_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30}}
 
На:
{{CodeBlock|%BUILD_SHADER% mymod_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% mymod_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30}}
 
Это позволит вам использовать наши текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер.
 
 
{{ModernImportant|Если вы используете Visual Studio 2013 не забудьте поменять версию инстурментов в {{Path|buildsdkshaders|bat|icon=file}}


Adding new text files for shader compilation will allow you to compile the PBR shaders without affecting the standard [[LightmappedGeneric]] shaders.


This will also reduce compile times significantly.
C:
{{CodeBlock|call "%VS100COMNTOOLS%vsvars32.bat"}}


На:
{{CodeBlock|call "%VS120COMNTOOLS%vsvars32.bat"}}
}}


Now open the '''buildsdkshaders.bat''' file using Notepad and edit this part below from:
<pre>
%BUILD_SHADER% stdshader_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% stdshader_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30
</pre>


To:
После этого, мы можем начать компиляцию нашего шейдера запустив {{Path|buildhl2mpshaders|bat|icon=file}}, {{Path|buildhl2shaders|bat|icon=file}} или {{Path|buildepisodicshaders|bat|icon=file}} в зависимости от того, на чем базируется ваш мод.
<pre>
%BUILD_SHADER% mymod_dx9_20b         -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% mymod_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30
</pre>


This will allow you to use the custom text file that we made earlier to compile our PBR shader.
Убедитесь что следовали статье {{L|Shader Authoring|Разработка шейдеров}} до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода {{Path|shaders/fxc/}}.


{{note|В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.}}


After that, we can now start the shader compilation by running '''buildhl2mpshaders.bat''', '''buildhl2shaders.bat''' or '''buildepisodicshaders.bat''' depending on your mod's base.


Make sure you've followed the [[Shader Authoring]] article to the point where the newly compiled shaders will be properly placed on your mod's '''shaders/fxc/''' folder.
Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом {{Path|src/}} и запустите {{Path|createallprojects|bat|icon=file}}.
{{note:ru|Depending on your PC and the complexity of the shader, it might take a while.}}




If the shaders compile without problems, go back to your source code directory '''/src/''' and run '''createallprojects.bat'''.
Откройте решение и скомпилируйте шейдеры в {{Code|Release}}.


Run the solution and build shaders in '''Release'''.
{{note|Если {{Path|pbr_dx9|cpp}} нету в {{Code|Shader}} проекте. Убедитесь, что вы правильно подключили его в {{Code|.vpc}} файле который вы редактировали ранее.}}


{{note:ru|If '''pbr_dx9.cpp''' does not exist in the '''Shader''' project. Make sure that you've properly included it in the '''.vpc''' file you edited earlier.}}


== Исправления ==
== Исправления ==


Physics props turn black when used with the PBR shader after 2-3 seconds due to Prop Sleeping. After a set time, props "bake" their lighting for optimization.
Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации.
 
You can bypass this by typing <code>r_PhysPropStaticLighting 0</code> on the console or by hardcoding it in '''src/game/client/c_physicsprop.cpp'''.


Вы можете обойти это написав {{code|select=all|r_PhysPropStaticLighting 0}} в консоли или прописать в {{Path|src/game/client/c_physicsprop|cpp|icon=file}}.


Here is how you can hardcode it:
Вот, как вы можете прописать это в коде:


Под <code>#include "tier0/memdbgon.h"</code> добавьте это:
Под {{code|select=all|<nowiki>#include "tier0/memdbgon.h"</nowiki>}} добавьте это:
<source lang="cpp">
<source lang="cpp">
#define PBR_CHANGE
#define PBR_CHANGE
</source>
</source>


Then find <code>ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1");</code> and turn it into this:
Затем найдите {{code|select=all|ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1");}} и замените его данным условием:
<source lang="cpp">
<source lang="cpp">
#ifdef PBR_CHANGE
#ifdef PBR_CHANGE
Line 163: Line 177:
#endif
#endif
</source>
</source>


== Параметры ==
== Параметры ==
* [[$basetexture]] - The albedo texture.
* '''$normaltexture''' - Sets the normal map (for backwards compatibility).
* [[$bumpmap]] - Sets the normal map (new way of setting normalmap).
* '''$mraotexture''' - A texture with the metalness on the red channel, roughness on the green channel and ambient occlusion on the blue channel.
* '''$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]] - Links the surface of either a [[material]] or [[model]] to a set of physical properties.
* [[$model]] - Should have a value of "1" if the texture is used on a prop.
* [[$translucent]] - Setting this to "1" enables alpha blending.
* [[$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]] - A list of keywords separated by commas. Examples of keywords are: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor


* {{ent|$basetexture}} - Albedo текстура.
* '''$normaltexture''' - карта нормалей (для обратной совместимости).
* {{ent|$bumpmap}} - карта нормалей (новый вариант указания карты нормалей).
* '''$mraotexture''' - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале.
* '''$speculartexture''' - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры.
* '''$emissiontexture''' - Позволяет установить текстуру c emission. Включает [[Glowing_Textures#$selfillum|self illumination
.]]
* '''$useenvambient''' <{{ent|boolean}}> - Позволяет использовать самый низкий уровень mip карт кубмапов для окружающего освещения вместо кубов окружения. Может вызывать артефакты при перемещении пропов.
* {{ent|$envmap}} - По умолчанию <code>"env_cubemap"</code>, но также позволяет исвользовать свой вариант.
* {{ent|$surfaceprop}} - Связывает поверхность {{L|Material|материала}} или {{L|model|модели}} с набором физических свойств.
*<code>{{L|$model (VMT)|$model}}</code> - Должно иметь значение "1" если материал используется для пропа.
* {{ent|$translucent}} - Установка данного параметра на "1" включает Alpha-смешивание.
* {{ent|$basetexturetransform}} - Выглядит так: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" для 2m на 2m текстуры.
* {{ent|$alphatest}} - Позволяет обрезать пиксели, когда альфа-значение опускается ниже {{L|$alphatest#Доп._параметры|$alphatestreference.}}
* {{L|$alphatest#Доп._параметры|$alphatestreference}} - Задаёт минимальное значение цвета альфа-канала, в котором эффект округляется до 255. Значение «.3» создаст более толстую форму, а значение «.7» создаст более тонкую форму.
* {{ent|%keywords}} - Список ключевых слов разделенных запятыми. Примеры ключевых слов: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor
* $useparallax <{{ent|boolean}}> - Использовать Parallax Occlusion Mapping.
* $parallaxdepth <{{ent|float}}> - Гулибна Parallax карты.
* $parallaxcenter <{{ent|float}}> - Средняя глубина Parallax карты


* '''$useparallax''' <[[bool]]> - Use Parallax Occlusion Mapping.
{{note|$emissiontexture - текcтура содержит цвет, это не маска.}}
* '''$parallaxdepth''' <[[float]]> - Depth of the Parallax Map
* '''$parallaxcenter''' <[[float]]> - Center depth of the Parallax Map


{{bug|hidetested=1|По умолчанию, все тени направлены относительно игрока, как если бы он держал источник света у себя в руках, а не использовал внешние.}}


{{note:ru|$emissiontexture - цветная тектура, не маска.}}
{{bug:ru|By default all shadows appear to point towards the user as if the user is holding a light, instead of using exterior light sources.}}


== Примеры ==
== Примеры ==
=== Браш (не модельные поверхности), образец материала ===
=== Браш (не модельные поверхности), образец материала ===
<pre>
{{CodeBlock|lines=10|<nowiki>PBR
PBR
{
{
         $basetexture      "pbr_asset/texture_albedo"
         $basetexture      "pbr_asset/texture_albedo"
Line 203: Line 217:
         $surfaceprop      "metal"
         $surfaceprop      "metal"
         $model            0
         $model            0
}
}</nowiki>}}
</pre>


=== Модель, образец материала ===
=== Модель, образец материала ===
<pre>
{{CodeBlock|lines=10|<nowiki>PBR
PBR
{
{
         $basetexture      "models/pbr_asset/texture_albedo"
         $basetexture      "models/pbr_asset/texture_albedo"
Line 217: Line 229:
         $surfaceprop      "metal"
         $surfaceprop      "metal"
         $model            1
         $model            1
}
}</nowiki>}}
</pre>


=== Модель, образец материала с картой отражений ===
=== Модель, образец материала с картой отражений ===
{{Note:ru|Metalness channel is ignored and [[$basetexture]] is treated as diffuse.}}
{{Note|Канал Metalness игнорируется и {{Shader_Name|$basetexture|type=param}} обрабатывается как diffuse.}}
<pre>
{{CodeBlock|lines=11|<nowiki>PBR
PBR
{
{
         $basetexture      "models/pbr_asset/texture_diffuse"
         $basetexture      "models/pbr_asset/texture_diffuse"
Line 234: Line 244:
         $model            1
         $model            1
}
}
</pre>
</nowiki>}}




{{note:ru|[[$envmap]] should just be left as <code>env_cubemap</code>.}}
{{note|В {{Shader_Name|$envmap|type=param}} следует оставить<code>"env_cubemap".</code>}}


{{warning:ru|[[$model_(VMT)|$model 1]] '''''MUST'''''  be added for models to work!}}
{{warning|Для работы материалов моделей, с использованием PBR, {{Shader_Name|{{L|$model_(VMT)|$model 1}}|type=param}} '''''ДОЛЖЕН'''''  быть добавлен в материал!}}


== Вывод ==
== Вывод ==
Line 245: Line 255:
Вот и все! Теперь в вашем моде есть PBR.
Вот и все! Теперь в вашем моде есть PBR.


[[Category:Modding]]
{{ACategory|Modding}}
[[Category:Tutorials]]
{{ACategory|Tutorials}}
{{ACategory|Shaders}}
 
==See also==
*[[PBR (shader)]]
{{ACategory|Modding}}
{{ACategory|Tutorials}}
{{ACategory|PBR}}

Latest revision as of 07:18, 20 May 2025

English (en)Русский (ru)Translate (Translate)


Warning.pngПредупреждение:Этот шейдер не работает с LightMapped брашами, однако технически он совместим с ними.
Cpp.pngИсправление кода:В Filesrc/utils/common/utilmatlib.cpp найдите метод InitMaterialSystem и в самом конце добавьте g_pMaterialSystem->ModInit();, и попробуйте пересобрать инструменты.
Note.pngПримечание: В некоторых сторонних версиях VBSP(en) эта проблема исправлена. Например в Strata Source Strata Source, Mapbase Mapbase & Slammin' Source Map Tools Slammin' Source Map Tools.


Сравнение PBR

Слева: Базовый шейдер Source Engine.
Справа: PBR шейдер.
Не следует путать с Adapting PBR Textures to Source.

Цель этой статьи - показать вам, как реализовать Thexa4's PBR шейдер в вашем Source 2013 Source 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.


Вступление

Основная статья:  Physically Based Rendering

Требования

  • Умение компилировать шейдеры.
  • Умение компилировать решения.


Note.pngПримечание:Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в Source Source, рекомендуется сначала прочитать эти статьи: Разработка шейдеров(en) & Ваш первый шейдер(en)

Реализация

Прежде чем делать что-то, нам нужно скачать файлы.


Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".

Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в 🖿src/materialsystem/stdshaders/.


После того как вы завершите сохранение файлов, откройте Filesrc/materialsystem/stdshaders/game_shader_dx9_*.vpc в соответствии с базированием вашего мода (base/hl2mp/hl2/episodic), и добавьте файлы PBR внутрь $Project "Shaders" вот так:

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
$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
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
// // 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
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
// // 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 шейдер без влияния на стандартные Shader-ball.png LightmappedGeneric шейдеры.

Это также значительно сократит время компиляции.


Теперь откройте Filebuildsdkshaders.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 шейдер.


Icon-Important.pngВажно:Если вы используете Visual Studio 2013 не забудьте поменять версию инстурментов в Filebuildsdkshaders.bat


C:

call "%VS100COMNTOOLS%vsvars32.bat"

На:

call "%VS120COMNTOOLS%vsvars32.bat"


После этого, мы можем начать компиляцию нашего шейдера запустив Filebuildhl2mpshaders.bat, Filebuildhl2shaders.bat или Filebuildepisodicshaders.bat в зависимости от того, на чем базируется ваш мод.

Убедитесь что следовали статье Разработка шейдеров(en) до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода 🖿shaders/fxc/.

Note.pngПримечание:В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.


Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом 🖿src/ и запустите Filecreateallprojects.bat.


Откройте решение и скомпилируйте шейдеры в Release.

Note.pngПримечание:Если 🖿pbr_dx9.cpp нету в Shader проекте. Убедитесь, что вы правильно подключили его в .vpc файле который вы редактировали ранее.


Исправления

Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации.

Вы можете обойти это написав r_PhysPropStaticLighting 0 в консоли или прописать в Filesrc/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 - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры.
  • $emissiontexture - Позволяет установить текстуру c emission. Включает self illumination .
  • $useenvambient <boolean> - Позволяет использовать самый низкий уровень mip карт кубмапов для окружающего освещения вместо кубов окружения. Может вызывать артефакты при перемещении пропов.
  • $envmap - По умолчанию "env_cubemap", но также позволяет исвользовать свой вариант.
  • $surfaceprop - Связывает поверхность материала(en) или модели(en) с набором физических свойств.
  • $model(en) - Должно иметь значение "1" если материал используется для пропа.
  • $translucent - Установка данного параметра на "1" включает Alpha-смешивание.
  • $basetexturetransform - Выглядит так: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" для 2m на 2m текстуры.
  • $alphatest - Позволяет обрезать пиксели, когда альфа-значение опускается ниже $alphatestreference.(en)
  • $alphatestreference(en) - Задаёт минимальное значение цвета альфа-канала, в котором эффект округляется до 255. Значение «.3» создаст более толстую форму, а значение «.7» создаст более тонкую форму.
  • %keywords - Список ключевых слов разделенных запятыми. Примеры ключевых слов: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor
  • $useparallax <boolean> - Использовать Parallax Occlusion Mapping.
  • $parallaxdepth <float> - Гулибна Parallax карты.
  • $parallaxcenter <float> - Средняя глубина Parallax карты
Note.pngПримечание:$emissiontexture - текcтура содержит цвет, это не маска.
Icon-Bug.pngБаг:По умолчанию, все тени направлены относительно игрока, как если бы он держал источник света у себя в руках, а не использовал внешние.


Примеры

Браш (не модельные поверхности), образец материала

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
PBR { $basetexture "pbr_asset/texture_albedo" $bumpmap "pbr_asset/texture_normal" $mraotexture "pbr_asset/texture_mrao" $envmap "env_cubemap" $surfaceprop "metal" $model 0 }

Модель, образец материала

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
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 }

Модель, образец материала с картой отражений

Note.pngПримечание:Канал Metalness игнорируется и Shader-ball-settings.png $basetexture обрабатывается как diffuse.
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
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 }


Note.pngПримечание:В Shader-ball-settings.png $envmap следует оставить"env_cubemap".
Warning.pngПредупреждение:Для работы материалов моделей, с использованием PBR, Shader-ball-settings.png $model 1(en) ДОЛЖЕН быть добавлен в материал!

Вывод

Вот и все! Теперь в вашем моде есть PBR.

See also