Ru/Adding PBR to Your Mod: Difference between revisions
m (PBR comparison update) |
(Refreshing formatting) |
||
Line 11: | Line 11: | ||
{{distinguish|Adapting PBR Textures to Source}} | {{distinguish|Adapting PBR Textures to Source}} | ||
Цель этой статьи - показать вам, как реализовать [https://github.com/thexa4/source-pbr Thexa4's PBR шейдер] в вашем | Цель этой статьи - показать вам, как реализовать [https://github.com/thexa4/source-pbr Thexa4's PBR шейдер] в вашем {{src13|4}} моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах. | ||
== Вступление == | == Вступление == | ||
{{main|Physically Based Rendering | {{main|Physically Based Rendering}} | ||
== Требования == | == Требования == | ||
Line 24: | Line 24: | ||
{{note|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в | {{note|Если вы не знаете, как компилировать шейдеры, или еще не работали с шейдерами в {{src|4}}, рекомендуется сначала прочитать эти статьи: [[Shader Authoring:ru|Разработка шейдеров]] & [[Source_SDK_2013:_Your_First_Shader|Ваш первый шейдер]]}} | ||
== Реализация == | == Реализация == | ||
Line 33: | Line 33: | ||
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...". | Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "Raw" и как только страница загрузится кликните правой кнопкой мыши и выберите "Save As...". | ||
Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в | Все что от вас требуется, это сохранить эти файлы в директорию с исходным кодом вашего мода в {{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 42: | Line 42: | ||
* [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] | ||
После того как вы завершите сохранение файлов, откройте | |||
< | После того как вы завершите сохранение файлов, откройте {{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 76: | Line 76: | ||
$File "pbr_dx9.cpp" | $File "pbr_dx9.cpp" | ||
} | } | ||
} | }</nowiki>}} | ||
</ | |||
Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений. | Мы делаем это для того, чтобы когда мы обновим решение, файлы появились в обозревателе решений. | ||
=== Компиляция шейдеров === | === Компиляция шейдеров === | ||
Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в | Нам нужно скомпилировать шейдеры перед их использованием. Создайте 2 файла в {{Path|src/materialsystem/stdshaders/}} с именем {{Code|select=all|mymod_dx9_30.txt}} и {{Code|select=all|mymod_dx9_20b.txt}}, и вставьте это внутрь: | ||
= | {{CodeBlock|lines=11|src=mymod_dx9_30.txt|<nowiki>// | ||
< | |||
// | |||
// vs 3.0 ps 3.0 shaders collection | // vs 3.0 ps 3.0 shaders collection | ||
// | // | ||
Line 96: | Line 94: | ||
pbr_vs30.fxc | pbr_vs30.fxc | ||
pbr_ps30.fxc | pbr_ps30.fxc</nowiki>}} | ||
</ | |||
= | {{CodeBlock|lines=11|src=mymod_dx9_20b.txt|<nowiki>// | ||
< | |||
// | |||
// Standard shaders collection | // Standard shaders collection | ||
// | // | ||
Line 111: | Line 106: | ||
pbr_vs20b.fxc | pbr_vs20b.fxc | ||
pbr_ps20b.fxc | pbr_ps20b.fxc</nowiki>}} | ||
</ | |||
Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные | Добавление этих новых текстовых файлов для компиляции шейдера, позволит вам скомпилировать PBR шейдер без влияния на стандартные {{Shader_Name|LightmappedGeneric}} шейдеры. | ||
Это также значительно сократит время компиляции. | Это также значительно сократит время компиляции. | ||
Line 120: | Line 115: | ||
Теперь откройте {{Path|buildsdkshaders|bat|icon=file}} используя текстовый редактор и измените эту часть: | |||
Теперь откройте | |||
C: | C: | ||
Line 135: | Line 129: | ||
</pre> | </pre> | ||
Это позволит вам использовать наши текстовые файлы, которые мы создали ранее, чтобы скомпилировать наш PBR шейдер. | |||
{{ModernImportant|Если вы используете Visual Studio 2013 не забудьте поменять версию инстурментов в {{Path|buildsdkshaders|bat|icon=file}} | |||
C: | C: | ||
{{CodeBlock|call "%VS100COMNTOOLS%vsvars32.bat"}} | |||
call "%VS100COMNTOOLS%vsvars32.bat" | |||
На: | На: | ||
{{CodeBlock|call "%VS120COMNTOOLS%vsvars32.bat"}} | |||
call "%VS120COMNTOOLS%vsvars32.bat" | }} | ||
После этого, мы можем начать компиляцию нашего шейдера запустив {{Path|buildhl2mpshaders|bat|icon=file}}, {{Path|buildhl2shaders|bat|icon=file}} или {{Path|buildepisodicshaders|bat|icon=file}} в зависимости от того, на чем базируется ваш мод. | |||
Убедитесь что следовали статье [[Shader Authoring:ru|Разработка шейдеров]] до того момента, когда вновь скомпилированные шейдеры будут правильно помещены в папку вашего мода {{Path|shaders/fxc/}}. | |||
{{note|В зависимости от вашего ПК и сложности шейдера, это может занять некоторое время.}} | |||
Если шейдеры скомпилировались без проблем, вернитесь назад в вашу директорию с исходым кодом {{Path|src/}} и запустите {{Path|createallprojects|bat|icon=file}}. | |||
Откройте решение и скомпилируйте шейдеры в {{Code|Release}}. | |||
{{note|Если {{Path|pbr_dx9|cpp}} нету в {{Code|Shader}} проекте. Убедитесь, что вы правильно подключили его в {{Code|.vpc}} файле который вы редактировали ранее.}} | |||
== Исправления == | == Исправления == | ||
Line 171: | Line 162: | ||
Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации. | Физические пропы становятся черными, если используют материал с PBR шейдером, после 2-3 секунд из-за Prop Sleeping. После указанного времени, пропы "запекают" свой свет для оптимизации. | ||
Вы можете обойти это написав | Вы можете обойти это написав {{code|select=all|r_PhysPropStaticLighting 0}} в консоли или прописать в {{Path|src/game/client/c_physicsprop|cpp|icon=file}}. | ||
Вот, как вы можете прописать это в коде: | Вот, как вы можете прописать это в коде: | ||
Под | Под {{code|select=all|#include "tier0/memdbgon.h"}} добавьте это: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
#define PBR_CHANGE | #define PBR_CHANGE | ||
</source> | </source> | ||
Затем найдите | Затем найдите {{code|select=all|ConVar r_PhysPropStaticLighting("r_PhysPropStaticLighting", "1");}} и замените его данным условием: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
#ifdef PBR_CHANGE | #ifdef PBR_CHANGE | ||
Line 188: | Line 179: | ||
#endif | #endif | ||
</source> | </source> | ||
== Параметры == | == Параметры == | ||
* {{ent | |||
* {{ent|$basetexture}} - Albedo текстура. | |||
* '''$normaltexture''' - карта нормалей (для обратной совместимости). | * '''$normaltexture''' - карта нормалей (для обратной совместимости). | ||
* {{ent|$bumpmap | * {{ent|$bumpmap}} - карта нормалей (новый вариант указания карты нормалей). | ||
* '''$mraotexture''' - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале. | * '''$mraotexture''' - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале. | ||
* '''$speculartexture''' - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры. | * '''$speculartexture''' - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры. | ||
* '''$emissiontexture''' - Позволяет установить текстуру c emission. Включает [[Glowing_Textures#$selfillum|self illumination | * '''$emissiontexture''' - Позволяет установить текстуру c emission. Включает [[Glowing_Textures#$selfillum|self illumination | ||
.]] | .]] | ||
* '''$useenvambient''' < | * '''$useenvambient''' <{{ent|boolean}}> - Позволяет использовать самый низкий уровень mip карт кубмапов для окружающего освещения вместо кубов окружения. Может вызывать артефакты при перемещении пропов. | ||
* {{ent|$envmap | * {{ent|$envmap}} - По умолчанию <code>"env_cubemap"</code>, но также позволяет исвользовать свой вариант. | ||
* {{ent | * {{ent|$surfaceprop}} - Связывает поверхность [[material:ru|материала]] или [[model:ru|модели]] с набором физических свойств. | ||
*<code>[[$model (VMT)|$model]]</code> | *<code>[[$model (VMT)|$model]]</code> - Должно иметь значение "1" если материал используется для пропа. | ||
* {{ent|$translucent | * {{ent|$translucent}} - Установка данного параметра на "1" включает Alpha-смешивание. | ||
* {{ent | * {{ent|$basetexturetransform}} - Выглядит так: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" для 2m на 2m текстуры. | ||
* {{ent | * {{ent|$alphatest}} - Позволяет обрезать пиксели, когда альфа-значение опускается ниже [[$alphatest:ru#Доп._параметры|$alphatestreference.]] | ||
* [[$alphatest:ru#Доп._параметры|$alphatestreference]] - Задаёт минимальное значение цвета альфа-канала, в котором эффект округляется до 255. Значение «.3» создаст более толстую форму, а значение «.7» создаст более тонкую форму. | * [[$alphatest:ru#Доп._параметры|$alphatestreference]] - Задаёт минимальное значение цвета альфа-канала, в котором эффект округляется до 255. Значение «.3» создаст более толстую форму, а значение «.7» создаст более тонкую форму. | ||
* {{ent|%keywords | * {{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тура содержит цвет, это не маска.}} | {{note|$emissiontexture - текcтура содержит цвет, это не маска.}} | ||
Line 220: | Line 210: | ||
== Примеры == | == Примеры == | ||
=== Браш (не модельные поверхности), образец материала === | === Браш (не модельные поверхности), образец материала === | ||
< | {{CodeBlock|lines=10|<nowiki>PBR | ||
PBR | |||
{ | { | ||
$basetexture "pbr_asset/texture_albedo" | $basetexture "pbr_asset/texture_albedo" | ||
Line 230: | Line 219: | ||
$surfaceprop "metal" | $surfaceprop "metal" | ||
$model 0 | $model 0 | ||
} | }</nowiki>}} | ||
</ | |||
=== Модель, образец материала === | === Модель, образец материала === | ||
< | {{CodeBlock|lines=10|<nowiki>PBR | ||
PBR | |||
{ | { | ||
$basetexture "models/pbr_asset/texture_albedo" | $basetexture "models/pbr_asset/texture_albedo" | ||
Line 244: | Line 231: | ||
$surfaceprop "metal" | $surfaceprop "metal" | ||
$model 1 | $model 1 | ||
} | }</nowiki>}} | ||
</ | |||
=== Модель, образец материала с картой отражений === | === Модель, образец материала с картой отражений === | ||
{{Note|Канал Metalness игнорируется и {{ | {{Note|Канал Metalness игнорируется и {{Shader_Name|$basetexture|type=param}} обрабатывается как diffuse.}} | ||
< | {{CodeBlock|lines=11|<nowiki>PBR | ||
PBR | |||
{ | { | ||
$basetexture "models/pbr_asset/texture_diffuse" | $basetexture "models/pbr_asset/texture_diffuse" | ||
Line 261: | Line 246: | ||
$model 1 | $model 1 | ||
} | } | ||
</ | </nowiki>}} | ||
{{note|В {{ | {{note|В {{Shader_Name|$envmap|type=param}} следует оставить<code>"env_cubemap".</code>}} | ||
{{warning|Для работы материалов моделей, с использованием PBR, | {{warning|Для работы материалов моделей, с использованием PBR, {{Shader_Name|[[$model_(VMT)|$model 1]]|type=param}} '''''ДОЛЖЕН''''' быть добавлен в материал!}} | ||
== Вывод == | == Вывод == |
Revision as of 19:03, 18 July 2023
Цель этой статьи - показать вам, как реализовать Thexa4's PBR шейдер в вашем Source 2013 моде. Реализация этого шейдера позволит вам использовать metalness/roughness PBR поверхности в материалах.
Вступление
Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.


Реализация
Прежде чем делать что-то, нам нужно скачать файлы.
Вы можете сделать это перейдя по ссылкам ниже, нажмите кнопку "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:
%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 шейдер.


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 - Albedo текстура.
- $normaltexture - карта нормалей (для обратной совместимости).
- $bumpmap - карта нормалей (новый вариант указания карты нормалей).
- $mraotexture - Текстура с metalness на красном канале, roughness на зеленом канале и ambient occlusion на синем канале.
- $speculartexture - Включает использование цветной F0 (карты отражений), перезаписывая текстуру с metalness из MRAO текстуры.
- $emissiontexture - Позволяет установить текстуру c emission. Включает self illumination .
- $useenvambient <boolean> - Позволяет использовать самый низкий уровень mip карт кубмапов для окружающего освещения вместо кубов окружения. Может вызывать артефакты при перемещении пропов.
- $envmap - По умолчанию
"env_cubemap"
, но также позволяет исвользовать свой вариант. - $surfaceprop - Связывает поверхность материала или модели с набором физических свойств.
$model
- Должно иметь значение "1" если материал используется для пропа.- $translucent - Установка данного параметра на "1" включает Alpha-смешивание.
- $basetexturetransform - Выглядит так: "center 0.5 0.5 scale 0.1025 0.1025 rotate 0 translate 0 0" для 2m на 2m текстуры.
- $alphatest - Позволяет обрезать пиксели, когда альфа-значение опускается ниже $alphatestreference.
- $alphatestreference - Задаёт минимальное значение цвета альфа-канала, в котором эффект округляется до 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 карты


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


$basetexture
обрабатывается как diffuse.


$envmap
следует оставить"env_cubemap".


$model 1
ДОЛЖЕН быть добавлен в материал!Вывод
Вот и все! Теперь в вашем моде есть PBR.