Houdini 快速点云连线以及避免重采样的技巧

今天和挪威的同事讨论点云的vex函数pcunshaded(),结果两个人都没搞太明白倒是转到了另一个话题,就是点云采样制作连线怎样避免重复计算,这里做一下记录。

如果采用严格的避免重复连接的方法,我们可以在每个点上增加两个点属性,一个是确定自己是否已经建立连线的判断属性,另一个是存储连线对应的另一端点的点数,同时使用setattrib()函数在对应点上标记自己的点数。但由于setattrib()的局限性,这种方法只能从一个点上生出一根(int or float),三根(vector), 四根(vector4)以及九根(matrix3)这样的线段数,所以局限性比较大。

还有一种方法不是非常严格的直接避免重复,而是在重复连线之后再删除overlap的连线,这种方法虽然有计算冗余,但是却非常直接而且连接数是可以任意变化的。

Houdini在connect adjacent pieces节点中已经实现了这个方法,我从中提取出来稍微做了修改。下图是将connect adjacent pieces精简后的样子:

其中connect_nearby_points的代码修改完之后为:

/// Creates a new line between the given point numbers.
void createline(int pt_a; int pt_b)
{
    int prim = addprim(0, "polyline");
    addvertex(0, prim, pt_a);
    addvertex(0, prim, pt_b);

}

/// Returns true if the item is contained in the list.
int contains(string list[]; string item)
{
    foreach(string str; list)
    {
        if (item == str)
            return 1;
    }

    return 0;
}

int handle = pcopen(0, "P", @P, chf("../searchradius"), chi("../maxsearchpoints"));
int max_connections = chi("../maxconnections");
string other_name;
string known_pieces[];
int num_connections = 0;
string my_name = [email protected];

while (pciterate(handle) && num_connections < max_connections)
{
    pcimport(handle, "name", other_name);

    // Don‘t create connections to multiple points on the same piece, or
    // to other points on our piece.
    if ((my_name != other_name)  & (num_connections == 0 || !contains(known_pieces, other_name)))
    {
        vector other_P;
        pcimport(handle, "P", other_P);
        [email protected] = length(other_P - @P);

        int other_ptnum;
        pcimport(handle, "point:number", other_ptnum);

        createline(@ptnum, other_ptnum);
        ++num_connections;
        if (num_connections < max_connections)
            push(known_pieces, other_name);
    }
}

pcclose(handle);

这段代码的精妙之处在于可以将点通过name属性进行分类,比如左手和右手的点进行连线,那么全在左手上的点之间是绝对不会相互进行连线的。其中 !contains(known_pieces, other_name) 确保了另一端点是不在同一个name下面的。另外 push(known_pieces, other_name) 决定了该点只会与另一个name下的所有点只会生成一根连线,好比左手上的一个点与右手在的一个点产生连线后就再也不会访问右手的其他点了,当然这个在我们的这个需求里面是可有可无的,因为我在事前用点数给每个点取了单独的名字,所以没有一个点在同一个name下。

最后的技巧就在clean里面的fix overlaps上,这个确保重复再亮点之间建立的连线都会清理干净至一条,其实我废话了这么多重点都在这个开关上 :P

时间: 2024-10-13 06:26:50

Houdini 快速点云连线以及避免重采样的技巧的相关文章

云宏WinCloud助力银行业务快速入云云宏WinCloud助力银行业务快速入云

当前,人类社会各方面正在变得"互联网化",互联网生活.互联网制造.互联网贸易正在取代传统的经济运行方式.互联网金融迅速发展,形成了服务互联网经济的主流金融模式之一.商业银行积极创新互联网金融业务,增强服务实体经济的能力. 随着银行业务的互联网化,对支撑业务运行的IT系统也提出了更高的要求.现有传统的IT建设及管理方式已不能满足现有及未来银行业务的发展需求,现有IT系统面临了前所未有的挑战,具体表现在如下几个方面. 传统IT架构无法满足应用的快速部署 十年前,银行开展的业务很少,银行与用

