第015封“情书”泥什么意思?houdini Mandelbrot曼德布罗特集合)
第015封“情书”泥什么意思?houdini Mandelbrot曼德布罗特集合
- 自定义的mandle三维函数
- A1)二维公式-函数定义部分:
- 1)mandel分型二维化公式
- 2)如何定义mandel函数
- 3)这个函数要实现的作用
- 4)如何判断无穷大时条件
- 5)判断没超过最大值时的返回
- A2)二维公式-执行函数部分:
- 6)如何用条件语句执行自定义函数
- 7)另一种可调参数变量控制迭代值
- B)自定义三维mandel函数-部分
- 01)定义函数
- 02)执行函数
- C)渲染sdf体积-部分
- 03)如何不转成polygon而渲染sdf体积
- 04)如何提sdf体积解算速度
- ▉公式:曼德布罗特集合
- 1)grid
- 2)pointwrangle
- B)“洛德布罗特集合”函数的三维化
每天翻译一篇教程,这就是我写给houdini的情书-<Entagma系列>Houdini 2016教程
泥可积德慢:尔等只是一滩泥,只有在我的手里,你们才能有人的模样
即使深陷污泥,即使被别人踩在脚底,也要努力活下去,因为泥路上有你啊,肉妮,你这个泥菩萨。
面对泥泞,可以低头看地,盯着脚下困难的泥沼,也可以抬头看天,那漫天的星辰,你有你的自由选择。但这世上若没有泥泞,种籽怎会发芽?树木又怎会生根?若没有污泥,莲花何以为生,又谈何出污泥而不染?
人生一世,草木一秋,瞑目皆归泥。我们早晚都会化成泥的。
这一节我们看一下:
殉泥派如何把比丘泥锁在一个自定义的mandel函数里。。
自定义的mandle三维函数
这一节要实现的效果…
▉今天是41岁第353天周日
这是写给houdini的 第015封“情书”
先上obj流程图
本节需要注意的知识点:A)自定义二维mandel函数-部分:
A1)二维公式-函数定义部分:
1)mandel分型二维化公式
xnew = x*x –y*y+x0;ynew = 2*x*y+y0;
2)如何定义mandel函数
function+数据类型+函数名(3个浮点+1个整数)
3)这个函数要实现的作用
通过给定的“坐标系” ,在一组公式趋于无穷大时,所需迭代的次数。
4)如何判断无穷大时条件
if(xnew*xnew+ynew*ynew> 8 ){//如果成立,返回一个给定的值i,在本例应该返回整数;return(i); //返回i}
5)判断没超过最大值时的返回
x= xnew;y= ynew;}return(imax); //这个循环返回imax
A2)二维公式-执行函数部分:
6)如何用条件语句执行自定义函数
- 用if条件语句,(<最大迭代数值)满足条件的点,用set函数设置为:白色,不满足条件的点,设置黑色
//---- Main----
Mandel (@P.x,@P.y,@P.z,6) ;
// 条件判断,以此为依据上色
if( Mandel (@P.x, @P.y, @P.z, 6)<6) { //使用if语句如果<6,因为这是最大的“迭代数”这个函数不需要无限延伸v@Cd = set(1,1,1);//白色;
}
else{v@Cd = set(0,0,0)//黑色
7)另一种可调参数变量控制迭代值
//---- Main---
int maxiter =chi(“Maxiter”); //变量改成引用参数
if( Mandel (@P.x, @P.y, @P.z, maxiter)<maxiter) {v@Cd = set(1,1,1);
}
else{v@Cd = set(0,0,0);
}
B)自定义三维mandel函数-部分
01)定义函数
//增加了z轴;4变量(n,r,theta,phi)
//---- functions ----
function int Mandel (float x0, y0, z0; int imax) float x, y, z, xnew, ynew, znew, n=ch("n"),r,theta,phi;int i; x=x0;y=y0;z=z0;for(i=0; i < imax; i++ ){ .
//-------------三维公式部分---------------
//特别注意:公式的x,y,z要看清楚,稍微写错效果就不对r=sqrt(x*x + y*y +z*z);theta = atan2(sqrt(x*z+y*y),z); // 注意是x*zphi = atan2(y,x);xnew = pow(r,n)*sin(theta*n)*cos(phi*n)+x0;ynew = pow(r,n)*sin(theta*n)*sin(phi*n)+y0;znew = pow(r,n) *cos(phi*n)+z0;
02)执行函数
//-------------三维公式执行---------------if(xnew*xnew+ynew*ynew+znew*znew> 8 ){return(i); }x= xnew;y= ynew;z= znew;}return(imax);
}
C)渲染sdf体积-部分
03)如何不转成polygon而渲染sdf体积
// 给渲染的物体面板增加两个参数接口:volume Isosurface和Volume Density
04)如何提sdf体积解算速度
//就是实时框住volume,只计算范围内的volume,从而提高解算速度。
用新的volume:减少单位内的体素数量=40.
执行mandel函数。
用vomumebound节点限制激活范围内的volume,节省计算量。
用peak节点扩展一下volume体积。
连接上之前的高单位体素=400的volume,把它的尺寸size降为0.
接下来理论部分
▉公式:曼德布罗特集合
曼德布罗特集合
函数的两个功能
a)对grid上每个点进行循环。
b)如果计算值∞(无穷大)=黑色;反之=白色。
这是作者推荐的专门讲解如何编程实现“曼德布罗特集合”和背后数学原理的一个youtube主:https://www.youtube.com/watch?v=pLtViSqkPvQ
接下来
开始正式制作
使用软件houdini16.5
1) grid
X y轴;33;200200
A1)函数定义部分:自定义“曼德布罗特函数”返回一个整数
2) pointwrangle1
问题1:如何自定义函数
a)我们定义了函数://---- functions ----
function int Mandel (float x0, y0, z0; int imax) {
// "Function"意思是“定义一个函数”;
// “int Mandel”意思是“数据类型+函数名”返回整数
// "float x0, y0, z0,int imax"意思是“设置参数对象"
float x, y, z, xnew, ynew, znew;int i; //定义一些变量类型,x=x0; //坐标变量初始化,y=y0;z=z0;
问题2
mandel函数的二维公式
b )循环函数计算mandel公式:
//imax这是定义函数时,可以调用的一个值;for(i=0; i < imax; i++ ){//首先执行“曼德布洛特几何函数”xnew = x*x –y*y+x0; ynew = 2*x*y+y0;
c)条件判断:如果无穷大( 使用一种偷懒的方法,直接使用一个值比如8 ) 返回当前 i 数值if(xnew*xnew+ynew*ynew > 8 ){ return(i); //返回i}
c-1)否则 返回最大迭代数imaxx= xnew;y= ynew;}return(imax); //这个循环返回imax
}
A2)主程序部分,执行自定义函数
//---- Main----
Mandel (@P.x,@P.y,@P.z,6) ;
a)任务:调用函数:
if( Mandel (@P.x, @P.y, @P.z, 6)<6) {
//使用if语句如果<6,因为这是最大的“迭代数” 这个函数不需要无限延伸v@Cd = set(1,1,1); // <6的点给它白色;
}
else{v@Cd = set(0,0,0); // >6的点给它黑色;
}
提高grid网格数
1)grid
Xy轴;55;400400 ///增加grid分辨率
设置maxiter为可调参数
2)pointwrangle
int maxiter =chi(“Maxiter”); //变量改成引用参数
if( Mandel (@P.x, @P.y, @P.z, maxiter)<maxiter) {v@Cd = set(1,1,1);
}
else{v@Cd = set(0,0,0);
}
设置引用参数:Maxiter=8
B)“洛德布罗特集合”函数的三维化
问题3:如何使用mandel函数的三维公式
3) pointwrangle2
//---- functions ----
function int Mandel (float x0, y0, z0; int imax) float x, y, z, xnew, ynew, znew, n=ch("n"),r,theta,phi;int i; x=x0;y=y0;z=z0;for(i=0; i < imax; i++ ){ .
//-------------三维公式部分---------------r=sqrt(x*x + y*y +z*z);theta = atan2(sqrt(x*z+y*y),z); // 注意是x*zphi = atan2(y,x);xnew = pow(r,n)*sin(theta*n)*cos(phi*n)+x0;ynew = pow(r,n)*sin(theta*n)*sin(phi*n)+y0;znew = pow(r,n) *cos(phi*n)+z0;
//-------------三维公式执行---------------if(xnew*xnew+ynew*ynew+znew*znew> 8 ){return(i); }x= xnew;y= ynew;z= znew;}return(imax);
}
问题4:如何使mandel函数三维化显示
4) volume1
Name=density
Size:333
3)Uniform Sampling Divs = 200
3) pointwrangle2
)勾选√Bind Each Volume to Density //每个体像素绑给density
int maxiter =chi(“Maxiter”);
if( Mandel (@P.x, @P.y, @P.z, maxiter)<maxiter) {f@density= 0.0;
// 唯一改变的地方,改成density,另外外面区域密度=0
}
else{f@density= 1.1;
}
N=4;Maxiter=8
N=4;Maxiter=1~8
N=1~8;Maxiter=8
5) convertvdb1[1]
提高volume精度
4) volume1
- Uniform Sampling Divs = 400
因为直接渲染SDF速度会比转换成多边形快很多,所以我们要用sdf渲染,但是默认渲染器没有sdf渲染接口。
问题5:如何渲染sdf体积
给渲染geo物体增加两个参数接口
6)mantra1:
a) 点击
b) 弹出窗口:在左下角Filter里输入vol筛选出上方Render Properties面板下的与volume有关的选项
c) 选择volume Isosurface和Volume Density拖动到右边sampling下面。
d) 现在sampling面板下就增加了这两个参数
e) 勾选volume Isosurface就可以渲染SDF。
问题6)如何提sdf体积解算速度
操作:复制volume1,volumewrangle1
7)volume2
Size:555 //增加体积尺寸
Uniform Sampling Divs=40 //减小体素单位数量
8)volumewrangle2
- N=2.2
9)vomumebound1
- Bounding Value=0.001 //这是仅仅激活box范围内的volume。
10)peak1
- Distance=0.02 //扩展一点点。
操作:复制刚才的volume,volumewrangle,convervdb,连接volme3
11)volume3
Size全部为0//它继承peak传过来的volume
Size = 400
volume3框住bound后的大小比自定义的范围小多了,这就节省了计算量
12) volumewrangle3
N=5。
关联复制到volumewrangle2的N上。
13) convertvdb2 //转SDF
14) convertvdb3 // 转Polygons
制作完毕
下一节:速建Quick Tip. Loops & Subdivision迭代循环细分
教程翻译自entagma的网络教程,本文图片全部原创,版权归原作者所有。
扫一扫关注该公众号
第015封“情书”泥什么意思?houdini Mandelbrot曼德布罗特集合)相关推荐
- 第075封“情书”:百撕不得其解Tearing Cloth<Entagma>Houdini 2018
▉通往自由的路上充满了撕扯狡诈,与阴谋,难道"卑鄙是卑鄙者者的通行证"是真的?- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdin ...
- 第077封“情书”:弯弯绕<Entagma>Houdini 2018
▉ 我命硬学不会弯腰- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdini的情书"] █命运,就算你想尽一切办法,也休想压弯我追求理想的执着 ...
- 第060封“情书”:相对论 Signed Distance Outlines Houdini
第060封"情书":相对论 20180507 Quicktip- Signed Distance Outlines<Entagma>Houdini 2018 ▉ 中国 ...
- 第079封“情书”:“I服了You”Cloth Solver From Scratch<Entagma>Houdini 2018
▉ 我从来不会对任何人任何事投降,直到遇见你.- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdini的情书"] █城头变幻大王旗:曾经面对刁 ...
- 第096封“情书”:十六亩地PDG For Design Work Pt. 3 - Setting Up Distributed PDG<Entagma>Houdini 2019
▉ 几分耕耘就有几分收获 .- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdini的情书"] 大地 █ "我梦中的家园:cg农场& ...
- 第023封“情书”: 草书 Point Advection点的平流染色线
▉又一波韭菜长好了,该收割了,各位庄辛苦了! 像一棵 海草 海草随波飘摇,海草海草海草,随风飘摇!海草 海草浪花里舞蹈,海草 海草管它骇浪惊涛我有我乐逍遥,人海啊 茫茫啊随波逐流浮浮沉沉. 庄:韭菜的 ...
- 第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据
第068封"情书":耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据 每一天都是神的恩赐,请不要辜负. ▉ 热情在慢慢消退,逐渐冷却,惰性的冰川大兵 ...
- 蝙蝠侠一键改udid软件_对于您的第一个HTML代码,让我们帮助蝙蝠侠写一封情书...
蝙蝠侠一键改udid软件 by Kunal 由Kunal 对于您的第一个HTML代码,让我们帮助蝙蝠侠写一封情书 (For your first HTML code, let's help Batma ...
- 《致盛夏的七封情书》 ------------ 第一篇《晨曦》
写了一个短篇小说,<致盛夏的七封情书>,一共七篇,采用拼凑式的记述和多位不间断的场景转换,讲一个小小的爱情故事,不精美,也不感人,纯粹给目前毫无道理的无望生活找一点存在感. 第一篇< ...
最新文章
- spark重要端口号
- easymock快速入门
- C# 委托:把方法组合到一个数组中使用
- python pandas csv 追加 空行,python – Pandas:read_csv在空行后忽略行
- android 如何正确使用 泛型 和 多参数 “偷懒”
- 2继电器控制单相电机正反转
- php 批量导入表格,织梦dedecms批量导入excel表文章内容插件
- Xmind激活版双击文件无法打开的解决方案
- windows截图指令命令/cmd中截图指令
- 网易云音乐工程师,亲自揭晓评论实现技术!| 技术头条
- 搜索引擎免费登录入口大全(转)
- u-boot (1) —— 编译分析
- 安卓进不去系统如何备份数据
- 互联网思维方式(一)
- 如何修改mysql占用的端口号_修改mysql端口号(mysql的端口号)
- 成语学习微信小程序源码
- Neurosynth package安装及使用
- 一些有意思的文章和资源
- 离线安装K3S Server(v1.19.8+k3s1)
- 时针分针一天到底重合多少次?