Spaces:
Running
on
Zero
Running
on
Zero
A newer version of the Gradio SDK is available:
5.34.2
数据处理
这是用于3D形状和纹理生成的数据处理流程。
注意事项:
- 该实现是我们工业流程的简化版本。
- 渲染脚本基于TRELLIS。
渲染
动机
渲染脚本render/render.py
主要有三个目的:
- 使用Blender将复杂的3D格式转换为PLY文件,以便进行进一步处理。
- 为DiT训练渲染条件图像。
- 渲染正交图像、PBR材质以及用于纹理生成的条件信号(世界空间法线和位置)。
需求
渲染脚本使用Blender 4.1执行。你需要使用Blender的Python安装opencv
、OpenEXR
和Imath
。以下是Macbook上的示例:
/Applications/Blender.app/Contents/Resources/4.1/python/bin/python3.11 -m pip install OpenEXR Imath opencv-python
执行
前两个目的可以通过以下单一命令执行:
$BLENDER_PATH -b -P render/render.py -- \
--object ${INPUT_FILE} --geo_mode --resolution 512 \
--output_folder $OUTPUT_FOLDER
对于第三个目的,只需移除--geo_mode
标志。
水密网格处理和采样
动机
为了学习3DShape2VecSets的SDF表示,我们需要一个水密输入网格。该流程处理原始三角网格,生成三种必要的数据类型:
- 表面采样 - 编码器的输入点。
- 体积采样 - 解码器中SDF评估的查询点。
- 体积SDFs - VAE训练的地面真实有符号距离值。
执行
处理三角网格(OBJ/OFF格式),生成以下内容:
- 水密网格(
${OUTPUT_NAME}_watertight.obj
)。 - 表面点采样(
${OUTPUT_NAME}_surface.npz
)。 - 带有SDF的体积采样(
${OUTPUT_NAME}_sdf.npz
)。
命令:
python3 watertight/watertight_and_sample.py \
--input_obj ${INPUT_MESH} \
--output_prefix ${OUTPUT_NAME}
输出数据格式
1. 表面采样(${OUTPUT_NAME}_surface.npz
)
包含两个点云数组,以numpy NPZ格式存储:
键 | 形状 | 格式 | 描述 |
---|---|---|---|
random_surface |
(N, 6) |
float16 |
表面上的均匀点采样 |
sharp_surface |
(M, 6) |
float16 |
靠近网格锐边的采样 |
2. 体积SDF采样(${OUTPUT_NAME}_sdf.npz
)
包含三种采样类型,以数组对的形式存储。对于每种类型${type}
:
采样类型 | 点数组 | SDF标签数组 | 形状 | 格式 | 描述 |
---|---|---|---|---|---|
vol |
vol_points |
vol_label |
(P, 3)/(P,) |
float16 |
随机空间采样 |
random_near |
random_near_points |
random_near_label |
(Q, 3)/(Q,) |
float16 |
靠近表面的采样 |
sharp_near |
sharp_near_points |
sharp_near_label |
(R, 3)/(R,) |
float16 |
靠近锐边的采样 |
数据规格:
- 所有点坐标(
*_points
数组)包含以float16
值存储的3D位置。 - 所有SDF值(
*_label
数组)是表示以下内容的float16
标量:- 正值:在表面外。
- 负值:在表面内。
- 零值:在表面上。
- 数组维度:
N
、M
、P
、Q
、R
表示采样数量(因形状而异)。3
表示XYZ坐标。6
表示XYZ/法线坐标。
- 所有数组均以未压缩形式存储在numpy的NPZ格式中。
整体脚本
修改pipeline.sh里面这4个变量,
- INPUT_FILE 每个3D数据的路径。
- OUTPUT_FOLDER 输出数据集的总路径。
- NAME 每个数据的输出路径命名。
- BLENDER_PATH Blender可执行路径。
然后运行以下脚本:
bash pipeline.sh