​Cascadeur 2025.2 把可编辑的轨迹切线分为Translation TrajectoryDirection TrajectoryPelvis MainChest MainHand MainNeck MainFoot MainHead MainToe MainUpperArm MainLowerArm Main、Calf Main这也说明并非严格只有五个点。Toe脚趾也支持 Translation Tangents部分 Additional、Directional Point 同样可以支持。​Add一次会创建一整组 Prototype Rig Elements└─ Proto Rigid Body截图中看到的椭球用于后续生成物理刚体。└─ Proto Box Controller用于生成 Box Controller。└─ Proto Point Controllers └─ Main、Direction、Additional 三种控制点。它们目前都是原型对象要点击下方的Generate rig才会生成正式的 Rig。Rigging Tools / Elements in Rig Mode圈出的设置对应关系是设置实际控制Axis ZAdditional Point 沿 Z 轴放置Space Local使用 Joint 的局部坐标轴Offset 40Additional Point 距离 Main Point 的距离Add创建整套 Prototype Rig Elements为什么你只注意到椭球因为 Outliner 默认隐藏 Prototype 内部对象。你可以打开 Outliner 右上角的菜单启用Show prototype inner objects查看里面的 Point Controllers。Elements in Rig Modehttps://news.google.com/rss/headlines/section/topic/TECHNOLOGY?hlen-USglUSceidUS:enhttps://news.google.com/rss/headlines/section/topic/BUSINESS?hlen-USglUSceidUS:enhttps://news.google.com/rss/headlines/section/topic/SCIENCE?hlen-USglUSceidUS:en记得的推荐应该是 Cascadeur 官方关于 Box Controller 替代 Rigid Body 的建议└ 躯干、主要肢体等有明显质量的部分通常使用 Rigid Body。└ 手指、头发、尾巴的细小关节、辅助骨骼等可以使用 Box Controller避免给每个关节都建立 Rigid Body。“尝试次数”就是程序找位置、检查位置的次数不是最终树木数量。例如尝试 100 次其中 40 次位置不合适就最多留下 60 棵动作中的具体效果合适的关系只用轨迹留痕会怎样武器附魔剑刃始终发亮跟随剑已经移开亮光还留在旧位置无法持续描述当前剑刃挥剑时出现一道弧光留痕这正是留痕擅长的显示挥动路径挥得越快火星越密停手后停止产生速度驱动发射固定发射会在静止时继续堆积快慢变化也不明显剑上甩出的火星继续飞走脱离运动火星只停在路径上缺少被甩出去的惯性手心蓄力能量一直聚在手上跟随局部向内运动手一移动就拖出一串聚集感会被破坏火焰挥剑 ├ 剑刃上的亮边跟随让人知道当前哪里带着能量 ├ 挥过的短弧光留痕让人读出挥动方向和范围 └ 甩出的火星速度驱动发射脱离运动让人感到速度和惯性主体本身是否需要持续发亮快速动作是否应该多产生一点东西有没有东西应该甩出去下载的 brown_mud_02 泥土材质 └ Diffuse.jpg颜色 └ nor_gl.png法线 └ arm.png环境遮蔽、粗糙度、金属度 └ Displacement.png原本就提供的灰度高度图 ↓ 将数据整理到一张 RGBA 贴图 TerrainMask_Metallic_AO_Height_Smoothness.png └ R金属度 └ G环境遮蔽 AO └ BDisplacement.png 的高度 └ A光滑度即 1 − 粗糙度现在想象你斜着看这板巧克力视线正好从沟槽上方穿进去。你的眼睛 ╲ ╲ ╲ ① 到达最高参考面这里是沟槽还没碰到东西 ╲ ╲ ② 继续往里看 ╲ ● ③ 碰到沟槽底部或侧面你真正看见的是③ 的颜色不是视线刚到参考面时① 的颜色。视差算法就在模拟这个寻找过程。但 Unity 里的 Terrain 仍然是一层原来的地面没有真的建出这些巧克力块。Shader 每画一个像素就拿高度图做几次查询“沿这条视线再走一点。这里有多高碰到了吗还没有就继续。碰到了就去那个位置取颜色。”于是它把原本要在①取的颜色换成了③的颜色。法线等材质数据也跟着换到③采样画面就有了沟槽深进去的感觉。为什么斜着看更明显正着看 斜着看 │ ╲ ① ① │ ╲ ③ ③ ①③上下基本对齐 ①③在地面上的位置错开 采样偏移很小 采样偏移更明显你刚才把深度从0 调到 0.06 米相当于告诉 Shader“这份高低说明书描述的沟槽按最多约 6 厘米的深度范围去寻找交点。”当前像素 └ 朝屏幕中心取 32 次样本 ├ 靠近原位置的样本偏重蓝色 ├ 中间的样本偏重绿色 └ 更靠近中心的样本偏重红色 └ 分通道累加、归一化再与原画面混合采样位置 当前 UV 屏幕中心 UV − 当前 UV ×样本序号 / 32 × 当前强度因此它同时产生两种现象径向模糊沿径向取了多个位置并混合轮廓被拉开。色散RGB 通道主要来自不同位置轮廓边缘出现彩色错位Terrain 有根据视点调整地形网格细节的机制Pixel Error控制简化程度也支持实例化绘制。Terrain 原生草地、细节和树木有相应的距离、细节或公告牌设置。所以Hierarchy 里只有一个 Terrain并不等于内部没有分区和细节管理。Rigid Body 太多会让角色的质量分布和 AutoPhysics 行为更难控制不只是增加计算量。比如给每根手指骨骼都赋予不合理的质量角色的 Center of Mass 就可能发生偏移。Rigid Bodies / AutoPhysics为什么 Unity 不让 Add Override 自动运行自定义效果这里确实有历史上的设计争议。2022 年Unity Discussions 上一位名为 FronkonGames 的插件开发者遇到了与你几乎一样的问题他已经把自定义后处理效果做成 Renderer Feature接着希望把它直接移进 Volume。结果他发现继承VolumeComponent甚至实现IPostProcessComponent都不会让 URP 自动执行自己的 Shader。其他开发者解释仍然需要 Renderer Feature 实际执行渲染并从VolumeManager.instance.stack读取参数。FronkonGames 对这种限制表示失望因为他的目的是制作方便其他开发者使用的 Asset Store 插件。Custom Post Processing Volume. - Render Pipelines这不是你误解了设计而是 Unity 当时确实没有把自定义后处理的参数注册与算法执行统一成一个自动化接口。之后 Unity 6 提供了创建自定义后处理的模板但模板生成的仍然是彼此配合的 Renderer Feature 和 Volume Component而不是一个 Volume Component 包办渲染。Create a custom post-processing effect with Volume support in URP • Unity Editor有趣的是Unity 的 URP 更新记录还明确提到曾经特意把 Renderer Feature List 的 UI 重新设计得更接近 Volume Profile UI。它们在界面上越来越相似底层职责却依然不同。Changelog | Universal RP层级要决定什么典型方案① Rotation Representation用什么数据表示旋转Euler / Quaternion② Two-point Interpolation两个朝向之间怎样计算Slerp / NLerp③ Multi-keyframe Curve多个关键帧怎样组成连续曲线Piecewise Slerp / Circular Blending / Squad④ Pose Blending多套动画姿势怎样混合Weighted Blend / Additive Blend 等UE使用两个 Pose 之间插值Slerp、NLerp 最常见。多个 Keyframe 形成连续旋转曲线Squad、Quaternion Spline、Cubic Interpolation。多个动画 Pose 同时混合Weighted Quaternion Blending、Additive Rotation、Log/Exp Blending 等。rationale某项决定背后的理由和推理依据。与单纯的 reason 不同rationale 往往强调一套能够解释和支持决定的论证。为什么明明有 Mocap还要手工做最能说明问题的是《Mortal Shell》的开发者观点他们想要控制的不只是角色挥剑的路径而是剑在哪一刻加速、停顿、命中以及玩家怎样感受到重量。用 Keyframe 修改这些时间关系可能比清理和重新调整 Mocap 更快。而 Mocap 的优势恰好是另一回事。它能非常高效地捕获真实人体复杂的关节协调、重量转移和微小动作。尤其是常规 Locomotion一位演员连续跑动、急停、转向可以一次录制大量互相关联的数据。Vanessa Ruffra 的制作经验也提到Locomotion 恰好是 Mocap 特别有优势的地方但是手指、Foot Sliding、动作衔接、Root Motion 和 Gameplay Timing 仍然需要动画师调整。Keyframe or Mocap ?2023 年有一位自称 Microsoft 员工、家人在 ZeniMax 从事动画工作的开发者解释过另一项原因临时增加一个挥斧动作重新安排演员、动捕棚和技术人员可能反而比动画师直接 Keyframe 更麻烦。AAA game animators has mocap completely replaced key frame animations?2026 年的开源项目 github.com/Fusion-Fix/ResidentEvilClassicTrilogy.FusionFix 就是很好的反例。它给经典《Resident Evil》增加屏幕相对移动同时保留原来的 Tank Controls。但是团队不得不处理一个问题角色正在按 W 穿过走廊Camera 突然切换到反方向。如果立即根据新 Camera 重新解释 W角色就可能掉头走回去甚至在 Camera 切换边界反复折返。项目采取的策略之一是当玩家持续保持原有输入时暂时保留原移动朝向直到玩家松开或者明显改变输入。GitHub - Fusion-Fix/ResidentEvilClassicTrilogy.FusionFixMoverComponent.cpp 第 249–265 行如果你没调用 Set Primary Visual ComponentMover 会自己找先在胶囊的直接子级里找第一个 Mesh找不到再在整个角色身上随便找一个。所以你蓝图里那个节点其实可以不放CharacterMesh 本来就会被自动选中。第 269 行还规定外观组件不能和胶囊是同一个组件。第 1694 行Root Motion 要先借 Mesh 的骨骼把动画里的位移换算成世界坐标。以角色拥有一个 Inventory 对象为例旧Virtual DispatchReplication SystemReplicateSubobjects()执行用户代码Inventory UObject新RegistrationReplication SystemRegistered List登记哪些对象参与Inventory UObject旧路径的思想是复制系统调用你的虚函数让你的代码决定这次如何复制子对象。新路径则是你先告诉引擎哪些子对象参与复制引擎便可以集中管理它们。这与 UE 的 Mass、Mover、Render Dependency Graph 所体现的结构变化有共通之处把原先隐含在调用过程中的信息提前显式交给系统。标记 dirtytransform 一变Mesh 就会调 MarkRenderTransformDirty并被记进 UWorld 的 end-of-frame 列表。​一个 Component 可以是 Subobject普通的 UObject 也可以是 Subobject。​为什么网络系统后来采用了 Subobject 这个词因为 UE 的网络系统最初主要围绕Actor工作。后来开发者需要让 Actor 内部的其他 UObject 也能够独立复制属性。例如角色的 Inventory、武器状态、技能实例。这些对象并不一定需要成为 Actor甚至不一定需要成为 ActorComponent。于是网络系统增加了这样的能力让某个 UObject 通过所属 Actor 的网络通道参与复制。这就是Replicated Subobject。UE 5.8 官方文档也区分了两种情况Default Subobject通常在构造函数中创建服务器和客户端创建 Actor 时各自已有对应实例。Dynamic Subobject服务器运行期间创建在符合复制条件时客户端可以通过接收到的网络数据创建对应实例。Replicating UObjects in Unreal Engine | Unreal Engine 5.8 DocumentationReplication 这个术语并不是 Epic 为游戏发明的而是沿用了当时分布式系统Distributed Systems的既有词汇。 Unreal Networking Architecture区别发生在数据进入网络系统之前。在对象数量较少时足够灵活而且特别符合当年 UE 的 Actor-Centric Architecture。但随着世界越来越大出现了一个矛盾网络系统想一次处理许多对象、提前筛选和安排工作Gameplay 代码却把复制对象的选择过程隐藏在各个虚函数里。节点,变量,属性也能被 Iris 复用哪些其他节点会出现类似图标Client Only — CosmeticAdd to Viewport、Remove Mapping Context、Clear All Mappings等。对应BlueprintCosmetic主要标记不需要 Dedicated Server 执行的功能。Server Only — Authority例如Apply Damage。对应BlueprintAuthorityOnly。提醒开发者这个函数要求 Network Authority普通远程客户端不能靠直接调用它修改服务器权威状态。Latent — 延迟完成例如Delay、某些异步加载节点。标记执行可能在稍后继续不属于客户端服务器的权限分类。Motion Matching​天然地支持多线程。Inbetweening and Motion Generation (formerly known asRoot Motion) have been trained on larger datasets, resulting in better output.Also,Inbetweeningnow passes styles between keys.- Applying it to all frames marks the interpolation in green, while applying it only to keyframes does not.也可以按住Alt再把变量拖进图表Proxy Asset声明上下文数据类型为ABP_Manny然后动画蓝图持有Proxy Table引用供Evaluate Proxy在运行时解析。标准化怎么解决Pose Search Schema 里有Normalization Group归一化组这个属性。官方说明If set, all the channels of the same class with the same cardinality, and the same Normalization Group, will be normalized together.For example, in a locomotion database of a character holding a weapon, containing non-mirrable animations, you may still want to normalize left foot and right foot positions and velocity.⁠Docs.unrealengine具体机制你给左脚 Position、右脚 Position以及对应的 Velocity设置同一个 Normalization Group 名字。构建 Database 索引时系统把这些通道的数据合并计算均值和标准差。用这个共同的统计量去做标准化Normalize against its deviation。这样左右两边被放到同一尺度上不会因为某一侧原始波动范围小就被自动压低影响力。SchemaCardinality每个 pose 要存储和比较的 float 数量Schema 每个 pose 的特征维度数量UPROPERTY(Transient)不序列化不存进 .uasset。学术研究的对应关系可引用⁠AcmUE 的默认 Trajectory 双脚 Pose 配置本质上是对这一思路的工程实现只是采样点数量和 Flags 可灵活调整因此实际 SchemaCardinality 会围绕这个量级浮动。Pose Search Schema资产的Debug分类Additional Debug ChannelsInject Additional Debug Channels官方说明bInjectAdditionalDebugChannelsIf bInjectAdditionalDebugChannels is true, channels will be asked to inject additional channels into this schema.the original intent is to add UPoseSearchFeatureChannel_Position(s) to help with the complexity of the debug drawing (the database will have all the necessary positions to draw lines at the right location and time).⁠Dev.epicgamesDraw Inject Additional Debug Channels官方说明bDrawInjectAdditionalDebugChannelsIf bDrawInjectAdditionalDebugChannels is true, all the channels added for debug purposes with bInjectAdditionalDebugChannels (as well as all those channels with an associated zero weight) will be drawn.⁠Dev.epicgamesSampling Time Channel 的官方描述确实很简略我帮你拆清楚。官方原文This channel is mainly for debug purposes toaugment the features data with the sampling time(default weight is set to zero to be irrelevant during searches).每个被索引的 pose 在 Database 里都有一个对应的采样时间Sampling Time也就是这个 pose 在原始动画序列里的时间点比如 0.33 秒、1.25 秒等。Sampling Time Channel 会把这个时间值**直接写进特征向量feature vector**里作为额外的一个维度。和 “Sample Time Offset” 的区别不要和各个 Channel 上的Sample Time Offset搞混Sample Time Offset是“相对于当前采样点再往前/往后偏移多少秒去采样骨骼数据”比如脚在未来 0.1 秒的位置Sampling Time Channel是把“当前这个 pose 自己的绝对采样时间”存进特征数据里Addressables 最终是在内容构建content build时通过 Scriptable Build Pipeline 打成 AssetBundle,Addressables Settings 里注册过的资产想打破硬引用用uid达成软引用,输入系统 ├ 配置层GameInputActions.inputactions │ ├ Global │ │ ├ M地图开关 │ │ ├ F飞行切换 │ │ └ Continue标题页继续 │ ├ Gameplay │ │ ├ 左键移动、攻击、NPC 交互 │ │ ├ 右键Esc取消技能选目标 │ │ ├ 右键拖动滚轮相机旋转、缩放 │ │ ├ Shortcut16技能物品快捷栏 │ │ └ F5保存 │ ├ Flight │ │ ├ WASD移动 │ │ ├ SpaceCtrl升降 │ │ ├ Shift加速 │ │ └ 右键拖动视角 │ └ UI │ ├ 指针、点击、滚轮、触摸 │ ├ 背包右键操作 │ └ 导航、确认、取消 │ ├ 管理层运行时 Hierarchy 中的 GameInput 对象 │ ├ GameInputBootstrap启停操作组、绑定 UI、释放输入资源 │ ├ GameInput统一读取动作判断当前允许哪些操作 │ └ WorldPointerInputNPC 点击、NPC敌人悬停光标 │ └ 执行层 ├ PlayerDirPlayerAttack移动、攻击、技能选目标 ├ PlayerExplorationFlight飞行 ├ FollowPlayer相机 ├ InputSystemUIInputModule分发 UI 事件 └ 背包、装备、快捷栏执行各自操作所有基于 Unity AssetDatabase.GetDependencies 的工具的共同限制不是 Hunter 独有的问题。它会漏掉什么纯代码字符串加载Resources.Load(Prefabs/XXX)、Addressables.LoadAssetAsync(key)、Shader.Find、Animator.LoadController 等。序列化依赖图里没有这些引用工具会把它们标成未使用。先建立排水网络再生成与它匹配的地形。研究里已有先生成分层河网再通过河流、地形片段的组合与雕刻形成地貌的方法这支持“水系参与构造地形”的方向但不能直接当作无限世界问题已经解决的证明。基于水文的地形生成研究Procedural river drainage basins你的情况在电影圈有现成的做法:导演大多不懂乐理,也要对作曲家提修改意见。先发第一条,是教导演怎么给音乐提意见的指南,出自 filmmakergenius.com 的课程Working with a Film Composer(我没找到署名作者,这一点要说明)。原话:describe the problem, not the solution.(描述问题,不要描述解法。)例子是不要说add more strings或make it faster,而是说this doesnt feel as tense as the scene needs。理由是:指定解法常常误诊问题,还把作曲家框住。它还说要具体到时间点,from 1:12 the energy drops when the scene should be building 比 I dont love the middle 好,并且用这段音乐该为场景做什么的功能和情绪来说。(来源)爱尔兰银幕作曲家协会(Screen Composers Guild of Ireland)的 PDF《Working with Composers》,面向导演。原话:You dont have to be a music guru ... to communicate with your composer. If you are not a trained musician, the best way to express your vision is by using emotional action words, similarly to the ones you use with your actors.(不是音乐专家也能沟通,用像对演员那样的情绪动作词。)还有一句警告:如果你误用了一个在专业里意思不同的音乐术语,可能把整首曲子带偏。另外它建议先开定位会议(spotting session):导演和作曲家一起看完整的片子,逐段决定音乐在哪里进、哪里出、每一段要完成什么、观众该感觉到什么,像给音乐写一份剧本。(来源)作曲家 Jamie Thierman 写的《A Directors Guide to Communicating with Composers》,2020 年。他在文中自称是a composer,他的说法是:composing for a director is complete mindreading(替导演作曲完全靠读心)。他给的办法是用参考曲(temp,临时配乐)当对话工具,但要说清楚你喜欢参考曲的什么、不喜欢什么;Use multiple temp music pieces for the same scene,给同一个场景放好几首风格相近的曲子,这样作曲家能找出它们的共同点,而不是被某一首盖住;还有NEVER LISTEN TO IT AGAIN——用过一两次就别再听,免得爱上它,然后一遍遍说make it more like the temp。(来源)例(用 v1 的诊断数据):在 1:11 以后(第 17 小节起),我期待开头那个下行二度、小三度、二度的小旋律还会以某种变形出现,但听到的只是全音音阶上上下下(2 2 2 −2 −2 −2);到 1:43(第 25 小节)的高潮又是一个新旋律 E D G A,和开头没关系。所以后半段我觉得散了。