Zh/Shader Authoring: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
{{LanguageBar}} | |||
这篇文档会带你入门{{src|4}}的着色器开发,更多有关着色器的信息以及它们有什么用、应该怎么用,可参考 [[Shader]]。 | 这篇文档会带你入门{{src|4}}的着色器开发,更多有关着色器的信息以及它们有什么用、应该怎么用,可参考 [[Shader]]。 | ||
Revision as of 20:59, 14 August 2025
这篇文档会带你入门
起源的着色器开发,更多有关着色器的信息以及它们有什么用、应该怎么用,可参考 Shader。
开始吧
每个
起源的材质都有它们特定的着色器,着色器用于渲染材质的视觉效果。一般来说,着色器会定义材质表面的基本光传输逻辑,以便最终呈现高质量的渲染效果。
起源 SDK 拥有完整的 DirectX 着色语言 HLSL (High-Level Shading Language)以及着色器汇编的支持。我们建议一开始就用 HLSL 写着色器,最后涉及到精细的系统性能优化再使用汇编。
我们需要一些额外的工具来为
起源 SDK 编译着色器,接下来的部分会详细介绍这些工具,并提供它们的链接和简要的安装说明。
用到的工具有:Perl,DirectX SDK 和 make。一般而言以下过程只需进行一次,因为只是环境配置。
创建着色器的选择
选择一:Peral + DirectX SDK
Perl
Perl 可在 download page 安装,推荐安装的一个版本是 Strawberry Perl。
橙盒 引擎分支 SDK 也可依赖于非标准的 Perl, String::CRC32。如果你用的是 Strawberry Perl, 你可以通过 CPAN Client 安装它并通过 <StrawberryPerlInstallDir>\perl\bin\cpan.bat 启动。
输入以下命令来安装包文件: install String::CRC32
<StrawberryPerlInstallDir>\perl\bin\ 然后再运行 cpan String::CRC32
DirectX SDK
为安装 November 2008 DirectX SDK, 请访问 https://archive.org/details/dxsdk_nov08。(因为微软早就不给这么老的 API 提供支持了,所以只能去 Internet Archive 下载)
DirectX SDK!这就好像只安装 VC 运行库并不满足 C++ 开发一样。
设置环境变量
当 Perl 和 DirectX SDK 安装好之后, 确保你的 "Path" 环境变量已被正确配置。在
Microsoft Windows里, 你可以通过设置 -> 系统 -> 系统信息 -> 高级系统设置 来找到环境变量的配置窗口,如下图:
假设 Perl 安装在 C:\Perl 中,DirectX 安装在 C:\DXSDK 中,则 "Path "变量应包含 C:\Perl\bin 和 C:\DXSDK\Utilities\bin\x86。
通过这种方式设置环境变量,你可以随心所欲地更新 Perl 和 DirectX SDK 而无需再手动复制文件。
选择二:SCell555 的着色器编译工具
为安装 SCell555 的着色器编译工具, 访问 release 来下载。
当你下载好压缩文件后,打开压缩包应该会发现以下三个文件夹:
- bin
- headers
- stdshaders
把 bin 文件夹放入 devtools 文件夹。
把 stdshaders 文件夹放入 materialsytem 文件夹。如果系统询问是否替换文件,选择是。
导航至压缩包中的 headers 文件夹,你应该会看到一个 cshader.h 文件和 VS2013 文件夹(其中还包含另一个 cshader.h 文件)。如果用的是 Visual Studio 2013 或更高版本,请将 VS2013 文件夹中的 cshader.h 文件放到 public\shaderlib 中并替换它。如果用的是 Visual Studio 2013 之前的版本,请使用 VS2013 文件夹中的 ![]()
cshader.h 文件。
完成配置
修改 stdshader_dx9_20b.txt
打开 materialsystem/stdshaders/stdshader_dx9_20b ,并像这样注释掉所有编译着色器的行:
//
// Standard shaders collection
//
// These shaders are compiled as the following shader models:
// _ps20.vcs
// _ps20b.vcs
// _vs20.vcs
//
//example_model_ps20b.fxc
//example_model_vs20.fxc
//SDK_Bloom_ps2x.fxc
//SDK_screenspaceeffect_vs20.fxc
//SDK_bloomadd_ps2x.fxc
修改 buildepisodicshaders.bat
打开 ![]()
src\materialsystem\stdshaders\buildepisodicshaders.bat 并按照提示设置 GAMEDIR 和 SDKBINDIR。
在 ![]()
buildsdkshaders.bat 中,可能还需要修改第 7 行对 vsvars32.bat 的调用,如果使用的是 Visual Studio 2013,则应指向 %VS120COMNTOOLS%。
注意:GAMEDIR 和 SDKBINDIR 必须符合 8.3 目录名称标准。
rem == Set the absolute path to your mod's game directory here ==
rem == Note that this path needs does not support long file/directory names ==
rem == So instead of a path such as "C:\Program Files\Steam\steamapps\mymod" ==
rem == you need to find the 8.3 abbreviation for the directory name using 'dir /x' ==
rem == and set the directory to something like C:\PROGRA~2\Steam\steamapps\sourcemods\mymod ==
set GAMEDIR= YOUR PATH HERE
rem == Set the relative path to SourceSDK\bin\orangebox\bin ==
rem == As above, this path does not support long directory names or spaces ==
rem == e.g. ..\..\..\..\..\PROGRA~2\Steam\steamapps\<USER NAME>\sourcesdk\bin\orangebox\bin ==
set SDKBINDIR= YOUR PATH HERE
着色器编译
进入 ![]()
materialsystem\stdshaders 文件夹,然后输入用于编译着色器的 bat 文件名。可能是 ![]()
buildepisodicshaders.bat。如果你的操作正确,编译应该就没有问题了。
D3DVERTEXTEXTURESAMPLER0 未定义的错误。解决方法是删除顶点着色器文件中 register 函数对该定义的任何引用。 register( D3DVERTEXTEXTURESAMPLER0, s0 ) 的文件,以便于查找引用。另见
- 有关 HLSL 和着色器汇编的更多信息,请参阅 the online MSDN docs.
- Category:Material System -- 获取更多关于在材质中使用着色器的一般信息。