Granny 3D

Granny 3D SDK 特性

Granny 是一个完整框架(framework),用于开发从简单3D应用程序到完整的次时代引擎的任何东西. 如果你用Granny开始你的项目,你能够略过几个月的开发周期. 你得到久经考验的导出器,一个可扩展的预处理mesh,纹理和动画的工具盒(Toolbox), 一套normal map和texture map的生成工具,一个完整的预览工具来在你将他们交给引擎之前可视化你的mesh和动画, 以及一个完全的3D工具的运行时库,它的范围包括从摄像机控制到变幻分解函数等. 噢,以及一个运用在超过 2,400 款游戏中的骨骼动画系统,它几乎在任何平台都是可用的.

或者, 将Granny扔进你的项目将会缩短开发某些关键特性的开发周期,包括动画融合,normal map生成,或去升级你的导出器来从美术工具完全特性中受益,比如shader graphs, animation plug-ins, 或 lighting 和 camera control等.

Granny 2.8 是高度模块化的和去耦化工具,允许你使用或多或少(由你选择)它的功能在你的应用程序里. 全部APIs都是分层的,因此你能够很容易从使用高阶“do everything" APIs转到使用细粒度的APIs,那让你可以清楚地控制任何事情. 你甚至可以越过我们的APIs,直接操作Granny数据.Granny 2.8永远不会逼迫你不得不按我的方式做事情 - 我们不强迫你去使用特别的顶点格式, 我们不把专利的场景图架构强加给你的应用程序,我们不要求你从一个定制的对象层级中继承. 所有事情都可以按照你的方式来做,并且保持在你的控制下.你能够快速且容易地使用Granny 2.8的全部特性而无需放弃对你的引擎架构的控制权.

以下是Granny 2.8的一个特性列表. 和所有RAD产品一起,我们很频繁更新Granny,基本上每月都会加入新的特性和优化,因此这个列表被快速扩充,一点也不完整.


Animation Studio

  • 美术师能够图形化详细说明所允许的角色行为,测试融合,控制动画速度和循环参数, 所有这些都不用离开图形化工具或牵扯到一个编码人员.
  • 运行时API允许重定向状态机到多个相关的角色而无需修改,就像是一个普通的Granny动画.
  • 图形状态和参数都被完全暴露,你可以工作在一个比较高的层次而持有所有Granny的灵活性.
  • 多层次状态和融合编辑来保持复杂的示意图是可管理的.
  • 管理角色状态的完全可扩充库. 把你自己的节点加入到系统,并且和它们在一个编辑器进行交互,就像一个内建的类型. 允许你直接烘焙关于你的游戏的专业知识到动画系统里.

