【blender几何节点】制作几何节点生成树

embedded/2024/10/18 12:22:11/

实际上,用pcg功能的工具去搭单个可控制性较强的pcg案例(如单个生成树)而言,确实难度不大。但是要实现诸如speedtree这样通用性比较强的应用or插件(精心设计的诸多可调节参数多带来的强通用性,使其能够适应不同种类的树木程序化制作),我想更多的还是需要:
对现实树木的认真观察和分析,什么样的树具备什么样的结构及纹理特征,其叶片的分布生长是否具备特点
以及可以的话,增加一些更风格化的生成方案。

想看效果的话可以直接点链接去我的b站看。
效果视频
在这里插入图片描述
在这里插入图片描述
3d8a017e77478e829143c40329db24.png#pic_center" alt="在这里插入图片描述" width="500" />

1.核心思想:

首先是概括,我们把树木的主体概括为三种不同级别的树枝:树干,一级树枝,二级树枝,加上树叶。
树干:顾名思义只有一根,作为支撑树木的主体部分
一级树枝:依附于树干上的第一批树枝,作为二级树枝的父级
二级树枝:依附于一级树枝上,是实例数目最大的树枝集合,主要是最为树叶的父级,即树叶最终都会生成在二级树枝上
在这里插入图片描述
通过生成并合并这些不同等级的树枝,最终形成树木的主体,并进行树叶的随机实例化(在二级树枝上)
在这里插入图片描述
加上树叶后,套上材质(注意这里实例化生成的时候,树叶实例是自带材质的,只有树木的材质由于涉及到uv解算,需要在blender里自行制作)
在这里插入图片描述

2.详细解析

2.1.树干生成

通过单体曲线实例进行曲线重采样(即对曲线实例进行再细分,把曲线划分为等分段数的控制点)
下方两个噪波纹理,主要提供x,y方向上的随机变化,实现树干的扭曲效果。
两个噪波纹理对应的输入,为噪波缩放,对应组输入中的:x方向扭曲程度与y方向扭曲程度
3d1b1aee1afbc0c6046.png#pic_center" alt="在这里插入图片描述" />

重点过程

曲线直线的输出几何数据
在这里插入图片描述
曲线重采样后的调试输出几何数据
3d54fb84efc69.png#pic_center" alt="在这里插入图片描述" />
此时我们虽然对曲线进行了循环边切割细分,但可以看到目前曲线仍是一条直线的形式存在
在这里插入图片描述
为什么需要设置位置?因为通过两个噪波纹理合并矢量(只赋予XY方向),然后基于该矢量来设置变量后会发现,整个树干在扭曲的同时,会出现世界空间上的偏移。(注意红框部分,特别将其断开重连了)
在这里插入图片描述

因为是整体的偏移,所以通过整体去调节就可以搞定了。
在这里插入图片描述

那么现在我们得到了树干的曲线实例(目前还不是mesh),并且这个曲线实例是已经分好了段的(即分好了控制点,图中为20等分段)。

树枝生成方法的复用

另外还需要注意一点的是,树干,一级树枝,二级树枝的基础单元,都是进行了曲线重采样的曲线直线,只是其长度不同罢了。(后续也需要在组输入引入相关的参数设置)
那么就是说,一级树枝、二级树枝的生成中,可以完全引入与树干生成部分一模一样的节点组。

2.2.一级树枝生成

既然已经有了等分段(带控制点)的树干,那么我们第一反应就是将一级树枝实例化于这些控制点上,就会使用到实例化于点上这个节点。
如下图,橙色部分就是直接复用的树干生成的节点组,这里对曲线直线的长度做了对应的缩小。
蓝色部分(上),一个是基于概率做了筛选,我们没必要让每一个控制点都延伸出一级树枝,这样显得很假。
蓝色部分(下),主要是给一级树枝赋予一个随机旋转,
PS(在做完整插件时,树干,一级树枝,二级树枝对应这部分复用的代码,涉及曲线直线长度的这部分,需要在组输入里加入对应的输入参数)
在这里插入图片描述

重点过程

实例化于点上节点的输入
从上往下:
树干几何数据,基于概率选择的控制点,树干曲线实例(一级树枝长度),随机旋转值,随机缩放值
在这里插入图片描述

基于概率选择控制点
主要是使用端点选择,跟概率相乘,从上往下进行筛选
在目前的条件下,端点选择即便是提供了20+的末端尺寸,也无法选择到20+以外的控制点(因为曲线实例就只做了20等分的重采样)
在这里插入图片描述

随机旋转值
注意这里需要由随机值转弧度值,再合并矢量的过程。
对齐至欧拉矢量节点试做应用随机旋转值的功能,增加曲线切向后,旋转方向会更集中(更加竖直)
在这里插入图片描述

有曲线切向vs无曲线切向
在这里插入图片描述
在这里插入图片描述

随机实例缩放
ps:记得补充对应的上下界参数,作为组输入参数
3d1f78.png#pic_center" alt="在这里插入图片描述" />

2.3.二级树枝生成

