大家好,时隔很久,汪汪又来更新文章啦,这次要给大家分享一点比较高级的shader效果,算是进阶shader吧,效果不错,实现方法也很简单,老样子,我们需要看一下效果图: 扭曲效果我们是之前讲过的,用抓屏,然后扭曲UV来实现,就是之前的热空气案例。 现在的难题在于,我们的护盾是可交互的,就是物体离开和进入都能实时的出现"相交的边": 还有就是护盾的边缘效果,比较柔和的描边。


我们开始吧!!
首先我们需要先实现描边效果,描边如何实现?? 利用物体法线方向和观察方向来计算,这里汪汪用一张3DMax中的法线图来说明: 如图,越是物体边缘,法线方向和我们的观察方向的角度是越大的,趋于垂直,利用这种特性,我们可以开始撰写代码: 代码中汪汪最重要的两个参数为normal和viewdir,分别为法线方向和视角方向,在后面的片元着色器中,汪汪用点积的结果来判断它们两个方向夹角幅度,并把结果用来影响颜色输出。 如果开了透明混合,我们就会发现,物体中间已经透明了: 接下来是交互部分,这里我们用深度图来解决,所谓深度图,就是保存了屏幕中各物体离摄象机远近的图片。 但是,小伙伴们通过观察思考,不难发现,如果两个物体相交,那么他们的边缘的深度信息是一样的,基于这个理论,我们可以计算出相交的部分的像素值: 由于这里深度图:_CameraDepthTexture没有保存透明物体的深度信息,所以我们使用COMPUTE_EYEDEPTH来获取球体各个点的深度信息。 通过两个深度相减,我们把相同的地方都归零,然后反转,就能得到交边值。 最后把结果用来影响上色就行: 简单水体交互也是一样的道理,我们现在可以提取相交部分的像素值,通过蒙版,扭曲,来制作效果。这里重点介绍防护罩,水体汪汪不再展开。






本文分享了一种高级的shader效果,通过计算物体法线方向和观察方向的夹角来实现柔和的描边效果。同时,利用深度图解决了物体交互时的相交边显示问题,使护盾在物体进入和离开时能实时出现相交边。文中详细介绍了利用深度信息计算相交部分的方法,并应用于水体交互效果的制作。
2046

被折叠的 条评论
为什么被折叠?