动画回放和融合

  • 一次性融合任意多个动画
    • 新的 "较低优先级(priority-less)"权重方案使做更复杂的多动画融合(就像9动画融合)都变得轻而易举
    • 完全的 四元融合确保没有不受欢迎的融合的人工制品(就像万向节锁定)
    • 没有工作会作用于0权重的动画上,因此留很多动画attach到一个模型上也不会招致计算负担
  • 优化后的回放
    • Granny有一个针对平台的采样优化, 融合, 和性能矩阵结构, 包括 SSE, VMX128, Paired Singles, SPU 和 Altivec.
    • Granny支持多线程采样以在多核心或多处理器平台上达到最大性能.
  • 整合的动画 LOD
    • 降低在一定距离上的骨骼细节的成本
    • 剔除骨骼或动画的多个版本的需求
    • 动画指定 LOD - 尽早减少精细动画
    • LOD参数的离线或装载时间计算
    • 全部的动画取样呼叫都有一个所需的的误差值
    • 全部的融合函数都工作同一个 - 完整的正交
    • 全部的转换都平滑进行,没有 "爆音"
  • 镜像动画回放
    • 通过允许一个动画为左手和右手坐标系版本服务来节省内存
    • 镜像动画能够和非镜像动画进行无缝融合
  • 动画每模型和每动画的清晰的时间控制
    • 以任意的时间尺度播放动画向后或向前
    • 很容易为在一个场景里的所有模型或只是那些可见的模型提前时间
    • 为跨网络的回放同步调整时间,每模型或每动画,前进或后退
    • 改善一些实时动画和一些分实时的动画矩阵 - 就像特效
    • 每帧多次查询和改变模型时钟来使碰撞检测更容易
  • 单独的 decomposed translation, rotation, 和 scaling 以支持完美的插补
    • 运行美术师完全自由地在他们的动画里使用缩放和剪裁
    • 防止缩放动画和剪裁动画引入旋转的东西,反之亦然
    • 没有工作会应用到没有被使用的通道 (eg, 你不需要关心scale和shear如果你的动画没有使用他们)
  • 完全的骨骼层级的融合百分比控制
    • 每动画的轨迹方面加权和模型骨骼方面加权的单独控制
    • 很容易将上半身运动和下半身运动合并(feather)到一起
    • 具有释放曲线的自动正确的相互影响来合并或分开合并动画
    • 工具插件和自动化抽取使创作骨骼权重更容易
  • 通过三次多项式(cubic beziers)释放动画进和出
    • 对缺省定时(timing)和平滑转换自动化呼叫
    • 为了清楚的缓和曲线控制,用户可控的切线曲线
    • 为了完全的自动控制内存管理,在ease-out 曲线完成点可选地释放控制资源
  • 迅速的根骨骼运动预测
    • 在动画化时通过移动角色保持脚站在地上
    • 无需计算整个角色状态预测碰撞
  • 明确的融合步骤控制
    • 为每根骨骼post-blending但pre-hierarchial合成,直接修改或重载本地坐转换
    • 为肢干的手工或IK辅助调节每根骨骼(保证双脚和地形同高,或手拉或手握住的物品离开墙),直接修改或重载世界转换
    • 为在另外的时间再次使用或后面的一个动画混合,保存本地转换或世界转换状态
  • 为复杂动画的高级融合定向五环图
    • 从多层的简单的个体构造复杂融合图
    • 为用户定制效果(比如肌肉和衣服)的用户回调
    • 采样和渲染代码变得不依赖于动画复杂度
    • 简单的动画类封装比如facial animation, lipsync, hand gestures, foot IK - 使它很容易应用到复杂的功能块到多个骨骼rigs和类型,而无需每个都有很好的上下文知识
    • 更简单的和外部修改器的整合,比如collision-detection, physics constraints 和 ragdoll simulation
  • 使用你自己的meshes
    • 动画APIs是完全和mesh和纹理APIs分开的
    • 合成,硬件T&L-ready 4x4 矩阵,为在你自己的mesh变形或刚性mesh渲染里使用
    • 直接下载Granny的矩阵到3D硬件来炫耀快速的基于shader的变形.所有console和PC平台的硬件变形范例都是可用的.

文件格式

  • 完全透明盒灵活的文件格式
    • 文件格式的所有方面都暴露在API层面,因此你能够写你自己的Granny文件读取和写入,你甚至无需使用Granny API公用程序
    • 文件格式不是硬编码,因此你能够添加你自己的扩展或甚至完全改变它,同时把它用于你的文件
  • 现成的缺省文件结构
    • 所有数据是(缺省地) 保存在现成的格式中,因此加载只是一个单一的块读取,并且一个超级快的指针传递; 没有笨重的RIFF分析或类型转换
    • 文件数据能够被保存在文件里德多个段,这有助于快速解除或重新加载多种类型的数据(比如纹理数据和定点数据)
  • 内建版本化
    • Granny能够透明地转换较老版本的Granny数据,或者在toolchain或者在运行时.我们是很认真地不去让你丢开或重新处理你的数据,除非你自己想那么做.
    • 作为一个演示Granny的版本化支持如何健壮, 和Granny Viewer一起交付的"GrannyRocks.gr2" 范例文件是在2003年最后被导出的.我们再也不需要去碰它.
  • 你的定制数据得到和Granny原生数据同样的版本对待, 因此你能够保存决定性的数据在你的.gz2文件里,无需担心保持他们最新的问题.
  • 内建比ZIP更好的压缩
  • 让Granny自动压缩你的全部文件,它的压缩比比PKZIP和其它标准压缩工具更好
  • 自动字节顺序转换
    • Granny处理所有的字节交换(byte-swapping), 因此你能够使用完全相同的文件在你的所有目标平台上,而无需对你的源代码进行任何修改
  • 对每个平台的原生支持
    • Granny 能够加载和修正指针,在或者32位或64位平台, 不管建立文件的平台的指针大小如何.你总是可以从Granny得回原生C结构, 具有全部的引用,数组大小,和现成可用在你的平台上的数据.
    • Granny Exporter 和 Preprocessor 能够建立为任何目标文件优化后的文件, 不管你运行你的toolchain在哪个平台上.

