【Siggraph 2019】Interactive Wind in God of War
来源:D:\迅雷下载\Graphics Materials\Siggraph 2019 - Interactive Wind in God of War.pptx 提取时间:2026-05-15 20:53:26
📋 全文内容摘要
```markdown
演讲主题与背景
本次演讲聚焦于《战神》游戏中的交互式风系统设计,由索尼圣莫尼卡团队分享如何通过动态风模拟实现玩家行为与环境的实时互动,同时强调技术方案的可复用性与艺术调整灵活性。
核心技术方案
- 动态风模拟系统:基于噪声纹理与顶点移动逻辑,通过计算着色器实时处理风速、噪声信号及模型形变参数,实现布料、粒子与角色的自然响应。
- 环境风与动态风分离:粒子系统独立控制环境风(烘焙预设)与动态风(实时触发),避免水平风参数不确定性对特效的影响。
- 顶点数据参数化:通过浮点值定义防风罩强度、位移尺度及弹性系数,结合伽玛曲线与指数控制,实现模型形变的精细艺术调整。
- 多层噪声处理:引入滚动噪声与湍流混合机制,增强
Slide 1

📌 要点汇总
- (无内容):此幻灯片无演讲内容
******************* 你好! 该演示文稿旨在以演示模式观看,并附有注释。
按 F5 启动。按空格键可前进笔记中的每一次[点击]。
享受! **********************
[当人们找到座位时前进到下一张幻灯片]
Slide 2

📌 要点汇总
- (无内容):此幻灯片无演讲内容
[当人们找到座位时播放视频]
[将演示模式边框调整到屏幕中间]
[将笔记移至顶部附近]
[开始前重置计时器]
Slide 3

📌 要点汇总
- 开场问候:演讲者开场并感谢观众出席
- 手机静音:提醒观众将手机调至静音模式
- 内容预告:说明将涉及大量内容并快速进入正题
[00:00] 你好。 我们有很多内容要讲,所以我要开始了。 非常感谢您的出席! 在开始之前,提醒一下请将手机静音。
Slide 4

📌 要点汇总
- 摄影许可:允许观众拍照但需注意视线遮挡
- 资料公开:幻灯片内容将发布在Advances网站
- 视线管理:强调不要阻挡他人观看视线
摄影没问题,但这些幻灯片将出现在 Advances 网站上,我将在最后再次展示参考资料,所以不要强调或阻挡任何人的视线。
Slide 5

📌 要点汇总
- 身份介绍:Sean Feeley 索尼圣莫尼卡高级环境技术艺术家
- 团队建议:加入团队需提前适应工作室文化
- 职业背景:曾就职皮克斯,转型游戏开发领域
- 互动渠道:通过 Twitter @TheRealBigFeel 提问反馈
- 游戏经历:《战神》是其首部参与开发的游戏作品
我是 Sean Feeley,索尼圣莫尼卡工作室的高级环境技术艺术家。
如果您加入我们的团队并希望在工作室肖像中拥有红润的脸颊,只需像我一样在第一天之前在海滩度过整个周末即可。
战神是我的第一款游戏……这太疯狂了!
大约 8 年前,我在皮克斯从事电影和动画工作,所以如果我过度解释一些明显的游戏开发事情,那可能是我在转型过程中学到的东西。
[点击] 或者,如果我解释不够,而您有疑问或意见:请在 Twitter 上转发@TheRealBigFeel。
Slide 6

📌 要点汇总
- 交互式风系统:介绍《战神》中可实施的风系统设计
- 技术普及性:强调内容对不同技术背景听众的适用性
- 简化说明:通过”妈妈都能理解”的比喻强调易懂性
我希望你想了解《战神》中的交互式风系统,因为这就是我们今天要讨论的内容。
我们将进行足够深入的研究,以便您可以回家并开始实施此功能,但如果您刚刚进入 techart,我已尝试使此功能能够广泛使用。
简单到我妈妈都能理解。 她没有。
让我们开始吧!
Slide 7

📌 要点汇总
- 章节结构:分7个模块解析风系统设计全流程
- 问题导向:每章节围绕”为什么/在哪里/如何”等核心问题
- 价值延伸:强调技术方案的可重用性和扩展性
这个演讲有几个章节。 我们会过去 我们的系统目标, 风模拟, 风力发动机 风接收器, 数据和着色器实现, 我们学到的技巧, 还有额外的好处,比如植被细节和交互水平的新方法。
每一章都试图回答一个简单的问题: [点击]我们为什么要这样做? [点击]风在哪里? [点击]是什么造成的? [点击] 对此有何反应? [点击] 这是如何运作的? [点击]我们怎样才能变得更好?
完成所有这些工作后,[点击]我们如何重用它以获得进一步的价值?
首先,让我们了解一下当前的技术水平。
Slide 8

📌 要点汇总
- 基础系统构成:包含风向、噪声纹理和顶点移动三要素
- 技术参考:基于GPU Gems 3的Crysis简化方案
- 行业演进:指出Red Dead 2推动风系统技术进步
[ 1 : 40 ] 在基本的风系统中,您有
[点击] 风向和风速。 如果你保持状态并积累纹理运动,也许它会改变。 [点击]你有一个随风滚动的噪声纹理或程序函数 [单击] 然后,当噪声滚动过去时移动网格顶点。 [点击]你完成了! 你已经拥有了一个风力系统! 运送它。
[点击] 这就是今天以及我们开发时大多数游戏似乎使用的方法。 它是 GPU Gems 3 中描述的 Crysis 技术的简化版本。如果它能满足您想要的一切,那就是您所需要的。 但我个人很高兴看到最近的一些游戏推动了更多。 Red Dead 2 did some things that humble me.
在本次演讲中,我们将多次回顾该系统作为基本参考点,然后扩展其概念。
Slide 9

📌 要点汇总
- 演示场景:展示可部署的简单风系统效果
- 局限性:缺乏互动性和动态表现力
- 关键时刻:以奎托斯召回斧头作为演示结束点
这是我们的风测试场景之一中的简单风系统。
这看起来不错。 是可以发货的。 但它缺乏一定程度的互动性和活力。
[当奎托斯召回斧头时视频结束]
Slide 10

📌 要点汇总
- 系统目标:实现玩家行为对风的可观测影响
- 设计原则:强调风向/速度的空间变化表现
- 体验平衡:追求微妙效果避免干扰玩家注意力
好的,那么我们打算做什么,为什么? 更丰富的系统能给我们带来什么? 我们的播放器很强大,我们如何将其扩展到我们的环境中?
我们对风的形状有三个目标。
[点击]玩家应该能够观察他们的行为是否影响了风。 (and it should! They are playing as a god) [点击] 玩家应该能够观察风向。 [点击]但同时,玩家应该能够观察速度或方向的空间变化。
提醒一下,“能够观察”和“必须观察”是不同的目标。 我们的目标是微妙,以避免分散注意力。
如果我们在大多数情况下无法实现这三个目标,那么增加系统的复杂性就不值得。
Slide 11

📌 要点汇总
- 目标导向:开发需兼顾功能改进与视觉一致性目标
- 动态系统优化:追求超越基础动态效果的高质量表现
- 模型行为一致性:相邻模型需保持行为逻辑的连贯性
- 可信行为设计:采用符合幻想风格的”可信”而非现实物理规则
- 开发心态验证:产品实现目标后回归测试验证效果
在开发我们的资产和工作流程时,我们需要尊重这些目标以及其他一些目标。
[点击] 至少,我们可以做得比“如果有风,那就摆动”更好。 我们不仅要改进功能,还要致力于即使在不需要完全动态系统的情况下也能获得更好的结果。
[点击] 对于所有风速,当有风吹过时,孤立模型应该看起来不错
[点击] 一组模特在风吹过时应该看起来很好。 换句话说,相邻模型的行为应该具有凝聚力
这有很多限制。 因此,考虑到我们的幻想背景和风格,[点击]我们并没有将自己限制在现实的行为上,而是“可信的”行为。
好吧,最后一个是我为本次演示所做的弥补,但它反映了我在开发过程中的心态。这从来就不是风的 PBR。
我认为我们所交付的产品实现了这些目标。 让我们跳回测试级别,看看它增加了什么……
Slide 12

📌 要点汇总
- 环境互动系统:攻击可产生影响环境的物理效果
- 物理反应机制:斧头投掷触发环境动态响应
- 动作-环境耦合:玩家动作与环境交互产生可视化反馈
- 动态演示案例:奎托斯斧头召回动作的视频演示
- 沉浸式体验:通过物理模拟增强游戏沉浸感
我们可以产生环境影响,就像风扇吹出的风一样。
攻击可以影响他们的周围环境。
你可以将斧头扔向任何东西或靠近任何东西,然后观察它的反应。
[当奎托斯召回斧头时视频结束]
Slide 13

📌 要点汇总
- 系统构建基础:基于现有启动板架构进行改造
- 环境模拟框架:创建风描述的物理存在空间
- 目标驱动开发:修改基础架构以实现既定目标
- 模块化设计:使用已知组件构建新系统
- 环境建模起点:确定风模拟的物理空间边界
[ 4 : 23 ] 让我们来看看我们是如何构建它的。
首先我们需要一个让风描述居住的地方。
我们将使用我们已知的启动板,并对其进行修改以实现我们既定的目标。
Slide 14

📌 要点汇总
- 单一风矢量:全局统一的风向量控制基础
- 时空变化模拟:通过噪声实现空间时间维度变化
- 局部控制需求:需增强玩家动作影响的可控性
- 多层噪声技术:使用多层噪声提升视觉质量
- 空间数据存储:存储特定空间内的风值数据
有了这个简单的系统,我们就拥有了环境的单一风矢量。
[点击]一切都使用这个值,所以无论我们对哪里感兴趣,风在哪里都是一样的。
[点击]我们需要随空间和时间变化的风。 单独而言,这可以用一堆噪音来进行程序建模。 如果你能负担得起,更多层的噪点几乎总是看起来更好。
[点击]但是为了突出局部效果和玩家动作,我们需要更多的控制。 我们通过存储和更新一定空间内的大量风值来实现这一点。
Slide 15

📌 要点汇总
- 风可视化技术:RGB映射显示风强度分布
- 3D模拟方案:采用3D平流/扩散模拟算法
- 体积纹理应用:使用水平切片展示
这是游戏中玩家攻击在该体积内产生风的特写 XYZ 中的风强度被可视化为 RGB,被视为体积纹理的水平切片。
理论上,您可以使用任何类型的流体模拟来更新每个帧 - 2D 或 3D 对于我们的游戏来说,这是一个简单的 3D 平流/扩散模拟。 在风向量中渲染、模糊,然后向后采样以使风向前推进。
Slide 16

📌 要点汇总
- 风模拟复杂性:承认“简单”说法不准确,实际实现复杂
- 技术文档位置:提供URL和圣莫尼卡工作室网站获取技术细节
- Rupert的贡献:通过黑匣子设计简化开发者对sim卷的使用
我的合作开发者鲁珀特·雷纳德 (Rupert Renard) 就我们的风模拟实现进行了演示,这表明我说它“简单”时是在撒谎。
如果您对我们的流体模拟的纯技术深入研究感兴趣,请查看此 URL 上的幻灯片(区分大小写),或在圣莫尼卡工作室网站的故事部分找到它们。
Rupert 是一位出色的合作者,他让我们可以轻松地将 sim 卷视为一个可以正常工作的黑匣子。
Slide 17

📌 要点汇总
- 模拟体积尺寸:32x32x16米覆盖区域,奎托斯作为比例参考
- 分辨率标准:1米3D纹理分辨率,体素形状测试无显著优势
- 交互区域优化:聚焦相机前方25%区域,垂直轴调整至24x24x12m
- 功能目标:确保覆盖玩家投掷斧头的最大距离和高度
我们的风模拟体积覆盖了相当大的区域。 [点击]它的占地面积为 32 x 32 米,高 16 米。 你可以在那里看到奎托斯作为比例参考。
[点击]我们的 3D 纹理分辨率为 1 米。 我们不仅限于立方体素,但使用扁平或高体素的测试并没有为我们的用例带来任何强劲的胜利。
[点击]为了更好地利用我们的交互区域,我们将其集中在相机前面的一个点上。 我们仍然需要模拟玩家身后的东西,所以我们只向前推进 25%。 需要明确的是,我们也在垂直轴上进行此操作,因此屏幕上的交互体积部分约为 24x24x12m。 调整这些数字的目标是特征分辨率并覆盖玩家可以扔斧头的距离,无论是尽可能远还是尽可能高。
Slide 18

📌 要点汇总
- 系统控制方法:提出跨时空控制风的系统实现问题
- 风原件制作:探讨如何通过系统实现扇子等风控制装置
[ 6 : 35 ] 现在我们有了一个可以跨空间和时间控制风的系统,那么我们如何实际操纵它呢? 我们如何制作像扇子这样的东西?
Slide 19

📌 要点汇总
- 风力发动机类型:定义球体/圆柱体/圆锥体三种基础形状
- 形状关系定义:圆锥体为半径为零的圆柱体特殊形式
- 参数控制:支持强度/位置/方向/尺度的动画设置
- 输出方式:风输出渲染至模拟体积进行计算
我们的风原件称为风力发动机。 有几种不同的行为。
我们有三种基本形状:
[单击] 球体 [单击] 圆柱体 [单击] 和圆锥体。
圆锥体只是一个半径设置为零的圆柱体。
我们可以为这些形状的强度、位置、方向和尺度设置动画。
它们的风输出被渲染到模拟体积中。
Slide 20

📌 要点汇总
- 定向电机:沿主轴线单向输出风
- 全向电机:从中心点向四周扩散风
- 涡流电机:围绕主轴产生环状风流
他们的输出是什么? 我们有三个简单的分布:
[点击] 定向电机沿主轴线发出风。
[点击]全向电机从中心点向外发出风。
[点击] 涡流电机围绕主轴发出风。
Slide 21

📌 要点汇总
- 尾流发动机:沿行进方向输出风,与速度成正比
- 方向调整:将行进方向轻微展开以提升效果
- 权重分配:使用相同权重结合远离电机中心方向
- 唤醒形状:形成松果状动态输出的唤醒电机
- 运动输入:采用两帧平均值增强弯曲路径表现
我们有第四种特殊的风力发动机:尾流发动机。 [点击]
它沿行进方向输出风,与速度成正比。 [呼吸]
[点击]我要在这里暂停一下。 这些箭头显示了纯粹的行进方向。 我们发现效果更好的是将方向稍微展开一点。
[点击]所以我们结合远离电机中心的方向。 在按速度缩放之前,我们会使用相同的权重来执行此操作。
[点击]这为我们提供了一种松果形状的唤醒电机。
[点击]这是动态输出。 通过使用完整模拟的游戏中示例,这一点稍后会变得更加清晰。
[点击]最后一件事:我们使用两帧平均值作为运动输入。 这在狭窄的弯曲路径上提供了更多的向外角度,就像斧头摆动一样。
*** 你可能不需要这个.. 老实说,我们可能也不需要这个;这不是故意的。 在项目后期,我们发现我们通过计算当前帧的位置和前一帧的前一位置之间的距离意外地做到了这一点。 我修复了这个错误,之前看起来好多了……所以我取消了修复并重命名了变量。 年度最佳游戏。
Slide 22

📌 要点汇总
- (无内容):此幻灯片无演讲内容
我们来看看一些游戏中的例子
Slide 23

📌 要点汇总
- 里程收益:尾流发动机带来显著里程提升
- 风原语应用:最常用风原语用于武器效果
- 动画复用:武器效果可免费获得动画表现
我们从尾流发动机中获得了很多里程。 很容易我们最常用的风原语。 我们将它们放入武器上产生的效果中,这样我们就可以免费获得动画效果。
Slide 24

📌 要点汇总
- 动画库构建:创建包含动画的电机库实例
- 实例演示:以”大爆发”为例展示动画效果
- 视频验证:通过两次视频播放验证动画表现
我们创建带有动画的电机库,就像这个“大爆发”实例一样。
[让视频播放两次]
Slide 25

📌 要点汇总
- 测试反馈:测试级别显示风扇使用受限
- 预期落差:未按预期使用定向电机
- 场景限制:岩石区域缺乏可吹动物体
- 战斗场景:龙头目战斗环境限制风扇应用
从我们的测试级别可以更好地了解该风扇。 我们没有像我想象的那样使用定向电机。 我预计龙头目战斗会大量使用它,但那场战斗是在一个死气沉沉的岩石区域,所以没有什么可以吹的。
Slide 26

📌 要点汇总
- 涡流电机:强调教科书式标准攻击方式
- 特殊攻击:突出技术实现的典范性
我喜欢这种特殊的攻击。 教科书式涡流电机。
Slide 27

📌 要点汇总
- 风力升级机制:装备提升与风力增幅的关联性
- 微妙感知:玩家对风力变化的感知程度
- 视频演示:通过重复播放强化视觉效果
当玩家升级装备时,我们会增加他们攻击的风力。 这很微妙,但你可以感觉到。
[让视频播放两次]
[ 水合物 ]
Slide 28

📌 要点汇总
- 孤立风攻击:独立测试的最优组合方案
- 尾流电机:动态生成基元形状的潜力
这是我完全孤立的最好的风攻击组合。 您可以看到有多少移动尾流电机可以根据动画正在执行的操作开始制作任何其他基元形状。
Slide 29

📌 要点汇总
- 定向电机体积:超出实体尺寸的风场控制
- E3 2016方案:早期技术实现的局限性
- 不均匀风力:方向性导致的强度差异问题
您可以制作一个巨大的定向电机(比体积本身还要大)来根据您的水平调整风。
至少,我们是这么认为的。 这是我们最初的方法。 E3 2016就用过它。 但有一个问题。
它往往会产生不均匀的结果。 当你顺着风的方向看时,风非常大。 当你回顾它的来源时,你会发现它非常微弱。 调优是一系列痛苦的妥协。 它就是行不通。
Slide 30

📌 要点汇总
- 模拟调试梯度:可视化验证风力分布异常
- 边缘推力缺失:边界条件导致的流体动力学缺陷
在该示例中,您可能已经注意到在模拟调试视图中存在与我们看到的行为相匹配的渐变。 为什么我们会看到这个梯度? 嗯,流体按照预期加速……但是盒子外面没有任何东西可以从边缘推入,所以那一侧的风较慢。 这是我们需要解决的问题。
Slide 31

📌 要点汇总
- 简单系统替代模拟:用简单系统替代复杂模拟解决梯度问题
- 环境风基线定义:通过定义环境风基线替代滑稽大电机
- 系统整洁性优化:使风存在于盒子外保持动力系统整洁
- 噪音层增强效果:添加系统级噪音层实现局部阵风和平静
到目前为止,我们一直在尝试使用模拟来取代我在简介中描述的简单风系统
[点击]但是我们可以通过使用简单的系统来定义我们的环境风基线来解决这个梯度问题。 我们用它来代替滑稽的大电机。 这使得风存在于盒子之外,并保持动力系统的整洁。
[点击]此外,我们可以使用它在系统级别添加额外的噪音层,从而创建局部的阵风和平静。
Slide 32

📌 要点汇总
- 环境风组件应用:使用环境风组件生成水平风场景
- 大风特征处理:环境风处理宏观大尺度风特征
- 动态风互动功能:动态风处理微观互动风功能
- 空气运动描述:实现游戏世界空气运动的完整描述
这是使用我们系统的环境风组件创作的水平风的相同场景。
具有环境风处理大、影响深远的风特征, 结合动态风处理更紧密、互动的风功能, 我们对游戏世界中的空气运动有完整而丰富的描述。
Slide 33

📌 要点汇总
- (无内容):此幻灯片无演讲内容
[ 11: 35 ] 我们知道风在哪里……它会产生什么反应?
[ 水合物 ]
Slide 34

📌 要点汇总
- 风接收器类型:存在四种响应风的接收器类型
- 响应方式排序:按演讲者兴奋程度排列响应类型
- 交互机制设计:定义风与场景元素的交互响应方式
风接收器。
有四种响应风的接收器类型。 这些是按照我谈论它们的兴奋程度排列的。
Slide 35

📌 要点汇总
- 声音接收器功能:音频需要实时风速信息进行混合
- 自定义WWISE属性:通过自定义属性传递风速值
- 音频混合实现:使用WWISE属性实现风速值混合
- 实时响应机制:建立音频与风速的实时响应
声音的。 这会很快,因为我不知道我在说什么。
[点击]有时音频想知道风速。
[点击]我们使用自定义 WWISE 属性,以便他们可以使用此值进行混合。
Slide 36

📌 要点汇总
- 布料风力采样:每个布料对象在变换中心对风系统采样
- 力应用网格点:采样力被施加到网格所有模拟点
- 点积调整力:通过点积按比例缩小力以实现旋转/拍打效果
- 噪音处理:通过滚动噪音增加布料运动多样性
布。 不高兴谈论这个,因为 [点击]它对我们不起作用。 但我会告诉你我们尝试了什么。 [点击]每个布料对象在其变换中心对风系统进行一次采样 [点击]该力被施加到网格上的每个模拟点…… [点击] 按力方向和布料法线的点积按比例缩小。这是为了让我们在布料旋转和拍打时产生多种运动。 [点击] 一如既往,我们滚动一些噪音。
Slide 37

📌 要点汇总
- 布料系统妥协:未升级的布料系统暴露了风交互问题
- 非交互式预模拟:过场动画/设计元素使用非交互式布料
- 网格接收器替代:通过网格接收器可跳过布料系统实现交互
- 优先级调整:布料系统优化在游戏开发中属于低优先级
为什么这个没有发货? 我们为新的战神进行了很多修改。 你可能注意到了。
[点击]我们必须做出妥协。 我认为我们做了很多正确的事情。 布料系统是一个没有升级的组件。 加上风暴露了很多问题。 我们希望重新审视布料上的风以及整个布料系统。 对于这个游戏来说,这是一个较低的优先级,因为..
[点击]我们仍然可以让布料在游戏中移动。 其中一些是非交互式预模拟元素。这些大多出现在过场动画、[呼吸][点击]或具有设计功能的对象中,例如船坞旗帜。 [呼吸]
[点击]我们还可以通过使用网格接收器完全跳过布料系统来获得交互性。 我很快就会讨论这些。 这些物体不会碰撞,但它们会对风做出反应,从而对玩家的动作做出反应。
Slide 38

📌 要点汇总
- 粒子风速采样:每个粒子实时采样所在位置的风速/风向
- 响应类似拖动:粒子响应机制与流体拖动原理相似
- 冲量计算:每帧计算匹配风速所需的冲量并应用
- 目标风速组合:环境风与动态风共同决定粒子目标速度
颗粒 [单击] 每个粒子都会对其所在位置的风速和风向进行采样。 艺术家控制粒子对这些信息的反应程度。
[点击] 从概念上讲,粒子的响应方式与拖动相同,但在移动的流体中。 [点击] 因此,缓慢或静止的粒子 [点击] 将加速以匹配其周围的流体, [点击]而快速移动的粒子[点击]会减慢速度。 每一帧,我们计算每个粒子与风相匹配所需的冲量;并应用它,并按粒子的风影响值进行缩放。
[单击] 其目标风速是环境风值和动态风值的完整组合。
[点击]这在早期的测试中显示出了很大的希望……
Slide 39

📌 要点汇总
- 早期粒子测试:展示粒子系统在GPU优化前的测试效果
- 互动驱动动作:测试场景包含大量由互动触发的动态效果
- 精确调整需求:所有效果需精确调整才能在场景中表现良好
- 无水平风限制:测试场景未包含水平风的模拟
这是一次令人兴奋的测试。 这是一个旧的,在粒子移动到 GPU 之前,在儿子长出头发之前。
有很多由互动驱动的有趣的动作。 但我必须说实话:一切都经过精确调整,以便在这个场景中看起来很好。并且没有水平风。
Slide 40

📌 要点汇总
- 功能保留平衡:斧头攻击与风力系统达到平衡状态
- 忽略风力决定:在特定场景中忽略风
我们仍然提供了此功能,但斧头攻击和关卡中使用的风力发动机和设置达到了平衡,对于粒子而言,该平衡有效,但缺少粒子测试场景的一些兴奋感。
这并不是一个打击效果团队——他们非常投入并且热衷于从系统中获取一切可能的东西。 但如果在不响应风的情况下效果看起来更好..我必须同意:忽略该力是正确的决定 在 techart 方面,我们过于简单化并失去了一些关键的控制。 这是我的错误。
Slide 41

📌 要点汇总
- 环境风与动态风分离:粒子系统可独立控制环境风与动态风,忽略水平风影响
- 烘焙环境风问题:特效艺术家常提前烘焙环境风效果,但水平风参数可能未最终确定
- 噪声场与动态风分离:混合湍流设置可避免强风下”滚动粒子”视觉问题
我希望我能做些什么不同的事情? 未来我们如何改进? 我想探讨两件事:
[点击]首先,我认为如果我们对环境风和动态风影响进行单独控制,我们可以让粒子系统忽略水平风,而只响应动态效果。 这看起来像是一个黑客,一个坏主意——这就是我们没有这样做的原因——但在实践中,特效艺术家倾向于烘焙一些环境规模的塑造。 在特效工作完成之前,水平风并不总是最终确定。 此外,强大的环境风速往往会在粒子淡入屏幕之前将其推离屏幕。
[点击]其次,我们的粒子系统在添加风之前就已经使用了噪声场。 我们的想法是我们可以将这些组件隔离开来。 但我认为,在平静和有风的情况下混合不同的湍流设置可以防止我们在强风条件下运输的一些“滚动粒子”外观。
Slide 42

📌 要点汇总
- 水合物网格改进:对水合物网格进行了重大优化升级
- 动态风组件应用:新动态风组件已在游戏中广泛用于角色/道具/布料
- 系统架构组成:系统包含5个核心组件,其中2个为动态风相关模块
[ 15 : 52 ]
[ 水合物 ]
网格。
[点击]对此进行了大量改进。
[点击]在游戏中广泛使用。 人物、道具、假布料。
[点击] 该系统有 5 个组件。 2 款为动态风新品。
Slide 43

📌 要点汇总
- 顶点数据定义:每个顶点数据定义模型移动/静止区域划分
- 模型参数库:建立运动部件行为参数库便于资产复用
- 动态风状态管理:通过计算着色器实时更新动态风状态数据
- 噪声处理机制:计算着色器处理滚动噪声和平滑风信号
这 5 个组成部分如何相互关联? 每项资产都有两名艺术作者。
[单击] 每个顶点数据,定义模型的哪些部分移动,哪些部分不移动。 工具可以帮助解决这个问题。 [单击]和模型参数,它们描述了运动部件的行为方式。 建立一个这些设置的库是很好的。
[点击]这些都被技术方面的顶点着色器使用。 这就是静风系统所需的全部。
对于动力学,[单击]我们为每个模型实例添加状态。 [点击]顶点着色器使用这个。
[单击],我们有一个计算着色器 [单击],它捕获每帧 [单击] 的所有状态并更新它们。这主要涉及滚动噪声和平滑原始风信号。
[点击]一些模型参数用于调整此更新行为。
Slide 44

📌 要点汇总
- 顶点数据优先讨论:系统组件解析将从顶点数据开始逐步展开
我们将逐一讨论这些内容。 让我们从顶点数据开始。
Slide 45

📌 要点汇总
- 浮点数存储防风罩:单个浮点值表示防风罩强度梯度
- 相对位置增量存储:三个浮点值存储根顶点相对位置增量
- 精度优化设计:增量存储方式提升数值精度并支持艺术调整
我们使用四个浮子 存储两个数据值。
[点击] 一个浮标用于防风罩。 这减弱了风引起的运动。 它通常是从零到一的梯度,表示距根顶点的标准化距离:不移动的顶点。
[单击] 其他三个浮点存储该根顶点的相对位置。 此处以 XYZ 显示为 RGB。 我们将其存储为增量而不是绝对位置。 这允许在不重新计算颜色(但不是缩放或旋转)的情况下进行艺术转换,并且这意味着更小的数字,这有助于精度。
Slide 46

📌 要点汇总
- (无内容):此幻灯片无演讲内容
接下来我们看看对象级参数
Slide 47

📌 要点汇总
- 对象级参数分类:分为叶子参数、设置参数和树参数三类
- 叶子参数作用:控制模型造型和姿势
- 树参数优势:提供第二层次结构,无需额外顶点数据或蒙皮支持
- 默认值设计:通过良好默认值降低使用复杂度
- 参数库建设:建立参数库辅助艺术家快速配置
共有三类:
[单击] 叶子参数,控制模型的造型和姿势。 [点击]设置参数,直接控制多个帧上的一些更广泛的运动 [单击] 树参数。对于激活这些控件的模型,我们获得了第二个层次结构级别来进行塑造,以对象根为中心,因此我们不需要额外的顶点数据或来自角色技术艺术的蒙皮支持。
这是一个很大的控制! 这可能会让人不知所措,因此我们小心翼翼地设置了良好的默认值。 一个新的模型应该只需要改变其中的两三个,但了解哪些是对艺术家来说仍然是一个挑战。 建立一个库,以便艺术家可以使用类似模型的设置作为起点,这是非常有帮助的。
Slide 48

📌 要点汇总
- (无内容):此幻灯片无演讲内容
现在让我们回顾一下它们在顶点着色器中的行为方式。
Slide 49

📌 要点汇总
- 移动尺度定义:限制顶点最大位移距离
- 风罩缩放机制:通过风罩参数调节运动幅度
- 双矢量控制:风矢量决定倾斜度,噪声矢量决定摆动度
- 顶点移动逻辑:基于风向与噪声向量的平均值计算位移
移动尺度是最自由的顶点可以从其静止位置移动的总距离。 较高的值意味着更多的运动。 我们通过风罩缩放该值。
顶点按照风矢量和噪声矢量的平均值移动。 风矢量为我们提供了倾斜度,而噪声矢量为我们提供了摆动度。
Slide 50

📌 要点汇总
- 密度参数作用:控制噪声特征的规模
- 双参数设计:区分低速/高速场景的密度设置
- 速度混合机制:风速20-30m/s时进行参数混合
- 参数差异化:部分模型需要独立控制低速/高速密度值
密度控制这些噪声特征的规模。
我们实际上允许这个参数有两个值,一个用于低速,一个用于高速。 随着风速增加(最高约 20 - 30 m/s),我们会在这些设置之间进行混合。 大多数模型对两者使用相同的值, 但有些模型确实受益于这些单独的控制。
Slide 51

📌 要点汇总
- 指数控制:通过指数值调整元素弯曲的直线程度
- 伽玛斜坡:使用灰度防风罩的伽玛曲线实现渐变效果
- 形状映射:指数1对应直块,指数2对应抛物线弯曲
弯曲控制元素倾斜时的直线程度。 较高的值只会将运动隔离到尖端。 这是我们将风罩提高到的指数来实现的。 它基本上是灰度防风罩上的伽玛斜坡。 例如,值为 1 表示为直块;值为 1 表示为直块;值为 2 时给出抛物线弯曲。
Slide 52

📌 要点汇总
- 顶点平移:通过移动顶点实现运动而非旋转
- 拉伸修正:通过距离根部缩放保持长度不变
- 线性插值:局部修正拉伸而非全局缩放
我们通过平移顶点来获得运动。 [点击]
我们不会像我见过的一些游戏那样轮换它们。 这避免了着色器中缓慢的三角函数, 但它会引入拉伸,因此我们需要保留长度。
[点击]我们通过在移动之前检查到根的距离来做到这一点, [单击]并向根部缩小或远离根部缩放以匹配该长度。
这有助于防止地面穿透,并使我们在极端力量下看起来受到阻力旋转。
我们不必一路向后缩放,[点击]我们可以使用线性插值来修正一小部分的拉伸。
Slide 53

📌 要点汇总
- 弹性参数:控制拉伸程度的弹性系数
- 默认值设定:默认允许20%的拉伸效果
- 视觉优化:适度拉伸比完全矫正更自然
这就是我们的弹性参数控制的。 一些拉伸通常看起来比严格的完全矫正更好。 我们的默认值是 20% 拉伸。
我在这张幻灯片上犯了错误,翻转了低点和高点。不过,标签是正确的。 对此感到抱歉
Slide 54

📌 要点汇总
- 刚性控制:通过纹理坐标缩放实现刚性效果
- 根部聚焦:保持效果集中在元素根部区域
- 硬值影响:高硬值降低元素变化幅度
刚性。
我们可以通过将顶点纹理坐标向元素根缩放来创建刚性元素的外观。
这就像调整噪声密度,但保持效果集中在根部。
较硬的值可以使单个元素的变化较小, 以及元素之间的高度变化。
Slide 55

📌 要点汇总
- 摇摆参数:控制弹簧属性的两个状态参数
- 矢量替代:用摇摆矢量替代风矢量实现倾斜
- 弹簧强度:摇摆参数决定弹簧拉回中心的力度
我在这里稍微提前了一点。 我们有两个摇摆参数来调整对象的弹簧属性。
这些是有状态的,因此计算在计算着色器中完成一次,并将结果传递到顶点着色器。
当我之前说过我们通过风矢量倾斜垂直时,我撒了谎。 一开始是这样的,但我们实际上是通过摇摆矢量来倾斜顶点的,该摇摆矢量被风矢量推动,并被弹簧力拉回中心。
该弹簧的强度就是该摇摆弹簧参数。
Slide 56

📌 要点汇总
- 摇摆参数:控制弹簧阻尼系数
- 阻尼影响:决定系统稳定时间长短
- 参数作用:直接影响模型收敛速度
另一个摇摆参数控制弹簧的阻尼, 这会影响模型的稳定时间。
Slide 57

📌 要点汇总
- 顶点着色器:处理树模式运动逻辑
- 树模式激活:增加额外运动层
- 根部旋转:树围绕对象根部转动
- 拉伸修复:对树干进行运动修正
回到顶点着色器。
如果我们激活树模式,我们会获得额外的运动层。
树围绕对象根旋转。
我们对树的运动进行额外的拉伸修复,就像我们对叶子的运动所做的那样。
Slide 58

📌 要点汇总
- 弯曲参数:控制树干形变程度
- 伽玛曲线:归一化距离的幂函数
- 线性对比:1.0与3.0弯曲差异明显
树有一个额外的弯曲参数。 它的行为方式与叶片弯曲参数相同:归一化距离的幂函数 - 伽玛曲线。 笔直的树干可以很容易地看出此处所示的 1.0 线性弯曲和 3.0 立方弯曲之间的差异。
Slide 59

📌 要点汇总
- 运动尺度:树与叶子同步响应
- 风速影响:最大位移对应最高风速
- 运动范围:尖端顶点移动距离限制
树的运动尺度就像叶子的运动尺度一样…… 这是在最高风速下由于树木倾斜而导致尖端顶点可以移动的距离。
Slide 60

📌 要点汇总
- 树叶滞后:模拟自然运动延迟现象
- 摇摆动量:通过导数实现二次运动
- 阻尼计算:基于正弦曲线相位差
- 风速条件:仅在风速减小时触发
- 力传导机制:树枝张力→叶子阻力
- 泉水使用:树模式禁用第二泉水
树叶滞后很有趣。 如果没有它,在左侧,您可以看到当树稳定下来时,叶子也直接恢复到静止姿势。 但是我们可以通过使用摇摆动量来免费添加延迟的二次运动,就好像它是叶子的摇摆位置一样。我们已经针对阻尼弹簧进行了计算。 使用动量是有效的,因为它是位置的导数,并且由于正弦运动的导数是延迟四分之一相位的相同曲线,因此我们可以对其进行微调以引入一些延迟。
我们只在风速减小时才这样做,因为那时树枝是引导运动的
*** 这是因为,在自然界中,风是施加在叶子上的力,叶子充当帆并拉动树枝。 但是,当树沉降时,树枝的张力向叶子施加力,而叶子则受到来自空气的阻力。 这就是当树枝引导运动并导致叶子滞后时的情况。
*** 关于树上的泉水,我想提的最后一件事是:我们不会使用第二个泉水。 在树模式下,树的运动使用摇摆矢量进行倾斜,叶子仅沿风矢量的方向倾斜。
Slide 61

📌 要点汇总
- 三维纹理基础:游戏启动时计算的绑定单位球体内的随机xyz向量
- 三线性采样:实现平滑基函数的C0连续性
- 通用噪声基础:技术适用性不受具体噪声选择限制
[ 22: 37 ] 是时候吵闹了。 那么我们的噪声函数是什么? 我们的噪声基础是一个三维纹理,在游戏启动时计算,填充有绑定在单位球体内的随机 xyz 向量。
*** 我们在访问该纹理时使用三线性采样,因此基函数是平滑的,具有 C0 连续性。
您可以使用任何您喜欢的噪声基础,我们将要讨论的技术仍然适用
Slide 62

📌 要点汇总
- 分形噪声结构:多尺度噪声样本的加权叠加构成
- 八度音阶缩放:按2的幂次递减各尺度特征尺寸
- 贡献权重调整:特征尺寸缩小时同步降低权重
[水合物]
我们通过使用分形噪声来扩展该基函数。
[点击]分形噪声通常是不同尺度的多个噪声样本的加权和。 这些缩放的样本称为八度音阶。 最常见的方法是将每个八度音阶减小 2 的幂。
[点击]由于特征被缩小了,我们也缩小了它们的贡献权重。
[点击]这是贡献曲线的粗略可视化。 这是一个指数下降。
Slide 63

📌 要点汇总
- 多尺度特征:噪声组合产生跨尺度的复杂信号
- 丰富信号输出:不同尺度特征相互增强形成细节
这种噪声组合为我们提供了具有多种尺度特征的丰富信号。
Slide 64

📌 要点汇总
- 缩放噪声问题:简单缩放导致噪声特征位移
- 动态比例挑战:风速驱动的动画需要稳定比例
通常缩放噪声非常简单,只需缩放输入坐标即可!
[点击]但是如果比例是动画的,就会出现问题。 我们的也是,因为我们根据风速混合尺度。
Slide 65

📌 要点汇总
- 对数分箱技术:锁定2的幂次间隔避免特征位移
- 固定比例调整:保持比例恒定动态调整权重
- 视觉一致性:任意比例下噪声特征尺寸匹配
在左侧,简单的缩放会导致噪声特征移动。 距离刻度中心越远,效果越差。
我们不想要这种无意识的动作。
右边是我们的解决方案。 我们使用一种称为对数分箱的技术将样本锁定为 2 的幂, 并在它们之间混合和淡化以产生我们完整的噪声结果。
换句话说:我们不是缩放样本并保持其贡献固定,而是保持比例固定并调整其贡献。
*** 以任意比例暂停此视频,观察噪声特征大小在视觉上是否匹配。
Slide 66

📌 要点汇总
- 二次幂级噪声八度音程:分析具有二次幂级噪声的连续体结构
- 三角形衰减替代指数衰减:采用三角形衰减提升噪声标度权重分布
- 四八度分形噪声:通过四层八度音阶构建分形噪声并加权求和
- 动画音阶平滑过渡:利用动画实现八度音阶的淡入淡出效果
- 共享噪声特征:固定对数尺度使相邻模型共享可滚动噪声特征
让我们更详细地看一下。在这里,我们正在查看所有具有二次幂级的噪声八度音程的连续体
[点击] 假设艺术家选择的密度比例为 1.3。 最接近的 2 的幂(在本例中为 1.0)将是具有最显着贡献的噪声标度。
[点击]我们使用以输入比例为中心的三角形衰减,而不是指数衰减
[点击]我们使用四个八度音阶作为分形噪声,并由三角形加权。
[点击]应用这些权重并对样本求和将得出我们的最终结果。
动画音阶[单击]将平滑地淡入和淡出八度音阶,以生成不移动的分形噪声。
使用这些固定对数尺度的一个好处是,具有相似但不相等尺度的相邻模型仍然会共享一些可以在它们之间滚动的噪声特征。
Slide 67

📌 要点汇总
- 视觉凝聚力优化:探讨多对象视觉统一性的改进方法
- 计算着色器移动噪声:通过计算着色器实现噪声动态移动
- 夸张设置演示:使用极端参数凸显技术细节差异
- 水合物案例:以水合物为例展示噪声效果
[ 25 : 10 ] 这些是我们尝试改善单个物体外观的一些方法。 现在我们将看看如何提高多个对象的视觉凝聚力。 为此,我们将重点关注计算着色器如何移动噪声。 为了使本次讨论中的一些微妙之处更容易识别,我将使用一些令人震惊的设置进行演示。
[水合物]
Slide 68

📌 要点汇总
- 稳定风向速度:演示恒定风速方向下的噪声效果
- 奎托斯中心定位:以奎托斯为中心展示场景布局
- 离谱参数演示:通过极端参数凸显技术特性
比如,一些非常离谱的设置。 我们在这里缩小了一点。 你可以看到奎托斯在中心。 风以稳定的速度朝稳定的方向吹。
Slide 69

📌 要点汇总
- 双坐标系映射:对象同时拥有世界空间和纹理空间坐标
- 反向纹理偏移:通过反向偏移实现噪声移动效果
- 动态坐标跟踪:计算着色器实时更新纹理坐标
- 视觉运动感知:噪点特征相对于对象中心移动
每个对象都有一个世界空间坐标,即其中心在世界中的位置 但它也有一个纹理空间坐标:它的中心位于噪声纹理中。
[单击] 为了创建在对象上移动的噪点效果,我们偏移了其纹理坐标。 我们在风向相反的方向进行此操作。 如果您用眼睛跟踪圆圈,您会发现其中的噪点特征似乎相对于圆圈中心向下和向左移动。 每个接收风的对象都会跟踪其纹理偏移。 计算着色器根据对象经历的风速和风向每帧移动该坐标
Slide 70

📌 要点汇总
- 相干风统一效果:统一风速方向实现稳定噪声运动
- 复杂天气短暂性:复杂天气模式效果持续时间短
- 方向性消失:随机化导致方向性特征消失
- 风型切换不可逆
这对于相干风非常有效;风的速度和方向到处都是相同的。
它在更复杂的天气模式下看起来也很棒……但只持续很短的时间。
慢慢地,事情似乎变得越来越随机,直到方向性的概念消失。
当我们切换回更均匀的风型时,我们无法从这种损害中恢复。
为什么会这样呢?
Slide 71

📌 要点汇总
- 相邻物体共享特征:世界空间与纹理空间邻接时共享噪声特征
- 方向差异导致失真:不同方向运动使纹理特征分离造成扭曲
- 速度差异同理:不同速度物体同样面临纹理失真问题
- 重置纹理位置:定期重置是解决失真的关键方法
让我们看看两个相邻的物体。 They are neighbors in world space, and they are neighbors in texture space. Where they overlap, they share some noise features. They continue to share these features even as they move through the texture together.
[点击]但是如果它们的方向不同,它们就会在纹理中散开。 不过,他们仍然是世界上的邻居。 这造成了一种脱节;它扭曲了噪声纹理。 他们一开始有共同的特征,但随着时间的推移,他们变得孤立。
[点击]对于不同速度的物体也会出现同样的问题。
解决这个问题的一种方法是定期重置它们的纹理位置。
Slide 72

📌 要点汇总
- 流程图重新发现:已存在并被重新发现的流程图技术
- 应用领域:用于表面材料和穹顶制作
- 团队贡献:Timo Pilarjamaki主导的远景流制作
- 资源展示:Artstation drop包含更多案例
这已经存在了! 我们重新发现了流程图。 我们一直在表面材料和穹顶上使用它们。
这个远景流是由令人惊叹的人完成的 蒂莫·皮拉贾马基, 我们的一位环境艺术负责人负责该项目。 您可以在我们团队的 Artstation drop 上看到更多此类内容。
Slide 73

📌 要点汇总
- 倒带修复失真:通过回退速度修复纹理失真
- 爆音问题:简单方法导致音频爆音
- 异相淡入淡出:双样本异相处理消除爆音
- 流程翻转事件:重置操作被定义为新术语
要点是:以某种速度倒带以修复纹理失真。 不幸的是,这种幼稚的方法会导致爆音,但您可以通过执行两次(一半异相)来解决此问题。
[点击] 在这两个样本之间来回淡入淡出,您可以通过重置完全淡出的样本来隐藏流行音乐。 我们将在此基础上进行构建,因此从现在开始,我将将此重置称为“流程翻转事件”
Slide 74

📌 要点汇总
- 双纹理坐标跟踪:3D中使用双坐标进行纹理采样
- 淡入淡出处理:样本间过渡实现重置
- 循环问题:重置后出现明显循环现象
- 改进需求:需要优化循环问题
让我们在 3D 中尝试一下,通过跟踪每个对象的两个纹理坐标,使用它们对纹理进行采样,并在这些样本之间进行淡入淡出,以便我们可以在流翻转事件中重置一个坐标。
你可以看到我们不再有失真累积,并且我们恢复了,但现在有一个非常明显的循环。循环循环循环循环循环…… 如果您以前没有看到它,那么您现在看到了。
我们可以改进这一点。
Slide 75

📌 要点汇总
- 光谱属性一致性:白噪声纹理全域光谱特性相同
- 任意坐标重置:无需返回初始值可任意重置
- 邻居关系保持:随机化需在流翻转帧统一计算
- 共享随机化:所有对象共享流翻转帧计算结果
我们的白噪声纹理在任何地方都具有相同的光谱属性,因此我们不需要将坐标重置为其起始值,我们可以去任何地方! 不过,我们仍然需要邻居保持邻居状态,因此这种随机化在流翻转帧上计算一次并与所有对象共享。
Slide 76

📌 要点汇总
- 循环处理:通过随机化全局偏移量消除循环痕迹
- 伪4D纹理:利用共享坐标值实现3D噪声的伪4D效果
- 切片混合:仅需两个偏移切片完成纹理混合
回到那个循环淡入淡出。 循环循环循环。 稍后,每当我们翻转流时,我们都会随机化全局偏移量。
[等待] 就在那里。 您可以看到循环已经消失,这有助于淡出不明显
在某种程度上,这几乎创建了 4D 噪声纹理,但只有 3 维数据。
***我们可以摆脱这个问题,因为第四个坐标值在这个伪 4D 函数的所有样本之间共享,所以我们只需要两个切片:我们正在混合的切片。 这些切片是相同的 3D 噪声,但通过两个流偏移进行了偏移。
Slide 77

📌 要点汇总
- 翻转速率问题:低速时翻转过快导致运动失真
- 时间调整局限:固定时间参数无法适应变速需求
- 参数优化方向:应调整最大失真而非时间速率
让我们看看飓风风型下的这一切。 在这个速度下,我们的翻转速率大约为半秒看起来不错。
但是当我们放慢风速时,翻转速度太快了!所有这些运动都来自混合,而不是滚动。 在此速度下,单个纹理体素滚动的速度比纹理彼此之间淡出的速度慢。
所以我们可以增加翻转之前所需的时间。 现在我们的时间大约是 5 秒,而且效果很好。
让我们以更快的速度再次测试……叹息..我们又回到了开始的地方。 我们需要更好的解决方案。 调整正时似乎不适用于变速
Slide 78

📌 要点汇总
- 核心目标重构:重新审视流程图技术的运动控制逻辑
- 速度同步挑战:不同速度物体的翻转时间难以同步
- 分组解决方案:需要将相似速度物体分组处理
我们需要重新思考这一点。流程图技术试图实现什么目标?
[点击]我们为效果循环编写了一些时间速率,但时间真的是我们的核心概念吗? 我们怎么知道我们需要调整它? 好吧,当运动太少或扭曲太多时,我们会对其进行调整。
[点击]这就是我们应该尝试调整的。 这就是我们应该公开的参数:最大失真。
[点击]我们可以将其定义为自上次流翻转以来在纹理空间中行驶的距离。 这里仍然存在一个问题。如果邻居因为速度而疏远,那么他们的翻转时间也会疏远。 这有点像你的汽车的挡风玻璃雨刷器与你前面的汽车同步……直到它不同步。
[点击]所以我们需要一种方法将相似的速度捆绑在一起,并安排它们的翻转发生在同一帧上。 如果我们知道一种将所有尺度的数字分组在一起的方法就好了……
Slide 79

📌 要点汇总
- 对数分箱应用:按2的幂次划分风速处理区间
- 频率倍增特性:相邻分箱翻转频率差为2倍
- 同步优势:保证相近速度的同步翻转效果
嘿,还记得对数分箱吗? 我当然希望如此,伙计们,这就像五分钟前一样。
我们只会考虑风速为 2 的幂时的流动翻转率。
[点击]对于每个其他风速,我们使它们的行为与最接近的二的幂的行为相同。
[点击]更快的速度更频繁地重置。 您可以看到同一 bin 中的速度(例如本例中的 0.8 和 1.3)在相同的时间和速率下发生翻转。 .8 和 1.3 翻转。翻动。翻动。
二次方对数分箱的优点在于,相邻分箱的翻转频率恰好是两倍(或一半)。 这意味着他们有一半的翻转是完全同步的。 这对于彼此接近但不接近 2 的幂本身的速度很重要 - 例如这里的 0.7 和 0.8 .8 次翻转。他们都翻转了。 .8 次翻转。他们都翻转了。
Slide 80

📌 要点汇总
- 动态分组调整:风速变化时自动重新分组
- 淡入率补偿:通过加速/减速实现同步调整
- 渐进变化控制:确保淡入率变化不超过一个数量级
如果风速发生变化,但大部分保持不变,则所有物体都将保持在相同的速度组中。 但这种情况很少见。 如果一个物体的风速发生变化,它可能会发现自己更接近不同的2的幂,因此与新的组不同步。
为了纠正这个问题,我们调整该对象的淡入率,以便在发生流翻转时它与其组同步。
[单击] 落后于计划的对象会短暂加速,而提前于计划的对象会短暂减慢。
***此调整不会显得突然,因为风速逐渐变化,因此对象大多过渡到相邻组。 这意味着褪色率变化很少超过一个数量级。
Slide 81

📌 要点汇总
- 例外条件判断:定义组进度超75%且对象进度不足25%为异常情况
- 翻转时间策略:延迟对象至下一翻转周期以避免动画突变
- 动画优化目标:防止因进度差异导致的突然淡入淡出效果
但有一个例外。 如果一个物体进入即将翻转的组,但它远远落后于计划。 [点击] 我们将此定义为该组已完成其阶段的 75% 以上,而该对象仅完成了其自身阶段的不到 25%。
对于这些,我们的目标是下一个流翻转时间。 本质上,公共汽车迟到了,所以我们告诉它搭乘下一班车。 [点击]
这可以防止突然快速淡入淡出,这种淡入淡出被视为动画弹出。
Slide 82

📌 要点汇总
- 噪声特征一致性:相干流与分流流在所有速度下保持噪声特征统一
- 扭曲恢复机制:系统能优雅处理并恢复累积的形变扭曲
现在我们的噪声特征对于相干流保持一致,
分流流,
在所有速度下,
任何累积的扭曲都会优雅地恢复。
Slide 83

📌 要点汇总
- 风流动翻转示例:飓风形状中物体按风速差异呈现不同翻转速率
- 组边界特性:相邻对数箱成员翻转速率存在2倍/1/2倍关系
- 同相重置机制:组边界物体相位同步实现帧级重置
这是一个旧的开发剪辑,可以让您了解飓风形状的风的流动翻转率是什么样的。
这些物体被黑客攻击以它们的翻转速度弹跳。
您可以看到周边物体的翻转速度较快,而中心物体的翻转速度较慢,那里的风速较低。
您还可以看到 - 在组边界 - 相邻对数箱的成员将以恰好是其邻居的一半/两倍的速率翻转。
您可能还注意到它们彼此同相,因此它们可以在同一帧上重置。
Slide 84

📌 要点汇总
- (无内容):此幻灯片无演讲内容
[ 34 : 15 ] [水合物]
这就是我们的风系统。
接下来是演讲的抓包部分。 我们在这个系统的完整开发周期中学到了哪些技巧?
Slide 85

📌 要点汇总
- 风量类比:风量与阴影贴图范围存在类似的空间作用限制
- 风力发电机类比:定向风源类似聚光灯的局部影响特性
- 环境风节点类比:全局风影响类似环境光的无处不在特性
- 风接收器类比:材料属性决定对象对风作用的响应方式
艺术家教育 [点击]随着艺术家(和经理/制作人)逐渐了解该系统及其局限性,我们可以通过使用照明类比来借鉴现有的直觉。
[咔嚓]风量如影瀑布。 如果你的电机不在盒子里,它就不会吹风,就像模型在阴影贴图之外,它就不会投射阴影一样。
[点击]风力发电机就像点灯和聚光灯。 他们有针对性地将光和风注入场景中。
[单击] 环境风节点就像定向光或环境光。 无论你把它们放在哪里,它们都会影响一切。 另外,请小心不要在场景文件中留下杂散的内容。
[点击] 风接收器对于风系统来说就像材料对于照明系统一样。 系统会告诉您输入了多少,模型和材料属性描述了模型如何对此做出响应。
Slide 86

📌 要点汇总
- 顶点数据工作流程:适用于90%模型的标准化风遮罩计算流程
- 隐式根猜测:基于坐标极值或距离点自动识别潜在根节点
- 组合未连接部分:支持艺术家合并分离组件以优化计算
- 工具开发:高级美工Travis Slagle实现该工作流程的工具
我们已经制定了一个适用于 90% 模型的顶点数据工作流程
[单击]选择要运行的网格体 [单击]标记要锚定的顶点 [单击]我们的顶点颜色工具将计算风遮罩作为距最近连接根的标准化距离。 我们对整个模型中的每个连接部分分别进行标准化。
[点击]如果艺术家想要组合一些浮动元素,则可以合并未连接的部分以进行此计算。
[点击]有时,我们甚至不需要手动选择根节点。 我们可以猜测每件作品 [click] 隐式根可以是沿连接块的 x、y、z、u 或 v 轴具有最大或最小坐标的顶点。 [单击]或者它们可能是距离指定表面或空间中的点最近的顶点。
我们还可以混合隐式和显式根。 如果隐式猜测对于 10 件作品中的 9 件来说是好的,艺术家可以仅标记需要修正的作品上的根,然后再次运行。
Travis Slagle 是一位高级工具技术美工,他出色地完成了我所描述的工作流程并创建了实现该工作流程的工具。
Slide 87

📌 要点汇总
- 蒲福氏量表应用:采用19世纪航海风速分类体系指导模型设计
- 5级风速分类:静止/平静/微风/强烈/暴力对应不同强度表现
- 统一测试标准:通过命名按钮实现团队协作的风速测试一致性
- 纹理滚动速度:数字参数对应纹理移动速率而非实际物理风速
很长一段时间,我一遍又一遍地收到同样的问题:“肖恩,创作模型的最佳风速是多少?” 我毫无帮助的回答是“所有这些!我们需要在所有速度下看起来都很好。”
[点击]为了让每个人都达成共识,我们受到了鲁珀特发现的东西的启发:蒲福氏量表。 这是 19 世纪初为水手开发的,描述了 12 种不同的风速类别以及识别它们的陆地和海洋行为。 这是一个很好的参考,你应该在维基百科上查看。
[点击] 12 的粒度超出了我们的需要,因此我们减少到 5 个令人满意的命名速度。 我们将使用它们来指导风强度的水平,并使模型看起来像是存在于同一空间中。 我们的速度类别是 [点击] 静止 [点击] 平静 [点击] 微风 [点击] 强烈 [点击] 暴力 因为如果没有一点暴力就不是战神游戏
[水合物]
[点击]我们在风速覆盖工具中添加了命名按钮,以便每个人都可以在相同的条件和健全性检查级别设置下测试他们的模型。单击指定的按钮,它将滑块推至相应的值。
建立这种语言后,风速问题就消失了。
[点击]这些是我们的速度,但数字并不重要,因为从技术上讲,它是纹理滚动速度,而不是它应该看起来的风速。 再说一遍,这不是PBR风。
Slide 88

📌 要点汇总
- 吹气测试法:通过呼吸模拟匹配不同风速名称的能量特征
- 模型响应反馈:当模型对呼吸产生合理反应时确认参数设置
- 增强直观体验:通过身体互动提升风效参数调整的感知准确性
- 测试方法有效性:看似荒谬但被验证有效的参数调试技巧
今天的奇怪提示:当您调整模型参数并在不同速度下进行测试时,请对着屏幕吹气。
[点击]尝试匹配风速名称的能量。 平静[呼吸] 微风[呼吸] 暴力[呼吸] 然后,也许之后擦拭你的屏幕。
[点击]这是一个愚蠢的想法。 你会觉得很傻。 但它有效
[点击]一旦模型感觉它正在响应你,它就会点击……并且你知道你有一些很好的设置。
Slide 89

📌 要点汇总
- 树枝独立风效:为每个树枝单独采样风力避免整体树体晃动
- 三种设置对比:展示不同梯度设置对树枝摆动效果的影响
-
分支核心梯度:从树干中心向外辐射的顶点绘制方式更自然
我们游戏中的一些树非常大。 他们不会摇摆太多。
[点击]我们发现,通过单独向树枝施加风并激活这些树枝上的树木行为,我们可以获得更好的外观。 这意味着每个人都可以单独采样风。 这很重要,因为如果他们共享一个样本,斧头投掷会让整棵树摇晃。
[点击] 这是其中一个分支的外观,具有三种不同的设置。
顶部没有树设置。 顶点绘制只是从枝根到叶尖的渐变
在底部,我们在激活树设置的情况下进行了调整。 左侧模型使用与顶部相同的梯度,而右侧模型使用远离分支核心的梯度。
右下角的模型是我们发货的模型(在我修复了那个摆动的垂直之后)
Slide 90

📌 要点汇总
- (生成失败):解析批次响应时未找到此幻灯片
当对树枝进行建模以使用树运动的这个额外层时, [单击]将顶点与纹理中树枝的流动对齐很有帮助。 毕竟,如果那里没有顶点,则无法将其固定为枢轴。
[点击]使用这些顶点从分支核心创建辐射梯度。 [点击]看起来比线性渐变没有那么有弹性。 [点击]但有时我喜欢混合两者的遮罩,同时保持枢轴远离左侧的枢轴
[点击]以下是模型上的此类渐变。 通过研究如何生成顶点颜色,我们可以看到不同的、合理的外观。
左边那一颗是光芒四射的。 右边是线性的。 中间是混合的。 对于这个模型,我们提供了混合,但左侧的设置也相当不错。
Slide 91

📌 要点汇总
- 实用主义优先:强调功能有效性高于技术合理性
- 物理模拟隐喻:将绳索比作倒立树,暗示运动规律
- 技术取舍:放弃钟摆功能因弹簧效果更优
进一步倾向于“如果它很愚蠢,但它有效,那就没那么愚蠢” 悬挂的横幅和绳索只是倒立的树。
我们专门为此目的设置了钟摆运动设置,但没有完成该功能,因为弹簧看起来不错。
Slide 92

📌 要点汇总
- 头发根部优化:使用头皮最近点作为顶点枢轴
- 技术差异说明:明确区分顶点与网格枢轴概念
- 风遮罩算法:基于顶点-头皮距离标准化处理
- 效果对比验证:左侧模型采用新技术效果更优
对于头发——尤其是飞道—— [点击]让每个头发顶点的枢轴使用头皮上最近的点作为根部效果很好。
[点击]需要明确的是,这与我们描述的工作流程不同。 枢轴不是头发网格上的顶点。
[点击]我们将顶点风遮罩值设置为顶点和头皮之间的距离。然后标准化整个头发网格的蒙版。
在这段视频中,左边的模型使用了这种技术,右边的模型仅使用头发原点作为枢轴,中间的模型是两者的混合。 对于这个角色,我们运送了左边的角色
Slide 93

📌 要点汇总
- 皮毛结构缺陷:四卡/三卡结构导致弯曲参数失效
- 穿透问题应对:通过距离风遮罩+网格级归一化解决
- 参数设置规范:弯曲参数必须设为1.0避免效果衰减
皮毛可能很棘手。
[点击]它通常由单张四卡或三卡组成。 这意味着弯曲参数不会执行任何操作,因为无论将 1 和 0 提高到多少指数,它们都不会改变。
[点击] 毛皮通常平放在皮肤上, [点击]这意味着即使是很小的运动也很容易引起穿透,而且我们没有弯曲来减轻它。
[点击]对于这些,我们使用通常的方法计算枢轴,但我们将尖端的风遮罩值设置为到皮肤的距离 - 就像我们对头发所做的那样 - 并对整个毛皮网格而不是每个单独的卡进行重新标准化。
在归一化之前,我们取最大值,并将其 90% 用于我们模型的风运动参数。
[单击] 请记住将这些弯曲设置为 1.0,否则您将减弱短发的效果,因为我们正在以它们的绝对长度进行烘焙。
Slide 94

📌 要点汇总
- 胡须结构特性:多跨度设计支持高弯曲指数(3.0-3.3)
- 运动穿透控制:利用大运动值塑造面部轮廓
- 外壳防护机制:坚硬外壳防止卡片移动时暴露
胡须很像毛皮。
[点击]但是我们还有更多跨度可以使用! 至少,我们的模型做到了,我很高兴他们做到了……
[点击]因为它允许我们使用弯曲,并且我们的指数非常高。 奎托斯的胡子使用的是3.0。 他毛皮上的毛皮有多个跨度,使用 3.3。 这些高值使胡须内部保持僵硬,但让尖端传达运动。
[点击]为了让胡须塑造远脸颊一侧的轮廓,可以使用足够大的运动值,使胡须尖端穿透到被风吹过的脸部一侧。 它有可能会刺入口腔内部,但我们从未见过这种情况发生。
[点击]我们的一些留胡子的角色在卡片下面有胡须壳。 有些则不然。 对于风,我更喜欢外壳坚硬且与皮肤相当紧,以防止它们在卡片移动时暴露出来。
Slide 95

📌 要点汇总
- 植被解决方案:采用冒充级技术实现细节与阴影
- 风效兼容性:优化后的代理模型与风系统协同
- 技术延伸应用:将头发技术迁移至植被制作
[ 43 : 44 ]
在剩下的演讲中,我们将介绍我们所做的一些邻近的植被工作。 对于我们的一些植被细节级别和阴影代理,我们使用了与风配合良好的冒充级解决方案。
Slide 96

📌 要点汇总
- 广告牌云:技术名称引发听众对视觉元素的联想
- 常见误解:默认认为是面向相机的四边形结构
- 认知纠正:实际并非如此,存在视觉误导性
- 技术本质:需要重新理解其真实构成方式
这种技术被称为广告牌云。 当你听到这个名字时,你首先想到的是什么?
[点击] 面向相机的是蓬松的、有纹理的四边形吗? 是的,我也是。 每个人都这样做。
[点击]事实并非如此。
Slide 97

📌 要点汇总
- 命名变革:从”广告牌云”改为”卡簇”解决术语混乱
- 行业建议:推荐业界采用新命名以提升沟通效率
- 命名权属:名称变更取决于具体应用场景需求
这些。 这些本质上是广告牌云。
[点击]我们开始称它们为卡簇,混乱消失了。 我建议业界也这样做,但这实际上取决于你。
Slide 98

📌 要点汇总
- 技术演进:超越简单世界轴对齐卡排列的初级阶段
- 学术基础:基于两篇专业论文的技术实现方案
- 信息延迟:后续将重复展示该幻灯片供阅读
该技术比仅仅几张世界轴对齐的卡更先进。
我们在实现中参考了两篇论文。
我稍后会再次发布这张幻灯片,以便您可以阅读。
Slide 99

📌 要点汇总
- 技术挑战:探讨卡数量增加对性能的影响边界
- 质量上限:分析卡质量达到最佳状态的限制条件
- 发展路径:推动技术突破现有性能瓶颈
这种方法以 20 世纪 90 年代中期的最先进技术为基础,提出了两个问题:
[点击]如果我们使用更多卡会怎样? 和 如果这些是最好的牌怎么办?
Slide 100

📌 要点汇总
- 应用效果:在绿叶植被等体积填充场景表现优异
- 源网格谜题:通过猜测源网格验证技术理解深度
- 性能平衡:明确质量与性能存在最佳平衡点
- 认知警示:提醒避免对技术效果产生过度乐观
对于体积填充几何体,例如绿叶植被,结果非常好。
其中之一是源网格。 你能猜到吗?
[点击]现在怎么样?
[点击] 质量与性能之间肯定存在一个最佳点。 不要得意忘形
Slide 101

📌 要点汇总
- 贪心算法选择最佳卡片:通过评分标准选择最优卡片并重复处理剩余模型
- 评分标准:投影面积之和=世界空间面积×法线点积
- 卡片覆盖机制:厚切片展平三角形,其他三角形分配给其他卡片
- 数学定义:总卡片纹理覆盖=投影面积之和,体现模型捕获程度
对于输入模型,我们将制作一组卡片,一次一张,从最好的一张开始。 我们如何找到它? 简单的。
[点击]测试已知宇宙中的所有卡位面。 给每个人打分。 高分获胜。
[点击]一张潜在的卡片考虑了模型的一个厚切片。 它将展平靠近卡片平面的模型三角形——在一定的误差指标内。 其他三角形将留给其他卡片。
[点击]卡片的评分标准是它们能够捕获模型的多少,以及这些三角形变形的程度。
[点击]从数学上讲,这被定义为投影到平面后它们的面积之和。 这是世界空间面积乘以三角形和平面法线的点积。 或者您可以将其视为这些扁平三角形的总卡片纹理覆盖率。
[点击]最好的牌认领它的面孔。 这是一种贪心算法。 我们对模型的剩余部分重复该过程,直到什么都没有剩下。
Slide 102

📌 要点汇总
- 6维空间降维到二维:卡片方向+距中心距离替代全光函数
- 候选平面优化:间距与误差度量正比,减少冗余计算
- 测地线分布优势:防止极点过采样,半球体法线覆盖方向
- 预计算方向批次:固定方向下预计算各面投影面积
这需要大量的计算。 这怎么能更快呢? [点击]所有卡片的空间就是6维全光函数。 但我们可以将其减少到二维: [单击]卡片面向的方向,[单击]以及它距对象中心的距离。 所有其他平面都是多余的。
[单击] 将候选平面隔开。 [点击] 间距间隔可以与误差度量成正比。 因此,如果您可以接受更多的失真,您可以计算更少的候选卡。
[单击] 对于方向,我们使用测地球体的法线。 我们只需要一半的球体,因为负方向是多余的。 如果我们想要更多的候选人,细分很容易。 测地线分布还可以防止极点处的过采样。 斐波那契螺旋线也能发挥很好的作用。
[单击] 如果平面方向不改变,每个面的投影面积也不会改变。 因此,我们预先计算每个方向批次的单独面部区域。 [点击]当然,我们会忽略远处的牌。 它们必须与模型边界框相交。
Slide 103

📌 要点汇总
- 正交相机渲染材质通道:匹配卡片参数生成纹理
- 剪切平面控制误差:近/远距离匹配接近参数
- 贪心算法修正机制:后期检查单面是否可优化配对
- 视觉密度优化:避免大间隙,保留模型密度
就像使用冒名顶替者一样,从正交相机渲染材质通道。
[单击] 对于每张卡,将相机位置、方向和边界与卡及其内容相匹配。
[单击]这可以包括剪切平面。 近和远之间的距离可以匹配接近参数——误差度量。
[点击]我们使用 Python 图像库和 Maya UV 自动布局来生成最终纹理。
[点击]最后,有时一张脸与一张得分很高的牌很接近,但对于那张脸来说并不是一个好的配对。 It’s a victim of the greedy algorithm. [点击]在我们知道要使用的牌之后,可以快速重新测试一张脸是否会使用不同的接近牌获得更好的分数。 [点击]如果我们找到更好的卡,我们会在渲染纹理之前切换它。 这有助于防止我们发现的第一张卡片周围出现大间隙。与将面部渲染到多张卡片中进行补偿相比,它更好地保留了模型的视觉密度
***(不幸的是,当我捕获所有这些示例时,这就是我们正在做的事情。我们交付的更好。抱歉,这里没有证据)。
Slide 104

📌 要点汇总
- 卡簇替代冒名顶替者:支持风运动和视差模拟
- 顶点属性传输:从基础模型到卡簇模型传递属性
- 阴影代理应用:卡簇版本用于所有距离层级
- 渐进式模型显示:卡簇随距离变化呈现完整模型
在我们的测试级别中,我们正在研究这些树的卡簇版本。 当我们接近时,它们会逐渐变成完整的模型。
[水合物]
对于影子代理,我们始终使用卡簇版本,即使是近距离也是如此。
我们使用卡片簇而不是冒名顶替者,以便我们获得风的运动和视差。 这是通过从基本模型到卡簇模型的顶点属性传输来完成的。 这不是完全匹配,但它给了我们一些很好的运动,特别是在阴影中
Slide 105

📌 要点汇总
- 远处模型哑光边缘不准确:卡簇模型在远距离存在渲染缺陷
- 卡簇模型精度问题:需要优化远距离渲染
随着卡片簇模型越来越远,我们注意到一些哑光边缘不准确。
Slide 106

📌 要点汇总
- 传统纹理淹没方法:通过放大/模糊图像叠加重复实现
- 速度瓶颈:大图像处理效率低且边缘颜色偏移
- 视觉局限性:玩家不可见且效果不够吸引人
我们需要淹没我们的纹理。 [点击]这通常是通过放大或模糊图像来完成的 [单击]并将原件放在上面。 [点击]重复,直到淹没得足够多
[点击]这看起来不错,但玩家永远不会看到它。 [点击]速度很慢,尤其是大图像 [点击]它偏向边缘颜色。 除非在人为的情况下,否则可能不会引人注目,但它可能会更好。
Slide 107

📌 要点汇总
- Mip洪泛技术:基于2的幂次图像大小实现快速生成
- 浮点处理优势:支持高质量加权缩放和压缩
- 双向Mip链处理:最近邻升级+多级合成提升效率
- 双线性采样应用:可实现平滑孔填充但受网格对齐影响
我想要更快的东西。 所以我开发了所谓的 mip 洪泛技术,它假设图像大小为两倍的幂
[单击] 对于图像,使用未预乘的颜色 [点击]缩小到其大小的一半,根据样本的 alpha 覆盖率对样本进行加权 [点击]重复直到达到一像素宽或高 我建议为此使用浮点。
我们记住这些纹理并 [点击]然后沿着 mipchain 往回走。使用最近邻来升级。 [单击] 在顶部合成更高分辨率的 mip。 [单击] 一直重复备份堆栈。
[点击]由于算法时间复杂度的对数分量,生成速度很快并且可以很好地缩放图像大小 [单击]在磁盘上,由于这些大面积的恒定颜色,压缩效果会更好。
如果您在 upres 链中使用双线性采样,这也可以用于快速、平滑的孔填充。 ***but results will differ depending on grid alignment, so video could be tricky
Slide 108

📌 要点汇总
- 幽默开场:用嚼口香糖比喻引出植被互动主题
- 物理碰撞影响:探讨物体与植被的动态交互机制
[ 50 : 36 ] [ 水合物 ]
I came here today… to chew bubblegum… [click] and kick grass.
And bubblegum is beyond the scope of this presentation.
[点击]
So let’s talk about ground vegetation interaction. How does it move when physical objects collide with it?
Slide 109

📌 要点汇总
- 角色影响植被:物理对象存在需扰动周围植被
- 植被位移需求:需实现自然的植被移除效果
物理对象,例如角色。
[点击]只是在草地上乘凉。
[click] We want their presence to affect nearby vegetation
[点击]将其移开
Slide 110

📌 要点汇总
- 投影纹理方案:使用精灵图+混合模式记录碰撞体
- 高度场处理:通过最小混合模式保留深度干扰
- 梯度推离算法:利用微积分梯度实现物理推离效果
这通常是通过自上而下的投影渲染纹理来完成的。 每个对撞机都可以将自身的简单表示渲染到此纹理中 - 就像某些方向向量的精灵一样,使用附加混合进行渲染,以便多个形状可以按任何顺序混合。
[点击]想要响应碰撞的植被模型将读取此世界空间纹理并沿采样方向移动其顶点。 安德鲁·马克西莫夫 (Andrew Maximov) 在《神秘海域 4》中就是这样做的。
[点击] 另一种方法是将碰撞体形状渲染为高度场而不是显式方向。 为了以任何顺序混合这些,最小混合模式可以保留最深的干扰。
[点击]这可以将顶点按比例向下推,并与位移成比例,并使用我们之前描述的拉伸修复使其看起来像旋转。
[单击]或者您可以计算场的梯度并使用它来推离对撞机。 这不是 Photoshop 渐变,而是微积分渐变:最大斜率的方向。
Slide 111

📌 要点汇总
- 现有相机问题:游戏相机视角限制导致脚部动作不可见
- 视觉效果需求:需要延长稳定状态以呈现清晰轨迹
- 技术改进方向:寻找方法让玩家观察到连续动作痕迹
让我们来做一些简单的事情。 你可以看到他脚边的草分开了。 用这台相机看起来很不错。但这不是我们游戏的相机。
[点击]这是我们游戏的相机。 你很少会看到他的脚。 所以你很少会看到这个动作。 这很令人失望。 我们还需要一些东西。 我的目标是找到一种方法来延长这种稳定,这样玩家就可以看到一条踪迹。
Slide 112

📌 要点汇总
- XZ偏移技术:使用双通道实现轨迹延伸效果
- 粒子系统应用:带状粒子生成动态轨迹几何体
- 生命周期控制:通道淡出实现粒子消散效果
- 年龄通道功能:蓝色通道实现程序化动画控制
[ 52: 30 ]
我们在路线上的第一次通过是使用两个通道进行 XZ 方向偏移,并使用一个额外的通道进行扩展以实现效果年龄。
[点击]我们使用带状粒子系统来创建一些轨迹几何体。 这会延伸球体的后缘,并在其生命周期内淡出所有通道。
额外的年龄通道(此处以蓝色通道显示)将让我们寻求程序化的定居动画。
Slide 113

📌 要点汇总
- 技术应用案例:E3 2017成功演示该技术
- 碰撞器限制:仅支持球体碰撞器导致兼容性问题
- 渲染冲突:多碰撞器引发深度冲突现象
- 投影缺陷:自上而下投影影响植被动态表现
这项技术显示出了前景,我们在 E3 2017 上使用了它,但它存在一些问题:
它只能使用球体碰撞器。
多个碰撞器可能会在渲染纹理中发生深度冲突,因此巨魔两脚之间的草会来回弹出。
此外,由于它是自上而下的投影,因此无论效果的高度如何,它都会移动植被。 这意味着高架碰撞体,如跳跃的狼、举起的物体和高高的巨魔,看起来就像一个幽灵在它们下面的草地上移动。
Slide 114

📌 要点汇总
- 足迹系统方案:通过精灵淡入淡出实现轨迹效果
- 触发条件:仅在脚部接触地面时激活效果
- 团队负担:增加特效团队创作工作量
因此,也许我们可以使用足迹系统将淡入淡出的精灵放入渲染纹理中。只有当脚接触地面时才会发生这种情况。
[点击]这可行,但会大大增加我们的特效团队的创作负担,因为他们已经有很多安排了。
Slide 115

📌 要点汇总
- 管道改造需求:需要增加材质/动画标记
- 方案评估:因工作量过大建议放弃该方法
- 技术直觉:认为存在更优解决方案路径
[点击]这将需要在我们的管道中对材质和动画进行大量额外标记。 由于额外的工作量,我建议我们不要采用这种方法。 我的直觉告诉我有更好的解决方案。
Slide 116

📌 要点汇总
- 双通道渲染:使用两个通道分别处理高度场的动态与静态信息
- 褪色时间计算:通道褪色程度反映自碰撞发生后经过的时间
- 斜率控制倾斜:利用不褪色通道的斜率确定顶点倾斜方向和幅度
- 近似形状优化:采用布娃娃等简化模型满足性能与内存预算
我们只花了大约七个月的时间在后台思考,就找到了一个能够满足视觉目标并符合性能和内存预算的解决方案!
[点击]我们使用近似形状,例如布娃娃,并将其底侧的高度渲染为两个通道。
[点击] 每帧保持一个通道,另一个通道向上淡出。
[点击]通道褪色的程度可以告诉我们自渲染碰撞以来已经过去了多长时间。
[点击]当顶点倾斜时,我们使用不褪色高度场的斜率来确定倾斜的方向和幅度。
Slide 117

📌 要点汇总
- 双缓冲策略:通过双缓冲纹理实现精确运动向量构建
- 混合条件控制:仅在高度场降低时替换未衰落通道
- 钳位修复机制:通过像素着色器钳位解决负高度差问题
- 动画适配方案:静止/高速运动适用,闲置动画需特殊处理
这是另一个视频,其中包含更详细的玩家碰撞器。 你可以看到他的脚。
[单击]此渲染纹理是双缓冲的,因此我们可以为顶点运动构建精确的运动向量。对于我们描述的所有技术都是如此。
[点击]我们使用读取-修改-写入将最小值混合到衰落通道中,并且仅如果该混合将高度场推低,则替换未衰落通道。
[点击]除了我无法使用读取-修改-写入…它速度较慢并且不在我的预算之内。 但是我们可以利用双缓冲来读取前一帧,让我们在渲染纹理像素着色器中进行合成。
[单击] 现在,这意味着在极少数情况下,绘制顺序可能会导致一帧出现负高度差,但我们通过钳位到零来在植被顶点着色器中修复此问题。
[点击]最后,这最适合静止或高速运动的碰撞器。 闲置的玩家动画可能会导致植被从其稳定动画中大量弹出回到其被践踏的姿势。 我们通过将玩家站立处的淡入率降低至零(始终是纹理的中心)来缓解这一问题。 这会将脚下的定居动画速度减慢至零。
Slide 118

📌 要点汇总
- (无内容):此幻灯片无演讲内容
这是一些正在进行的测试台视频。
您可以看到,随着我在这个兔子洞中越走越远,我开始使用越来越多的调试可视化
[水合物]
Slide 119

📌 要点汇总
- 双纹理对比:左侧双高度场纹理与右侧世界观视图同步演示
- 时间计算公式:高度场差值除以淡入率得出碰撞持续时间
- 程序动画调整:使用余弦衰减曲线控制植被稳定过程
- 覆盖条件逻辑:深碰撞立即生效,浅碰撞需等待稳定
[ 55 : 55 ] 视觉效果将帮助我们更好地理解这一点。
在左侧[单击],我们将查看双高度场纹理。 在右侧[点击]我们将看到侧面的世界观。
[点击]首先我们将渲染一个球体。 [单击]在世界视图中,我添加了高度场的一部分,以便我们可以在太空中看到它。 [点击]
好吧,让我们拿走球体 [点击]可以看到高度场的一个通道以恒定的速率淡出,而另一个通道保持不变。
[单击]重新添加球体。 让我们移动它。
[点击] 啊啊……暂停 [点击]高度场通道的差异除以淡入淡出率,可以告诉我们自碰撞体移离该位置以来经过了多长时间 [点击]我们对总倾斜使用程序动画——它是余弦乘以衰减——当植被稳定时,它会变成负值,导致我们过度调整。 [点击]我们使用经过的时间从该动画曲线中寻找姿势
[单击] 随着球体继续移动,您可以看到仅当球体比褪色通道更深时它如何覆盖保持的通道。 这意味着较浅的碰撞需要等待植被稍微稳定下来才能对其产生影响,但较深的碰撞可以立即对其产生影响。
[点击]让我们再看一遍,但有一些简单的草几何体对此做出反应
Slide 120

📌 要点汇总
- 角色碰撞适配:小角色使用网格球体,大角色采用多关节形状
- 视觉演示优化:关闭球体以增强植被反应的可视化效果
- 技术落地验证:展示实际发布版本中的碰撞检测实现方案
[ 57 : 15 ] 最后看一下实际使用的已发布技术。
对于较小的角色 - 就像那里的那个可怜的家伙 - 我们使用简单的网格球体作为碰撞器形状。
我现在正在关闭 draugr 上的球体,以便我们可以更好地看到效果。
对于我们较大的英雄角色,我们尝试通过将形状附加到多个关节来获得更忠实的碰撞表示。
Slide 121

📌 要点汇总
- 自定义碰撞器:巨魔图腾使用自定义碰撞器实现良好效果
- 脚部碰撞器:独立脚部碰撞器对大型角色有关键作用
- 形状优化:突破原始形状限制提升物理交互精度
我们不限于原始形状
巨魔图腾有一个自定义的碰撞器形状,效果非常好
您还可以在这里看到单独的脚部碰撞器对于较大角色的重要性
Slide 122

📌 要点汇总
- 网格碰撞器:船舶案例展示自定义网格碰撞器应用
- 物理模拟:复杂形状物体需要定制碰撞检测方案
- 工程实践:实际项目中碰撞器定制的典型场景
船是我们使用自定义网格碰撞器的另一个例子。
Slide 123

📌 要点汇总
- 知识传递:核心概念已完整阐述
- 应用启发:鼓励选择性采纳技术要点
- 认知目标:确保听众获得可执行的启发
[ 58:12 ]
呼。 有很多事情需要讨论。 我希望一切都清楚了并且你能够从中得到一些东西, 即使您不打算实现具有所有这些功能的系统。
Slide 124

📌 要点汇总
- 后续沟通:预留线下交流与社交媒体答疑
- 资料共享:承诺发布参考幻灯片资源
- 信息闭环:建立完整的知识获取渠道
我们没有时间提问,但如果您有问题,我会在之后留下来,或者通过 Twitter @TheRealBigFeel 与我联系。
我也会在那里发布参考幻灯片。
Slide 125

📌 要点汇总
- 团队协作:跨职能团队合作推动系统开发
- 关键贡献:列举核心成员的技术支持
- 行业认可:强调团队专业能力与协作文化
我必须大声喊出来,因为如果没有一些了不起的人的团队合作,我真的不可能建立这个 [点击]我提到了鲁珀特·雷纳德。 同样,他是我们的图形程序员之一,在与我共同开发这个系统方面发挥了重要作用。 [点击]我们该项目的技术总监 Florian Strauss 开发了雪系统,在构建地面植被碰撞时我可以借用很多工具。 [点击] Paolo Surricchio,我们负责 FX 和渲染的图形程序员之一,根据我的规格,在我们的粒子工作流程中整合和发展了风的影响,做得非常出色 [点击]Travis Slagle,一位工具技术艺术家,构建了我们用来创作风网格上 90% 顶点数据的工具 [点击]Max Ancar,我们这个项目的外汇主管,对绝大多数攻击发起了攻击,并且是该系统的最大粉丝。 [点击] 以及索尼圣莫尼卡的整个团队。 没有他们,我不可能完成最好的工作。 这些人中的每一个人都非常专注于他们所做的事情,这是一个令人难以置信的地方。 我爱这个团队,我感谢他们所有人。 我的观点是:如果你有机会与他们中的任何一位合作,无论是现任还是前任,你绝对应该抓住这个机会。
Slide 126

📌 要点汇总
- 招聘职位:公司正在招募技术艺术、编程、设计等多领域人才
- 多学科领域:涵盖所有学科的艺术、编程和设计岗位
- 灵活处理:即使没有匹配职位也可尝试申请,公司提供灵活方案
- 鼓励申请:欢迎有贡献潜力的人才主动联系公司
- 未来机会:可能为合适人选提供未来职位机会
如果您对此感兴趣,实现这一目标的最简单方法很可能就是与我们联系。 我们正在招聘许多职位,包括技术艺术职位。 所有学科的艺术。 所有学科的编程。 所有学科的设计。 如果您看不到自己的才能可以发挥的空缺职位,但认为自己可以做出巨大贡献,那么无论如何都可以去尝试! 我们可以灵活处理,或者将来可能为您提供位置。
Slide 127

📌 要点汇总
- (无内容):此幻灯片无演讲内容
[ 59 : 58 ] 感谢您今天加入我。
Slide 128

📌 要点汇总
- (无内容):此幻灯片无演讲内容
【结论2分钟】