Blender边塌陷时的属性融合实现机制及源码分析疑问
Blender边塌陷时的属性融合实现机制及源码分析疑问
我一直很好奇Blender在减面(Decimation)过程中是怎么融合法线、UV这类属性的,于是去翻了它的源码,发现负责属性混合的核心函数似乎是CustomData_bmesh_interp_n。
这个函数的实现代码是这样的:
void CustomData_bmesh_interp_n(CustomData *data, const void **src_blocks_ofs, const float *weights, const float *sub_weights, int count, void *dst_block_ofs, int n) { BLI_assert(weights != nullptr); BLI_assert(count > 0); CustomDataLayer *layer = &data->layers[n]; const LayerTypeInfo *typeInfo = layerType_getInfo(layer->type); typeInfo->interp(src_blocks_ofs, weights, sub_weights, count, dst_block_ofs); }
看得出来,这个函数其实只是拿到权重参数后,转调了另一个interp函数,并没有做实际的混合逻辑。
不过我现在遇到两个棘手的问题:
- 找不到具体被调用的那个
interp函数,因为“interp”这个词在整个项目里太常见了,用grep搜索根本没法精准定位到目标实现 - 搞不懂这套逻辑是怎么处理属性不连续的情况的,比如硬边处的法线断裂这类场景
备注:内容来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

