feat: OBJ 全量贴图接入——Material 加 AO 槽 + OBJ 工作流适配
- Material 槽位 4→5(+AO),参数 UBO binding 4→5;shader ambient diffuse 项乘 ao(IBL 遮蔽),AO 默认纹理白色 - OBJ 槽落点补全:map_Bump→HEIGHT(5)、map_Ns→SHININESS(7)、 map_Ka→AMBIENT(3)(assimp OBJ importer 约定)——backpack 的 法线贴图此前也从未加载 - MTL 导出遗漏(roughness.jpg/ao.jpg 在目录未被引用):约定文件名 探测补槽(roughness/ao/occlusion × jpg/png),命中留 INFO 锚点 - 因子按工作流分支:glTF 用声明因子(MR 合图 B=金属度); OBJ metallic=0(specular 工作流无金属概念),roughness 有图→1, 无图→Blinn-Phong Ns 换算 R=sqrt(2/(Ns+2))(补偿默认贴图 G=0.5)
This commit is contained in:
@@ -38,7 +38,8 @@ layout(set = 1, binding = 0) uniform sampler2D albedoMap;
|
||||
layout(set = 1, binding = 1) uniform sampler2D normalMap;
|
||||
layout(set = 1, binding = 2) uniform sampler2D metallicRoughnessMap; // G=粗糙度 B=金属度
|
||||
layout(set = 1, binding = 3) uniform sampler2D emissiveMap;
|
||||
layout(set = 1, binding = 4) uniform MaterialParams {
|
||||
layout(set = 1, binding = 4) uniform sampler2D aoMap; // 环境光遮蔽(R 通道)
|
||||
layout(set = 1, binding = 5) uniform MaterialParams {
|
||||
vec4 factors; // x = metallic 因子,y = roughness 因子
|
||||
} matParams;
|
||||
|
||||
@@ -177,7 +178,8 @@ void main() {
|
||||
vec3 kD_amb = (1.0 - F_amb) * (1.0 - metallic);
|
||||
|
||||
vec3 irradiance = texture(irradianceMap, N).rgb;
|
||||
vec3 diffuse = kD_amb * irradiance * albedo;
|
||||
float ao = texture(aoMap, fragUV).r;
|
||||
vec3 diffuse = kD_amb * irradiance * albedo * ao;
|
||||
|
||||
vec3 R = reflect(-V, N);
|
||||
const float kMaxPrefilterMip = 4.0; // 与 Cubemap::kPrefilterMips - 1 同步
|
||||
|
||||
Reference in New Issue
Block a user