HoudiniVex笔记_P23_SDFBasics有向距离场

原视频:https://www.youtube.com/playlist?list=PLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI
Bili:Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili

Houdini版本:19.5

1、什么是SDF

Houdini支持两种体积类型,它自己的体积格式(也有两种,Fog 和SDF )和VDB格式。

Volume的两种类型:Fog volumeSDF volume。是Houdini自带的不同类型的体积,特点是每个体素都有值。Volume(体积)由voxel(体积元素,后面简称为体素)组成。

Fog volume实际是储存了每个体素的密度,常应用于流体模拟等。(想了解可以前面的第10节笔记)
SDF volume中(SDF Signed Distance Filed 是带符号的距离场),每个体素存储了一个数值数值大小表示到表面的距离,正数代表在物体外,负数代表在物体内,0表示在物体表面(需要精度较高)。所以将几何体转化为碰撞物的时候,实质就是转化为SDF,利用体素的数值来判断是否发生碰撞等

更多体积相关可以看这篇文章的简单介绍:Houdini中体积SDF/fog/volume/db的一些理解和区别

2、SDF节点及参数

①创建一个类型为Polygon的Sphere节点,再添加一个vdbfrompolygons节点,及一个VolumeWrangle节点,

②用上面为例,讲讲vdbfrompolygons节点的一些设置

③我们仅保留点,看看vdbfrompolygons节点设置的具体表现
 第三、四、五张图为用点代替体素,的一个截面,

 3、volumegradient函数 

volumegradient() 函数返回一个向量值,该值为距离值递增方向的矢量值(下面试试让这个值代替体素的法线),(gradient的中文感觉总差点意思,后面还是以英文代替吧),

4、使用Fog Volume可视化SDF值

挺简单的,还是记录下,

5、使用VEX对SDF轮廓简单修改

可以直接修改SDF的【@surface,来实现物体表面/轮廓的改变(对轮廓进行偏移操作),
值相加,物体的表面/轮廓向内偏移,即收缩
值相减,物体的表面/轮廓向外偏移,即扩大

eg.简单记录下,感兴趣可以试试,

 6、Exercise—修改SDF轮廓与Animated

基于时间和三角函数,对SDF轮廓进行动态修改。

eg.直接使用【5、使用VEX对SDF轮廓简单修改】的案例,仅对VolumeWrangle节点进行修改,

float val = sin(@P.y * $PI * chi('num') + @Time * 10) * chf('dist');f@surface += val;

结果为:在 num = 6,dist = 0.07条件下,

7、修改SDF的Gradient值

还是基于三角函数对物体轮廓进行偏移,比上面的稍微复杂一丢丢, 不晓得可以应用到哪方面(云层?),还是记录下。

eg.先上结果,

①节点及设置如下,

②对offset_with_voxel_val_and_gradient节点的一些补充,

float val = f@surface;
vector dir = volumegradient(0, 'surface', @P);//顶视图视角下,Gradient值与dirXZ.x值的夹角
vector dirXZ = dir;
dirXZ.y = 0.0;
dirXZ = normalize(dirXZ);
float ang = atan2(dirXZ.z, abs(dirXZ.x));   
//atan2返回两个向量之间的夹角
//因为atan2三角函数范围是-π到π,所以使用绝对值abs,使其范围为0到π//多重映射
float v = sin(ang * chi('num'));    //值范围-1到1
v = fit11(v, 0, 1.0);               //重映射,值范围0到1
v = chramp('ramp', v);              //继续重映射,随便设
v = fit01(v, 0.0, chf('dist'));     //重映射,值范围0到【自定义】f@surface += v;    //结合sin函数的规律,去理解v值的变化

 8、SDF与基础碰撞

挺简单的,仅记录下,

9、Exercise—SDF碰撞与Animated

与上类似,不过这次加入解算器,让小球在Grid上转动,也不算复杂,记录下,

10、Exercise—SDF Gradient与向量Animation

点由内向外运动,运动方向位gradient。

eg.先上结果,原模型为橡皮模型,

①节点连接及设置,(代码在下一个案例),

11、基于SDF的扩展向量场

大概与上类似,不过加入了curlnoise() 噪波函数,让其运动起来跟随噪波特性(随机但又有序)。

eg.先上结果,

 ①直接使用【10、Exercise—SDF Gradient与向量Animation】的案例,下图为节点连接及设置,相同设置部分不再赘述
② 完整代码如下,

//    copy SDF节点代码
vector dir = volumegradient(1, 'surface', @P);
vector cdir = curlnoise(@P * chf('smoth') + @Time * chf('speed')) * chf('scale');v@velocity = normalize(dir + cdir);
//    move节点代码
float val = volumesample(1, 'surface', @P);
vector dir = volumesamplev(3, 'velocity', @P);
//vector dir = volumegradient(1, 'surface', @P);if(val >= 0.0){     //在轮廓外面的点重新实例化vector pos = point(2, 'P', @ptnum);@P = pos;
}@P += dir * chf('speed');   //点沿法线/gradient方向移动
@N = dir;
f@val = val;
//    pointwrangle3节点代码(最后一个节点)
int pt = addpoint(0, @P + @N * 0.5);
setpointattrib(0, 'Cd', pt, v@Cd);
int line = addprim(0, 'polyline', @ptnum, pt);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用wxPython和PyMuPDF提取PDF页面指定页数的内容的应用程序

在本篇博客中,我们将探讨如何使用wxPython和PyMuPDF库创建一个简单的Bokeh应用程序,用于选择PDF文件并提取指定页面的内容,并将提取的内容显示在文本框中。 C:\pythoncode\new\pdfgetcontent.py 准备工作 首先,确保你已经安装了…