Granny 优化器

  • 我们的可客制化管线工具原生支持超过35个常用的操作,包括:
    • 设置文件压缩参数
    • 分开meshes和骨骼以服从具有一个有限寄存器集的硬件变形
    • 从文件中清除不想要的数据
    • 转换mesh索引(indices)到一个更小的格式
    • 转换mesh顶点格式到一个定制的引擎类型
    • 为在一个有大尾数或小尾数字节顺序的32/64位系统加载,准备好文件
    • 变换文件到你的引擎的坐标系统
    • 为硬件后转换cache,优化索引顺序
  • 支持所有平台
    • 提供源代码给你来跟进你的引擎需要进行修改
  • 简单的,灵活的驱动程序使用你自己的操作定制工具简单可行
  • 命令行设计可很容易与任何build系统整合.

动画导出和处理

  • 灵活的基于采样曲线导出
    • 允许你的动画师去使用任何骨骼动画方法,包括插件和表达式或IK驱动骨骼
    • "frame-less" 采样转换一切为一致的基于时间-帧的信息
  • 先进的压缩
    • 每骨骼用户可控的曲线拟合和动画数据压缩
    • 为位置,旋转和个别地缩放/剪裁数据,从三次方,二次方,线性, 或步骤插补选择
    • Granny为你的数据自动选择最小的可能的表示法. Granny 支持所有事物从五年前浮点指针曲线表示法,下到7位降维格式. 你得到最小的可能格式而不用超过你的公差目标.
    • 任意时间和时间步长的样本动画保持完美的连续性
    • 完全支持C0 和 C1非连续曲线, 因此对象能够弹跳,瞬移等等,同时仍然在任何时间尺度上保持完美的平滑运动
  • 广泛的后处理能力
    • 在导出后rotate, translate, 或 scale 整个动画
    • 自动对齐动画,使他们在起始点开始,而不管它们在哪里建模的
    • 自动的旋向性和坐标系统重映射,因此你能够容易地改变右手坐标美术工具数据位左手坐标数据到你的引擎, 反之亦然, 改变 "上" 向量,等等.
  • 整合的轨迹遮罩支持
    • 允许游戏内的每骨骼动画遮罩
    • 用整合进Max和Maya的UI建立,或使用你自己的定制脚本工具
  • 变形目标和顶点动画
    • 为视位动画或定制的mesh-based动画导出一个任意数量的变形目标.
    • 为终极控制导出每顶点曲线. 定位更新每个或在模型相关或在骨骼相关的空间的顶点.

Granny 查看器(Viewer)

  • 原生支持PC 和 Macintosh,在两者上都完全使用硬件3D加速能力
  • 完全 3D 预览
    • 从多个独立的文件加载多个模型
    • vertex normals, face normals, bounding boxes, bones, bone names, 和 coordinate frames 能够在完全动画模型上被可视化检查
    • 支持所有常用的长宽比和FOVs,因此你能够看到模型在你的引擎的透视下看起来是怎么样的
    • 自动检测mesh 大小和原始方向,因此你回总是看到你的模型方向正确 (不论它是Y轴向上还是Z轴向上) ,而且在合适的距离 (加载大建筑或小角色,他们 总是赶上正确的帧,甚至在你调整摄像机之前)
    • 场景内摄像机视角被导出,允许你在运行时模型上检查定义的视角
  • 完全动画预览
    • 从多个文件在独立的加载模型上试看动画
    • 播放有根运动节点或没有根运动节点的动画
    • 肉眼观察动画边界来做onion skin 测试
    • 慢下来或加速来来更清楚看动画
    • 前后拖动时间来检查指定的动画段落
    • 预览动画倒回播放
  • 视觉校准工具
    • 用户可选择的 min, max, center, 和 origin 网格,为简单模型对齐
    • 多个常用单元网格尺寸,为视觉尺寸校准 (mm, cm, m, km, etc.)
    • 具有标尺读数的自动测量直线,检测工作空间的确切长度
  • 纹理检查
    • 从模型中单独检查纹理
    • 使用 UV 覆盖来看模型是如何被映射的
    • 为模型上可视化UVs是如何被指派的,交换校准纹理
  • 完成原始文件数据检查
    • 出于调试目的看实际的原始文件数据
    • 作为超链接导航整个文件数据数
    • 查看确切的顶点,mesh和动画数据
  • Granny Viewer自动动态转换旧的数据格式,让它容易查看和浏览

