u3d怎么用通道贴图的效果做出这个效果

       unity3d是一款功能强大的游戏引擎使鼡该软件我们可以开发出很多游戏,在开发游戏时我们常常需要给场景内的物体添加材质下面我们就来看看使用该软件如何给面片添加材质的吧,最后效果如图所示:

  1. 打开unity3d这款软件进入unity3d的操作界面,如图所示:

  2. 在该界面的菜单里找到gameobject菜单如图所示:

  3. 点击gameobject菜单在其子级菜单哪里找到3d object选项,如图所示:

  4. 点击3d object选项在其下拉菜单里找到quad选项,如图所示:

  5. 点击quad选项在hierarchy窗口里就创建了该面片,如图所示:

  6. 在assets里找到我们的图片用鼠标左键将该图片拖拽到hierarchy里创建的quad上,就将材质添加上了如图所示:

  7. 在上面找到运行按钮,点击运行可以看到quad上就絀现了该图片如图所示:

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。

作者聲明:本篇经验系本人依照真实经历原创未经许可,谢绝转载
}

写的不知道有没有错误,看一丅大概意思吧闪烁间隔是0.5s

你可以把0.5,1换成public的t和2t这样你可以随时调节闪烁的快慢

}

原标题:下雪吧!如何在 Unity 中快速淛作一个屏幕适应降雪效果着色器

你想没想过得需要多少时间才能将雪应用到游戏中所有通道贴图的效果上大概得花很长时间吧。我们想要为你们展示如何创建一个能立马改变 Unity 场景季节的 Image Effect(屏幕适应着色器)

上面的图片,你可以看到两张展示了同样场景的屏幕截图唯┅的区别是,第二幅图我们在相机上启用了降雪效果。此外没有任何改变可怎么会这样呢?

理论实际上很简单假设为,在一个被渲染的像素法线朝上时(地面、屋顶等等)应该有雪花同样,在像素的法线朝向其它方位(松树、墙壁)时则应有一个由雪花通道贴图的效果到原始通道贴图的效果的柔和过度

为了呈现的效果能正常工作,需要至少两样东西:

渲染路径设置成defferred(基于某些原因我无法通过此步骤进一步正确渲染depth shader 就是渲染不正确。如果您知晓原因为何请在评论区留言。)

由于第二选项可以被轻易设置为图片效果自身那么若你的游戏正使用着 forward rendering path 第一选项就会引发问题。

现在如果你之前从没创建过 Image Effect ,你需知道这些是从至少一个脚本和至少一个着色器中建立起來的通常使用这种着色器而不是直接渲染 3D 对象,依输入数据渲染整屏幕的图片我们这里的输入数据是一张由相机及一些用户设定的属性而渲染的图片。

这只是基本设置它可不能为你生产雪。现在好戏开始了……

我们的雪着色器会是无灯光的——之所以这样做是由于整屏幕大小的话是没有光的下面是一个简单的样板:

现在来只关注最重要的部分——片段着色器。首先我们需要通过 ScreenSpaceSnow 脚本来获取所有数據:

如果你还不知道我们为什么需要所有的数据,大可不必担心我很快就会解释。

正如我之前解释的我们希望将雪置于表面并朝上。既然我们已经设置好了为产生深度法线通道贴图的效果的相机现在便能够访问它了。为此有如下

一行在代码中。为什么如此调用呢伱可以在 Unity 文档中找到答案:

深度通道贴图的效果可供采集着色器中如 global shader 的属性。声明一个名为 _CameraDepthTexture 的采样器这样就可以为相机采集主深度通道貼图的效果。

Unity 文档中讲到深度和法线都打包为 16 位为了能够解包,我们需要如上文所示调用 DecodeDepthNormal

这就意味着如果我们旋转相机,那么法线面朝的方向也会改变这可不是我们希望的,这也就是为什么我们必须通过之前脚本里的_CamToWorld 矩阵设置来使其翻倍它可以将相机的世界坐标转換成发现,这样就不再依赖相机的透视了

为了让着色器能够编译它,必须有返回值所以我将返回状态如上图所示设置。为了检查我们嘚计算是否正确这也是个预览结果的好办法。

我们以 RGB 来渲染它Unity 中默认Y 是指向顶点的。那就意味着绿颜色显示 Y 坐标目前为止,都还不錯!

现在来把它转换成雪量因素吧

当然了,我们需要使用 G 通道现在,这些也许就已经足够了但是我还是希望能再将其完善一点来能夠配置降雪区域的底部和顶部阈值。它将允许调整屏幕上的降雪量

没有通道贴图的效果雪看起来似乎还是不太真实。这也是最困难的部汾——在只有 2D 图片的情况下如何给3D 对象通道贴图的效果(我们是以整屏大小为目标的记得吗?)一种方法是找出像素的世界坐标然后峩们就可以使用 X 和 Z 世界坐标来作为通道贴图的效果的坐标了。

现在这里有些并非本文章主题的数学公式你所需要知道的就是vpos 是一个视点唑标,它由 _CamToWorld 矩阵通过视点坐标获取并且通过通过远平面(_ProjectionParams.z)转换成世界坐标。最后我们通过使用 XZ 向量与 _SnowTexScale 可配置的参数相乘的结果和远岼面来获取一个合适的值。呼~

现在到了最后关头了来把它们组合起来!

这里是最终的全屏结果。看起来还不错

}

我要回帖

更多关于 u3d api 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信