Shader实现边缘外发光效果

发布时间 2024-01-12 14:36:08作者: rain4414

我们在游戏中随处可见边缘外发光的效果,比如像一些残影,星球表面等等,这些都是边缘发光的案例。那么边缘发光效果是如何做的呢?其实也是非常的简单的。我们都知道Shader是能够做出一些炫酷效果的,在shader里面,我们通过编写Pass通道的一些函数,就能帮我们实现这些效果。一般情况下,我们都是一个shader一个pass的。那么边缘发光的化,我们就需要两个Pass了。一个Pass负责普通的绘制,另一个Pass就是负责边缘发光效果。好了,我们先来看看效果图:

 

 

 

这里是一个地球绕太阳旋转的案例,我们可以看到太阳和地图有明显的外轮廓发光,那么这到底是怎么做的呢?

首先我们知道原理就是需要两个Pass,一个负责普通的绘制地球或者太阳的纹理,然后一个Pass负责边缘光,那么这个边缘光怎么做呢?我们会发现边缘光比地球或太阳本体要大一些的。这就是根据模型的法线进行偏移做的。我们让模型的顶点沿着法线进行偏移。这样的化,我们绘制出来的就会比本体要大。那么第二个Pass我们不需要其他的,专门绘制颜色即可。然后2Pass叠加起来。但是就会出现一个问题。我们会发现地球本来的纹理是看不见的。这就是因为第二个Pass把第一个Pass挡住了。那么怎么解决这个问题呢?我们可以剔除第一个Pass的正面,然后剔除第二个Pass渲染的背面,这样他们两个结合起来,就都能看见了。但还是没有边缘光的效果。因为现在第二个Pass还是纯色,所有没有那种效果。那么我们该怎么办呢?很简单,我们利用视线与模型法线的点成来得到一个从中间到边缘颜色值逐渐变弱的效果。这样的话,我们就能有边缘光的效果了,然后如果效果不是特别好的话,我们还可以加大光的强度,让它更加真实,这样就能达到我们想要的效果。代码如下:

 

 

 

这就是第二个Pass的主要部分,注释什么的都有,原理在上面已经讲到了。OK,这次的分享到此为止