unity 怎么实现unity崩坏2场景建设三技能效果

Unity5_TheBlacksmith_GDC2015-GAD腾讯游戏开发者平台最近沉迷崩坏3无法自拔,为了能够亲手造出芽衣姐姐,我在网上找了一篇日式卡通渲染的文章,终于在我的不屑努力(上班偷懒)下,写出了能让芽衣姐姐变漂亮的卡通shader来。这篇文章在这里。
我不知道这是哪个游戏的角色,但是成品看上去感觉非常不错,于是我就根据这篇文章在unity里实现了里面的效果。
这里包括的效果有 :梯度漫反射,轮廓线,基于切线的高光,边缘光。这四个效果。
根据那篇文章里的描述,我进行了一些公式参数上的修改,完全按照文章里的公式,在unity里得不到这个效果的。
首先是勾边:
这里勾边我只实现了最简单的渲染背面,然后沿着法线向外扩一圈的效果,这里单独开了一个pass来渲染
Tags { &RenderType& = &Opaque& &Queue& = &Geometry& }
Name &OUTLINE&
Cull Front
#pragma vertex vert
#pragma fragment frag
#include &UnityCG.cginc&
fixed4 _OutlineC
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 tangent : TANGENT;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 worldViewDir
: TEXCOORD1;
float3 worldNormal : TEXCOORD2;
v2f vert (a2v v)
float4 pos = mul(UNITY_MATRIX_MV, v.vertex);//顶点变换到视角空间 View Space
float3 normal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);//法线变换到视角空间
normal.z = -0.5;
float4 newNormal = float4(normalize(normal), 0); //归一化以后的normal
pos = pos + newNormal * _O //沿法线方向扩大_Outline个距离
o.pos = mul(UNITY_MATRIX_P, pos);
float3 worldPos = mul(unity_ObjectToWorld, v.vertex).
o.worldViewDir = _WorldSpaceCameraPos.xyz - worldP//得到世界空间的视线方向
o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);
float4 frag(v2f i) : SV_Target
return float4(_OutlineColor.rgb, 1);;
这段代码我直接使用了 《unity shader入门精要》这本书里的代码,具体原理就是渲染模型背面并向法线方向扩大Outline个距离来实现边缘。
本来还想在脚本里实现细节勾边的,原理就是那个文章里写的判断一条边相邻两个三角形的法线角度大于某个值就画这条线。然后这个查找方法我一直没写出来,自己写了几个,效果都不对。如果有大神知道怎么写的话,还请指导一下。&
剩下的几个效果全都在另一个pass里了。
第二个是&梯度漫反射,其实是就是漫反射再和一个一维梯度纹理采样的颜色相混合,这个技术也是目前大部分卡通渲染技术里常用的,用来模拟卡通里条带状的亮部和暗部。
这个梯度反射图我们定义成 &_Ramp(&Ramp Texture&, 2D) = &white& {},然后在计算漫反射光照图里做一个一维采样。
//漫反射贴图采样
fixed4 c = tex2D (_MainTex, i.uv);
fixed3 albedo = c.rgb * _Color.
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz *
UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);//阴影值计算
fixed diff =
dot(worldNormal, worldLightDir); //世界空间的法线坐标和光照方向点乘得到漫反射颜色
diff = (diff * 0.5 + 0.5) * //暗部提亮
当然这里也可以不提亮
//将光线颜色和环境光颜色以及梯度图采样相乘得到最终的漫反射颜色
fixed3 diffuse = _LightColor0.rgb * albedo * tex2D(_Ramp, float2(diff, diff)).
接下来是比较出效果的基于切线的头发高光。这里也是借用了之前文章的理论,使用一张扰动图沿着物体切线方向扰动法线来达到效果。具体代码如下
//头发高光图采样
float3 speTex = tex2D(_HairLightRamp, i.hairLightUV);
//头发主高光偏移
float3 Ts =i.tangent + worldNormal*_MainHairSpecularOff * speT
//头发主高光值
float specMain = HairSpecular(worldHalfDir,Ts, _MainHairSpecularSmooth);
因为考虑到要重复贴,所以这里我用了一个新的uv i.hairLightUV来保存头发高光图的采样,这样美术可以调整高光反射的密度。Ts为头发主高光的偏移,使用了切线i.tangent方向,这里要注意的地方是,切线值必须转换为世界空间坐标,然后unity里默认的切线并不是沿着发梢到发根的方向,而是垂直于发梢到发根的方向,所以为了得到正确的方向,这里的切线其实已经转换为了副切线,使用原有的切线值去 叉乘法线
//求出沿着发梢到发根方向的切线
half4 p_tangent = mul(unity_ObjectToWorld, v.tangent);
o.tangent = normalize(p_tangent).
o.tangent = cross(o.tangent, o.worldNormal);原有切线方向
点乘之后的切线方向
得到正确的切线方向以后,接下来就是核心的高光计算公式
float HairSpecular(fixed3 halfDir, float3 tangent, float specularSmooth)
float dotTH = dot(tangent, halfDir);
float sqrTH =max(0.01,sqrt(1 - pow(dotTH, 2)));
float atten = smoothstep(-1,0, dotTH);
//头发主高光值
float specMain = atten * pow(sqrTH, specularSmooth);
return specM
}这里halfDir是半角方向,也就是视线方向加上光线方向
fixed3 worldHalfDir = normalize(worldLightDir + worldViewDir);
然后tangent是计算出来的副切线方向,也就是下面那张图的方向,specularSmooth是光滑度,也就是高光的照射范围。
里面的计算公式就是文章说的这块
最后计算主高光值
float specMain = HairSpecular(worldHalfDir,Ts, _MainHairSpecularSmooth);
合成的时候将高光颜色和阴影颜色一起混合得到最终高光颜色
fixed3 specular = _Specular.rgb * specFinal *
最后是边缘光,边缘光是比较简单和常用的效果了,原理是使用视线方向和法线方向做点积,角度越大的地方值就越接近0
half edge =abs(dot(worldNormal, worldViewDir)); //计算边缘光
float Fr = pow(1 - edge, _ReflectionCount)*//反射值
这里Fr也乘以了阴影值,让处在阴影里的边缘不会出现边缘光。但是这个效果好不好,最终还是要和模型挂钩
最后把之前算出来的高光,漫反射,边缘光混合起来
fixed4(ambient + diffuse + specular, 1.0 ) &+ Fr;
得到最终颜色并返回。
这样就能得到最终效果了。
完整的pass代码如下。
Tags { &LightMode&=&ForwardBase& }
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase
#include &UnityCG.cginc&
#include &Lighting.cginc&
#include &AutoLight.cginc&
#include &UnityShaderVariables.cginc&
sampler2D _MainT
float4 _MainTex_ST;
sampler2D _B
float4 _Bump_ST;
sampler2D _R
float _DetailOutLineS
fixed4 _DetailOutLineC
fixed _SpecularS
fixed _MainHairSpecularS
fixed _FuHairSpecularS
float _MainHairSpecularO
float _FuHairSpecularO
sampler2D _HairLightR
float4 _HairLightRamp_ST;
float _RefractionC
float _ReflectionC
float _edgeLightO
sampler2D _LightMapM
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 tangent : TANGENT;
struct v2f {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
float3 worldNormal : TEXCOORD1;
float3 worldPos : TEXCOORD2;
SHADOW_COORDS(3)
float3 tangent : TEXCOORD4;
float2 hairLightUV:TEXCOORD5;
float2 uv_Bump : TEXCOORD6;
float3 normal : TEXCOORD7;
v2f vert (a2v v) {
o.pos = mul( UNITY_MATRIX_MVP, v.vertex);
o.normal = v.
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
o.hairLightUV = TRANSFORM_TEX(v.texcoord, _HairLightRamp);
o.uv_Bump = TRANSFORM_TEX(v.texcoord, _Bump);
o.worldNormal
= UnityObjectToWorldNormal(v.normal);
o.worldPos = mul(unity_ObjectToWorld, v.vertex).
TRANSFER_SHADOW(o);
//求出沿着发梢到发根方向的切线
half4 p_tangent = mul(unity_ObjectToWorld, v.tangent);
o.tangent = normalize(p_tangent).
o.tangent = cross(o.tangent, o.worldNormal);
float HairSpecular(fixed3 halfDir, float3 tangent, float specularSmooth)
float dotTH = dot(tangent, halfDir);
float sqrTH =max(0.01,sqrt(1 - pow(dotTH, 2)));
float atten = smoothstep(-1,0, dotTH);
//头发主高光值
float specMain = atten * pow(sqrTH, specularSmooth);
return specM
float3 LightMapColor(fixed3 worldLightDir,fixed3 worldNormalDir,fixed2 uv)
float LdotN = max(0, dot(worldLightDir, worldNormalDir));
float3 lightColor = LdotN * tex2D(_LightMapMask, uv);
return lightC
float4 frag(v2f i) : SV_Target {
fixed3 worldNormal = normalize(i.worldNormal);
fixed3 tangentNormal = UnpackNormal(tex2D(_Bump, i.uv_Bump));
fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
fixed3 worldHalfDir = normalize(worldLightDir + worldViewDir);
//漫反射贴图采样
fixed4 c = tex2D (_MainTex, i.uv);
fixed3 albedo = c.rgb * _Color.
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz *
UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);//阴影值计算
fixed diff =
dot(worldNormal, worldLightDir); //世界空间的法线坐标和光照方向点乘得到漫反射颜色
diff = (diff * 0.5 + 0.5) * //暗部提亮
当然这里也可以不提亮
//将光线颜色和环境光颜色以及梯度图采样相乘得到最终的漫反射颜色
fixed3 diffuse = _LightColor0.rgb * albedo * tex2D(_Ramp, float2(diff, diff)).
//头发高光图采样
float3 speTex = tex2D(_HairLightRamp, i.hairLightUV);
//头发主高光偏移
float3 Ts =i.tangent + worldNormal*_MainHairSpecularOff * speT
//头发副高光偏移
float3 Tf = i.tangent + worldNormal*_FuHairSpecularOff * speT
//头发主高光值
float specMain = HairSpecular(worldHalfDir,Ts, _MainHairSpecularSmooth);
float specFu = HairSpecular(worldHalfDir,Tf, _FuHairSpecularSmooth);
float specFinal = specM
fixed3 specular = _Specular.rgb * specFinal *
half edge =abs(dot(worldNormal, worldViewDir)); //计算边缘光
float Fr = pow(1 - edge, _ReflectionCount)*//反射值
float Ft = pow(edge, _RefractionCount)*//折射值
fixed3 lightMapColor = LightMapColor(worldLightDir, worldNormal,i.uv).
//计算法线勾边
//half normalEdge = saturate(dot(i.normal, worldViewDir));
//normalEdge = normalEdge & _DetailOutLineSize ? normalEdge / 4 : 1;
return fixed4(ambient + diffuse + specular, 1.0 )
}然后最后要注意添加一个&FallBack &Diffuse&,这样unity的shaderlab才能找到shadowcast的pass来从产生阴影。
最后我们来看看芽衣姐姐的头发用上这个shader的效果
本文已收录于以下专栏:
相关文章推荐
这个demo放出来之后,对其中的角色阴影部分的技术十分感兴趣,我就赶紧下过来研究了一下。官方的技术博客里有对这一部分技术的介绍,链接在这里:独特的角色阴影,
其中写到只要在其他shader里添加
卡通渲染是图形学中一个有趣的话题,属于非真实感计算机图形学(NPR)的范畴,在NPR领域中也最多地被应用到实际游戏中,近年来流行的《守望先锋》,《英雄联盟》,《DOTA2》,《崩坏3》等游戏中都或多或...
最近国内崩坏3开始公测了,在看到宣传视频的时候我就对这个游戏画面很有兴趣了。然后第一时间就下来玩了。本人渣手机最低特效帧数都不稳定,好在今天更新了新版本,模拟器能正常运行了。立马就开了个模拟器最高画质...
写在前面我的博客讲过好几篇卡通渲染了,比如【Unity Shader实战】卡通风格的Shader(一)、【Unity Shader实战】卡通风格的Shader(二)、【NPR】漫谈轮廓线的渲染、【Sh...
呜,其实很早就看到了这类Shader,
写在前面好久没写博客了,一定是因为课程作业比较多,一定不是因为我懒,恩恩。三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface Shader中实现描边效果的弊端,也就是只对表面平...
最近在学习Unity3D 5.0的基于物理的渲染,说实话,这玩意比unity4里的传统光照模型好理解,而且也多了很多的贴图可用,效果也好了很多,尤其是加入了AO贴图以后,能够很好的表现模型暗部的阴影了...
Unity自带了很多shader,其中就包含卡通渲染和描边的shader。但是我在实际开发游戏的过程中还是遇到了这些shader无法解决的问题。
        于是,我们需要理解如何写Unity的...
我们在mmo中通常会有在GUI上面显示一个3D模型的需求,比如查看人物装备的界面。我网上搜索了下,搜到的结果都是直接绑定一个模型到UI的指定位置,最多添加一个摄像机以便控制2d渲染和3d模型渲染的先后...
卡通着色也叫Non-photorealisticrendering非真实渲染
可以让3d的建模用卡通的效果实现,在日本的游戏中比较常见,
让我们看看在u3d中怎么实现
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)八叉树(octree)是三维空间划分的数据结构之一,它用于加速空间查询,例如在游戏中:&br&&ol&&li&加速用于可见性判断的视锥裁剪(view frustum culling)。&br&&/li&&li&加速射线投射(ray casting) ,如用作视线判断或枪击判定。&br&&/li&&li&邻近查询(proximity query),如查询玩家角色某半径范围内的敌方NPC。&/li&&li&碰撞检测的粗略阶段(broad phase),找出潜在可能碰撞的物体对。&/li&&/ol&总括而言,前3个应用都是加速一些形状(frustum、ray、proximity shape如球体)的相交测试(intersection test)。&br&&br&简单来说,八叉树的空间划分方式是,把一个立方体分割为八个小立法体,然后递归地分割小立方体。&br&&br&&img src=&/f104cbdf6fcdd29fcac681_b.jpg& data-rawwidth=&958& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&958& data-original=&/f104cbdf6fcdd29fcac681_r.jpg&&图片来源Wikipedia &a href=&///?target=http%3A//en.wikipedia.org/wiki/Octree%23mediaviewer/File%3AOctree2.svg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Octree&i class=&icon-external&&&/i&&/a&&br&&br&相似地,四叉树把一个正方形空间分割成四个小正方形。由于三维空间较难理解,之后本答案主要以四叉树作图示解释。&br&&br&四/八叉树有多种变种,先谈一个简化的情况,就是假设所有物体是一个点,这样比较容易理解。&br&&br&把每点放到正方形空间里,若该正方形含有超过一个点,就把该正方式分割,直至每个小正方形(叶节点)仅含有一个点,就可以得出以下的分割结果:&br&&img src=&/14e27b989d0f9d1ff8fa38e_b.jpg& data-rawwidth=&786& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&786& data-original=&/14e27b989d0f9d1ff8fa38e_r.jpg&&图片来源:&a href=&///?target=http%3A//www.cs.berkeley.edu/%7Edemmel/cs267/lecture26/lecture26.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS267: Notes for Lecture 24, Apr 11 1996&i class=&icon-external&&&/i&&/a&&br&&br&这种做法是adaptive的,就是说按照一定的条件(叶节点只能有一个点)来进行分割。实际上,我们可以设置其他条件去决定是否分割一个叶节点,例如节点内的点超过10个,或是最多分割4层就不再分割等等。&br&&br&在分割时,我们只需检查点是在每个轴的哪一方,就能知道该点应放置在哪个新的节点里。&br&&br&建立了一个四/八叉树之后,我们可以得出一个重要特性:&br&&blockquote&如果一个形状S与节点A的空间(正方形/立方体)不相交,那么S与A子树下的所有点都不相交。&/blockquote&那么,在相交测试中,我们可以从根节点开始,遍历四/八叉树的节点,如节点相交就继续遍历,如不相交就放弃遍历该子树,最后在叶节点进行形状与点的相交测试。这样做,一般能剔除许多点,但注意最坏的情况是所有点集中在一起,那么就不起加速作用。&br&&br&----------------------&br&9月4日晚更新&br&&br&当创建了一个四/八叉树之后,如问题所提及,有时候需要新增、删除物体(目前我们谈及的是点),以及更新物体(点)的位置。&br&&br&更新位置的最简单实现,就是删去物体再重新安插。然而,显然的优化方法就是,检查旧位置和新位置是否位于同一个叶节点的正方/立方范围里,如果没超出范围,就不需要做删除再安插的工作。&br&&br&但如果超出范围呢?除了简单地从根开始找合适的节点,也可以使用一些搜寻方法找到相邻的节点,如[1]。这里就不谈这些细节了。&br&&br&了解最基本的四/八叉树后,可以把问题扩充至管理占面积/体积的物体。虽然我们可以每次比较场景物体和正方形/立方体是否相交,但为了性能,一般是使用物体的包围体(bounding volume)而不是物体本身。例如是使用包围球(bounding sphere)、轴对齐包围盒(axis-aligned bounding box, AABB)或定向包围体(oriented bounding box, OBB)。这个做法是保守的。&br&&br&但无论是用物体的精确形状,还是使用包围体积,把它们放置在四/八叉树中会有一个问题:它们可能会与节点的边界相交。例如&br&&br&&img src=&/d5157a5dbec7b19fb3db5ce6ee1f8482_b.jpg& data-rawwidth=&642& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&642& data-original=&/d5157a5dbec7b19fb3db5ce6ee1f8482_r.jpg&&图片来源:Akenine-Moller, Tomas, Eric Haines, and Naty Hoffman. &i&Real-time rendering 3rd edition&/i&. p.655, AK, 2008. &br&&br&在上图中,七角星最后处于两个叶节点。这时候至少有两个解决方法:&br&&ol&&li&所有与物体相交的子节点都引用至该物物体。在此例子中,有两个叶节点都引用七角星物体。&/li&&li&令中间节点(非叶节点)也能放置物体。在此例子中,上一层的中间节点(就是右上的正方形)放置七角星物体。&/li&&/ol&第一种方法的范围比较精确,但如果物体的大小相差很大,大体积的物体便需要被大量小范围的叶节点引用,而且管理上也会很麻烦。第二种做法是较常用的方法。然而,第二种方法的范围可能非常大,例如物体刚好在场景的中心,即使是一个体积很小的物体,都只能放于根节点里。&br&&br&要解决这个问题,可以考虑到在相交测试中,扩大包围盒总是保守的(这里的保守是指近似化不会做成错误结果)。如果把四叉/八叉树的正方/立方空间当作包围盒,那么扩大这些包围盒以容纳刚好在边界上相交的物体也是保守的。这就是松散四/八叉树(loose quadtree/octree)[2] 的思路。&br&&br&&img src=&/6c6b02ffad992c_b.jpg& data-rawwidth=&640& data-rawheight=&337& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/6c6b02ffad992c_r.jpg&&图片来源:Akenine-Moller, Tomas, Eric Haines, and Naty Hoffman. &i&Real-time rendering &/i&&i& 3rd edition&/i&. p.656, AK, 2008. &br&&br&以上所说的都是一些基本原理,在实现时要考虑具体的数据结构、内存布局等问题。现在一般认为,完全使用八叉树可能不利于缓存,用一些扁平的结构并利用SIMD可能更可提高性能,或是需要混合的方案,如八叉树只有两、三层,叶节点内使用扁平的方式储存各种包围体。&br&&br&因此,除了传统的四/八叉树实现,也可以参考一些更新的技术,例如&a href=&///?target=http%3A//www.openvdb.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenVDB&i class=&icon-external&&&/i&&/a& [3]中的一些思路。&br&&br&[1] Frisken, Sarah F., and Ronald N. Perry. &Simple and efficient traversal methods for quadtrees and octrees.& &i&Journal of Graphics Tools&/i& 7.3 (2002): 1-11.&br&[2] Ulrich, Thatcher. &Loose octrees.& &i&Game Programming Gems&/i& 1 (2000): 434-442.&br&[3] K. Museth, “VDB: High-Resolution Sparse Volumes With Dynamic Topology”. ACM Transactions on Graphics, Volume 32, Issue 3, Pages 27:1-27:22, June 2013. &a href=&///?target=http%3A//www.museth.org/Ken/Publications_files/Museth_TOG13.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&museth.org/Ken/Publicat&/span&&span class=&invisible&&ions_files/Museth_TOG13.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
八叉树(octree)是三维空间划分的数据结构之一,它用于加速空间查询,例如在游戏中: 加速用于可见性判断的视锥裁剪(view frustum culling)。 加速射线投射(ray casting) ,如用作视线判断或枪击判定。 邻近查询(proximity query),如查询玩家角色某…
&p&做游戏技术主要讲究的是套路,以及对套路的掌握程度。比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细节,比如camera会不会到体积光里边之类的,这种细节的了解会让你更加有信心做出各种技术决策。&/p&&p&所以3a级游戏的大神技术也是对各种领域的套路玩得比较溜,这里我也分享一些做游戏20来年自己领悟出的一些套路吧。&/p&&p&美术用工具输出的3d模型,材质一定要做一个导出插件,否则做出来和进引擎效果不一样,就只能做做手游这种无光照的手绘贴图质量的产品了。&/p&&p&动画要想不滑步,就只能用animation driven的方法,这个需要跟策划做好深度的沟通,得让策划知道移动不是说配置一个速度就可以了,得去找动画师一起调整移动的动画。&/p&&p&动态天气的困难不是制作上的困难,是可以用lightmap的物件会少很多,性能不一定扛得住,这个要在项目初期一定得和制作团队沟通清楚。&/p&&p&球类游戏要达到非常自然的动画,一方面动画肯定是要动捕的,另一方面更重要的是搭建一套动画选择机制,然后根据运动中的球类位置来选择最合适的动画来匹配,再加上小部分的ik。&/p&&p&头上冒字和冒血这种hud就应该用hud的标准方法来制作,切记不能涂省事用ui的方法,对性能效率会有非常大的影响。&/p&&p&音频对最终品质影响很大,一般遵循46原则,即图像资源在最终包中占6成,音频资源占4成。给音频设计师配置一个独立的程序来达成音频的设计需求。&/p&&p&状态机最好是用可视化的方法来实现,游戏中80%的bug都是和状态没切对有关,有个可视化的状态机对于找bug非常方便。&/p&&p&control是最需要状态机化设计的(不同的情况下按同样的按键达成不同的逻辑)&/p&&p&做面部表情,如果不是捕捉就用骨骼简单搭搭就好,如果是捕捉,制作成本会变得非常的高(制作各种morphing target)&/p&&p&对最终画面影响最大的是镜头效果,所以尽量节省渲染时间留给镜头特效。一般影响最大的是校色,如果硬件平台允许尽量给美术提供带深度校色的工具。&/p&&p&有比较宽广视野的游戏,室外可以用一些很取巧的方法来模拟mie scattering和rayleigh scattering,加上哪怕是假的对画面的提升也是巨大的。&/p&&p&对于不同的数据采用不同的配置方法,不要什么数据都用excel,对于有可视化需求的配置,比如ui或者角色身上需要装配一些武器的,提供可视化的工具。对于需要描述父子关系的例如技能树解锁之类的用json或者xml来描述,对于纯数字逻辑的就用csv就好了。&/p&&p&场景的材质如果制作normal map对于你们团队比较复杂,多加一层detail map也能对效果获得较大的提升。&/p&&p&角色的材质,如果性能有限或者说制作成本无法承受的话specular map比normal map的效果要好。&/p&&p&如果角色会近距离看脸,脸部的眼睛一定要单独拿出来处理,脸可以糊,眼睛一定不能糊。&/p&&p&脚步声的标准做法是在地面上放一层低模做和脚的碰撞检测(脚步声如果追求真实,最少得有3个以上的样本随机)&/p&&p&如果要提升动画效果,考虑主角的前臂加上twist骨骼,左肩和右肩不要从脖子上搭建骨骼,要从胸口开始(做head lookat的时候效果会更好)&/p&&p&衣服的标准做法是通过贴图来控制哪些顶点受skin和物理影响的权重比,那张贴图还可以用一个通道来控制流汗的时候哪些地方的smothness要提高。&/p&&p&搭建一个运行时数据库,并且游戏中经常需要访问的数据都放入数据库,可以类似redis那样非常简单的提供一个set和get就行了,运行时数据库可以帮助你找到绝大多数bug。&/p&&p&制作ai尽量使用行为树,并且花时间一定要让策划具备编辑和调式行为树的能力。&/p&&p&顶点色可以各种花式使用,无论是用来bake ao还是决定detail map的权重,都可以用很低廉的代价来获得非常棒的效果。&/p&&p&动画不是在任何时候都可以blend的,要想效果好,牢记:左脚落地的时候只能blend到左脚落地开始的动画,右脚同上。&/p&&p&做上下楼梯的locomotion的时候,用椭球碰撞体会非常简单的获得还不错的效果。&/p&&p&如果画面会经常快速的运动,可以加入一个vector based motionblur,效果会出奇的好。&/p&&p&要想场景生动,一定要使用decal,一个方便美术的decal工具可以让美术一天之内让整个场景提升几个档次。&/p&&p&暂时想到这些,不说了,休息好了继续干活。&/p&&p&~~~~~继续更新一波套路&/p&&p&解决alpha透贴排序的标准方法是两次绘制,第一次在不透明队列里渲染一次alpha test(cutout),打开zwrite,第二次在transparent队列里开alpha blend不开zwrite,ztest lessequal渲染就能还原美术在maya里看到的效果。&/p&&p&弹簧是个非常好用的物理组件,其虎克系数可以有效的模拟力的衰减来做出很多感人的效果,从乳摇,臀摇,尾巴,头发马尾,布料,脸上被重拳击中的肌肉变化都可以看到弹簧的身影。&/p&&p&adobe fuse cc + mixamo可以非常快速的搭建模型和动画来帮助策划找到剧情的场景的感觉。&/p&&p&脚下ik从程序来讲是很方便实现的,大多数引擎都有ik功能,但是工作流程我发现很多公司都没有正确使用。正确的流程是对输出的动画有一个左右脚高低的分析工具,逐动画生成每个脚步离水平面的高度曲线,然后运行时根据脚步的高低来决定ik和skin的权重。&/p&&p&镜头的设置很重要,最好给美术一个和相机镜头类似的算法来反过来计算fovx和fovy,我看到很多产品的fov都是一水的60之类的。&/p&&p&对于类似铁丝网或者其他半透物体的mipmap的标准做法是先自动生成mipmap,然后要美术手动的来降低不同lod贴图的alpha,换句话说近处看有铁丝网,远看就只有框中间近乎全透了来降低锯齿感。&/p&&p&dx10以上的平台上特效的shader加一句根据当前depth和已经绘制的depth的差来控制alpha可以实现简单且效果不错的软粒子效果。&/p&&p&头发的物理效果可以参考衣服的做法,发根受skin影响多,发梢受物理多一些即可。(额前刘海受物理要关掉重力)&/p&&p&如果实时sss负担太重,可以简单的把模型厚度信息烘培在顶点色的某个通道上,然后只需三两行代码就可以让皮肤有sss效果。&/p&&p&看到好多项目用双面材质只是在shader中简单加一句cull none,这个是完全错误的实现。正确的做法是需要把三角形索引信息走vs传递进来,然后判断是否顺逆时针,对于反面需要把法线反转才能获得正确的渲染结果。&/p&&p&先更新到这。&/p&&p&完了,感觉思绪开始打开了,又更新一些,怕一会会忘。&/p&&p&动画驱动的模式下,转向最少需要8个动画,原地左转90,右转90,左转180,右转180,移动同样四个,然后根据控制器的输入来决定混合的权重,一般神海这种级别的产品光locomotion牵扯到的动画会在40-50个这种量级。&/p&&p&对于衣物和皮肤,detail normal十分重要,可以瞬间让你的衣服能看出针织的材质。&/p&&p&处理声音的时候,远处的声音混响需要程序来手动提升,近处降低混响,对临场感增加很多。&/p&&p&声音如果样本有限,也一定要做随机,哪怕就一个脚步声样本,播放的时候也应该随机pitch和volume。&/p&&p&给策划提供一个调整动画曲线的工具,横轴是动画时间,纵轴是动画播放的速度,策划通过这个工具可以调整出情绪非常饱满的动画效果(例如:攻击前摇动画速度变慢,攻击过程加速之类的)这个需要和动画师沟通清楚,要求他们只需要k好几个相关pose即可。&/p&&p&卡通渲染的时候有一步是非常关键也是很多公司都忽略的,就是手动调整模型法线,这一步得在美术工具内完成,通常是定义toon shading的光方向之后,通过调整法线来让一些部位有“看起来”较为舒服的受光,主要是鼻子,腋下和两个胯这三个位置。&/p&&p&游戏加载的正确做法是,在出包的时候对各资源的单位加载时间进行预计算(适合配置固定的主机游戏)。之后在运行时加载的时候,根据每一帧cpu的可用空闲时间来决定当前帧可以加载的资源类型和数量。&/p&&p&渲染阴影的时候,很多人都会忽略绘制阴影那个pass的优化,以前做上一代游戏机的时候所有会有实时阴影的模型都会做一个低模和专门的材质(如果有透贴阴影的需求)。&/p&&p&对于写实类型的游戏,decals的正确制作方法是拿相机去拍,比如地上的水渍,墙上的裂痕,车上的划痕之类的,开闪光灯拍照,然后回来在ps里面抠出来。&/p&&p&有很多arpg的游戏中都有霸体的设计,霸体中不会受击,其实这个的正确做法是动画新增一个受击层,在播放霸体动画的同时轻微的blend一个受击动画,打击感会舒服很多。&/p&&p&午饭时间!&/p&&p&反响不错啊,再来一波=)&/p&&p&写实风格的贴图,推荐尽量使用Substance制作,打包不同目标平台的时候,可以根据目标平台的实际硬件情况,决定是Bake出Texture还是用Procedual Texture,其实很多时候会发现很多PBR贴图除了Google图片出来修改之外,只有Substance才能比较好的制作出来。&/p&&br&&p&有一个关于Animation Driven的系统中,AI的制作问题,主要是因为动画状态机自己有自己的行为准则,所以传统的AI设计思路就变得比较无力,比如说我希望我的NPC每0.3秒攻击一次,但是攻击动画本身就超过0.3秒了,怎么办?或者说状态机的逻辑无法响应到0.3秒的攻击。这个时候需要跟策划沟通,在Animation Driven的系统下,要完全的分开设计,NPC的大脑是AI,NPC的体格是动画状态机,很多时候AI的设计要根据体格的情况来酌情调整。要在行为树里增加一些检查身体体格的节点,比如说,我要转向某个方向,那么在适当的时候需要检查自己的身体是否真的转到指定方向了;同时对于大脑向身体发送的指令要分优先级,优先级的实现方法是该指令的有效时长,比如说我的身体在受击的状态中,但是我的大脑仍然下命令让我攻击一次对方,这条指令优先级存在时间0.2秒,如果受击状态在0.2秒内复原了,则该指令身体可以执行一次,如果0.2秒内身体仍然无法攻击,就丢掉此次指令。&/p&&br&&p&Volumetric Cloud/Fog/Light的使用一定要提前和美术进行商量,因为计算过程中牵扯到大量的Depth sampling,所以画面中多大会存在多大面积的这类效果一定需要严格控制,否则到了后期不得不移除这些效果的时候会让整个产品瞬间降低一个档次。&/p&&br&&p&在一些中低端设备上可以用一些简单的压缩算法来把RGB + Luminance除以一个除数来压缩到32bits的颜色空间中来获得非常划算的HDR效果,相比较RGBM,用除数可以免费获得“假”正确的alpha blend效果。这一条无需和美术沟通,直接上就行。(移动平台可用,效果很好)&/p&&br&&p&关于差值,差值计算最大的问题是需要和策划沟通清楚,越是符合现实生活运动规则的,只能使用物理的方法进行差值,物理的方法是没有办法精确的保障差值的最终位置和时间,但是却可以获得完美的差值效果。这里有一个非常小的tips来实现物理差值:一个物体从旋转R0,位置P0,差值到旋转R1,位置P1,需要差值的时候,在物体上挂一个弹簧,弹簧的另外一端挂在位置P1上,另外物体的运动规则增加两条:1,每帧运动转角不能超过XX度;2,物体的实际运动位置是当前朝向 * 力矩;即可,差值出来效果棒棒哒,无论是飞个火球还是跟踪导弹都可以用这个。&/p&&br&&p&美术资源的优化,这件事情比较好的方法是要严格的关注,但是尽量不要过早的修改这些问题,因为开发的过程中始终要留一些空间用来提升画面效果,所以过早的修改掉性能瓶颈,可能会导致到最后不得不放弃已经集成进版本的一些效果,非常不划算。所以等大家都对画面比较满意了之后,再进行一轮性能优化,结果还能再增加一些效果,对于美术大兄弟们来说就变成一件很好的事情了。&/p&&p&本来没打算写这么多,只是开始写了个头,就发现还有很多类似的问题也都可以罗列出来,于是出现这么多杂乱的内容,回头有时间会仔细整理整理,比如说配个图什么的,如果有朋友对于一些tips有疑义或者想知道一些详细的实现细节,欢迎私信单聊。&/p&&br&&p&应某同学的要求&/p&&p&更新一波手游的经验ヽ(o?ωo? )ゝ&/p&&p&贴图进版本的时候做一个alpha通道的剥离,一方面可以比较方便的适配安卓ETC1压缩格式,另一方面后期要压包的时候alpha通道可以随意缩大小,美术基本无感知。&/p&&p&如果是UI资源比较重的游戏可以采取layout和资源分离的方式来获得大量的性能提升。针对unity引擎来说就是遍历ui里所有用到的material,把里面的贴图替换成4*4的空白贴图,另外建立一个从材质对应贴图的索引。因为手机是ssd的缘故所以磁盘io读取贴图的速度是非常快的,这样就可以把整个ui的layout都留在内存中不用切场景释放,不同场景对应加载不同的贴图做一个运行时的对应即可,加载ui的时间能提升80%。这一步建议新项目中前期使用,后期项目做这种级别的修改不划算,风险高。&/p&&p&如果是动画资源比较重的产品,建议使用自定义的动画格式,采取float16的四元数储存关键帧数据,然后加载时还原引擎需要的动画数据,以前做wii上的产品,1000个左右的人形动捕数据可以压缩到23m左右。&/p&&p&经历过很多手游项目的全屏大图比较多(推广图,loading图),有的会占到整个贴图量的30%甚至更多,这时候一定要优化大图的制作工艺,和美术沟通把背景,文字和前景拆开制作,一方面可以更好的压缩(方形,2的次幂),另一方面背景图可以采取比较极端的压缩参数。&/p&&p&加载的过程中往往最后会卡一下,这个是第一次shader提交到gpu产生编译消耗的时间,可以通过在屏幕上绘制一个透明的三角形来完成warmup,这一步基本上主流引擎都有接口,如果单帧消耗过高,可以考虑分布在若干帧里完成。&/p&&p&打击感的一个小trick,击中的一瞬间把时间tick调成0持续个0.1秒左右,又轻巧效果又好。&/p&&p&搭建UI框架的时候给每页ui增加一个fadein和fadeout的接口并且管理好状态机的切换,今后可以很方便策划或者美术增加ui打开和关闭的动态效果。&/p&
做游戏技术主要讲究的是套路,以及对套路的掌握程度。比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细节,比如camera会不会到体积光里边之类的,这种细节的了解会让你更加有…
&img src=&/50/v2-cdedd257f0_b.jpg& data-rawwidth=&2360& data-rawheight=&1328& class=&origin_image zh-lightbox-thumb& width=&2360& data-original=&/50/v2-cdedd257f0_r.jpg&&&blockquote&&i&本文首发于&a href=&/?target=http%3A//www./articles/27015%3Futm_campaign%3Dofficial_account%26utm_source%3Dzhihu%26utm_medium%3Dsocial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机核网&i class=&icon-external&&&/i&&/a&,作者&a href=&/?target=http%3A//www./users/12865%3Futm_campaign%3Dofficial_account%26utm_source%3Dzhihu%26utm_medium%3Dsocial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NJBK&i class=&icon-external&&&/i&&/a&&/i&&/blockquote&&p&&br&&/p&&p&&i&导语:前不久诺兰的新片《敦刻尔克》在国内上映了,由汉斯·季默主导的电影音乐给不少人留下了非常深刻的印象。《敦刻尔克》创新地使用了连续性的音乐,并且以音乐来引导叙事,可以说体现了汉斯·季默的高超水平。虽然我还想给你说更多《敦刻尔克》的事情,但是咱们今天的主题不是诺兰和他的作品,而是以汉斯·季默为代表的一票电影配乐大师,他们其实也给很多大家非常熟悉的游戏做过音乐,这回我们就来聊聊他们跨界过电影和游戏的配乐大师们。&/i&&/p&&h2&汉斯·季默(Hans Florian Zimmer)&/h2&&p&既然都说到汉斯·季默了,那咱们就从这位大佬开始说起吧。汉斯·季默全名汉斯·弗洛里安·季默(Hans Florian Zimmer),看名字就能猜出十有八九他是个德国人。一开始汉斯·季默还呆在德国老家的时候他并没有受过正规的音乐教育,后来到了少年时期他才去往了英国,而汉斯·季默的音乐职业生涯也是从英国才正式开始的。二十多岁时,汉斯开始为一些广告制作配乐,同时也在学习各种音乐制作的知识,终于有一天,通过《为黛西小姐开车》这部电影的配乐,汉斯·季默开始在电影配乐领域渐渐崭露头角。&/p&&p&&br&&/p&&img src=&/50/v2-1b10bb6e18bf279df052b0ab70f39f87_b.jpg& data-rawwidth=&600& data-rawheight=&551& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-1b10bb6e18bf279df052b0ab70f39f87_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/f03ec6f5-c8a-a9dfc847eff9_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&汉斯·季默当之无愧是很多人的好伙伴与良师&i class=&icon-external&&&/i&&/a&&/p&&p&因为对传统交响乐和电子乐的驾轻就熟,汉斯·季默的配乐总会给人一种大气磅礴的感觉,想一想这类的音乐也就非常适合用在战争题材的电影上,我们熟悉的《黑鹰坠落》、《珍珠港》和《太平洋战争》的主题曲都是由汉斯·季默创作的。当然他的“乐路”肯定不局限于此,电影《汉尼拔》、《加勒比海盗》、《达芬奇密码》和“罗伯特兰登”系列这些题材看起来差别特别大的也都出自他手。如今汉斯·季默被我们熟知更多地是和克里斯托弗·诺兰绑在一起,从诺兰接手的《蝙蝠侠》三部曲开始,汉斯就开始成了他的“御用音乐人”,期间《盗梦空间》、《星际穿越》这些略烧脑的作品同样也有汉斯·季默负责音乐。&/p&&p&你要觉得汉斯·季默只会给纯真人电影做音乐那真是低估他了,汉斯在1994年的时候就为动画片《狮子王》进行音乐制作,并且凭借它获得了1995年的奥斯卡最佳原创音乐奖。之后在很多年的时间里,汉斯又分别为《马达加斯加》、《功夫熊猫》还有《神偷奶爸》等制作过音乐。因为汉斯·季默在那几部战争题材电影上的成功,他也收到了来自游戏厂商的邀请,最为知名的就是两款射击类型的游戏——《使命召唤 现代战争2》和《孤岛危机2》。类似于《黑鹰坠落》这样的“现代战争片”,COD的现代战争系列也讲述了一个建立在现代军备上的战争故事,而汉斯·季默的配乐不仅表现了高科技战场上的紧迫感和科技感,还带有一些些异域风情,给当时沉迷在各种行动里的玩家非常深刻的印象。尝试了两款射击游戏之后,汉斯·季默的名字也出现在了其他类型的游戏中,例如互动电影一般的《超凡双生》,甚至最近传出的《王者荣耀》配乐。别的且不说,汉斯·季默能驾驭的作品类型还是挺广的。&/p&&p&&br&&/p&&img src=&/50/v2-a14da5c4e_b.jpg& data-rawwidth=&600& data-rawheight=&339& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-a14da5c4e_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/56b5c277-4dca-4d9c-8375-ffda6bf7f972_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&电影版的游戏自然要找电影演员和电影配乐大师&i class=&icon-external&&&/i&&/a&&/p&&p&本来的印象里,汉斯·季默因为太多的弦乐使用给了我一种“疲劳”的感觉,不过《星际穿越》加上这一次《敦刻尔克》的创新狠狠给了我一个巴掌,也期待他在今后的电影和游戏配乐里能带给我们更多的惊喜。&/p&&h2&哈利·威廉姆斯(Harry Gregson-Williams)&/h2&&p&说完汉斯·季默,另一个不得不说的电影游戏音乐人就是哈利·威廉姆斯(Harry Gregson-Williams)。这一位音乐家因为小岛秀夫和他的《潜龙谍影》而更多被游戏玩家们熟知,并且他和上边咱们提到的汉斯·季默还有很多联系。&/p&&p&&br&&/p&&img src=&/50/v2-f6129f2bcdd4_b.jpg& data-rawwidth=&600& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-f6129f2bcdd4_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/a397afb2-a0c5-4ffc-87c7-2d3a8a8b53f9_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&当时《MGS2》的开场动画和主题曲真的是太震撼了&i class=&icon-external&&&/i&&/a&&/p&&p&威廉姆斯早年的时候就读于伦敦的市政厅音乐及戏剧学院,之后跟咱们的支教队一样,他前去埃及辅导贫困孩子音乐去了。结束“公益”之旅的威廉姆斯回到伦敦,接触了创造过《猎鹿人》音乐的配乐大师斯坦利·梅耶斯,跟着他一起学习电影配乐的技巧。1995年的时候,威廉姆斯跟着弟弟鲁伯特·威廉姆斯一起加入了汉斯·季默建立的音乐工作室“Remote Control Productions”,和他一起合作创作了很多知名的电影音乐。&/p&&p&现在已经被用烂了的《勇闯夺命岛》的主题音乐就是出自哈利·威廉姆斯和汉斯·季默两人之手。在2001年之后,威廉姆斯离开了“Remote Control Productions”,单飞后的他继续在电影领域发力,2005年的时候,靠着儿童奇幻电影《纳尼亚传奇》的配乐,威廉姆斯同时获得了金球奖和格莱美奖的提名。最近几年威廉姆斯的作品也比较多,比如今年刚出了续集的《普罗米修斯》和马达的《火星救援》的音乐都是威廉姆斯做的。&/p&&p&&br&&/p&&img src=&/50/v2-11cdc7b3fcc6233fbadc13_b.jpg& data-rawwidth=&600& data-rawheight=&573& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-11cdc7b3fcc6233fbadc13_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/90-4a60-b541-80fa_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&其实威廉姆斯在《普罗米修斯》的音乐里也就创作了两首而已&i class=&icon-external&&&/i&&/a&&/p&&p&游戏方面,威廉姆斯的成就似乎比汉斯·季默略微“知名”一些些,一切还是得感谢小岛秀夫。钟爱电影和好莱坞式叙事的他在创造游戏的时候自然也想要拉来好莱坞级别的配乐过来,威廉姆斯刚巧就成了他选中的电影配乐家,于是那一个震撼人心的《潜龙谍影2:自由之子》的主题曲就横空出世了。&/p&&p&在《潜龙谍影2》成为满分神作的同时,哈利·威廉姆斯也内定般地当上了接下来几作《MGS》的御用音乐人。从《潜龙谍影3:食蛇者》到系列时间端点的《潜龙谍影4:爱国者之枪》,时间跨度很长的三部游戏的音乐全部都是由哈利·威廉姆斯和日比野则彦合作完成的。不过潜龙谍影既给威廉姆斯带来了荣誉,也给他带来了不小的争议,《潜龙谍影2》那一段炫酷到爆的开场动画第一眼是被震着了,但慢慢地也有人感觉这一段主题音乐有抄袭俄罗斯作曲家乔治·斯维里多夫(Georgy Sviridov)的《暴风雪》(The Snowstorm)的嫌疑,更有人说威廉姆斯只是“加工”了一下音乐,真正的作者又另有他人。不过可惜,斯维里多夫都没能活到千禧年,抄袭这件事也都是玩家间说说,渐渐这事也不了了之了。&/p&&p&&br&&/p&&img src=&/50/v2-4f87aedeb5f3_b.jpg& data-rawwidth=&600& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-4f87aedeb5f3_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/23b0-41c1-9e10-f_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&本来都忘记了,看到这个又想起了买了COD4复刻的痛&i class=&icon-external&&&/i&&/a&&/p&&p&另一个值得一提的事是,在他曾经的伙伴汉斯·季默介入《使命召唤 现代战争2》的音乐制作之前,哈利·威廉姆斯就参与了《使命召唤4 现代战争》的音乐制作,也算是某种巧合吧。&/p&&h2&亨利·杰克曼(Henry Jackman)&/h2&&p&说到电影和游戏的交集,顽皮狗就是不得不提的一个工作室。PS3世代诞生的《神秘海域》就找来了之前为许多电视剧配乐的格瑞葛·埃德蒙森(Greg Edmonson)给神秘海域做音乐,玩家们熟悉的那曲《Nate's Theme》就是出自他手。不过《神秘海域》系列一共有四作,前三作没啥问题,《神秘海域4》的音乐制作换成了亨利·杰克曼(Henry Jackman),一位大名鼎鼎的电影音乐制作人。和那几位幕后的英雄一样,你们会记住他们的作品,却不一定知道创造他们的人是谁,说起他们的“孩子”大家就会发出“原来是他做的啊!”的感叹。&/p&&p&&br&&/p&&img src=&/50/v2-16b5da889657e_b.jpg& data-rawwidth=&600& data-rawheight=&339& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-16b5da889657e_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/6a672b29-78f5-4a26-b7e2-0e8f450276cf_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&其实还是能听出来4和前几作的音乐有着些许的变化的&i class=&icon-external&&&/i&&/a&&/p&&p&亨利同样也是一个英国的音乐家,一位曾经在牛津大学进修古典乐的高材生。2006年以前他还专注在自己的音乐创作,但是从2006年之后,亨利就和老师汉斯·季默一起投身到了电影配乐创作的汪洋大海中去了。很多被汉斯·季默光芒笼罩的作品下其实都有他的影子存在,比如《蝙蝠侠 黑暗骑士》,《加勒比海盗》,《辛普森一家》等。再之后,他开始主导一些电影的原声创作,最近几部作品里大家熟悉的有《超能陆战队》,《美国队长2》和《王牌特工》之类。不知道是汉斯·季默的光芒太亮还是亨利这哥们儿太过低调,他总有一种大隐隐于市的高深感。&/p&&p&这是《神秘海域》的故事,除了神海之外,顽皮狗另一个神一般的作品《The Last of Us》他的音乐制作人也大有来头。四年前大家第一次接触到《The Last of Us》时就被它独一无二的音乐给吸引了,游戏那种木吉他的配乐和以往我们接触的游戏音乐完全不一样,此前我们印象里的游戏配乐都是打枪游戏中那种“热血”的旋律,而某种程度上《The Last of Us》的音乐都不像“正经”的音乐。&/p&&p&&br&&/p&&img src=&/50/v2-ddb77edb2dbc253ef1535721_b.jpg& data-rawwidth=&600& data-rawheight=&339& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-ddb77edb2dbc253ef1535721_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/8f22abec-fdef-44f4-89aa-dd2_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这老哥是真的厉害&i class=&icon-external&&&/i&&/a&&/p&&h2&古斯塔夫·桑托拉拉(Gustavo Santaolalla)&/h2&&p&如果你没有看过《巴别塔》、《断背山》的话,对古斯塔夫·桑托拉拉(Gustavo Santaolalla)的音乐风格或许还不是那么的熟悉。名字古怪的古斯塔夫出生在阿根廷的艾尔帕洛玛,生于南美的他乐风很杂揉,有着极其原始的非洲鼓点般的节奏,又同时兼具现代的摇滚和爵士,当然,传统拉丁音乐也不能少。虽说古斯塔夫最擅长的乐器是吉他,但实际在《The Last of Us》的幕后制作花絮里我们也看到了那个神奇的他,随便拿点什么能弄出响的玩意儿都能做音乐。&/p&&p&凭借为李安电影《断背山》的配乐,古斯塔夫获得了奥斯卡最佳原创音乐奖,在此之前他还得到过金球奖、英国电影和电视艺术学院奖以及格莱美奖,足见他的功力深厚。让古斯塔夫达到这样高度的不只是他对各种“乐器”的熟悉,还有自己注入其中的真切情感。&/p&&p&我认为:不管什么宗教、什么流派,在人生的终点,即便我们是不同的,我们也有相似点&/p&&p&在那里,会有一条细细的线来连接起我们;那就是爱、孤独,与伤痛&/p&&p&&br&&/p&&img src=&/50/v2-6d38bfd1b096c7012bbddfdbd8197dae_b.jpg& data-rawwidth=&600& data-rawheight=&572& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-6d38bfd1b096c7012bbddfdbd8197dae_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/f51--ac3f06c32a52_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&08年时候的古斯塔夫还没做《The Last of Us》时候那么老&i class=&icon-external&&&/i&&/a&&/p&&p&秉承这样信念的他一直都是墨西哥导演冈萨雷斯(Alejandro González I?árritu)的好搭档,从冈萨雷斯还默默无闻的时候开始,《爱情是狗娘》、《通天塔》这些很好却又有些小众的作品都有古斯塔夫的参与。再之后,古斯塔夫帮助顽皮狗打造了开创新时代的《The Last of Us》,冈萨雷斯则终于熬出了头,靠着《鸟人》和《荒野猎人》连拿了两回奥斯卡,这两位也都算坚持着自我最终获得了大家的认可吧。&/p&&h2&and more&/h2&&p&当然还有很多的电影界大佬曾经出现在游戏配乐的名单里。比如给老《荣誉勋章》配乐的Michael Giacchino,给《龙穴》做过音乐的John Debney等等等等。只不过他们在自己的代表作之后就鲜有次世代游戏作品,且篇幅有限所以我们这里也就不多提及了。&/p&&p&&br&&/p&&img src=&/50/v2-3f206afcb76a0a920aaa823a38867ea8_b.jpg& data-rawwidth=&600& data-rawheight=&339& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-3f206afcb76a0a920aaa823a38867ea8_r.jpg&&&p&&a href=&/?target=http%3A//alioss./uploads/image/58fe5d02-678c-402d-8d56-c82b_watermark.jpg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&游戏作曲界有非常多藏龙卧虎的大哥们&i class=&icon-external&&&/i&&/a&&/p&&p&其实仔细想想,电影的配乐制作与现在3A游戏的音乐制作还是有几分相似的。更进一步,也许游戏的音乐制作不光要有一个摄人心弦的主旋律,还得准备一些契合主题的音效音。不知道今后的游戏里还会有哪些令人在脑中回响的旋律诞生,很让人期待。&/p&&p&&br&&/p&&p&&br&&/p&&p&&i&原文:&a href=&/?target=http%3A//www./articles/27015%3Futm_campaign%3Dofficial_account%26utm_source%3Dzhihu%26utm_medium%3Dsocial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&那些从电影圈跨界而来的游戏作曲家们&i class=&icon-external&&&/i&&/a&&/i&&/p&&p&&i&From: &a href=&/?target=http%3A//www./categories/20%3Futm_campaign%3Dofficial_account%26utm_source%3Dzhihu%26utm_medium%3Dsocial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机核 | 知识挖掘机&i class=&icon-external&&&/i&&/a&&/i&&/p&&p&&i&&b&欢迎关注知乎专栏:&/b&&a href=&/gamecores& class=&internal&&机核丨电子游戏救世界&/a&&/i& &i&&a href=&/c_& class=&internal&&机核丨不止是游戏&/a&&/i&&/p&&p&&i&更多内容请访问&a href=&/?target=http%3A//www./%3Futm_campaign%3Dofficial_account%26utm_source%3Dzhihu%26utm_medium%3Dsocial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.&i class=&icon-external&&&/i&&/a&,玩游戏的,都是朋友&/i&&/p&
本文首发于,作者 导语:前不久诺兰的新片《敦刻尔克》在国内上映了,由汉斯·季默主导的电影音乐给不少人留下了非常深刻的印象。《敦刻尔克》创新地使用了连续性的音乐,并且以音乐来引导叙事,可以说体现了汉斯·季默的高超水平。虽然我还想给…
&img src=&/50/v2-516e6fdb03_b.png& data-rawwidth=&1920& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/50/v2-516e6fdb03_r.png&&&h2&1 前言&/h2&&p&GAN的火爆想必大家都很清楚了,各种GAN像雨后春笋一样冒出来,大家也都可以名正言顺的说脏话了[微笑脸]。虽然目前GAN的酷炫应用还集中在图像生成上,但是GAN也已经拓展到NLP,Robot Learning上了。与此同时,在与NLP的结合过程中,我们很惊讶的发现,GAN和增强学习的Actor-Critic有曲艺同工之妙呀!Deepmind 的大神Oriol Vinyals也特地写了篇文章&a href=&/?target=https%3A//arxiv.org/pdf/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Connecting Generative Adversarial Networks and Actor-Critic Methods&i class=&icon-external&&&/i&&/a& 来倡议大家研究一下两者的结合。这大大引起了我对GAN的兴趣,感觉条条大路通AI呀。GAN和RL有点像当年的量子力学和相对论,那么是不是会有一个GAN和RL的统一场论呢?这显然值得期待。&/p&&p&因此,好好从头分析一下GAN还是很有必要的。&/p&&h2&2 Generative Adversarial Nets&/h2&&p&既然是从头开始GAN,那么要说的第一篇文章必须是GAN的开篇,也就是2014年Ian Goodfellow的这篇开山之作。&/p&&p&在这篇paper,我们发现其实Ian Goodfellow仅用一段话就说完了GAN:&/p&&p&&br&&/p&&img src=&/v2-ab5be1fb26c59ea3df24ba_b.jpg& data-rawwidth=&1616& data-rawheight=&471& class=&origin_image zh-lightbox-thumb& width=&1616& data-original=&/v2-ab5be1fb26c59ea3df24ba_r.jpg&&&p&简单的说GAN就是以下三点:&/p&&p&(1)构建两个网络,一个G生成网络,一个D区分网络。两个网络的网络结构随意就好.&/p&&p&(2)训练方式。G网络的loss是&img src=&/equation?tex=log%281-D%28G%28z%29%29& alt=&log(1-D(G(z))& eeimg=&1&&,而D的loss是&img src=&/equation?tex=-%28log%28D%28x%29%29+%2B+log%281-D%28G%28z%29%29%29& alt=&-(log(D(x)) + log(1-D(G(z)))& eeimg=&1&& 注意这里并不是Cross Entropy。&/p&&p&(3)数据输入。G网络的输入是noise。而D的输入则混合G的输出数据及样本数据。&/p&&p&那么我们来分析一下这样的训练会产生什么情况?G网络的训练是希望&img src=&/equation?tex=D%28G%28z%29%29& alt=&D(G(z))& eeimg=&1&&趋近于1,这样G的loss就会最小。而D网络的训练就是一个2分类,目标是分清楚真实数据和生成数据,也就是希望真实数据的D输出趋近于1,而生成数据的输出即&img src=&/equation?tex=D%28G%28z%29%29& alt=&D(G(z))& eeimg=&1&&趋近于0。OK,这就是GAN两个网络相互对抗的本质。&/p&&p&那么,这样相互对抗会产生怎样的效果呢?Ian Goodfellow用一个简单的图来描述:&/p&&img src=&/v2-aab535a56ee0fabaa3d52998d1baf616_b.png& data-rawwidth=&1628& data-rawheight=&582& class=&origin_image zh-lightbox-thumb& width=&1628& data-original=&/v2-aab535a56ee0fabaa3d52998d1baf616_r.png&&&p&我们也好好说一下上面这几个图。第一个图是一开始的情况,黑色的线表示数据x的实际分布,绿色的线表示数据的生成分布,我们希望绿色的线能够趋近于黑色的线,也就是让生成的数据分布与实际分布相同。然后蓝色的线表示生成的数据x对应于D的分布。在a图中,D还刚开始训练,本身分类的能力还有限,因此有波动,但是初步区分实际数据和生成数据还是可以的。到b图,D训练得比较好了,可以很明显的区分出生成数据,大家可以看到,随着绿色的线与黑色的线的偏移,蓝色的线下降了,也就是生成数据的概率下降了。那么,由于绿色的线的目标是提升概率,因此就会往蓝色线高的方向移动,也就是c图。那么随着训练的持续,由于G网络的提升,G也反过来影响D的分布。假设固定G网络不动,训练D,那么训练到最优,&img src=&/equation?tex=D%5E%2A_g%28x%29+%3D+p_%7Bdata%7D%28x%29%2F%28p_%7Bdata%7D%28x%29%2Bp_%7Bg%7D%28x%29%29& alt=&D^*_g(x) = p_{data}(x)/(p_{data}(x)+p_{g}(x))& eeimg=&1&&&/p&&p&因此,随着&img src=&/equation?tex=p_g%28x%29& alt=&p_g(x)& eeimg=&1&&趋近于&img src=&/equation?tex=p_%7Bdata%7D%28x%29& alt=&p_{data}(x)& eeimg=&1&&,&img src=&/equation?tex=D%5E%2A_g%28x%29& alt=&D^*_g(x)& eeimg=&1&&会趋近于0.5,也就是到图d,是最终的训练结果。到这里,G网络和D网络就处于平衡状态,无法再进一步更新了。&/p&&p&作者在文章中花了很大的篇幅证明整个网络的训练最终会收敛到 &img src=&/equation?tex=p_g%28x%29%3Dp_%7Bdata%7D%28x%29& alt=&p_g(x)=p_{data}(x)& eeimg=&1&&,我们这里就不探讨了,还是看看具体的算法及实现。&/p&&p&&br&&/p&&img src=&/v2-211bf0f4c444ff1979f9cec5e92694a8_b.png& data-rawwidth=&1164& data-rawheight=&778& class=&origin_image zh-lightbox-thumb& width=&1164& data-original=&/v2-211bf0f4c444ff1979f9cec5e92694a8_r.png&&&p&这里面包含了一些重要的trick及训练方法:&/p&&p&(1)G和D是同步训练的,但是两者的训练次数不一样,G训练一次,D训练k次。这主要还是因为初代的GAN训练不稳定。&/p&&p&(2)注意D的训练是同时输入生成的数据和样本数据计算loss,而不是cross entropy分开计算。实际上为什么GAN不用cross entropy是因为,使用cross entropy会使D(G(z))变为0,导致没有梯度,无法更新G,而GAN这里的做法D(G(z))最终是收敛到0.5。&/p&&p&(3)在实际训练中,文章中G网络使用了RELU和sigmoid,而D网络使用了Maxout和dropout。并且文章中作者实际使用&img src=&/equation?tex=-log%28D%28G%28z%29%29& alt=&-log(D(G(z))& eeimg=&1&&来代替&img src=&/equation?tex=log%281-D%28G%28z%29%29& alt=&log(1-D(G(z))& eeimg=&1&&,从而在训练的开始使可以加大梯度信息,但是改变后的loss将使整个GAN不是一个完美的零和博弈。&/p&&p&在这篇开山之作的最后,作者就分析了GAN的优缺点。GAN可以任意采样,可以使用任意的可微模型(也就是任意神经网络都可以)。GAN生成的图像更加sharp,也就是work更好,这个是最关键的,意味着它值得推广。当然了,作者也直接说了GAN不好训练这一bug。在Future work中,作者也提到了使用GAN的各种可能性,包括conditional GAN,半监督学习等等。也许Ian Goodfellow在发表这篇文章的时候就已经意识到这将开创一个新的领域了。&/p&&h2&3 DCGAN ( Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)&/h2&&img src=&/v2-85ff08ebb62aa_b.png& data-rawwidth=&1676& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1676& data-original=&/v2-85ff08ebb62aa_r.png&&&p&GAN开始出名恐怕是因为DCGAN这篇文章。该文章做出了让人难以置信的效果如上图所示。这是GAN在图像生成上的第一次非常成功的应用,也从此开始,一大堆和图像生成相关的paper就出来了。&/p&&p&那么这篇paper对GAN做了什么改造呢?核心可以说就一点,就是使用卷积神经网络,并且实现有效训练:&/p&&p&&br&&/p&&img src=&/v2-cbf4d5b154f3aabb11c7a_b.png& data-rawwidth=&1708& data-rawheight=&782& class=&origin_image zh-lightbox-thumb& width=&1708& data-original=&/v2-cbf4d5b154f3aabb11c7a_r.png&&&p&GAN在开山之作中就提出了,不好训练。那么DCGAN不但训练成功了,还拓展了维度,这就比较厉害了。DCGAN一共做了一下几点改造:&/p&&p&(1)去掉了G网络和D网络中的pooling layer。&/p&&p&(2)在G网络和D网络中都使用Batch Normalization&/p&&p&(3)去掉全连接的隐藏层&/p&&p&(4)在G网络中除最后一层使用RELU,最后一层使用Tanh&/p&&p&(5)在D网络中每一层使用LeakyRELU。&/p&&p&文章中作者也没有说为什么就这么做,只是因为看起来效果好。就是纯粹工程调出来了一个不错的效果。&/p&&p&那么具体说一下DCGAN的网络模型:&/p&&p&(1)G网络:100 z-&fc layer-&reshape -&deconv+batchNorm+RELU(4) -&tanh 64x64&/p&&p&(2)D网络(版本1):conv+batchNorm+leakyRELU (4) -&reshape -& fc layer 1-& sigmoid &/p&&p&
D网络(版本2):conv+batchNorm+leakyRELU (4) -&reshape -& fc layer 2-& softmax&/p&&p&G网络使用4层反卷积,而D网络使用了4层卷积。基本上G网络和D网络的结构正好是反过来的。那么D网络最终的输出有两种做法,一种就是使用sigmoid输出一个0到1之间的单值作为概率,另一种则使用softmax输出两个值,一个是真的概率,一个是假的概率。两种方法本质上是一样的。&/p&&p&网上最出名的复现当属 &a href=&/?target=https%3A///carpedm20/DCGAN-tensorflow& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&carpedm20/DCGAN-tensorflow&i class=&icon-external&&&/i&&/a&,而另一个极简版本是&a href=&/?target=https%3A///sugyan/tf-dcgan& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&sugyan/tf-dcgan&i class=&icon-external&&&/i&&/a&&/p&&p&下面我们来说说经过GAN训练后的网络学到了怎样的特征表达。&/p&&p&首先是用DCGAN+SVM做cifar-10的分类实验,从D网络的每一层卷积中通过4x4 grid的max pooling获取特征并连起来得到28672的向量然后SVM,效果比K-means好。然后将DCGAN用在SVHN门牌号识别中,同样取得不错的效果。这说明D网络确实无监督的学到了很多有效特征信息。&/p&&p&然后就是比较有意思的了,看G可以通过改变z向量,生成怎样不同的图片。不同的z向量可以生成不同的图像,那么,z向量可以线性加减,然后就可以输出新的图像,前面的图就是这种演示。非常神奇,说明z向量确实对应了一些特别的特征,比如眼镜,性别等等。这也说明了G网络通过无监督学习自动学到了很多特征表达。&/p&&p&总的来说,DCGAN开创了图像生成的先河,让大家看到了一条崭新的做深度学习的路子,如何更好的生成更逼真的图像成为大家争相研究的方向,而这一路到BEGAN,已经可以生成超级逼真的图像了,真是难以置信。&/p&&h2&4 CGAN(Conditional Generative Adversarial Nets)&/h2&&p&GAN中输入是随机的数据,没有太多意义,那么我们很自然的会想到能否用输入改成一个有意义的数据,最简单的就是数字字体生成,能否输入一个数字,然后输出对应的字体。这就是CGAN要做的事。&/p&&p&做法是非常的简单的:&/p&&p&就是在G网络的输入在z的基础上连接一个输入y,然后在D网络的输入在x的基础上也连接一个y:&/p&&p&&br&&/p&&img src=&/v2-2ab49d09f4a4cda2d3fb8_b.png& data-rawwidth=&1280& data-rawheight=&1086& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-2ab49d09f4a4cda2d3fb8_r.png&&&p&改变之后,整个GAN的目标变成:&/p&&p&&br&&/p&&img src=&/v2-474c937b25abe_b.png& data-rawwidth=&1392& data-rawheight=&96& class=&origin_image zh-lightbox-thumb& width=&1392& data-original=&/v2-474c937b25abe_r.png&&&p&训练方式几乎就是不变的,但是从GAN的无监督变成了有监督。只是大家可以看到,这里和传统的图像分类这样的任务正好反过来了,图像分类是输入图片,然后对图像进行分类,而这里是输入分类,要反过来输出图像。显然后者要比前者难。&/p&&p&基于这样的算法,作者做了两个任务:一个是MNIST的字体生成任务,另一个是图像多标签任务。这里就谈MNIST字体生成任务,要求输入数字,输入对应字体。那么这里的数字是处理成one hot的形式,也就是如果是5,那么对应one hot就是[0,0,0,0,0,1,0,0,0,0]。然后和100维的z向量串联输入。&/p&&p&然后大家可以发现,这样的训练通过调整z向量,可以改变输出。这样就解决了多种输出问题:&/p&&p&&br&&/p&&img src=&/v2-adcecb22fd3a67b2e01cbba8d45c82bd_b.png& data-rawwidth=&1588& data-rawheight=&814& class=&origin_image zh-lightbox-thumb& width=&1588& data-original=&/v2-adcecb22fd3a67b2e01cbba8d45c82bd_r.png&&&p&可以看到可以生成不同形状的字体,只是生成质量还是有待改进,但是这已经足够验证CGAN的有效性了。&/p&&h2&5 InfoGAN&/h2&&p&有了CGAN,我们可以有一个单一输入y,然后通过调整z输出不同的图像。但是CGAN是有监督的,我们需要指定y。那么有没有可能实现无监督的CGAN?这个想法本身就比较疯狂,要实现无监督的CGAN,意味着需要让神经网络不但通过学习提取了特征,还需要把特征表达出来。对于MNIST,如何通过无监督学习让神经网络知道你输入y=2时就输出2的字体?或者用一个连续的值来调整字的粗细,方向?感觉确实是一个非常困难的问题,但是InfoGAN就这么神奇的做到了。&/p&&p&怎么做呢?作者引入了信息论的知识,也就是mutual information互信息。作者的思路就是G网络的输入除了z之外同样类似CGAN输入一个c变量,这个变量一开始神经网络并不知道是什么含义,但是没关系,我们希望c与G网络输出的x之间的互信息最大化,也就是让神经网络自己去训练c与输出之间的关系。mutual information在文章中定义如下:&/p&&p&&img src=&/equation?tex=I%28c%2C+G%28z%2C+c%29%29+%3D+%5Cmathbb%7BE%7D_%7Bc+%5Csim+P%28c%29%2C+x+%5Csim+G%28z%2C+c%29%7D+%5Cleft%5B+%5Clog+Q%28c+%5Cvert+X%29+%5Cright%5D+%2B+H%28c%29& alt=&I(c, G(z, c)) = \mathbb{E}_{c \sim P(c), x \sim G(z, c)} \left[ \log Q(c \vert X) \right] + H(c)& eeimg=&1&&&/p&&p&其中的H为c的entropy熵,也就是log(c)*c,Q网络则是反过来基于X输出c。基于I,整个GAN的训练目标变成:&/p&&p&&img src=&/equation?tex=%5Cmin_%7BG%7D+%5Cmax_%7BD%7D+%5C%2C+V%28D%2C+G%29+-+%5Clambda+I%28c%2C+G%28z%2C+c%29%29& alt=&\min_{G} \max_{D} \, V(D, G) - \lambda I(c, G(z, c))& eeimg=&1&&&/p&&p&有了这样的理论之后,就具体如何训练的问题了。&/p&&p&相比CGAN,InfoGAN在网络上做了一定改变:&/p&&p&(1)D网络的输入只有x,不加c。&/p&&p&(2)Q网络和D网络共享同一个网络,只是到最后一层独立输出。&/p&&h2&6 说明&/h2&&p&这是很早之前写的,因为觉得写的1w字貌似也还有点用,还是发出来吧。由于时间有限加上知乎上也已经有大量GAN的分析解读,本来打算把GAN最新的文章也拿来分析分析,决定还是算了,望见谅。&/p&
1 前言GAN的火爆想必大家都很清楚了,各种GAN像雨后春笋一样冒出来,大家也都可以名正言顺的说脏话了[微笑脸]。虽然目前GAN的酷炫应用还集中在图像生成上,但是GAN也已经拓展到NLP,Robot Learning上了。与此同时,在与NLP的结合过程中,我们很惊讶的发现,…
(认真严肃脸)首先要学好英语。&br&&br&音效学习入门的一个坎就在于“不知道怎么表达”。&br&比如电影预告片,大字幕“咻——”地一声砸到屏幕上,这种声音叫什么?WHOOSH。&br&&br&与此类似,很多时候我们能想象应该是什么样的声音/效果,但不知道怎么去做。&br&甚至想找资料都不知道搜索什么入手。&br&&br&要解决这个问题,就是多翻翻音效库啦,看看这个名字代表什么,看到不理解的名字就听听看,记下来。外文资料也会有所帮助。&br&&br&国内的在线资料目前是比较稀少的,要找相关的内容大多数得上外文网站,有的还得翻墙。&br&这里提几个可供学习的渠道:&br&&br&&u&▇&b&网站:&/b&&/u&&br&&br&&b&SounDoer:&a href=&///?target=http%3A///category/original/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Original | SounDoer&i class=&icon-external&&&/i&&/a&&/b&&br&这个网站是业内前辈 SounDoer 建立的,会不定期更新各种业内相关文章,外加从业人士访谈等。同时也会翻译一些外文资料。&br&&br&&b&音频应用:&a href=&///?target=http%3A//www.audiobar.net/forum.php%3Fmod%3Dforumdisplay%26fid%3D110& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&音频应用|音效制作与交流&i class=&icon-external&&&/i&&/a&&/b&&br&音频应用下的一个板块,有许多同行可以交流。&br&帖子的数量比较少,时效性也不强,然而胜在某业内大牛经常在上面出现,而且会分享一些自己的经验与指导。——没错,说的就是杨杰(Digimonk)大大啦。&br&&br&&b&Stack Exchange :&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sound Design Stack Exchange&i class=&icon-external&&&/i&&/a&&/b&&br&SE 是国外的在线问答网站,这是其下分支的声音板块。虽然热度不是很高,但你或许能在这里找到奇奇怪怪的问题和对应的答案。&br&&br&&b&Youtube:&a href=&///?target=https%3A///results%3Fsearch_query%3Dsound%2Bdesign& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&搜索 “Sound + Design” 得到的结果&i class=&icon-external&&&/i&&/a&&/b&&br&油管上也有一些相关的教程或是介绍视频。&br&&br&&br&&u&▇ &b&视频:&/b&&/u&&br&&br&各种介绍游戏音效的幕后视频。很多游戏大作(《魔兽世界》、《美国末日》、《逃生》等)都有专门介绍其声音设计的幕后视频,找来看看,学习前辈的经验,很有帮助。&br&上文提到的 &u&&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/u& 就会时不时更新类似的视频,像这个:&a href=&///?target=http%3A///%3Fp%3D1056& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&#SounDoer# 《Bloodborne》Soundtrack Recording Session 音乐录制幕后&i class=&icon-external&&&/i&&/a&&br&&br&其他答主也在回答中贴过类似视频,比如:&br&&a href=&/question/& class=&internal&&游戏音效是怎样做出来的? - 游戏开发&/a& - 《暗黑破坏神 III》的幕后&br&&a href=&/question/& class=&internal&&电影和游戏里面怪兽的吼叫声是怎么制作的? - 游戏开发&/a& - 《魔兽世界》的怪物声音&br&&br&&br&&u&▇ &b&微博:&/b&&/u&&br&&br&可以在微博上关注一些业界的前辈,搜索 ID 即可:&br&@Soundoer 、@Digimonk 、@葛鑫 、@曾冠宇_小胖 ……等等。&br&感觉现在微博上音频相关的圈子也挺小的,关注一个人之后顺藤摸瓜(喂)就能找到好多志同道合之人。&br&还可以关注一下音频中间件的官方微博,比如 &a class=& wrap external& href=&///?target=http%3A///audiokinetic& target=&_blank& rel=&nofollow noreferrer&&@A&i class=&icon-external&&&/i&&/a&&a class=& wrap external& href=&///?target=http%3A///audiokinetic& target=&_blank& rel=&nofollow noreferrer&&udiokinetic音频动能&i class=&icon-external&&&/i&&/a& ,有什么比较新的咨询都会及时更新。&br&&br&&br&&u&▇ &b&音效库:&/b&&/u&&br&&br&&b&常用的音效库(Sound Ideas 系列音效库、BOOM 系列音效库 等)&/b&&br&专业音效库通常内容比较杂,从飞机引擎到刮风下雨都有,但也有针对特定需求制作的。&br&通过这些音效库一个是作为创作素材,另一个是学习基本的概念和知识。&br&&br&&b&游戏成品的音效库&/b&&br&有些游戏的音效库也是能找到的,我见到过《龙之谷》和《生化危机》。&br&这些音效库就是用来自己学习琢磨的啦,同样的一个技能音效,人家做出的就很有层次感,用了哪些素材和特效,等等。&br&用这些专业人士制作的音效建立&u&正确的审美&/u&,然后多学多练。&br&&br&同时,对于完成度比较高的音效库,也可以尝试用自己的素材去尽量实现相同的听感。&br&例如用 BOOM 音效库的 Construction Kit (音效素材包) 去还原它的 Designed 音效(设计过的音效成品)。&br&&br&&blockquote&&u&◆ 延伸阅读:&a href=&/question//answer/& class=&internal&&影视配乐中合成的短音效从哪里可以找到?&/a&&/u&&br&我在这个回答里面附带了一个 BOOM 音效库的下载链接。&/blockquote&&br&&br&&u&▇ &/u&&b&&u&书籍:&/u&&/b&&br&&br&&a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&音效圣经 (豆瓣)&i class=&icon-external&&&/i&&/a&&br&这本书能让你知道关于影视音效的基础知识,虽然更多地是针对拟音(实录)。&br&而书中的第十八章:《音效百科全书》确实可以作为一个小型百科来查阅。让你知道“怎么去描述这种声音”。&br&(能找到英文原版的就更好啦,音效库大多是英文命名的,知道对应的英语单词对于检索很有帮助)&br&&br&&a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&灵活的混音 (豆瓣)&i class=&icon-external&&&/i&&/a&&br&偏向编曲的混音方面,不过对于各个效果器(压缩、动态、混响)都有比较全面的讲解。要做声音设计师的话总要接触各色效果器的,对它们整体有一个认知很重要。&br&&br&&br&&u&▇ &b&最后的一点经验:&/b&&/u&&br&&br&其实从我个人的经验来看……有时候就算知道一大堆资料,也&u&&b&并不&/b&会去看&/u&。&br&直接动手做一个项目,在实践中遇到问题,再去针对性搜索,反而更有效。&br&&br&比如之前有想找喜剧类音效,那种弹弹弹啊、叮叮叮的搞笑声音,于是就搜索“Humor SFX”、“Instument Comedy sfx”这样的关键词(百度找不到的话请用谷歌)。&br&能直接找到对应音效的下载网点,也会看到些关于“幽默类音效是如何创作的”这样的讨论。&br&&br&&i&也就是说,为了解决问题学到的东西会更持久。&/i&&br&&br&我也还在学习中,这里就是分享一些个人的经验。一起加油吧! OwO&br&&br&&br&&i&// 更新:&/i&&br&感谢 &a data-hash=&2cf09372d1ebad5e786a9f9091150cda& href=&///people/2cf09372d1ebad5e786a9f9091150cda& class=&member_mention& data-editable=&true& data-title=&@夢旅十方& data-tip=&p$b$2cf09372d1ebad5e786a9f9091150cda& data-hovercard=&p$b$2cf09372d1ebad5e786a9f9091150cda&&@夢旅十方&/a& 前辈在评论中的提醒~&br&&br&十方前辈提到了拟音,这个通常可以粗略地理解为“用特定道具模拟出想要的声音”。对于专业的声音设计师来说,拟音几乎是必不可少的技能,至少也要对它有所了解。&br&详细的介绍,可见凤凰网的一部微纪录片,展示了老派拟音师魏俊华老师的一些工作情景和想法:&a href=&///?target=http%3A///news/society/1c68b-9b15--196e42a711ff.shtml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&甲乙丙丁 声音魔术师:中国第一拟音师的“音”缘-甲乙丙丁&i class=&icon-external&&&/i&&/a&&br&简短文字版在这儿:&a href=&///?target=http%3A///html//nw.D110000zgqnb_-10.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&声音魔术师-中国青年报&i class=&icon-external&&&/i&&/a&&br&&br&这个视频对理解有很大的帮助,很直观~&br&&br&&br&&br&&u&▇ 另外再补充一点小资料:&/u&&br&&br&? &b&补充资料一:专业声音设计师的建议&/b&&br&&a href=&///?target=http%3A///post/1d1a4db3_6f7c628& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[学习] 《躁起来!如何获得一份游戏音乐和音频的职业?》读书笔记&i class=&icon-external&&&/i&&/a&&br&——国外一位从业人员(Will Morton,曾就职于 R 星)的入职教学指南。原文很长,看完之后稍微摘了点提要出来,有兴趣可以戳进去看看。&br&&br&&br&? &b&补充资料二:声音关键词(SFX Key Words)&/b&&br&用来检索的声音形容词,类似于上文提到的“Whoosh”这种,主要用来在音效库中搜索查找想要的音效。&br&业界没有一个严格的规定,但大部分是约定俗成的称呼,比如 Footstep 指代脚步声、Crash/Impact/Hit 指代不同类型的撞击声,等等。&br&&br&Digimonk 微博上有一份整理过的关键字列表:&a href=&///?target=http%3A///s/1jGgOPs6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&reference_yangjie.zip_免费高速下载&i class=&icon-external&&&/i&&/a&&br&自己这里再添几个:&br&1. GLEAM(闪烁类音效,有时也用RING);&br&2. CHAIR(坐在椅子上的吱呀声);&br&3. CARTOON(卡通、幽默类音效);&br&4. CRACK(断裂声)&br&&br&&br&? &b&补充资料三:关于“拟音(Foley)”的小科普&/b&&br&拟音(Foley)和音效库里头的拟音音效(Foley SFX)的区别:&br&&a href=&///?target=http%3A///post/1d1a4db3_64c71e2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[研究] 拟音和音效的区别是什么?&i class=&icon-external&&&/i&&/a&&br&&br&&br&? &b&补充资料四:影视常用的音效的制作方法&/b&&br&&a href=&///?target=http%3A///features/cinema-sound-secrets-foley-artist/p1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&| The Secrets Behind 44 Classic Cinema Sound Effects&i class=&icon-external&&&/i&&/a&&br&这篇大长文列举了经典影视音效的做法,比如魔戒里戒灵的声音啦、星战里光剑的声音啦……看完这篇文章你就知道它们是怎么制作的了!&br&而且还可以直接在线收听哦,可惜是全英文,哈哈。&br&&br&&br&? 最后——&b&&u&学着自己录制音效吧!&/u&&/b&&br&不用急着入手几千的专业设备……在尚未依靠技能获得收入的时候,这么大的开销可能难以承担。&br&所以就用手机就可以!&br&&br&比如,像这样的小型自用音效库:&a href=&///?target=http%3A////C6dIkn5Um& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&狐又_Foxther的微博&i class=&icon-external&&&/i&&/a&&br&并不需要特别专业,能达到“自己可以用”的水准就 OK 啦~&br&&br&&b&要注意的是,&/b&最好别用 iPhone 自带的「语音备忘录」应用,那个对音质有大幅压缩。&br&可以下载专门的录音应用,iOS 平台下推荐&u&Recordium&/u& 和 &u&AudioMemos&/u&,都可以调节出较好的音质,且都有免费版可以体验(正版也并不贵)。&br&&br&&br&&br&&i&// 更新:&/i&&br&&br&以上回答针对的是普适性的「音效师」或者说「声音设计师」,如果想要成为「游戏声音设计师」的话, &u&音频中间件&/u& 的知识也是必须要掌握的,比如 Fmod 和 Wwise 。&br&&br&简单来说,&u&音频中间件(Audio Middleware&/u&&u&)&/u&的作用是 &b&连接音频样本与游戏实际场景&/b&。&br&&br&有的朋友可能会说“直接用程序在游戏中插入声音不就行了吗”——然而有些复杂的声音效果,比如根据距离调整声音的响度、频率分布;根据不同事件的触发实时变化背景音乐音效……&br&这些功能在中间件里头都是封装好了的,声音设计师用中间件设计完成后,直接交给程序员对应的接口就可以。&br&&br&打个比方,中间件就是把所有的声音内容做成一个黑盒子,程序猿只要把这个盒子放到游戏引擎中,在特定的地方触发它即可。&br&盒子本身会判断播放声音的规则,并在游戏中实现。&br&&br&&br&当前几个比较流行的中间件介绍:&a href=&///?target=http%3A//danikog.github.io/GameAudioTable/Zh.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&游戏音频引擎对照表&i class=&icon-external&&&/i&&/a&&br&包括了 Unity/Unreal 引擎自带的声音系统、Fmod、Wwise 等音频中间件的对比和不同功能的实现方式。&br&目前国内的趋势是开始向 Wwise 转移,这个引擎要复杂不少,如果有些&u&编程知识&/u&的话对于学习会很有帮助。&br&&br&如果需要的话可以下载该对照表的离线版本:&a href=&///?target=http%3A///s/1kT8bv51& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AudioEnginesMarkdown_Zh.html_免费高速下载&i class=&icon-external&&&/i&&/a&&br&&br&对了,&b&不推荐&/b&在没有基础的时候直接看这个表格,因为大部分功能都会看不懂,哈哈。&br&建议是在至少学习了一款中间件,并且对游戏引擎有些了解之后,再参照这个表格进行对比。&br&&br&&br&这儿整个答的有些零散,更系统的答案可以参考 &a data-hash=&8d83c91eaa5c& href=&///people/8d83c91eaa5c& class=&member_mention& data-editable=&true& data-title=&@与树& data-tip=&p$b$8d83c91eaa5c& data-hovercard=&p$b$8d83c91eaa5c&&@与树&/a& 童鞋的回答。
(认真严肃脸)首先要学好英语。 音效学习入门的一个坎就在于“不知道怎么表达”。 比如电影预告片,大字幕“咻——”地一声砸到屏幕上,这种声音叫什么?WHOOSH。 与此类似,很多时候我们能想象应该是什么样的声音/效果,但不知道怎么去做。 甚至想找资料…
&img src=&/50/v2-efb9bd19b1c49aed0f12e_b.jpg& data-rawwidth=&960& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/50/v2-efb9bd19b1c49aed0f12e_r.jpg&&&p&&b&前言&/b&&/p&&p&刚开始准备写UI系列的时候,我本来想以教科书方式来一步一步推进知识点,但是这个可能就会成为一个非常冗长枯燥的系列内容。知识点固然要积累,但只有自己遇到问题相关的知识点,大脑才能乐意的把它存储进去。&/p&&p&学习不应该是一种痛苦的过程,尤其是作为我们喜欢游戏的读者来说,能把自己的想法和创意在现实中表达出来,那成就感简直是太棒了!&/p&&p&&br&&/p&&p&&b&参考游戏&/b&&/p&&p&现在最囧游戏2出来了,笔者玩了几局不得不佩服作者的脑洞无比的大。 里

我要回帖

更多关于 unityex修改崩坏3 的文章

 

随机推荐