阶段性合并:动画重定向、碎裂共享库、第三人称玩法、编辑器面板与 vendored ufbx
- 动画:HumanoidRig 三层架构(standard 标准槽 / dialects 方言映射 / mapper 配对), 指/趾统一走世界增量两遍式烘焙;AnimationAttach 拆为纯算法 + facade;修正 HumanoidBasis 行走基朝向与跨骨架去重、根运动通道 - 物理:CharacterController 角色互碰撞 / shapeOffset / 接触事件;PhysicsWorld 接触合成与 字符冲量判定 - 渲染与材质:Model 多材质按材质拆子 mesh 与贴图路径解析、DDS 直传、GLB 内嵌纹理落盘、 不透明通道 alpha 固定 1.0、glTF FlipUVs 对齐;SceneSerializer 支持 meshIndex 与材质覆盖 - 脚本:FractureLib 抽为共享库(HostView 桥接)、WallFracture 参数直绑、新增 ThirdPersonCamera / Follower / WASDMove 玩法;移除 GameDirector / PlayerController / Target - 编辑器:新增 GamepadPanel、LogPanel(LogRing),改进 Inspector / 材质 / 统计 / 视口面板 - 依赖:vendored ufbx(FBX 5.x/6.x/7.x 全版本解析,替代 assimp 对 FBX 6.1 的拒读)
This commit is contained in:
@@ -45,18 +45,23 @@ layout(set = 1, binding = 6) uniform MaterialParams {
|
||||
vec4 factors; // x = metallic 因子,y = roughness 因子,z = 独立粗糙度图开关,w = MASK 镂空开关
|
||||
vec4 baseColor; // glTF baseColorFactor:rgb 调色 albedo,a = BLEND 透明度
|
||||
vec4 surface; // x = ior,y = transmission(KHR_materials_transmission),z = 自发光强度,w = 体积厚度
|
||||
vec4 misc; // x = unlit(透射材质不会是 unlit,仅为与 simple_shader 布局一致)
|
||||
vec4 misc; // x = unlit(透射材质不会是 unlit,仅为与 simple_shader 布局一致),y = UV 左右镜像,z = UV 上下镜像
|
||||
vec4 emissiveFactor; // 自发光颜色(rgb × emissiveMap × surface.z;黑 = 不发光)
|
||||
vec4 uvA[6]; // 每槽 UV 线性变换(KHR_texture_transform,v-up 空间)(a11,a12,a21,a22),槽序 = binding
|
||||
vec4 uvT[6]; // 每槽 UV 平移 (tx, ty, 0, 0)
|
||||
vec4 alphaOverlay; // rgb = albedo alpha 叠加色,a = 强度(0 = 关闭)
|
||||
} matParams;
|
||||
|
||||
// 每槽 UV 变换:uv' = A·uv + t(与 simple_shader.frag 同款,6 = kSlotCount)
|
||||
// 末尾叠加材质级镜像(misc.y = 左右,misc.z = 上下),作用全部槽
|
||||
vec2 ApplyUv(int slot, vec2 uv) {
|
||||
vec4 a = matParams.uvA[slot];
|
||||
vec4 t = matParams.uvT[slot];
|
||||
return vec2(a.x * uv.x + a.y * uv.y + t.x,
|
||||
a.z * uv.x + a.w * uv.y + t.y);
|
||||
vec2 o = vec2(a.x * uv.x + a.y * uv.y + t.x,
|
||||
a.z * uv.x + a.w * uv.y + t.y);
|
||||
if (matParams.misc.y > 0.5) o.x = 1.0 - o.x;
|
||||
if (matParams.misc.z > 0.5) o.y = 1.0 - o.y;
|
||||
return o;
|
||||
}
|
||||
|
||||
// CSM 阴影(sampler2DShadow:单次采样 = 硬件 2×2 深度比较 PCF)
|
||||
@@ -152,6 +157,9 @@ vec3 FresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness) {
|
||||
void main() {
|
||||
vec4 albedoTex = texture(albedoMap, ApplyUv(0, fragUV));
|
||||
vec3 albedo = albedoTex.rgb * matParams.baseColor.rgb;
|
||||
// albedo 贴图 alpha 作细节叠加遮罩(与 simple_shader 同款,0 = 恒等)
|
||||
albedo = mix(albedo, matParams.alphaOverlay.rgb,
|
||||
albedoTex.a * matParams.alphaOverlay.a);
|
||||
vec4 mr = texture(metallicRoughnessMap, ApplyUv(2, fragUV));
|
||||
// 粗糙度源按 factors.z 切换:glTF 合图工作流读 MR.g;
|
||||
// FBX/OBJ specular 工作流(z=1)换用独立粗糙度图 R 通道
|
||||
|
||||
Reference in New Issue
Block a user