源码:https://github.com/google/filament
说明:Filament 是一个基于物理的实时渲染引擎,适用于 Android、iOS、Windows、Linux、macOS 和 WebGL2。
工具用法
cmgen
cmgen 是一个命令行工具,用于从环境映射生成 SH 和 mipmap 级别。
Cubemaps 和 equirectangular 格式都支持,自动检测
根据源图像的纵横比。
cso-lut
cso-lut 为锥体/球体遮挡生成查找表。
filamesh
filamesh 是一种将网格转换为优化二进制格式的工具。
glslminifier
glslminifier 通过删除注释、空行和缩进来缩小 GLSL 着色器代码。
matc
matc 是一个用于编译材质定义的命令行工具。
示例:
- 材质定义:defaultMaterial.mat。
material {
name : "Filament Default Material",
shadingModel : unlit
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor.rgb = vec3(0.8);
}
}
- 编译材质。
matc -o ./defaultMaterial.filamat ./defaultMaterial.mat
- 将编译后的材质转换为嵌入资源。
resgen -c defaultMaterial.filamat
- 在程序中引用材质。
#include "materials/resources.h"
filament::Material* mat = filament::Material::Builder()
.package(RESOURCES_DEFAULTMATERIAL_DATA,RESOURCES_DEFAULTMATERIAL_SIZE)
.build(*engine);
注意:要将materials/resources.c添加到源码。
matinfo
matinfo 打印有关使用 matc 编译的材料文件的信息。
示例:
matinfo ./defaultMaterial.filamat
返回:
Material:
Version: 15
Name: Filament Default Material
Shading:
Model: unlit
Material domain: surface
Vertex domain: object
Interpolation: smooth
Shadow multiply: false
Specular anti-aliasing: false
Variance: 0.15
Threshold: 0.2
Clear coat IOR change: true
Raster state:
Blending: opaque
Color write: true
Depth write: true
Depth test: true
Double sided: false
Culling: back
Transparency: default
Required attributes:
position
GLSL shaders:
#0 gles30 vs 0x00
#1 gles30 fs 0x00
#2 gles30 vs 0x08 SKN
Vulkan shaders:
Metal shaders:
Chunks:
Name Size
MAT_SHAD 1
MAT_DEWS 1
mipgen
mipgen 为图像生成低至 1x1 级别的 mipmap。
normal-blending
normal-blending 是一种使用 Reoriented Normal Mapping 混合法线贴图的工具。
resgen
resgen 聚合了一系列二进制 blob,每个 blob 都成为一个“资源”,其 id
是输入文件的基本名称。
rgb-to-lmsr
rgb-to-lmsr 计算 RGB (Rec.709) 到 LMSR 变换矩阵。
roughness-prefilter
roughness-prefilter从法线贴图生成预过滤的粗糙度贴图,以帮助减轻镜面反射锯齿。
specular-color
specular-color 根据光谱数据计算导体的基色。