Filament材质系统(PBR)
相关文档
示例工程¶
demo工程material_sandbox,演示材质sandboxlit.mat
调试运行:右键子工程material_sandbox
> 调试 > 命令参数 > 输入模型,如D:\model\1.obj
材质编译¶
每个材质所对应的shader是不同的,因为它们的参数都不一样,我们很难用一个统一的shader去描述所有材质。因此,材质编译的目的,就是为了生成此材质的shader。
材质编译的流程
- Filament的材质文件以
mat
为后缀名 - 它会经过
matc
工具编译成filamat
文件,此文件也包含了完整的着色器 - filament会将N个
filamat
文件统一存储到RESOURCES_PACKAGE
数组里
filament是如何编译shader的?
- 引擎内部提供一些内置的shader文件(在shaders子工程中),这些文件(
.fs
、vs
)并不是完整的shader程序,而是一些程序片段(如函数等) ShaderGenerator
类会根据shadingModel、材质的参数等,拼接出完整的shader(参见:ShaderGenerator::createVertexProgram
、ShaderGenerator::createFragmentProgram
)
材质系统设计原则¶
起源于Disney "principled" BRDF,之后的PBR材质系统基本都参照于它