(Unity游戏冰霜效果的实现和思考2.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Unity游戏冰霜效果的实现和思考2

Unity游戏冰霜效果的实现和思考Unity游戏中如何做出冰霜效果呢?冰霜的覆盖效果在游戏中很常见,那么是如何制作出来的呢,让我们来了看看原因,首先我们需要一个模型,如下图所示:?1.常规的冰霜,最简单的要数霜冻的颜色变化,只需要减少亮度,增加蓝色分量。?片段着色器:?texcol *= fixed4(0.9, 0.9, 0.9, 1f);?texcol.b += 0.2;?效果如下:?虽然简单,但效果也十分一般。?2.如果你玩过冰火围城,它里面的冰冻效果则是更加金属化,给人的感觉是一层灰色滤镜再增加一点蓝色,然后顶部会更亮。?首先,我们要计算法线夹角,方便处理顶部更亮这部分。?顶点着色器:?float3 normal = mul(SCALED_NORMAL, (float3x3)_World2Object); fixed dotProduct = dot(normal, fixed3(0, 1, 0)) / 2; if(dotProduct = 0) { dotProduct = 0; } o.color = dotProduct.xxx; 然后灰化整个角色,并且增加顶部亮度。?片段着色器:?float grey = dot(texcol.rgb, float3(0.299, 0.587, 0.114)) + i.color.x;?texcol = fixed4(grey, grey, grey, texcol.a);?texcol.r -= 0.15texcol.b += 0.15;?;?效果如下:?不过由于这个模型本身比较暗,所以看上去有点像雕像。但这似乎不是我们想要的效果呢,于是我打算换一个思路,让材质先变成霜。?增加了一张贴图,看看霜的效果:?哈哈,有点像冰棍了呢。但霜应该要亮一些,我打算增加下亮度,同时增加外发光。?顶点着色器:?fixed3 viewDir = normalize(ObjSpaceViewDir(v.vertex));??fixed dotProduct = 1 - dot(v.normal, viewDir);?o.color = smoothstep(0, 1, dotProduct); ? ??o.color *= _RimColor;?片段着色器:?texcol.rgb += i.color;?效果:?可是这样就完全是冰棍了呢,我想要混合一下原始的像素,于是增加一个变量,控制一下混合。?片段着色器:?texcol = texcol * _Frezz + ?alpha * (1 - _Frezz);?设置效果:?通过控制滚动条可以调整混合比例,这个大概是64开的比例,看着还行吧。?但这样就结束的话还是差强人意,因为冰霜的变化太过规则了,我们很多时候希望的是随机变化,显得更自然。?再增加一张噪点贴图,通过获得贴图的值调整混合比例。?float ClipTex = tex2D (_RandomTex, i.uv).r ;?float ClipAmount = (_Frezz - ClipTex) / 2 + 0.5;??if(ClipAmount 0)??{?? ? ? ? ? ClipAmount = 0;?}?if(ClipAmount 1)??{?? ? ? ? ? ?ClipAmount = 1;??}?效果如下:?这样马马虎虎吧,如果还要继续就需要法线贴图,遗憾的是这个模型没有法线贴图。?如果有法线贴图,我们可以再法线贴图层面上增加冰霜的颜色变化。?最后 的完整shader代码:?// Upgrade NOTE: replaced PositionFog() with multiply of UNITY_MATRIX_MVP by position // Upgrade NOTE: replaced V2F_POS_FOG with float4 pos : SV_POSITION Shader Custom/CharactorShaderCullOff { Properties { _MainTex (Base (RGB), 2D) = white {} _AlphaTex (Base (RGB), 2D) = white {} _RandomTex (Base (RGB), 2D) = white {} _RimColor (Rim Color, Color) = (1, 0, 0, 1) _Color(_Color, Color) = (0.5,0.5,0.5,1) _Rampage(_Rampage, Float) = 0 _Fr

文档评论(0)

tt859685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档