spline.blk
loft{} 模块
独立于样条线控制点的程序透明度。
randomOpacityMulAcross:p2=1,0.2 – 样条曲线上的随机透明度变化。
randomOpacityMulAlong:p2=1,0.2 – 沿样条曲线的随机透明度变化。
第一个数字表示样条纹理高度贴图的整体减少。
第二个数字表示样条纹理高度图中的增量变化。
此功能允许为道路和人行道添加变化。例如,沙子可能会随机出现,与图块图案混合。
name:t=”afg_road_c” – 样条曲线的名称。
matName:t=”afg_road_c” – 样条曲线的材料参考。
loftLayerOrder:i=0 – 渲染层顺序。具有最高
i值的样条曲线最后渲染。subdivCount:i=0 – 样条曲线点之间的线性细分(值越高,过渡越平滑)。
shapeSubdivCount:i=0 – 放样几何体相对于样条曲线宽度的线性细分,例如:
shapeSubdivCount:i=8
shapeSubdivCount:i=0 (or 1)
flipUV:b=0 – 交换 UVW 映射中的
u和v通道。vTile:r=1.0 – 沿样条线宽度缩放纹理,例如:
vTile:r=1.0
vTile:r=2.0
vTile:r=0.5
uSize:r=10.0 – 沿样条长度的纹理缩放。
uSize到vTile的比率直接受 shape 块中的参数影响(见下文)。extrude:b=0 – 当设置为
1时,放样几何体被拉伸(增加厚度)Note
This parameter currently has no effect.
cullcw:b=0 – 反转样条线法线。
offset:p2=0, 0 – 相对于样条曲线偏移放样几何体:
第一个值相对于样条曲线宽度偏移放样。
第二个值相对于样条曲线垂直偏移放样:
offset:p2 = 0, 0
offset:p2 = 5.5, 0
offset:p2 = -5.5, 0
offset:p2 = 0, -5
placeAboveHt:r=100 – 从高度贴图到发生样条投影的样条的距离。
以下参数仅适用于放样。如果样条线仅投影纹理而未烘焙,则可以省略此部分。如果启用此块,将始终执行检查,这可能会导致 daEditor 中的加载时间过长(长达几分钟)。
roadBehavior:b=0 – 启用 road behavior (道路行为) 块。如果禁用,则放样将直接放置在地形网格上。很少需要此设置(95% 的情况)。
htTestStep:r=100 – 样条控件点之间的点数,其中将检查
followHills和followHollows的条件。不能为零(可能会使 daEditor 崩溃)。followHills:b=0 – 确保放样不会绘制在山丘下方(启用时抬起放样以匹配山丘高度)。
followHollows:b=0 – 确保放样不会在凹陷处绘制(启用时降低放样以匹配深度)。
maxHerr:r=1.5 – (需要澄清)
roadTestWidth:r=4.0 – 与测试此块条件的样条中心的距离。
curvatureStrength:r=0 – 控制样条曲线曲率对放样几何体细分的影响。
minStep:r=1 – 细分之间的最小距离(以米为单位)。
maxStep:r=1000 – 最大细分距离,以米为单位(请参阅屏幕截图)。
Examples:
curvatureStrength:r=1, minStep:r=1, maxStep:r=100 – 根据需要根据样条曲线曲率细分放样,从而减少不必要的三角形:
curvatureStrength:r=0, minStep:r=1, maxStep:r=4 – 等间距放样细分,与样条曲线曲率无关。
curvatureStrength:r=0, minStep:r=1, maxStep:r=1000 – 针对具有两点和线性插值的样条曲线进行了优化。
integral_mapping_length:b=0 – 设置为
1时,使用积分计算电弧长度(见 Arc length).sweepWidth:r=200 – 删除由 LandClasses 生成的渲染实例(例如,与道路或河岸相交的树木或房屋)。
addFuzzySweepHalfWidth:r=50 – 创建“粗糙”蒙版或散布效果(不应超过
sweepWidth的值)。sweep2Width:r=50 – 删除渲染实例,甚至删除由 objGen{} 块中的此样条生成的渲染实例(对于道路交叉点很有用,例如,柏油路与绿树成荫的大道与土路相交)。
node_flags{} 模块
renderable:b=1 – 启用放样的渲染。
collidable:b=1 – 启用放样的碰撞。
shape{} 模块
closed:b=0 – 闭合放样的横截面。
shape{} 块管理 Loft 轮廓点的位置。至少需要 2 分。
示例:
pt:p4= -5.0, 0.0, 1.0, 0.0 其中:
-5.0 – 点沿样条线宽度的偏移,距中心 5 米。
0.0 – 点相对于样条曲线的垂直偏移(无垂直偏移)。
1.0 – 沿样条曲线长度的 UV 坐标移动(此参数无效)。
0.0 – UV 坐标沿样条线的宽度移动。
示例:
pt:p4= 5.0, 0.0, 1.0, 0.0 – 此点向相反方向偏移 5 米,具有相同的垂直和 UV 设置。
最终放样的宽度为 10 米,并与样条的控制点垂直对齐(请参见屏幕截图)。vTile 与 uSize 的比率为 1:10(如上所述)。
更复杂的弯曲轮廓示例:
pt:p4= -7.5, 0.0, 0.0, 0.0
pt:p4= -5.0, 1.0, 0.0, 0.2
pt:p4= 5.0, 1.0, 0.0, 0.8
pt:p4= 7.5, 0.0, 0.0, 1.0
最终放样的宽度为 15 米(范围从 -7.5 米到 7.5 米),并将与样条控件控制点垂直对齐。中间部分宽 10 米,将高出样条曲线 1 米。
在上面的示例中,放样的三角形行为一致。为了区分放样中点的行为,使用了 group{} 块。
示例:
group{
pt:p4= -7.5, 0.0, 0.0, 0.0
}
group{
pt:p4= -5.0, 1.0, 0.25, 0.25
pt:p4= 5.0, 1.0, 0.75, 0.75
}
group{
pt:p4= 7.5, 0.0, 1.0, 1.0
}
对放样点进行分组定义它们的不同行为。
示例:
group{
type:t="rel_to_collision"
pt:p4= -7.5, 0.0, 0.0, 0.0
}
group{
type:t="move_to_min"
pt:p4= -5.0, 1.0, 0.25, 0.25
pt:p4= 5.0, 1.0, 0.75, 0.75
}
group{
type:t="rel_to_collision"
pt:p4= 7.5, 0.0, 1.0, 1.0
}
生成的放样由三组组成。中间组点的垂直位置与样条控制点的最低垂直坐标 (type:t="move_to_min") 匹配。两个外部组被 “放置” 到碰撞对象上(在这种情况下,高度贴图用作碰撞)。
colliders{} 模块
colliders{} 块定义样条线与之碰撞的对象。
use:t=”HeightMap” – 与高度贴图碰撞。
use:t=”(srv) Prefab entities” – 与预制件实体碰撞。
use:t=”(filter) Generated by spline” – 与样条线本身生成的对象碰撞。
use:t=”SGeometry” – 与场景几何体碰撞。
obj_generate{} 模块
obj_generate{} 块负责沿样条线放置对象。
rseed:i = 111 – 用于生成随机值的 random seed。为不同的 obj_generate{} 块使用唯一的种子是必不可少的;否则,将导致语法错误。
setSeedToEntities:b=yes – 为复合对象启用随机化。 否则,将重复生成相同的随机元素,而不是每次生成不同的随机元素。
placeAtPoint:b=true – 将对象放置在样条曲线点处,这对于精确放置非常有用,例如城市中的电线杆。步长值(如下所述)也将适用。
step:p2 = 10, 0 – 第一个值是对象之间的距离 (步长),而第二个值定义随机变化的范围。例如:
step:p2 = 10, 0 – 物体正好相距 10 米。
step:p2 = 10, 2 – 在 10 米的步长中添加(或减去)一个介于 0 和 2 米之间的随机值,从而在对象之间创建不同的距离。
使用 genTag 系统时,步骤必须大于最宽对象的宽度。否则,对象之间的距离将由 step 决定,而不是对象的 width。
offset:p2 = 0.0, 0.0 – 第一个值沿样条线移动对象的位置,第二个值定义随机变化的范围。
placeAboveHt:r=100 – 对象将投影到 100 米距离内的地面上。
startPadding:r=3.5; endPadding:r=3.5 – 这些参数定义样条曲线起点和终点的排除区域,不会在其中生成任何对象。
orientation:t=”normal” – 控制放置过程中对象的方向。可能的值包括:
orientation:t=”normal” – 对象未对齐;它们的倾斜度取决于其下方的表面法线。
orientation:t=”fence” – 对象沿样条线对齐,没有倾斜。
orientation:t=”fence_normal” – 对象沿样条线对齐,其倾斜度取决于表面的法线。
tightFenceOrient:b=yes – 沿和弦对齐对象。顾名思义,这对栅栏很有用。它们不是将对象放置在样条曲线本身上,而是放置在由对象宽度定义的弦上。沿样条曲线生成弦,直到它们适合其长度。如果最后一个和弦短于对象的 width,则不会生成该对象,并留下间隙。为避免间隙,您可以通过设置 integral_end_entity:b=yes 来使用 “filler” 对象。
tightFenceIntegral:t=”spline” – 使和弦忽略样条线节点。
tightFenceIntegral:t=”segment” – 将样条曲线的每个线段视为单独的样条曲线。用于沿不规则等值线生成围栅。
tightFenceIntegral:t=”corner” – 填充对象仅放置在角处。
placeAtVeryStart:b=yes 和 placeAtVeryEnd:b=yes – 确保将对象放置在样条曲线的起点或终点,而不管其频率或填充如何。
要在样条曲线的起点或终点添加唯一对象(不沿中间重复),请使用零步长: step:p2 = 0, 0。
object{} 模块
这些参数与对象本身相关,如 object{} 块中所定义。
示例:
object{
genTag:t="a"
width:r=17
name:t="modern_siding_suburb_building_a"
weight:r=1
rot_x:p2=0, 0
rot_y:p2=0, 0
rot_z:p2=0, 0
offset_x:p2= 0, 0
offset_y:p2= 0, 0
offset_z:p2= 12, 0
scale:p2=1.0, 0.0
yScale:p2=1.0, 0
}
其中:
genTagSeq:t=”a” – 用于放置的对象的顺序 (图案)。
genTagSeq:t=”a” – 只会放置具有 genTag:t=”a” 的对象。如果有多个具有相同标签的物体,它们将被随机选择,它们的选择频率由 weight 控制。如果序列包含多个相同的标签(例如,genTagSeq:t=”aaaaaaa” 或 genTagSeq:t=”a”),则结果是相同的。
genTagSeq:t=”ab” – 在具有 genTag:t=”a” 和 genTag:t=”b” 的对象之间交替。
genTagSeq:t=”abbccaccabcca” – 在具有四个不同 genTags 的对象之间交替。
示例:
genTagSeq:t=”a”
genTagSeq:t=”ab”
genTagSeq:t=”abc”
width:r=17 – 当前类型的连续对象之间的距离(在本例中为 17 米)。
name:t=”modern_siding_suburb_building_a” – 对对象的引用。
weight:r=1 – 从具有相同 genTag 的一组对象中随机选择此对象的概率(频率)。
rot_x, rot_y, rot_z – 对象在三个平面中的随机值旋转。
offset_x, offset_y, offset_z – 沿三个轴的随机偏移。
scale:p2 – 具有随机值的 Uniform scale。
yScale:p2 – 具有随机值的垂直缩放。
integral_end_entity:b=yes – 在使用 tightFenceOrient 时将对象标记为 “filler”。此对象将被缩放或拉伸以适合剩余的样条长度。此参数仅影响序列中的最后一个对象。
标有 integral_end_entity 的对象可能无法生成(如果其 genTag 未在 genTagSeq中使用),但仍将用作样条末端的填充物。
为了正确作并避免过度扭曲,建议创建多个填充对象。通常,除了主对象之外,您还应该有四分之三、二分之二和四分之一长度的版本。要允许缩放,请在 xzScale:p2 参数中指定值。
形状到放样 HDA
此脚本将多边形形状转换为放样点的坐标,允许将这些值替换为样条类: dgr_shape_to_loft.hda.
该工具旨在促进将多边形几何体转换为可用于放样的格式,从而更顺畅地将自定义形状集成到基于样条的工作流程中。
要在编辑器中直观地显示放样几何体并调整参数:
打开
*.mat.blk文件并设置 render_landmesh_combined=0 到 render_landmesh_combined=1。打开
*.spline.blk文件,按下 Ctrl+S 将修改应用到*.mat.blk。
然后按F3 即可看到放样几何体的线框。