Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces论文代码部分跟踪

2023-11-02

《Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces》是由独立研究者MATTHEW J. KEETER发表在2020年SIGGRAPH上的一篇文章。主要提出了一种利用现代GPU的大规模并行性来直接渲染复杂封闭式隐式曲面的方法。
具有以下功能特点:

  • 支持2D和3D渲染,并可以得到任意分辨率的画面;
  • 不需要高于C0的连续性,支持更加灵活的建模操作;
  • 支持构造实体几何(CSG)、形状的平滑融合等多种建模操作;
  • 支持具有数以千计的基础数学表达式的大规模模型的渲染,并能保证可以交互。
    这篇博文记录了论文代码部分部署过程中遇到问题及解决方法。
  • 运行平台:曙光云计算平台(Linux) with Tesla V100 && CUDA 10.0.130

  • 项目源码:https://github.com/mkeeter/mpr

  • 编译支持:在正式编译mpr项目之前需要保证安装好mpr项目依赖的代码库或者编译工具,并保证其版本正确

    • cmake ≥ 3.12.0
      cmake安装方法见博文:https://blog.csdn.net/qq_38327353/article/details/107528837
      Note: 编译cmake时出现了当前C++ Compiler不支持C++11的错误。一般来说gcc版本越高,能支持的c++版本越高,在此将gcc从平台初始的5.4升级到了7.5版本,但是仍报出“c++编译器不支持c++11的错误”。在安装高版本的gcc时,需要手动将系统默认的gcc和新安装的gcc-7进行软链接:
      # in /usr/local/bin directory
      sudo ln -sf g++-7 g++
      sudo ln -sf gcc-7 gcc
      ... ... ... 
      
      实际上,将相关文件的软链接全部设定完毕后,编译cmake仍提示相同的错误。在csdn技术博客上参考了一篇测试c++ 编译器是否支持c++11的文章,通过运行包含c++11特性程序的.cpp文件来验证当前环境是否支持c++11,具体测试后发现当前的gcc其实是支持c++11的,因此应该是当前平台上的系统在哪里出了问题(在其他系统并未出现过这种问题)。为此,我注释掉了CMakeList.txt文件中与c++11版本验证相关的代码,再次编译cmake,最终成功完成编译。
    • CUDA 10.0.130
      当前平台上默认安装了10.0.130版本的CUDA,但是并没有将其添加到系统路径中,请参考如下博文将CUDA添加到系统的路径中(在使用博文中的第一种方法时便成功了):
      https://blog.csdn.net/yinxian9019/article/details/106756280/
      先前在Ubuntu上成功配置了CUDA 9(当前博文要求CUDA 10),配置过程参见博文:
      https://blog.csdn.net/wshixinshouaaa/article/details/83272282
  • 编译mpr

    # Install dependencies
    sudo apt install mesa-common-dev ninja-build
    
    # Install a recent version of eigen
    wget https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz
    tar -zxvf eigen-3.3.7.tar.gz
    cd eigen-3.3.7
    mkdir build
    cd build
    cmake ..
    sudo make install
    
    # Install `mpr`
    cd
    git clone git@github.com:mkeeter/mpr
    cd mpr
    git submodule update --init --recursive
    mkdir build
    cd build
    cmake -GNinja -DBIG_SERVER=ON ..
    ninja
    

    上述codes是编译mpr的所有过程。

    • 编译过程中,在执行git clone命令时遇到了git权限的错误:

      git clone git@github.com:mkeeter/mpr
      

      git@github.com: Permission denied (publickey). Could not read from remote repository.
      原因是客户端与服务器端没有生成ssh key,或者生成的ssh key不匹配,解决方法是重新生成一次ssh key,并重新配置一次服务器,具体方法参考博文:
      https://www.jianshu.com/p/7d57ce4147d3

    • 编译过程中,在执行cmake命令时遇到的错误及解决方法总结如下:

      cmake -GNinja -DBIG_SERVER=on ..
      
      • 错误01:
        CMake Error at CMakeLists.txt: 3(project): No CMAKE_CUDA_COMPILER could be found.
        出现这个错误的原因是cmake没有识别到CUDA的路径,所以在保证CUDA安装完毕后需要配置一下CUDA的环境变量,具体方法参见上边提到的博文。

      • 错误02:
        Could not find a package confguration file provided by “Qt5Core” with any of the following names:
        Qt5CoreConfig.cmake
        Qt5Core-Config.cmake
        错误原因是没有缺少安装QT5,可以使用如下代码查看是否安装QT:
        qmake -v
        解决方法是安装QT5。曙光云平台上没有GUI,所以我们需要采用非GUI的安装方法,具体参见博文: https://blog.csdn.net/qq_39519014/article/details/105747835

      • 错误03:
        Could NOT find Boost(missing Boost_INCLUDE_DIR).a
        Boost库是一个成熟且开源的C++库,是C++标准库的后备。
        https://blog.csdn.net/simtwo/article/details/8083598
        这篇博文提供了两种方法安装boost,这里采用了第一种方法,直接采用apt-get install命令安装boost:
        # 搜索所有的boost库
        apt-cache search boost
        # 安装相应的库
        sudo apt-get install libboost-all-dev

      • 错误04:
        No package ‘guile-2.2’ found.
        No package ‘eigen3’ found.
        这里guile-2.2不安装实际对项目的成功编译没有影响。
        eigen3必须安装,上面提供了eigen3的安装方法,亲测是可以使用的。
        安装好eigen3之后即可解决这个问题。

  • 运行mpr
    在build目录下执行命令:

    ../run_benchmarks.sh
    

    运行结果中包含三列数据,分别是分辨率大小、帧时间(毫秒)、标准差。
    渲染好的图像存储到了mpr/build/目录下的几个文件夹下,不同模型对应的文件夹分别为:

    prospero
    gears_2d
    architecture
    gears_3d
    bear
    
  • 渲染结果
    Part Ⅰ分辨率-时间-标准差
    在这里插入图片描述
    在这里插入图片描述
    Part Ⅱ图像效果

    • architecture
      在这里插入图片描述
    • bear
      在这里插入图片描述
    • gears_2d
      在这里插入图片描述
    • gears_3d
      在这里插入图片描述
    • text benchmark
      在这里插入图片描述