大数据-玩转数据-Flink网页埋点PV统计

一、说明 衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,PV)。用户每次打开一个页面便记录1次PV,多次打开同一页面则浏览量累计。 一般来说,PV与来访者的数量成正比,但是PV并不…

虹科干货 | 化身向量数据库的Redis Enterprise——快速、准确、高效的非结构化数据解决方案!

用户期望在他们遇到的每一个应用程序和网站都有搜索功能。然而,超过80%的商业数据是非结构化的,以文本、图像、音频、视频或其他格式存储。Redis Enterprise如何实现矢量相似性搜索呢?答案是,将AI驱动的搜索功能集成到Redis Enter…

STABLE DIFFUSION模型及插件的存放路径

记录下学习SD的一些心得,使用的是秋叶大佬的集成webui,下载了之后点击启动器即可开启,文件夹中的内容如下 主模型存放在models文件下的stable-diffusion文件夹内,一些扩展类的插件是存放在extensions文件夹下

【设计模式】责任链模式

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…

移动端预览指定链接的pdf文件流

场景 直接展示外部系统返回的获取文件流时出现了跨域问题: 解决办法 1. 外部系统返回的请求头中调整(但是其他系统不会给你改的) 2. 我们系统后台获取文件流并转为新的文件流提供给前端 /** 获取传入url文件流 */ GetMapping("/get…

电脑打开对话框中没有桌面这个选项解决办法

问题描述: 左侧栏中的桌面图标不显示 解决方法: 左侧的空白处右键-显示所有的文件夹 这时所有的文件夹都显示了!

从鲁大师十五年,寻找软件的生存法则

千禧之年,国内互联网用户数量首次突破1000万大关,互联网的腾飞正式拉开序幕。 从彼时算起,中国互联网发展也不过23年,而我们记忆中那个摇着蒲扇的老头,却占据了其中关键的十五年。 这十五年中有太多曾经为人熟知的软件…

CHATGPT源码简介与使用指南

CHATGPT源码的基本介绍 CHATGPT源码备受关注,它是一款基于人工智能的聊天机器人,旨在帮助开发者快速搭建自己的聊天机器人,无需编写代码。下面是对CHATGPT搭建源码的详细介绍。 CHATGPT源码的构建和功能 CHATGPT源码是基于Google的自然语言…

Linux——基础IO(1)

目录 0. 文件先前理解 1. C文件接口 1.1 写文件 1.2 读文件 1.3 输出信息到显示器 1.4 总结 and stdin & stdout & stderr 2. 系统调用文件I/O 2.1 系统接口使用示例 2.2 接口介绍 2.3 open函数返回值 3. 文件描述符fd及重定向 3.1 0 & 1 & 2 3.2…

【Spring Cloud Alibaba】RocketMQ的基础使用,如何发送消息和消费消息

在现代分布式架构的开发中,消息队列扮演着至关重要的角色,用于解耦系统组件、保障可靠性以及实现异步通信。RocketMQ作为一款开源的分布式消息中间件,凭借其高性能、高可用性和良好的扩展性,成为了众多企业在构建高可靠性、高吞吐…

stable diffusion 单张图片换头roop安装配置

1.首先安装秋叶大佬的webui 2.然后在拓展里面搜索roop,下载roop插件,然后重启webui 3.重启后,在文生图和图生图的界面,就可以看到roop的入口 4.这里面,需要提前安装Visual Studio. 勾选一些必要的选项,这里可以参照b站的视频 # 秋叶版本Stablediffusion的Roop插件的安装 …

使用 Python 在 NLP 中进行文本预处理

一、说明 自然语言处理 (NLP) 是人工智能 (AI) 和计算语言学的一个子领域,专注于使计算机能够理解、解释和生成人类语言。它涉及计算机和自然语言之间的交互,允许机器以对人类有意义和有用的方式处理、分析…

安卓中常见的字节码指令介绍

问题背景 安卓开发过程中,经常要通过看一些java代码对应的字节码,来了解java代码编译后的运行机制,本文将通过一个简单的demo介绍一些基本的字节码指令。 问题分析 比如以下代码: public class test {public static void main…

Java课题笔记~ JSP编程

4.1 JSP基本语法 JSP (全称Java Server Pages) 是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。 JSPHTMLJava JSP的本质是Servlet 访问JSP的时候&#x…

【设计模式】原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接…

基于微服务+Java+Spring Cloud +Vue+UniApp +MySql实现的智慧工地云平台源码

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念: 智慧工地就是互联网建筑工地,是将互联网的理念和技术引入建筑工地,然后以物联网、移动互联网技术为基础,充分应用BIM、大数据、人工智能、移…

Android布局【RelativeLayout】

文章目录 介绍常见属性根据父容器定位根据兄弟组件定位 通用属性margin 设置组件与父容器的边距padding 设置组件内部元素的边距 项目结构主要代码 介绍 RelativeLayout是一个相对布局,如果不指定对齐位置,都是默认相对于父容器的左上角的开始布局 常见…

MQTT宝典

文章目录 1.介绍2.发布和订阅3.MQTT 数据包结构4.Demo5.EMQX 1.介绍 什么是MQTT协议 MQTT(消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协…

安卓快速开发

1.环境搭建 Android Studio下载网页:https://developer.android.google.cn/studio/index.html 第一次新建工程需要等待很长时间,新建一个Empty Views Activity 项目,右上角选择要运行的机器,运行就安装上去了(打开USB调试)。 2…