成为一个Rigger

这将会是一篇很长的blog,主要讲述我曾经作为一个rigger的一些经验和经历,但由于我已经不是rigger很久了,所以要回忆起一些细节还是挺花时间的.
在开始之前我得先声明几点
[list=1]
[*]我不是一个很好的rigger
[*]职业生涯很短2009-2010.9.30
[*]我不是在告诉你怎么成为一个好的rigger,仅是分享经验和想法而已
[/list]
暂时怎么多吧,现在开始我的rigger之旅.

[b][color=blue][size=large][align=center]IKFK无缝切换[/align][/size][/color][/b]
在我开始讲述前我要给你们讲一下IKFK无缝切换这个技术,因为在我真正开始学习rig之前我就知道它的原理了,非常简单的实现原理.原理就是我们先保存IK或是FK的骨骼的位移和旋转,然后进行IKFK切换,这时候IK或FK的控制器发生了位移和旋转的变化,我们只需要把之前保存的位移和旋转重新赋予它们就行了,因为这个过程是通过MEL来完成的,而MEL的执行速度非常快,就出现了无缝切换的假象.
2008年的时候我的第一份工作,当时公司接了个简单的广告,要用到3D动画,角色很简单,要做动画自然要进行rigging,当时我只懂很基础的rig,为了节省时间我在网上下了个mel工具来直接完成,然后被同事知道了,我就简单的介绍了一下那个工具,结果聊着聊着他就说到了IKFK无缝切换这个技术,我不明白是什么,他给我说明了一下,还说他有个朋友很喜欢研究这个,但头都想破了也没想出来,他也不会就是听说过.当时我对这个未知的技术很感兴趣,于是就google起来,结果我搜到了一个老外的blog还有视屏教程,看了之后才了解什么是IKFK无缝切换,然后慢慢对制作过程进行研究,当时我也还没开始学习MEL,所以花了挺长时间才弄懂这个原理.当时我很兴奋,但没多久另一个问题让我陷入了思考,实现无缝切换这个原理是谁发现的?想了很久后觉得有几中可能
[list]
[*]经验丰富的动画师
[*]经验丰富的rigger
[*]会编写mel的开发者
[/list]

[b][color=blue][size=large][align=center]最初的想法[/align][/size][/color][/b]
2009年春节,我决定假后辞职,向rigger方向发展,为什么选rigger而不是animator,当时我只想在这两个之间选择一个,我很喜欢动画,但要想成为一个优秀的animator,我觉得我需要很长的时间估计4-5年甚至更长,然而对于IKFK无缝切换这个技术原理的了解后让我对技术的渴望更浓烈,于是一个想法出现了:也许我做不出很棒的动画,但我能让做(K)动画变得更简单.

[b][color=blue][size=large][align=center]职能[/align][/size][/color][/b]
rigger不像模型,动画,渲染,需要导演,总监或是组长来验收工作成果,也许你觉得最少需要组长来验收你做好的rig,那我只能说你的能力还有带提高或是你的rig让人不放心.rigger的服务对象是动画师,让他们能摆个种post,让他们开心,他们是rig的使用者,你在完成rig后还要给他们提供"售后服务"的.所谓的"售后服务"包括添加新功能,修复不对的地方之类的.一个好的rigger在真正开始进行rigging前除了了解角色(或物件)的功能特点外还会去跟将要使用这个rig的动画师进行沟通.

[b][color=blue][size=large][align=center]基础很重要[/align][/size][/color][/b]
很多人包括我在刚开始学习rigging的时候都喜欢去学一些很高级的绑法,因为它们包含很多的技术知识,很容易激发我们的学习兴趣,而忽略了基础知识.我不知道你们有没有这样的感悟,在我通过教学学会一种很好的绑法后,我很多时候只能按照这套绑法的思路进行rigging,很难再对绑法进行更改.我还没告诉过你,在我的职业生涯中我从来都没有给我做的rig提供IKFK无缝切换这个功能,早就会的技术为什么不用呢?原因很简单:动画师没要求需要这个功能.我唯一做的就是把原理解释给一个同事,然后他在他的rig上使用了.说这个只是想说不是我们所学到的所有技术都不一定会在工作上用到的,尽管如此我们还是有必要去掌握这些技术的.

