复现_TexGaussion

环境配置1

问题:生成真正的PBR材质失败

原因:论文原始代码中用于最终渲染的核心库 nvdiffrast,与你的 Windows 本地环境(Visual Studio 版本 + CUDA 版本组合)存在无法调和的兼容性问题。

解决方案:将环境配置设置成作者要求的

环境:
1. pytorch 2.4.0
2. cuda 12.4
3. vs 2022 
4. python 3.10

环境配置2

  1. pytorch 2.1.0
  2. cuda 11.8
  3. vs 2019【VS2022 的最新版(17.14.x) 与 CUDA 11.8 不兼容,导致 nvdiffrast 编译时直接报 unsupported Microsoft Visual Studio version】

初始命令

set VCToolsInstallDir=C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207
set PATH=%VCToolsInstallDir%\bin\Hostx64\x64;%PATH%
set CUDAFLAGS=-allow-unsupported-compiler
set GALLIUM_DRIVER=llvmpipe
set PYOPENGL_PLATFORM=egl
set PATH=F:\paper\code\TexGaussian;%PATH%

F:
cd \paper\code\TexGaussian
.venv1\Scripts\activate

python texture.py objaverse --texture_name my_chair_test --ckpt_path ./checkpoints/PBR_model.safetensors --output_dir ./texture_mesh --save_image True --mesh_path ./assets/cube.obj --text_prompt "a wooden cube" 2>&1 | findstr /v "warning C4624" | findstr /v "note:" | findstr /v "flat_hash_map" 


python texture.py objaverse --texture_name my_chair_test --ckpt_path ./checkpoints/PBR_model.safetensors --output_dir ./texture_mesh --save_image True --mesh_path ./assets/chair.obj --text_prompt "a wooden chair" 2>&1 | findstr /v "warning C4624" | findstr /v "note:" | findstr /v "flat_hash_map" 

python texture.py objaverse --texture_name my_office_test --ckpt_path ./checkpoints/PBR_model.safetensors --output_dir ./texture_mesh --save_image True --mesh_path ./assets/office_chair.obj --text_prompt "a wooden office_chair" 2>&1 | findstr /v "warning C4624" | findstr /v "note:" | findstr /v "flat_hash_map" 

代码报错内容

  1. 更换vs2019后,报错找不到"python310.lib"

解决方案:手动复制 python310.lib 到 VS 库目录: (.venv1) F:\paper\code\TexGaussian>copy "C:\Users\123\AppData\Local\Programs\Python\Python310\libs\python310.lib" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64"

  1. 更换vs2019后,报错找不到这些函数的具体实现[Windows 环境(VS 2019)与 nvdiffrast 所需的较新 C++ 标准库不兼容]
    torch_bindings.o : error LNK2019: 无法解析的外部符号 __std_find_trivial_1
    torch_bindings.o : error LNK2019: 无法解析的外部符号 __std_search_1
    torch_bindings.o : error LNK2019: 无法解析的外部符号 __std_find_end_1
    nvdiffrast_plugin.pyd : fatal error LNK1120: 3 个无法解析的外部命令

解决方案:在 VS 2019 命令行中借用 VS 2022 的工具集

设置环境变量:
set VCToolsInstallDir=C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207
set PATH=%VCToolsInstallDir%\bin\Hostx64\x64;%PATH%
set CUDAFLAGS=-allow-unsupported-compiler

然后,在同一个命令行窗口中,激活你的虚拟环境并编译 nvdiffrast:
F:
cd \paper\code\TexGaussian
.venv1\Scripts\activate
cd \paper\code\nvdiffrast
pip uninstall nvdiffrast -y
pip install . --no-build-isolation
  1. fast_gauss 的核心问题:OpenGL 上下文初始化失败
    NullFunctionError: Attempt to call an undefined alternate function (glCreateShader, glCreateShaderObjectARB), check for bool(glCreateShader) before calling

解决方案:①在 https://github.com/pal1000/mesa-dist-win/releases 页面下载mesa3d-26.1.1-release-msvc.7z;②解压后,将所有的dll文件复制到TexGaussian根目录下;

  1. NullFunctionError: Attempt to call an undefined alternate function (glCreateShader, glCreateShaderObjectARB), check for bool(glCreateShader) before calling
问题原因:Mesa3D 的 DLL 依赖于其他的动态链接库,而这些库不在系统的搜索路径里
解决方案:
    ①将x64下所有的dll文件复制到TexGaussian根目录下;
    ②设置环境变量,让 Mesa3D 的软件渲染生效 
        set GALLIUM_DRIVER=llvmpipe
        set PYOPENGL_PLATFORM=egl
    ③将当前项目目录(包含 Mesa3D 所有 DLL 的文件夹)添加到系统 PATH 的最前面
        set PATH=F:\paper\code\TexGaussian;%PATH%
  1. ShaderValidationError: Validation failure (0):
解决方案:
修改: F:\paper\code\TexGaussian\.venv1\lib\site-packages\OpenGL\GL\shaders.py  文件

修改内容:
if named.get('validate', True):
    program.check_validate()

修改之后:
if named.get('validate', False):
    program.check_validate()
  1. ShaderLinkError: Link failure (0):
    第5步修改禁用验证后,报错变了,说明第5步的原因是Mesa3D 版本与着色器代码不完全兼容,修改Mesa3D的版本为23.1.3,即mesa3d-23.1.3-release-msvc.7z;
    又报错 ShaderValidationError: Validation failure (0):
    按照序号5的方案修改

  2. 报错:ShaderLinkError: Link failure (0):

修改文件 F:\paper\code\TexGaussian\.venv1\lib\site-packages\OpenGL\GL\shaders.py