二级树枝在一级树枝的基础上生成,刚好我们的一级树枝的的每一个曲线实例也是做过重采样的。
同样的,由于都是对重采样过的实例单体做处理,跟一级树枝生成的部分,复用率非常的高。
ps:同样这里少做了组输入的参数,如二级树枝的曲线单元长度,稍后要补做
在这里插入图片描述

对二级树枝生成来说,实例化于点上节点的输入则是:
一级树枝的几何数据,基于概率选择的控制点,树干曲线实例(二级树枝长度),随机旋转值(全部可复用)
因为这里二级树枝整体的体积已经比较小了,就没有再做随机的缩放
在这里插入图片描述

2.4.树枝的网格化

完了树干,一级树枝,二级树枝的生成后,实际上仍看不到数的实体。
这是因为当前上述实例仍处于一个曲线实例,而非网格实例的状态。
在这里插入图片描述

所以需要通过曲线到mesh的转换,使其在渲染中可见。(类似于3ds max的样条线实例化)
诚然可以直接通过曲线到网格节点来做转换,但是这么做出来的mesh半径完全一致,所以我们需要基于样条线的端点情况,给其赋予不同的半径,从而实现树枝半径的递减。
在这里插入图片描述

这里主要使用的是捕捉属性节点,捕捉各曲线实例中端点(控制点)的系数。
在这里插入图片描述

为了简单体现,我们对生成的单个曲线实例来做捕捉属性,可以看到下列十个端点(控制点)的信息。
在这里插入图片描述
在这里插入图片描述

可以看到越高的端点,系数越大,那么最终的曲线结果就是一条从低到高逐渐变亮的曲线
在这里插入图片描述

对于一级树枝的几何数据,动态半径后的效果如下
在这里插入图片描述

2.5.树叶的生成

树叶的实例化同样是实例化于点上,复用的东西很多。
当然树叶不可能再通过几何节点来做了,复杂的形状用几何节点来做的效率很低
这里通过自己制作的树叶单体来作为几何实例,实例化于二级树枝的控制点上
在这里插入图片描述

树叶单体
在这里插入图片描述

2.6.树干的材质

两种方法,一种是使用到贴图材质的,这种需要独立的计算uv,而使用blender自带的材质节点来做的话,就不需要额外的做uv计算。

独立uv计算

uv拆分实际上就是对mesh做裁剪,使之成为平面。
对于圆柱形物体来说,裁剪方法比较简单,我们在对树枝做mesh转换的时候,取横纵坐标直接作为矢量输出即可,虽然接缝处处理的不太美观。
在这里插入图片描述

主树干展开后的效果
3d7f2c977a5d2.png#pic_center" alt="在这里插入图片描述" />

ps:这里对一级、二级树枝展开后的UV无法正确导出,我一直没处理好这个问题。。。所以只能放弃了使用第三方贴图材质的路子,改用blender自带的材质节点来连树干材质

blender_149">blender材质制作

没有做uv展开的情况下,无法使用贴图作为材质,只能用blender自己的材质
两个噪波纹理相连,输出波纹状效果,套上颜色渐变,增加凹凸处理转换为法线即可
在这里插入图片描述


http://www.ppmy.cn/embedded/28356.html

相关文章

C语言——栈的实现

栈(Stack)是一种基于先进后出(LIFO)原则的数据结构,类似于我们平常堆放书籍或者盘子的方式。 栈通常是从高地址向低地址增长的,也就是说,栈顶位于较高的内存地址,而栈底位于较低的内…

《苍穹外卖》Day12部分知识点记录——数据统计-Excel报表

一、工作台 需求分析和设计 接口设计 今日数据接口订单管理接口菜品总览接口套餐总览接口订单搜索(已完成)各个状态的订单数量统计(已完成) 代码实现 今日数据接口 1. WorkspaceController 注意不要导错包了 package com.sk…

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK,资源全部APK本地化,基本上不跑服务器宽带 2.优化后端,基本上不再一直跑内存,不炸服响应快! 3.优化前端&#xff0c…

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。 设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中,反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

如何判断自己是不是自恋型人格障碍?

自恋型人格障碍是最为热议的一种人格障碍类型,网上的声讨波澜壮阔,而这种发声往往是来自受害者,而不是自恋型人格障碍者人。 自恋型人格障碍者往往是意识不到自己的问题,其身边人往往是受害最深的,尤其是亲密关系经历者…

Qt案例 创建使用QNetworkReply,QNetworkRequest下载http/https资源的输出进度的控制台程序

文章目录 概要整体架构流程1. 设计控制台传递参数的字符串格式2. 定义下载数据结构并且能通过main获取数据3. 创建下载类Dal_QtDownEngine实现使用QNetworkReply下载数据相关功能4. 使用QTimer 定时计算下载速度,下载大小,倒计时等 技术细节- 临时下载文…

java学习笔记11

20. 字符串类 字符串是指一连串的字符,它是由许多单个字符连接而成。字符串可以包含任意字符,这些字符必须包含在一对双引号""之内,例如:“abc”.java中封装了3个字符串类,分别是String类、StringBuffer类、StringBuilder类,都在java.lang包中。20.1 String类的…