1.简述

这篇文章是对Adam各种相关资料了解后进行一些精简的内容。如果你想仔细研究某个技术请跳转至unity相关页面。

Adam官方页面: https://unity3d.com/cn/pages/adam

搬运视频以及资源包网盘下载: http://pan.baidu.com/s/1jH6NF86

Adam这个demo由8个人的团队耗时6个月(part1四个月,part2两个月)打造完成。

其中使用到的软件如下:

Model: 3DSMax, Marvelous Designer, ZBrush

Texture: Substance Painter

Tiled textures: Quixel megascans

Animation: MotionBuilder

关于megascans这个软件单独介绍下,算是quixel近年的新计划,可以理解为实景扫描素材库

提供模型和贴图的下载,内容主要以户外自然为主,但目前收费较贵。

技术方面主要集中在2种灯光和新加入的PostProcessing上,其次就是物理插件CaronteFX

2.技术深入

2.1 - 环境与表现

2.1.1 - Adam的布料撕裂效果

这个一开始看demo时的确以为是物理模拟插件CaronteFX的功劳

但看了视频才知道是max里做好,然后导出abc格式到unity中来完成的

我后来在看demo的目录文件时也发现了位于SteamingAssets的abc文件

播放效果:

abc格式导入工具的github地址如下:

https://github.com/unity3d-jp/AlembicImporter

2.1.2 - Adam背上的线缆和面部破损

线缆确实是CaronteFX实现了

而面部破损因为不需要表现破碎动画,先是在Max里用tp粒子制作的原型,然后再交由建模师制作实际模型

关于布料方面以及CaronteFX的使用,极力推荐篇文章:

https://blogs.unity3d.com/cn/2017/01/04/adam-vfx-in-the-real-time-short-film/

2.1.3 - 室内环境中的烟雾动画

下图直接摘自官网

3A游戏中常见的粒子序列,这里使用3dmax的插件PhoenixFD生成。