修改内容:
    program = ShaderProgram( program )
    glLinkProgram(program)
    if named.get('validate', True):
        program.check_validate()
    program.check_linked()
    for shader in shaders:
        glDeleteShader(shader)
    return program

直接替换成:
    program = ShaderProgram( program )
    glLinkProgram(program)
    # if named.get('validate', True):
    #     program.check_validate()
    # program.check_linked()
    for shader in shaders:
        glDeleteShader(shader)
    return program
  1. ImportError: cannot import name 'cudart' from 'cuda' (unknown location)
问题原因:卡在了 fast_gauss 内部想要导入 cuda 模块的步骤,而这个模块通常需要额外安装 cuda-python。

解决方案:pip install cuda-python
  1. ImportError: cannot import name 'cudart' from 'cuda' (unknown location)
打开 F:\paper\code\TexGaussian\.venv1\lib\site-packages\fast_gauss\gsplat_utils.py

调整之前:from cuda import cudart
调整之后:from cuda.cudart import cudart
  1. ModuleNotFoundError: No module named 'cuda.cudart'
问题原因:新版的cuda-python(13.3.0)中,cuda.cudart这个导入路径可能已经不再支持;
13.3.0版的cuda-python 与 系统里的 11.8版的CUDA Toolkit不匹配

解决方案:降级cuda-python为11.8.1 与 CUDA11.8 匹配
# 1. 卸载当前的 cuda-python 及其绑定的组件
pip uninstall cuda-python cuda-bindings -y

# 2. 安装与 CUDA 11.8 兼容的版本 (例如 11.8.1)
pip install cuda-python==11.8.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

将F:\paper\code\TexGaussian\.venv1\lib\site-packages\fast_gauss\gsplat_utils.py中调整后的from cuda.cudart import cudart 均改回from cuda import cudart
  1. ModuleNotFoundError: No module named 'win32api'
报错原因:这个 win32api 是 pywin32 库的一部分,它提供了访问 Windows 底层 API 的功能。fast_gauss 的 CUDA 上下文管理需要它来与你的 NVIDIA 显卡驱动进行底层交互

解决方案:pip install pywin32
  1. Error: Attempt to retrieve context when no valid context
报错原因:fast_gauss 在尝试获取 OpenGL 上下文时失败了,说明在Window系统上,fast_gauss的软件渲染路径无法启动,Window对EGL的支持不原生,而MESA的EGL也无法正常工作;

调整文件

  1. F:\paper\code\TexGaussian.venv1\lib\site-packages\OpenGL\GL\shaders.py

找2026.6.9

虚拟机问题

VMware虚拟机默认使用的是虚拟显卡,无法直接访问宿主机的NVIDIA显卡;

生成一个假贴图

修改texture.py文件中的fit_mesh_uv方法

代码总结

texture.py
fit_mesh_uv():多视角渲染、优化
render_gs() -- render()
render_mesh()

gs.py ------------ render()
regression_models.py:
forward_gaussians():将 U-Net 的输出特征 x 映射为可渲染的高斯参数

复现

类别 核心任务 具体内容 完成情况
功能复现 跑通官方代码 使用作者提供的预训练模型和测试数据,成功生成结果(PBR材质图) 已完成
性能复现 复现实验数据 复现论文中的定量实验,如FID/KID指标、推理时间,并与论文报告的数据对比。 待完成
研究复现 从零训练模型 从头开始训练一个新的模型,并使用自己的测试集(如ShapeNet)评估其性能。 待完成
算法复现 独立实现论文方法 在不参考官方代码的情况下,根据论文的描述独立实现完整算法。 无需完成

功能复现的数据流向

执行命令:python texture.py objaverse --texture_name my_office_test --ckpt_path ./checkpoints/PBR_model.safetensors --output_dir ./texture_mesh --save_image True --mesh_path ./assets/office_chair.obj --text_prompt "a wooden office_chair" 2>&1 | findstr /v "warning C4624" | findstr /v "note:" | findstr /v "flat_hash_map"

阶段一:数据准备(从硬盘到GPU)

  1. texture.py 主入口 Converter.load_mesh(opt.mesh_path)
  • 指定的 --mesh_path ./assets/cube.obj 作为参数传入
  1. 表面采样(trimesh.sample.sample_surface)
  • 在网格表面均匀采样num_samples个点 默认200000个。这些点及其法线是后续构建八叉树的原始数据
  1. 构建八叉树(ocnn.octree.Octree)
  • 核心调用是self.points2octree(pts)
  1. 提取调用特征(octree.get_input_feature)
  • 从八叉树中提取初始特征张量self.input_data,将成为3D U-Net的输入
  1. 此时,数据已经从.obj文件,成功转化为模型可以处理的输入self.input_data

阶段二:推理(数据通过网络流动)模型处理数据并生成最终材质的过程

  1. 特征提取(3D U-Net,core/octree_unet.py)
  • self.input_data被送入self.model。网络通过下采样和上采样,提取并整合多尺度的空间特征,最终输出一个特征张量x
  1. 参数映射 (core/regression_models.py)
  • forward_gaussians 方法接收特征张量 x,通过不同的激活函数,将 x 映射的属性被拼接成最终的 3D 高斯参数
  1. 渲染优化
  • 通过对比 render_gs(高斯渲染)和 render_mesh(纹理渲染)的结果,来优化纹理图。
  1. 导出结果
  • export_mesh 方法将优化后的纹理图 (self.albedo) 保存为 albedo_mesh_albedo.png。
  • 同时,将包含UV坐标的 albedo_mesh.obj 文件保存到硬盘。
posted @ 2026-07-01 15:15  jsqup  阅读(4)  评论(0)    收藏  举报