|
|
转自:https://www.nexusmods.com/skyrimspecialedition/mods/177023
动态风框架是一款SKSE插件,可将《上古卷轴5》中原版的静态风系统,升级为一套动态、全响应式的风效系统。该插件会修改原版风效,并将其转化为可影响动画、物理、物体与视觉特效的风源,让MOD作者能以极低的性能损耗,打造出极具沉浸感的风驱互动效果。
MOD说明
动态风框架是一款SKSE插件,可将《上古卷轴5》中原版的静态风系统,升级为一套动态、全响应式的风效系统。该插件会修改原版风效,并将其转化为可影响动画、物理、物体与视觉特效的风源,让MOD作者能以极低的性能损耗,打造出极具沉浸感的风驱互动效果。
如果你是因为其他MOD需要本框架才能正常运行而来,只需下载安装即可直接使用。
原版的风效是完全静态的:风向始终固定为东或东南,风力仅随天气变化,无任何动态波动、无阵风效果,毫无沉浸感!
本MOD的设计思路非常简单:让风动起来,让整个世界能对风做出反馈。这款MOD现已迭代为完整的开发框架,包含以下多个功能模块:
1. 风管理器——MOD的核心模块,负责控制:
- 全局风向:该模块会随机化风向,并随时间为风向添加轻微的自然抖动。
- 全局风速/风力:该模块为风力添加极具沉浸感的阵风效果。
- 修复了室内与洞穴场景中依然存在风效的原版BUG。
2. 动画控制器——基于风力状态控制动画播放速度的模块。
3. 树木控制器——控制原版树木动画的模块。可根据风力与风向,增减树干、树枝、树叶晃动的柔韧度、振幅与频率。同时启用了原版中未被使用的树木风向适配功能,让树木会顺着风向自然弯曲(对白杨类树木效果尤为显著)。
4. 旋转控制器——可根据风向旋转物体,或将物体锁定到预设的允许角度(对双面可飘动的旗帜非常实用)。
5. 推力控制器——可顺着风向推动Havok物理引擎物体,可完美替代《Blow in the Wind》MOD。
6. 可见性控制器——基于风力与风向控制物体可见度的模块。
7. 基础物体替换控制器——根据风的状态切换物体,让物体呈现对应风效的状态(示例:将静止的旗帜切换为飘动的旗帜)。
8. 模型替换器——仅切换物体的模型文件,不改变其基础物体或其他任何属性。
实验性功能,功能逻辑与基础物体替换控制器几乎一致,但受限于自身缺陷(如无法正常播放动画),整体效果不如基础物体替换,在部分特定场景下仍有实用价值。
本框架与粒子风(Particle Wind)、SMP风(SMP Wind)以及野火(Wildfire)MOD搭配使用效果极佳——野火MOD目前仍在开发中,可在QTR的Discord服务器获取免费公开测试版!
兼容性
本MOD为SKSE插件,兼容以下游戏版本:
- 1.6.1170 - 完全兼容
- 1.6.640 - 大概率兼容 - 欢迎玩家测试反馈确认
- 1.5.97 - 大概率兼容 - 欢迎玩家测试反馈确认
- VR版 - 大概率兼容 - 欢迎玩家测试反馈确认
️技术细节
- 以SKSE插件形式实现
- 无Papyrus脚本、无模型文件、无ESP/ESL文件
- 性能损耗极低
- 可随时安全安装与卸载
风效MOD系列兼容情况
- 粒子风(Particle Wind)- 100%兼容
- SMP风(SMP Wind)- 100%兼容
- 风中青草(Windy Grass)- 100%兼容
- 风中飘动(Blowing in the Wind)- 推力模块无需修改模型即可完全替代该MOD
- 天际多风(Skyrim Is Windy)- 树木与动画模块无需修改ESP即可完全替代该MOD
运行需求
- SKSE:https://bbs.3dmgame.com/thread-6550387-1-1.html
- SKSE插件地址库(Address Library For SKSE plugins):https://bbs.3dmgame.com/thread-6549645-1-1.html
- SKSE菜单框架(SKSE Menu Framework)(可选):https://bbs.3dmgame.com/thread-6617414-1-1.html
---
面向MOD作者
若你希望为自制MOD内容添加风效反馈,可通过SKSE菜单框架调用所有游戏内工具(例如游戏内补丁工具)。
每个模块都有其专属的属性集,你需要按需配置对应的参数。
你可在此处找到每个模块的完整配置示例:Dynamic Wind - Skyrim
所有配置文件均采用.json格式,文件名可自定义,仅需放置在以下正确的文件夹路径下:
Data\SKSE\Plugins\DynamicWind\
通用参数:headingRotation 与 angleFactor
这两个参数会在多个模块中出现,其作用逻辑在所有模块中完全一致。
headingRotation(朝向旋转值)
定义物体“正向”(自身朝向)的偏移量,用于让物体与风向实现正确对齐。
示例:
许多旗帜的默认朝向是反向的,需要设置π的偏移量进行校正;若不进行校正,它们对风的反馈方向会完全错误。
(详见图片获取更直观的视觉说明)
angleFactor(风向影响系数)
定义物体朝向(相对风向)对最终效果的影响程度。
系统内部会计算物体朝向与风向的对齐度:
- 1.0 = 与风向完全对齐
- 0.0 = 与风向垂直
- -1.0 = 与风向完全相反
对齐度会通过angleFactor进行混合计算:
- 0.0 = 完全忽略朝向,效果仅受风力影响
- 1.0 = 效果完全由朝向与风向的对齐度决定
- 0.5 = 效果部分受朝向影响
对效果的影响
在大多数模块中,最终生效的风力会按以下公式计算:
最终风力 = 基础风力 × 最终系数
其中最终系数由朝向对齐度与angleFactor共同决定。
当angleFactor数值高于0.5时,若物体朝向与风向相反,最终风力可能会出现负值。
这意味着:
- 物体正对风向 = 风效更强
- 物体侧对风向 = 风效更弱
- 物体背对风向 = 风效极弱,甚至出现反向效果(取决于具体模块)
模块差异
- 动画/基础物体替换/模型替换:采用完整的对齐度逻辑,风力可出现负值(朝向会直接影响风力大小)
- 可见性:采用完整的对齐度逻辑,风力不会出现负值(朝向会直接影响风力大小)
- 旋转控制器:headingRotation仅用于定义物体的基础朝向,物体会直接旋转至与风向匹配的角度
简而言之:
headingRotation = 修正物体的基础朝向
angleFactor = 控制风向对最终效果的影响程度
---
推力控制器
该模块逻辑非常简洁。MOD会自动计算风向与风力,你只需定义需要被风吹动的物体,以及它们对风力的响应强度即可。
仅拥有物理属性的物体(例如悬挂的招牌、瓶子等)可被风力推动。
配置文件夹:Push
可配置参数
- formID:基础物体ID或引用ID
- windSensitivity:物体对风力的敏感程度
配置示例
{
"FormID": "0x038B0F~Skyrim.esm",
"windSensitivity": 1.0
}
该配置会让所有基础ID为0x038B0F~Skyrim.esm(悬挂的兔子装饰01)的物体,顺着风向被推动,风力倍率为1。
---
动画控制器
该模块基于风力状态控制动画播放速度,可让物体通过加快或减慢动画播放,对风力与风向做出动态反馈。
配置文件夹:Animation
可配置参数
- formID:基础物体ID或引用ID
- speedMin:最小动画速度(对应风力为0.0时)
- speedMax:最大动画速度(对应风力为1.0时)
- headingRotation:物体自身朝向,单位为弧度(取值范围:-π 至 π)
- angleFactor:风向对动画的影响程度(取值范围:0 至 1)
注:angleFactor = 0 代表完全不考虑风向;angleFactor > 0.5 可能导致动画速度出现负值(反向播放)。
配置示例
{
"FormID": "0x0FC611~Skyrim.esm",
"angleFactor": 0.0,
"headingRotation": 0.0,
"speedMax": 5.0,
"speedMin": 0.0
}
该配置会让所有基础ID为0x0FC611~Skyrim.esm(农舍风车扇叶)的物体,动画速度在0.0(无风力时静止无动画)至5.0(满风力时播放速度为原版的5倍)之间变化,该配置完全不考虑风向影响。
{
"FormID": "0x0FC611~Skyrim.esm",
"angleFactor": 1.0,
"headingRotation": 3.14,
"speedMax": 5.0,
"speedMin": 0.0
}
该配置会让所有基础ID为0x0FC611~Skyrim.esm(农舍风车扇叶)的物体,动画速度根据风力与风向,在-5.0(反向5倍速播放)至5.0(正向5倍速播放)之间变化。该配置会受风向影响,当风向与headingRotation设定的朝向相反时,会得到负向系数。
---
旋转控制器
该模块基于风向控制物体的旋转。
若未定义allowedAngles,物体会随着风向持续平滑旋转;
若已定义allowedAngles,物体会在加载时,根据风向从预设角度中选择最接近的角度进行锁定。
配置文件夹:Rotation
可配置参数
- formID:基础物体ID或引用ID
- headingRotation:物体自身朝向,单位为弧度(取值范围:-π 至 π)
- allowedAngles:可选参数,预设的允许旋转角度列表(单位为角度)
应用场景示例
- 无allowedAngles:吹雪特效会随着风向平滑旋转
- 有allowedAngles:水平杆上的旗帜,会根据风向锁定到左侧或右侧
配置示例
{
"FormID": "0x0197C7~Skyrim.esm",
"headingRotation": -2.09439510239
}
基础ID为0x0197C7~Skyrim.esm(环境吹雪特效平面)的物体,会以-2.09439510239的偏移量与风向对齐。
{
"FormID": "0x0C6CDA~Skyrim.esm",
"allowedAngles": [
110.0,
290.0
],
"headingRotation": 3.1419997215270996
}
引用ID为0x0C6CDA~Skyrim.esm(杜尔城堡入口上方的旗帜)的物体,会根据风向锁定到110.0度或290.0度。该配置可让旗帜与风向对齐,配合基础物体替换模块,可实现旗帜根据风向向左或向右飘动的效果。
---
可见性控制器
该模块基于风力与风向控制物体的可见度,可见度会根据风力在最小值与最大值之间进行线性插值。
配置文件夹:Visibility
可配置参数
- formID:基础物体ID或引用ID
- minVisibility:最小可见度数值
- maxVisibility:最大可见度数值
- minWindStrength:达到最小可见度的风力阈值(风力低于该值时均保持最小可见度)
- maxWindStrength:达到最大可见度的风力阈值(风力高于该值时均保持最大可见度)
注:在minWindStrength与maxWindStrength之间,可见度会随风力线性变化。
- headingRotation:物体自身朝向,单位为弧度(取值范围:-π 至 π)
- angleFactor:风向对可见度的影响程度(取值范围:0 至 1)
配置示例
{
"FormID": "0x0197C7~Skyrim.esm",
"maxVisibility": 1.0,
"maxWindStrength": 0.5,
"minVisibility": 0.5,
"minWindStrength": 0.0
}
基础ID为0x0197C7~Skyrim.esm(环境吹雪特效平面)的物体,在风力为0.0时可见度为50%,风力达到0.5及以上时可见度为100%。该配置完全不考虑风向影响。
---
基础物体替换控制器
该模块根据风力状态切换物体的基础ID,让物体呈现与风效匹配的不同状态。
配置文件夹:BaseObjSwap
可配置参数
- formID:基础物体ID或引用ID
- headingRotation:物体自身朝向,单位为弧度(取值范围:-π 至 π)
- angleFactor:风向对替换逻辑的影响程度(取值范围:0 至 1)
- swaps:替换条目列表(仅支持基础物体)
- formID:目标替换的基础物体ID
- strength:该替换条目的风力阈值
注:当应用angleFactor后的风力小于等于该条目的strength阈值时,就会启用该条目的替换。列表顺序至关重要,条目需按风力阈值从弱到强排序。
若要实现完整的循环替换,需要为循环中的每个基础物体都单独编写配置文件。
配置示例
{
"FormID": "0x0B343A~Skyrim.esm",
"angleFactor": 0.5,
"headingRotation": 3.140000104904175,
"swaps": [
{
"FormID": "0x0B3439~Skyrim.esm",
"strength": 0.25
},
{
"FormID": "0x0B343C~Skyrim.esm",
"strength": 0.5
},
{
"FormID": "0x0B343A~Skyrim.esm",
"strength": 0.75
},
{
"FormID": "0x0B343B~Skyrim.esm",
"strength": 1.0
}
]
}
所有基础ID为0x0B343A~Skyrim.esm(黑暗兄弟会旗帜动画03)的物体,会根据风力切换为对应形态:
- 风力≤0.25:切换为0x0B3439(黑暗兄弟会旗帜动画01)
- 风力≤0.5:切换为0x0B343C(黑暗兄弟会旗帜动画02)
- 风力≤0.75:切换为0x0B343A(黑暗兄弟会旗帜动画03)
- 风力≤1.0:切换为0x0B343B(黑暗兄弟会旗帜动画04)
列表顺序至关重要,若要实现完整的循环替换,需要为循环中的每个基础物体都单独编写配置文件。该配置会受风向影响,旗帜的最终生效风力取决于它在世界中的朝向。
---
模型替换器
该模块的工作逻辑与基础物体替换几乎完全一致,区别在于它不会替换物体的基础ID,仅替换物体的模型文件。
配置文件夹:ModelSwap
可配置参数
- formID:基础物体ID或引用ID
- headingRotation:物体自身朝向,单位为弧度(取值范围:-π 至 π)
- angleFactor:风向对替换逻辑的影响程度(取值范围:0 至 1)
- swaps:替换条目列表
- modelPath:模型文件的完整路径(无需添加Data\Meshes\前缀)
- strength:该替换条目的风力阈值
局限性
- 替换后的物体可能无法正常播放动画,或出现预期外的异常。
- 模型会使用自身默认的贴图,不会继承原基础物体/引用物体的贴图。
受上述局限性影响,该模块的适用场景比基础物体替换更受限,但在部分特定情况下仍有实用价值。
配置示例
{
"FormID": "0x0386AA~Dragonborn.esm",
"angleFactor": 0.5,
"headingRotation": 3.140000104904175,
"swaps": [
{
"model": "DLC02\\Dungeons\\Apocrypha\\Animated\\Banners\\ApoBanner01.nif",
"strength": 0.25
},
{
"model": "DLC02\\Dungeons\\Apocrypha\\Animated\\Banners\\ApoBanner02.nif",
"strength": 0.5
},
{
"model": "DLC02\\Dungeons\\Apocrypha\\Animated\\Banners\\ApoBanner03.nif",
"strength": 0.75
},
{
"model": "DLC02\\Dungeons\\Apocrypha\\Animated\\Banners\\ApoBanner04.nif",
"strength": 1.0
}
]
}
所有基础ID为0x0386AA~Dragonborn.esm(异典旗帜01)的物体,会根据风力切换为列表中对应的模型,逻辑与基础物体替换完全一致。
该配置能正常生效,大概率是因为异典旗帜的动画被硬编码在了模型文件中(其他旗帜模型可能需要动画控制器才能正常播放,具体机制暂不明确)。
列表顺序至关重要,若要实现完整的循环替换,需要为循环中的每个基础物体都单独编写配置文件。该配置会受风向影响,旗帜的最终生效风力取决于它在世界中的朝向。
---
树木控制器
该模块控制原版树木的动画,让树木能对风做出动态反馈。
配置文件夹:Tree
可配置参数
- formID:仅支持基础物体ID,不支持单个引用ID
- backAmplitude:反向振幅
- backFrequency:反向频率
- branchFlexibility:树枝柔韧度
- frontAmplitude:正向振幅
- frontFrequency:正向频率
- leafAmplitude:树叶振幅
- leafFlexibility:树叶柔韧度
- leafFrequency:树叶频率
- sideAmplitude:侧向振幅
- sideFrequency:侧向频率
- trunkAmplitude:树干振幅
- trunkFlexibility:树干柔韧度
注意事项
该模块无法针对单个树木引用进行配置,仅能按树木的基础物体ID进行统一配置。
参数调试的最佳方式是在游戏内进行:选中目标树木,通过SKSE菜单实时测试不同参数,直观观察树木的晃动效果。
下载地址:
|
评分
-
1
查看全部评分
-
|