快速入门云开发

什么是云开发 这里引用官方的一段描述: 云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维.同时云开发提供的静态托管.命令行工具(CLI).Flutter SDK 等能力极大的降低了应用开发的门槛.使用云开发可以快速构建完整的小程序/小游戏.H5.Web.移动 App 等应用. 不管怎样,云开发一定未来的一个趋势,其云开发现在就已经很流行了,都2020年了,如果你连云开发是什么都还不知道,那

如何快速定位云主机的故障

作为一名从事Linux运维行业多年的运维人员,分享一下曾经在运维过程中遇到过的荆手的故障分析,供大家分享,如果你在使用云计算中有什么问题,可以根据以下方式来查找 遇到服务器故障,问题出现的原因很少可以一下就想到.我基本上都会从以下步骤入手: 一.尽可能搞清楚问题的前因后果 不要一下子就扎到服务器前面,你需要先搞明白对这台服务器有多少已知的情况,还有故障的具体情况.不然你很可能就是在无的放矢. 必须搞清楚的问题有: 故 障的表现是什么?无响应?报错?故障是什么时候发现的?故障是否可重现?有没有出现

教你如何快速分清云平台与云管平台的区别?

我们都知道,云是分层的,目前大家比较公认的IT运维云架构是划分为基础设施层.平台层和软件服务层三个层次的.对应名称分别为IaaS.PaaS和SaaS. 关于这个我们之前也介绍过很多,比如下面这张有名的pizza图: 还有不清楚的可以戳下面的链接: 一个通俗例子彻底搞懂IaaS.PaaS和SaaS! 然后,我们又发现一个新的概念混淆出现了,那就是云平台和云管平台,一字之差,难道不是一个概念吗? 那么我们就来一起探讨一下吧! 首先,什么是云平台? 云计算平台也称为云平台,是指可以提供IaaS.Paa

使用aliyun cli工具快速创建云主机

参考文档: https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11186623.3.2.b57vQp 步骤 创建AccessID 下载aliyun-cli工具 建议整 golang 版本, 一个二进制,没有任何依赖 配置AccessID 还是前面那个链接,配置阿里云CLI段落 创建云主机(创建后是未启动状态) 指令 aliyun ecs CreateInstance --ImageId="ubuntu_16_0402_64_

阿里云服务器线上环境配置

mysql安装: 1. git安装: 1.下载安装包: sudo wget http://learning.happymmall.com/git/git-v2.8.0.tar.gz 2.安装git依赖包: sudo yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker 3.解压git压缩包后进

基于开发者中心DevOps流水线快速上云

导读:"DevOps"这个词现在很流行,它具体指的是什么呢?本文介绍了DevOps和开发者中心DevOps流水线,图文并茂,解答您的疑惑. 那么DevOps是什么?开发者中心<DevOps流水线>是什么?或许在这里能解决你的一些疑惑--DevOps是什么?"DevOps"是现在非常流行的一个词,它代表的是什么呢?是一种理念?还是一种工具?还是一种技术?其实觉得迷茫的绝对不止您一个人. 词意表述为"软件开发人员(Dev)"和"

腾讯云从业者线上课程(一)--云计算发展历史

云计算发展历史 1.1自建机房 1.2传统IDC 1.3云计算 1.4云计算演进之路 原文地址:https://www.cnblogs.com/bk770466199/p/12283187.html

AOPR快速破解Office文档密码的三个技巧

Advanced Office Password Recovery是一款专业的Office密码破解工具,AOPR软件并不复杂但是可以在极短的时间内轻松破解Excel2013或者Word2016的密码.本文将具体介绍几个在使用Advanced Office Password Recovery破解Office文档密码的技巧.  Advanced Office Password Recovery密码破解工具 技巧一:估计Office文档密码特点 为了尽可能缩短Advanced Office Passw