语法
XYZ 分割(笛卡尔空间)
- split(axis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }
- split(axis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }*
- split(axis, adjustMode) { size1 : operations1 | ... | sizen-1 : operationsn-1 }
- split(axis, adjustMode) { size1 : operations1 | ... | sizen-1 : operationsn-1 }*
UV 分割(纹理空间)
- split(direction, surfaceParameterization, uvSet) { size1 : operations1 | ... | sizen-1 : operationsn-1 }*
参数
XYZ 分割(笛卡尔空间)
- axis - selector{ x | y | z } - 分割时随沿的轴的名称。 这与局部坐标系(即,范围)相对。
- adjustMode{ adjust | noAdjust } - 用于控制所计算形状的范围计算的可选选择器。 默认设置是将范围调整为几何的边界框。 使用 noAdjust 可以避免这种情况,因此生成的形状的范围将无缝填充父项的范围。
UV 分割(纹理空间)
- direction - selector{ u | v } - 分割时随沿的轴的名称。
- surfaceParameterization - selector{ uvSpace | unitSpace } - uvSpace 是由 uv 坐标定义的平面纹理空间;unitSpace 是 3d 几何表面上的 2d 空间,以单位(例如米)进行测量。
- uvSet - float纹理(集合/图层)的编号(整数(范围 [0,9]))。 编号与材料属性的纹理图层相对应。
有关纹理图层 ID 的详细信息,请参阅绘制纹理。
常规
- size - float分割的宽度。 根据前缀,沿 axis 的宽度可用以下方式解释:
- 无前缀(绝对)- 新形状将具有完全相同的 size。
- '(相对)新形状的大小将是 size * 当前范围大小
- ~(浮动)使用 ~ 前缀,具有绝对维度的分割部分之间的剩余空间将自动调整。 如果在一个分割内定义了多个浮动部分,则将按比例对维度进行加权。
- operations要在新创建的形状上执行的形状操作的顺序。
- *重复切换按钮:重复切换按钮触发已定义分割的重复操作(分割为当前形状的 scope),并进行尽可能多的重复。 将调整重复次数和浮动维度以适合最佳解决方案(最佳重复次数和最小拉伸)。
描述
XYZ 分割(笛卡尔空间)
split 操作将沿指定范围轴的当前形状细分为一组较小的形状。 对于大括号内的每个 size-operation 块,将新形状推入形状堆栈,执行多个形状操作,然后将再次弹出形状堆栈顶部的形状。
如果将可选的重复切换按钮 * 附加到分割操作中,则会以与其沿选定轴完全适合 scope 的维度的相同频率重复 {...} 的内容。
在两个块之间的每个交点处(即,在 size1, size2, ... sizen-1 处)使用垂直于分割轴的平面切割当前形状的 geometry。 切割后关闭空心网格,即切割平面引入新的表面以保留体积。
分割可以嵌套,即,size : operation 块可替换为 {...} 块。 从理论上讲,嵌套级别是无限的。
UV 分割(纹理空间)
分割也可以应用于 2d uv 纹理域。 纹理坐标在 3d 表面上定义 2d 参数空间。 此类参数化的示例是街道(沿 w 街道方向的 u,沿宽度的 v)和立面(使用 setupProjection() 和 projectUV() 生成,沿宽度的 u,沿高度的 v)。 这允许直接在表面上操作。 通常,uv 坐标在 [0,1] 范围内,并且未连接到表面上的米或码等单位(由基础网格定义)。 将 direction 参数设置为 unitSpace 以直接在地面上操作,即以单位(例如米或码)工作。 根据参数化的几何和类型,此转换中存在一些固有变形。
uv 分割的边界(开始,结束)由在选定的 uv 坐标中找到的最小值和最大值定义。 分割的一般语法与上述笛卡尔情况相同,即,可以使用相对和浮点运算符(' 和 ~)以及重复运算符 (*)。 请参见以下示例。
形状属性
每个生成的形状将设置许多属性:
- split.index:所选组件从零开始的索引。
- split.total:选择器选择的组件总数。
索引和总数是全球性的;例如
...
primitiveCube()
split(x) { '0.1 : A | '0.1 : B }*
将创建与具有规则 B 的 5 个形状交错的具有规则 A 的 5 个形状,其中 split.index 为 0 到 9,所有偶数位于规则 A,所有奇数位于规则 B,而 split.total 将为 10。
有关详细信息,请参阅分割属性。
相关内容
示例
安装
这是分割前的初始形状。 我们将展示一些沿 x 轴的分割示例,当前形状的 scope.sx 为 10。 以下是用于对分割中创建的形状进行着色和调整大小的规则:
|
相对大小
此示例显示了相对前缀的用法。 绿色的 Z 形状占初始形状大小的一半(5 个单位),依此类推。 x 方向上所有形状大小的总和为 8,因此末端是间隙。
|
仅浮动大小:比率
与上面相同的示例,但是所有大小都带有浮动前缀。 请注意如何填充整个初始范围(末尾没有间隙),并保持比率。
|
绝对和浮动大小
在此,于两个绝对大小的形状之间构建浮动大小的形状。 其大小将被从 3 调整到 1.7,以满足绝对限制。
|
过大
第一个形状 Z(绿色)适合,但第二个形状 Y(黄色)被以大小 5 进行切割。 不会创建 X,因为已没有空间。
|
以绝对大小重复分割
重复分割示例。 所有大小都是绝对的。 XY 模式重复 3 次,剩余的单元用 X 的一半填充,即最后一个 X 的几何形状被切除。
|
以浮动大小重复分割
如果在重复分割中使用浮动大小,则不会剪切任何形状,但会调整大小,以保持元素之间的比率,并填充整个范围。
|
交错的重复分割
交错的分割,由两端的两个绝对大小的形状和中间的重复分割组成。 注意:绿色形状 Z 具有绝对大小,而黄色形状 Y 具有浮动大小,结果为 0.9。
|
节奏
在此演示如何实现模式 ABABABA 等。 注意黄色 Y 形状的浮动大小。
|
剪切几何
在此演示如何将当前形状的几何剪切为许多较小的形状。 将圆柱模型插入当前形状。
| |
分割形状并在分割规则中使用 NIL 会产生孔。 注意剪切表面是如何闭合的。
|
uv 分割基础知识
uvSpace 中的 u 分割 - 分割发生在 u = 0.5 处,与立面大小无关。
| |
unitSpace 中的 u 分割 - 分割发生在 u = 5 处,与立面大小有关。
|
街道上的 UV 分割
具有两个路段的街道上的测试纹理。 街道的纹理坐标是自动生成的;请注意,这两个街道路段的长度不同,但是都被 [0,1] uv 空间覆盖,u 轴沿街道方向,v 轴沿宽度垂直于 u。
| |
在 unitSpace. 每 20 米进行一次 u 分割后,同一条街道上会绘制一个 3 米宽的波段。
|