-END-
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces论文代码部分跟踪 的相关文章

  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • 在 Linux 服务器上创建和编辑 MS-Word 文档?

    希望开发处理文档的服务器端应用程序 源文档大多是MS Word 2003 2007 即MS版本的Docx 希望服务器应用程序能够在linux或windows上运行 想知道在linux下读写MS Word文件最好的工具或库是什么 兼容性是最重
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so

随机推荐

  • Mac卸载java解决安装最新版java SE报错Unable to locate an executable at “/Library/Java/JavaVirtualMachines/jdk-1

    操作系统 Mac Catalina version 10 15 1 搭建java环境时不能安装最新jdk 否则使用 sudo apt install 软件的时候会提示 Unable to locate an executable at Li
  • 关于PhpStorm如何运行PHP项目或文件的设置

    关键字 phpstorm 运行 环境配置 1 安装好phpstorm 网上有很多相关的安装教程以及破解教程 初学者不建议进行汉化 使用英文版本的编辑器对自己的英语能力也有一定的提高 2 楼主使用的是xampp 当时在大学里学习的时候就是一直
  • 单机版搭建HBase环境图文教程详解

    http www linuxidc com Linux 2012 10 72959 htm 单机版搭建HBase环境图文教程详解 1 下载hbase 0 92 1 tar gz 2 sudo tar zxvf hbase 0 92 1 ta
  • BEVFormer论文解析

    背景 跟基于雷达的相比 纯视觉的方案成本低 而且具有RGB和纹理信息 可以用于检测像交通信号灯 车道线等道路要素 自动驾驶的感知本意是要从多个摄像头给出的2D信息来预测3D bbox 检测 或者semantic map 分割 最直接的方案是
  • LeetCode--HOT100题(48)

    目录 题目描述 437 路径总和 III 中等 题目接口 解题思路 代码 PS 题目描述 437 路径总和 III 中等 给定一个二叉树的根节点 root 和一个整数 targetSum 求该二叉树里节点值之和等于 targetSum 的
  • 水库大坝安全监测的主要内容包括哪些?

    在水库大坝的实时监测中 主要任务是通过无线传感网络监测各个监测点的水位 水压 渗流 流量 扬压力等数据 并在计算机上用数据模式或图形模式进行实时反映 以掌握整个水库大坝的各项变化情况 大坝安全监测系统能实现全天候远程自动监测 并将监测数据自
  • window 替换 jar 包内部配置

    场景 框架启动需要证书 不同环境配置和证书不一致 原本打算用外部配置启动的方法解决 但是受限于框架 无法采用外部配置 那么每次打包时我们都需要去修改项目配置与证书 想想就难受 所以最好是打包的时候自动替换配置 省去人工干预这个步骤 命令 了
  • Linux 系统的磁盘空间满了的几个解决方法

    Linux磁盘空间占满 解决方法有哪些 本文将详细介绍Linux磁盘空间占满的解决方法 1 使用 查询整体磁盘使用情况 df h df h 以下为执行后显示的部分示例 dev vda1 19G 12G 6 5G 64 devtmpfs 48
  • Cisco access-list 访问控制列表配置全解

    ACL Access Control List 访问控制列表 技术从来都是一把双刃剑 网络应用与互联网的普及在大幅提高企业的生产经营效率的同时 也带来了诸如数据的安全性 员工利用互联网做与工作不相干事等负面影响 如何将一个网络有效的管理起来
  • Ubuntu16.04下载vim80并源码编译支持Python3及lua

    Ubuntu16 04下载vim80并源码编译支持Python3及lua 版本说明 版本 作者 日期 备注 0 1 ZY 2019 7 10 初稿 目录 文章目录 Ubuntu16 04下载vim80并源码编译支持Python3及lua 版
  • Spring Cloud Netflix的序列化机制

    Spring Cloud Netflix的序列化机制 一 序列化的含义 传统含义上的序列化是将java对象转换成字节码以用于网络传输或者持久化存储 相应的反序列化就是将字节码转换成java对象 在java代码中一个类只需要实现java io
  • Spring学习笔记

    文章目录 Spring学习笔记 第一部分 Spring 概述 1 1 Spring 简介 1 2 Spring 发展历程 1 3 Spring 的优势 1 4 Spring 的核 结构 第二部分 核心思想 1 1 IoC 1 1 1 IoC
  • Linux---kvm虚拟化安装

    简介 KVM自Linux2 6 20版本后就直接整合到Linux内核 它依托CPU虚拟化指令集 实现高性能的虚拟化支持 由于与Linux内核高度整合 因此在性能 安全性 兼容性 稳定性上都有很好的表现 在KVM环境中运行的每个虚拟化操作系统
  • kunernets使用helm安装tiller踩坑

    为了安装服务端tiller 还需要在这台机器上配置好kubectl工具和kubeconfig文件 确保kubectl工具可以在这台机器上访问apiserver且正常使用 这里的node1节点以及配置好了kubectl https www j
  • Docker镜像详解(手拉手教你上传至阿里云,发布到私有库)

    1 什么是Docker镜像 镜像 是一种轻量级 可执行的独立软件包 它包含运行某个软件所需的所有内容 我们把应用程序和配置依赖打包好形成一个可交付的运行环境 包括代码 运行时需要的库 环境变量和配置文件等 这个打包好的运行环境就是image
  • mmdetetcion 使用经验

    mmdetection 使用经验记录 github repository https github com open mmlab mmdetection 1 环境配置 一定要按照pytorch官网指令安装pytorch以及其对应的库 比如我
  • 【转载】pycharm 中报错No module named ‘numpy‘

    之前安装了Python 后来因为练习使用Python写科学计算的东西 又安装了Anaconda 但是安装Anaconda之后又出现了一个问题 在命令行中编写Python命令调用numpy可以正常使用 但是在PyCharm中调用却会报错No
  • 华为OD机试真题 Java 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

    一 题目描述 如果三个正整数A B C A B C 则为勾股数 如果ABC之间两两互质 即A与B A与C B与C均互质没有公约数 则称 其为勾股数元组 请求出给定n m范围内所有的勾股数元组 二 输入描述 起始范围 1 lt n lt 10
  • 在S域内产生N个不重合的等径圆,voronoi多边形划分

    离散元中 常需要在特定边界中生成多个不重合的圆 若出现S域小了 或放入的圆多了或其半径大了的情况 可自动识别 可调整S radius或N参数 在S域内产生N个不重合的同直径圆 划分voronoi多边形 可选或修改radius和N参数 获得不
  • Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces论文代码部分跟踪

    Massively Parallel Rendering of Complex Closed Form Implicit Surfaces 是由独立研究者MATTHEW J KEETER发表在2020年SIGGRAPH上的一篇文章 主要提出