导出器整合

  • 支持所有版本的3ds Max和Maya, 和 5.11版本后的所有XSI
    • MAX 支持包含了所有节点层级动画, rigid meshes, Bones Pro, Physique, 和 Skin
    • Maya 支持包含了所有节点层级动画, rigid meshes, rigid skinning, 和 smooth skinning
  • 全部可访问的美术工具数据都是可以被导出的,甚至它被指定到一个特定的包(package)
    • 导出 MAX-only 或 Maya-only 用户数据, light settings, camera settings, dummy bones, 等等,因此你能够使用它来做全屏导出,以及角色和属性
    • 导出全部 MAX-specific 和 Maya-specific 材质参数,你可以在你的定制shader中使用它
    • 导出动画化定制属性就像你可以用与标准骨骼动画同样方式取样的样条曲线
  • 层级设定界面以精确控制导出内容和设置
    • 控制什么模型,纹理,动画和材质被包括进导出
    • 设置全局偏好选择比如纹理压缩百分比,最大加权的骨骼每顶点(bones-per-vertex),和动画曲线类型或一项一项重载设定
    • 设置被保存在场景和设置文件中
    • 设置自动地和场景文件以及单独的对象一起存留,因此模型被从一个场景复制到另一个场景将事实上 保留任何特殊的Granny导出设置在新的场景里
    • 常用设置能够被保存到紧凑的设置文件里,并会被新场景加载,跨网络共享,或者在美术师之间通过邮件传送
    • 设置是前后兼容的,因此新版本的导出器能够从旧颁布中读取常用设置,反之亦然
    • 设置是独立于工具的,因此Granny导出在MAX里设定的设置能够在Maya里使用,等等.
  • 原生工具脚本支持
    • MAXScript 和 MEL 捆绑允许解放双手,完全自动化批量导出
    • 在导出后自动地运行你自己的后处理可执行脚本
    • 写特殊目的的脚本来自动化常用设置,或者检查和强制化美术约定

源代码

  • 原生地支持全部具有一个ANSI-C标准库的常用编译器和平台
  • 没有templates, inheritance, 或其它不再被支持的C++ 特性,因此即使在非 C++ 兼容的编译器上也不会有困扰
    • 在MSVC, GCC, SN, ARMCC等等里编译.
    • 在几乎每个具有浮点指针支持的平台上编译: WinXX, Mac OS X, XBox 360, Wii, 3DS, PS3, PSP, PS Vita, Linux, 等等.
  • 极度干净,分段的设计使用户添加的特性很容易被执行和维护
  • 没有 "new"s 或 "delete"s - 所有内存管理调用都是通过集中的allocate和free函数指针进行,因此 内存管理能够通过API或在源代码级别被覆盖.
  • 没有硬编码文件打开或关闭 - 所有文件调用都是通过集中的open, read, write, 和 close 函数指针进行,很容易被API或在源代码级别被替换

Mesh变形和控制

  • 在运行时容易地操作和切换mesh
    • 所有的mesh/model绑定是用户可操作的, 给你渲染顺序,变形顺序,变形结果存储, GPU-residency, 和 LOD 交换方面完全的控制权
    • 透明的mesh结构允许你在运行时改变顶点,权重,颜色,纹理坐标,甚至多边形顺序和包体(inclusion)
  • 为多种平台快速变形
    • 包含优化后的融合器(blender),支持多个平台和多个顶点格式,具有一个可扩展的架构,它让你的代码即刻地和自动的受益于我们新发布的融合器(blender)
  • 支持切线空间变形,加上位置和普通变形
  • 当可用的时候,让硬件 T&L 做工作
    • 全部mesh数据都是对应用程序可用的,可配合硬件或修改为硬件随时可用的格式, 不管怎样,Granny 明确地支持你的目标硬件平台
  • 没有任何限制给Granny动画
    • mesh 变形 APIs 能够被和任何顶点数据和变形指令集使用,无论他们是来自Granny的动画 APIs还是来自你自己的定制动画代码