关于阵列图转换,这里顺带提一下unity正在开发的工具VFXToolbox(https://forum.unity3d.com/threads/release-thread-vfx-toolbox-image-sequencer.438465)

这在unity adam的相关文章中有提到,我后来试用了一下,不仅仅是阵列图和序列图互转这么简单,可能以后要集成一套图形处理的功能进去。

2.1.4 - Puddles水坑涟漪效果

同样使用PhoenixFD制作的涟漪序列,并将这个NormalMap赋予unity粒子序列。

下图直接摘自官网

顺带一提,以上两个效果的作者是Zdravko Pavlov,已经有11年的相关工作经验

2.1.5 - SceneManagement多场景并行编辑

得益于unity5.3加入的SceneManagement,可以多人并行编辑一个大场景了

在观察demo执行文件时,会发现有非常多的场景文件

使用HHD Hex Editor打开后确实可以看见,整个大的场景中不同内容被放在多个小的场景文件内

就像视频中说的那样,多人协作时分成多个小场景编辑,这样非常方便

2.1.6 - 编辑器状态启用IK

(Unite Europe 2016视频中确实有一个InEditorIK的脚本)

有时候要在编辑器内调节IK,视频中提到了这个问题。

解决方法在这里:https://forum.unity3d.com/threads/set-up-ik-in-editor.332035/

2.2 - 角色处理

在视频中Lu和Guard的布料都是用CaronteFX来做的,但实际上资源包中,是通过Unity自定义关节实现的

只有Sebastian的资源包使用了CaronteFX布料

2.2.1 - 自定义关节

来看一下这两个角色的自定义关节。

角色Lu

角色Guard

Lu只有一小块地方用了unity布料。因为这一块在demo中会随风飘扬

对于布料模拟这是个好方法,但是它并不能解决动态穿插问题

2.2.2 - CaronteFX的布料效果

Sebastian是一个单独拆出来的包,原因是它的布料和之前的那些角色不同。它用的是CaronteFX的烘培布料

在这个资源包里会发现居然带了一个纯运行版的CaronteFX,你不能编辑它,你只能用。。

单是看GC没发现什么问题,不过得注意下内存中数据量的问题,烘焙数据大约占了150mb左右,还有烘培速度

carontefx的烘培速度确实非常慢,Adam团队自身也对此做了一些代理对象处理。

另外carontefx其实并不简单,其来头就是RealFlow的开发公司NextLimit

https://www.nextlimit.com/products/name/carontefx/

2.3 - 光照部分

在github上,unity专门把Adam光照部分提取了出来(TubeLight,AreaLight,Volumetric fog)

https://github.com/Unity-Technologies/VolumetricLighting

在Unite Europe 2016 - The making of Adam demo这部视频里,有对这些内容进行细致的讲解

2.3.1 - TubeLight柱形光照

没有阴影,相比AreaLight更低品质,但是便宜

如果直接丢到空项目里用是这样的,因为它必须相机挂上PostProcessing才行

此时就可以看见效果了

还可以设置ShadowPlane,控制光照的扩散

比如这里就约束了底部扩散,你可以直接改生成出来的Shadow Plane坐标和旋转,来控制它。

2.3.2 - Area Light区域光照

看视频中的讲解,似乎是通过CommandBuffer在AfterLighting处理后,拿到G-Buffer的数据进行采样,并通过DrawMesh来绘制光照。

和TubeLight一样,相机需要挂载PostProcessing。

如果需要和Adam里一样有雾光效果,需要挂载两个脚本

LightManagerFogLights,LightManagerFogEllipsoids

此时可以看见雾的效果(gif)

2.3.3 - Volumetric fog 体积雾

因为在Adam demo中雾效是和灯光整合的,所以也就没法测试了。

FogEllipsoid是具体代码。

另外相关文章中提及到的LightShafts,github地址如下:

https://github.com/robertcupisz/LightShafts

2.4 - 一些其他工具

大气散射和平面反射在Blacksmith的demo中就已经讲过,这里不做介绍

Blacksmith demo学习:http://www.cnblogs.com/hont/p/5658491.html

2.4.1 - RigMeister2000

这是一个角色骨架调试工具,它位于Adam相关的角色资源包里

这个包里有两个脚本RigMeister2000和VisibleSkeleton。

前者可以校对骨骼朝向和作为一个约束工具使用,并且调试朝向。后者可以绘制出骨骼gizmos

挂上VisibleSkeleton之后,效果如下

RigMeister2000这个工具比较谜,因为除了Adam外的人形角色都没有绑定这个脚本

它在LateUpdate里会去做约束处理。但实际上你开不开这个脚本变化不大,或者说基本上没变化。

2.4.2 - Wind

一个小工具,一个绘制箭头Gizmos的脚本

补充:Wind可以作为方向信息传入体积光,并加入噪声的扰动之中。

3.结语

在Unite 2016的两部视频中,unity自己挖了不少坑,比如Delay了1年的Sequence工具。。

unite2016中提及的新特性大致如下:

1.CrowdSystem集群系统,这个说会100%在unity中集成,但目前来看应该还要等。

2.CustomCape feathers simulation in Unity5.4一个羽毛模拟组件,说是在unity5.4中加入,但目前应该是Delay。

3.Motion Vectors for temporal Anti-Aliasing in Unity5.4使用运动向量的随机采样抗锯齿?这个未知

4.Texture Array 这个Demo的地形中有用到,并且5.4确实加入了,在adam室外部分的Shader中可以找到这个类型。

另外室外环境的包中有一个地形工具TETerrain,但是这个工具似乎是缺少编辑器套件,我没办法用大的地表重新切片

所以这部分内容只好跳过。

关于Adam这个demo的研究这里就结束了,因为一直有各种事,delay到现在才开始写。

Unity3D Adam Demo的学习与研究的更多相关文章

  1. 学习和研究下unity3d的四元数 Quaternion

    学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...

  2. unity3d入门 Demo 学习记录

    闲来学习一下 unity3d 的Demo,记录如下. 官方 Demo,名字为 Roll-A-Ball,如图 场景比较简单,包含地面.玩家精灵.主摄像机.墙壁.可拾取的方块.分数为示 text.平行光源 ...

  3. Arduino小车学习与研究

    信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...

  4. Arduino小车学习与研究博客

    Arduino小车学习与研究博客 信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(201352 ...

  5. EMV技术学习和研究(转)

    刚开始学习EMV&PBOC,磕磕碰碰,感谢xuture的<EMV技术学习和研究>给了很大帮助,让我少走了很多弯路,也感谢广俊.surge.艾零.小SO.Spinach.龙行天下的帮 ...

  6. 包建强的培训课程(4):App测试深入学习和研究

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. Unity3D 骨骼动画原理学习笔记

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1. ...

  8. Unity3D之空间转换学习笔记(二):基础数学

    这期笔记我们专注Unity提供的各种数学相关的类来学习. 时间Time API文档地址:http://docs.unity3d.com/ScriptReference/Time.html 时间加/减速 ...

  9. Unity3D之空间转换学习笔记(一):场景物体变换

    该系列笔记基于Unity3D 5.x的版本学习,部分API使用和4.x不一致. 目前在Unity3D中,除了新的UGUI部分控件外,所有的物体(GameObject)都必带有Transform组件,而 ...

随机推荐

  1. 035 HDFS的联盟Federation

    一:概述 1.单个namenode的局限性 namespace的限制 单个namenode所能存储的对象受到JVM中的heap size的限制 namenode的扩张性 不可以水平扩张 隔离性 单个n ...

  2. unity 之 no cameras rendering

    相机被隐藏或删除了 应该是你的代码摧毁了全部的东西,包括摄像机,所以就会提示你没有摄像机了. 或者说你将  OnClose(); 这段代码的脚本赋给了摄像机

  3. poj3259 Wormholes (判负环)【spfa】(模板)

    <题目链接> 题目大意: John的农场里N块地,M条路连接两块地,W个虫洞,虫洞是一条单向路,会在你离开之前把你传送到目的地,就是当你过去的时候时间会倒退Ts.我们的任务是知道会不会在从 ...

  4. Java 并发编程整体介绍 | 内含超多干货

    前段时间一直在学习多线程相关的知识,目前也算有了一个整体的认识,今天呢,主要从整体介绍一下,只谈造火箭,拧螺丝这种细节还需要自己深究. 首先是操作系统级别对于多线程的支持,由 CPU 的多级缓存.缓存 ...

  5. [洛谷P2066]机器分配

    题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...

  6. BZOJ.1190.[HNOI2007]梦幻岛宝珠(分层背包DP)

    题目链接 把重量表示为\(a\times2^b\)的形式,然后按\(b\)排序. 从高到低枚举每一位,\(f[i]\)表示当前位容量为\(i\)时的最大价值(容量即\(a\times2^{bit}\) ...

  7. Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

    题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...

  8. 潭州课堂25班:Ph201805201 爬虫基础 第十四课 js破解 (课堂笔记)

    打断点 找要的数据 鼠标的点击事件 新浪微博登录 表单提交分析 : 先佃输入错误密码开始调式 f10 往下走, f11 进入函数 sh + f11 跳出函数 # -*- coding: utf-8 - ...

  9. Oracle取月份-不带前面的0

    出处:http://www.2cto.com/database/201208/145611.html   今天碰到只要取月份和天数,如果月份前面有0要去掉0.比如说2010-01-08 ,需要的结果是 ...

  10. SimpleDateFormat 格式化参数说明

    字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 W ...