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)
 
(24 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{lang|Adding PBR to your mod|title = Добавление PBR в ваш мод}}
{{LanguageBar|title = Добавление PBR в ваш мод}}
{{finishtranslation:ru}}


[[File:PBR_comparison.png|500px|thumb|right|Слева: Базовый шейдер Source Engine.<br> Справа: PBR шейдер.]]


{{distinguish:ru|Adapting PBR Textures to Source}}
{{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}}.}}
}}


Цель этой статьи - показать вам, как реализовать [https://github.com/thexa4/source-pbr Thexa4's PBR шейдер] в вашем Source SDK 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness 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 поверхности в материалах.




== Вступление ==
== Вступление ==


{{main:ru|Physically Based Rendering}}
{{main|Physically Based Rendering}}


== Требования ==
== Требования ==
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 28: Line 35:
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...".


Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в '''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>
 
Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений.


Мы делаем это для того чтобы когда мы обновим решение, файлы появились в обозреватель решений.


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


Нам нужно скомпилировать шейдеры перед их использованием. Создайте 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 шейдер без эффекта на стандартные [[LightmappedGeneric]] шейдеры.
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные {{Shader_Name|LightmappedGeneric}} шейдеры.


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




 
Теперь откройте {{Path|buildsdkshaders|bat|icon=file}} используя текстовый редактор и измените эту часть:
Теперь откройте '''buildsdkshaders.bat''' используя текстовый редактор и измените эту часть:


C:
C:
<pre>
{{CodeBlock|%BUILD_SHADER% stdshader_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% stdshader_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% stdshader_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30}}
%BUILD_SHADER% stdshader_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30  
</pre>


На:
На:
<pre>
{{CodeBlock|%BUILD_SHADER% mymod_dx9_20b -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% mymod_dx9_20b         -game %GAMEDIR% -source %SOURCEDIR%
%BUILD_SHADER% mymod_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30}}
%BUILD_SHADER% mymod_dx9_30 -game %GAMEDIR% -source %SOURCEDIR% -dx9_30 -force30  
</pre>


Это позволит вам использовать наши текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер.


Это позволит вам использовать кастомные текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер.


{{ModernImportant|Если вы используете Visual Studio 2013 не забудьте поменять версию инстурментов в {{Path|buildsdkshaders|bat|icon=file}}


{{Important:ru|Если вы используете Visual Studio 2013 не забудьте поменять версию инстурментов в '''buildsdkshaders.bat'''}}


C:
C:
<pre>
{{CodeBlock|call "%VS100COMNTOOLS%vsvars32.bat"}}
call "%VS100COMNTOOLS%vsvars32.bat"
</pre>


На:
На:
<pre>
{{CodeBlock|call "%VS120COMNTOOLS%vsvars32.bat"}}
call "%VS120COMNTOOLS%vsvars32.bat"
}}
</pre>




После этого, мы можем начать компиляцию нашего шейдера запустив {{Path|buildhl2mpshaders|bat|icon=file}}, {{Path|buildhl2shaders|bat|icon=file}} или {{Path|buildepisodicshaders|bat|icon=file}} в зависимости от того, на чем базируется ваш мод.


После этого, мы можем начать компиляцию нашего шейдера запустив '''buildhl2mpshaders.bat''', '''buildhl2shaders.bat''' или '''buildepisodicshaders.bat''' в зависимости от того, на чем базируется ваш мод.
Убедитесь что следовали статье {{L|Shader Authoring|Разработка шейдеров}} до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода {{Path|shaders/fxc/}}.


Убедитесь что следовали статье [[Shader Authoring]] до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода '''shaders/fxc/'''.
{{note|В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.}}


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


Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом {{Path|src/}} и запустите {{Path|createallprojects|bat|icon=file}}.


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


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


Откройте решение и скомпилируйте шейдеры в '''Release'''.
{{note|Если {{Path|pbr_dx9|cpp}} нету в {{Code|Shader}} проекте. Убедитесь, что вы правильно подключили его в {{Code|.vpc}} файле который вы редактировали ранее.}}


{{note:ru|Если '''pbr_dx9.cpp''' нету в '''Shader''' проекте. Убедитесь, что вы правильно подключили его в '''.vpc''' файле который вы редактировали ранее.}}


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


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


Затем найдите <code>ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1");</code> и превратите в, это:
Затем найдите {{code|select=all|ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1");}} и замените его данным условием:
<source lang="cpp">
<source lang="cpp">
#ifdef PBR_CHANGE
#ifdef PBR_CHANGE
Line 184: Line 177:
#endif
#endif
</source>
</source>


== Параметры ==
== Параметры ==
* [[$basetexture]] - Albedo текстура.
 
* '''$normaltexture''' - Sets the normal map (for backwards compatibility).
* {{ent|$basetexture}} - Albedo текстура.
* [[$bumpmap]] - Sets the normal map (new way of setting normalmap).
* '''$normaltexture''' - карта нормалей (для обратной совместимости).
* {{ent|$bumpmap}} - карта нормалей (новый вариант указания карты нормалей).
* '''$mraotexture''' - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале.
* '''$mraotexture''' - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале.
* '''$speculartexture''' - Enables use of colored F0 (specular map), overrides metalness from MRAO texture.
* '''$speculartexture''' - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры.  
* '''$emissiontexture''' - Allows setting an emission texture. Enabled self illumination.
* '''$emissiontexture''' - Позволяет установить текстуру c emission. Включает [[Glowing_Textures#$selfillum|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.
* '''$useenvambient''' <{{ent|boolean}}> - Позволяет использовать самый низкий уровень mip карт кубмапов для окружающего освещения вместо кубов окружения. Может вызывать артефакты при перемещении пропов.
* [[$surfaceprop]] - Links the surface of either a [[material]] or [[model]] to a set of physical properties.
* {{ent|$envmap}} - По умолчанию <code>"env_cubemap"</code>, но также позволяет исвользовать свой вариант.
* [[$model]] - Should have a value of "1" if the texture is used on a prop.
* {{ent|$surfaceprop}} - Связывает поверхность {{L|Material|материала}} или {{L|model|модели}} с набором физических свойств.
* [[$translucent]] - Setting this to "1" enables alpha blending.
*<code>{{L|$model (VMT)|$model}}</code> - Должно иметь значение "1" если материал используется для пропа.
* [[$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|$translucent}} - Установка данного параметра на "1" включает Alpha-смешивание.
* [[$alphatest]] - Enables clipping the pixel when the alpha goes below $alphatestreference.
* {{ent|$basetexturetransform}} - Выглядит так: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" для 2m на 2m текстуры.
* [[$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|$alphatest}} - Позволяет обрезать пиксели, когда альфа-значение опускается ниже {{L|$alphatest#Доп._параметры|$alphatestreference.}}
* [[%keywords]] - A list of keywords separated by commas. Examples of keywords are: architectural,brown,gray,grime,hanger,industrial,metal,modern,shed,urban,wall,floor
* {{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 карты


{{note|$emissiontexture - текcтура содержит цвет, это не маска.}}


* '''$useparallax''' <[[bool]]> - Use Parallax Occlusion Mapping.
{{bug|hidetested=1|По умолчанию, все тени направлены относительно игрока, как если бы он держал источник света у себя в руках, а не использовал внешние.}}
* '''$parallaxdepth''' <[[float]]> - Depth of the Parallax Map
* '''$parallaxcenter''' <[[float]]> - Center depth of the Parallax Map


{{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 224: 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 238: 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 255: 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 266: 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