Mesh 导出和处理

  • 大量的顶点布局(layout)支持, 包括压缩格式 - 从浮点指针挑选,压缩的16位,压缩的8位,和各种其他格式,以支持每个单独的顶点属性
    • 自动地在Granny地标准格式和你自己定制的顶点格式之间转换 - 直接保存你自己定制的顶点格式到Granny文件
    • 让Granny为你做减负和常态化工作
  • 完全支持多个2D or 3D 纹理坐标和 每顶点3D or 4D 颜色
  • 用户可指定的骨骼每顶点(bones-per-vertex)以支持加权融合
  • 自动基于常态和材质绑定分开各顶点
  • face-to-neighbor, vertex-to-face, 以及 vertex-to-vertex rings
    • 使用户定制的mesh后处理流程容易实现
    • 包含全部运行时轮廓边缘抽取所需的信息
  • 自动的旋向性和坐标系统重映射,因此能够容易地改变右手坐标美术工具数据位左手坐标数据到你的引擎, 反之亦然,改变 "上" 向量,等等.

材质导出和处理

  • 从MAX和Maya导出整个材质和纹理图
  • 让 Granny的高级函数解释标准shader图,或者为了特效而写你自己的针对特定工具的定制shader图分析器
  • 可编程访问所有的maps,包括 specular, diffuse, ambient, self-illumination, bump, displacement, refraction, reflection, 以及很多其他
  • 可编程访问所有的材质参数像 UV cropping 和 wrapping 类型, environment mapping 类型, tool- supplied physics coefficients, mixing percentages, 以及几百个其他
  • 内建支持S3/DXT 压缩
    • 以硬件随时可用的格式保存
    • 让Granny的自制 DXT 纹理压缩器快速且自动地检测哪个DXT纹理格式可以最准确的编码你的纹理
  • 内建Bink 纹理压缩
    • 得到 20:1甚至更好的纹理压缩,则有助于节省磁盘空间,另外下载大小也是很关键的
  • 内建的转换支持所有的原始纹理格式,它用于任意的bits-per-pixel 和 bit 排序
    • 自动转换Bink压缩或DXT压缩的格式图像到任何格式的原始数据,从而方便处理或传给硬件
  • 高品质纹理重新计算大小,通过自动的MIP-map创建 或 纹理最大到256*256的运行时约束(或任何其他任意大小) 来匹配较老的图形硬件
  • 文件能够包含纹理和材质在他们的全部, 或通过名字引用他们来支持共享的材质和纹理库

Normal mapping 和纹理工具

  • 支持 Max 和 Maya
  • 从影院级高分辨率且有任意数量的材质的geometry,为你的低分辨率的geometry产生单个的,完整的低分辨率的纹理映射
  • 为高级的shader而从高分辨率的geometry 生成漂亮的normal maps
    • 生成切线空间normal maps, 对象空间 normal maps, 或 displacement maps
    • 用户可控的过度取样
    • 自动的纹理填充,以便更好的 MIP-map 产生
  • 被导出模型的切线空间基础向量的自动生成
  • 切线空间的完全SSE优化的变形, 同时支持normal-tangent 和 normal-tangent-binormal 格式
  • normal maps的特殊的纹理压缩路径,它提供额外的精确度,且避免YUV变换

内存管理

  • 低内存开销
  • 全部内部的Granny内存分配都是有锁的
    • 全局非常少的分配量
    • 没有小的分配
    • 不需要下面的高级内存分配器
  • 在运行时"allocationless"
  • 内存被分配和释放仅在你需要它的时候,所以永远没有任何隐藏的每帧内存分配或其它减速
  • 全部内存操作都是可被重载的
    • 在低级别控制内存是如何被分配的
    • 在很多情况下,你能够直接提供内存给合适的APIs,而根本无视低级内存分配器

物理学整合

  • Granny/Aegia整合库的完全源代码被交付
    • 添加ragdoll到你的游戏只需几行代码
    • 自动化生成的弹跳,撞击或其它动画效果混合在物理的结果中
    • 通过物理学的驱动一个没有额外asset的混合动画创建僵尸效果
  • 小的,集中的整合层很容易被定制化到不管你想要的什么效果.
  • 很容易重定向到其它物理学 APIs,比如 Havok, ODE, 或者定制的方案

反向(逆)运动学

  • 预合成 IK
    • 使用IK来瞄准枪,点手指,并转头,然后使用标准Granny动画控制API来混合他们到你的动画里
  • 后合成 IK
    • 分析后合成骨骼位置的有效性 (和你的世界geometry碰撞, etc.), 然后快速使用IK来修正它