将着色器与directx 11结合使用

Combine shaders with directx 11

本文关键字:结合 directx      更新时间:2023-10-16

是否有组合着色器的方法?

假设我想要4个型号:

  • 一个只渲染了纹理
  • 一个有纹理和基本灯光效果的
  • 一个使用骨骼动画渲染的
  • 一个使用骨骼动画和基本灯光效果渲染的

我知道的唯一方法是创建4像素和顶点着色器文件。但是我是否还有5个我想添加的效果,我必须创建更多的文件,如果我想添加越来越多的效果?我怀疑,对于每种效果,我都必须为每种可能性创建一个文件。我知道我可以直接在其他文件中设置灯光,当我不想使用灯光时,我会将其设置为1.0f,这样颜色就不会改变。但如果我想有更多的效果,我的着色器中会有大约20个变量,如果我不使用它们,那不是没用吗?还有别的办法吗?

事先谢谢,我尽量让人理解,对不起我的英语。

以下是一些想法:

  • 将常用功能移动到单独的文件中,并使用#include在着色器之间展开该文件
  • 使用#ifdef进行条件编译。通过D3DCompileD3D_SHADER_MACROfxc.exe/D标志进行定义。可以将所有着色器组合在一个着色器中,然后将其编译为许多不同的二进制文件
  • 使用一些效果框架(默认DirectX one,谷歌搜索或自己制作):着色器不需要单独的文件,所有文件都在一个文件中,状态也是如此
  • 顺其自然:HLSL很复杂,任何复杂的情况都可能导致无法维持的混乱

希望它能有所帮助!