每个rigger都喜欢学习新的和高级的绑法,这是好事,但你们有没有想过他们是怎么开发出这些绑法的呢?为什么你开发不了呢?原因有很多,其中一个就是基础.只有有深厚的基础知识你才能不断的扩展推新.

什么是基础?
[list]
[*]rigging system
包括什么是骨骼,它都有什么属性,什么是FK\IK,IK分几种,都是怎么用的.什么是skin,分几种.
[*]约束和层级结构
什么是约束,分几种以及各自的属性.什么是层级结构,我曾见过一个动画工具用来解决一些动画很难K的问题,作者没提供源代码,我觉得很有趣就研究了一下,结果发现他是巧妙的使用了层级结构和约束来解决的,当时让我很吃惊.
[*]人体\动物\机械结构
我记得在工作的时候我曾问同事好几次,问他们公司有没有关于人体结构之类的书.他们也许不清楚我要来干什么.其实以前我在看科幻电影时看到一些很科幻的机器时总觉得有点奇怪,后来我才知道我觉得怪的原因是:为什么做这个机器的rigger会知道一些很细小的东西也会动的.
[/list]

to be continued...........
MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
### 关于 gRPC 与 Rigger 框架集成和使用的探讨 #### gRPC 的简介及其灵活性 gRPC 是一种高效的远程过程调用框架,基于 HTTP/2 协议传输数据,并采用 Protocol Buffers (Protobuf) 定义接口和服务[^1]。其设计目标是实现跨语言、高性能的服务间通信。然而,在实际应用中,仅依赖 gRPC 原生 API 可能无法完全满足复杂的业务场景需求。因此,许多开发者会通过引入额外的中间件或框架来增强功能。 #### Rigger 框架概述 Rigger 并不是一个广泛知名的标准开源框架名称,可能是特定领域内的工具或者自定义解决方案的一部分。如果这里提到的是某种内部开发框架,则需进一步确认其实现细节以及如何与 gRPC 集成的具体方式。通常情况下,“Rigger” 类型的技术可能涉及动态配置管理、服务发现机制或其他高级特性支持。 #### gRPC 与 Rigger 的潜在集成方案 为了将两者结合起来使用,可以从以下几个方面考虑: 1. **服务注册与发现** 如果 Rigger 提供了一套完整的微服务体系架构组件(如 Eureka 或 Consul),那么可以通过它完成 gRPC 服务实例的位置跟踪工作。这样做的好处在于能够轻松应对大规模分布式环境下的负载均衡问题[^3]。 2. **拦截器模式的应用** 在 gRPC 中设置客户端及服务器端拦截器是一种常见做法,用于处理认证授权、日志记录等功能。假设 Rigger 包含类似的 AOP 特性,则可将其逻辑嵌入到这些拦截器当中去执行。 3. **消息编码解码优化** 当涉及到大数据量传输时,除了默认 Protobuf 外还可以探索其他序列化形式的支持情况。如果有证据表明 Rigger 支持多种格式转换操作的话,这将是提升性能的一个重要方向[^1]。 4. **错误恢复策略制定** 对于可能出现的各种异常状况要有预案准备,比如断路保护措施等等。借助 Rigger 所具备的能力构建更加健壮可靠的网络通讯链路[^2]。 以下是简单的伪代码展示如何创建基本的 gRPC 客户端连接并附加自定义行为的例子: ```java // 创建通道对象 ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", port).usePlaintext().build(); // 添加拦截器 ClientInterceptor interceptor = new MyCustomInterceptor(); // 自己实现该类 Grpc.withDefaultCallOptions().withInterceptors(interceptor); // 构建存根(stub),此处假定存在名为MyService的服务 MyServiceBlockingStub stub = MyServiceGrpc.newBlockingStub(channel); Response response = stub.someRpcMethod(Request.newBuilder().setField(...).build()); ``` 以上仅为理论层面指导思路,请依据实际情况调整具体实施方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值