unity 使用Camera模拟人物的阴影




unity 中,有非常好的光照阴影效果,

一般情况,直接使用就可以,

假如,在某种特殊情况下,自然光的 阴影需要关闭,

但是,主角的阴影,还是需要动态的显示出来,

有什么办法吗?

实际上,可以通过Camera来模拟一个影子,

效果如下,



看上去,效果还可以接受,

那么,怎么做呢?




(图1)


第一步,我们先创建一个 新 layer ,这里取名叫 

jarodShadow , 相当于我们将这种模拟的阴影,进行单独处理,

不和其他层发生关系。

(图2)

第二步,

我们在自然光下,先将 Culling Mask 设置为 jarodShadow ,然后看一下效果,

创建两个相同的模型,一个 layer 设置为 jarodShadow ,另一个设置默认,

我们可以看到,这两个模型,设置为 jarodShaow 的,显示出了阴影,

而另一个没有阴影,这就是 Culling Mask 的作用,有一个 选择的作用,

就像是对哪些起作用, 如果是 everything ,就是对所有的都有作用,

如果是 nothing ,就是对所有的都没作用。

(图3)

第三步,我们创建一个新的 Render Texture ,

可以理解为,一会我们要将 人物模拟的影子,绘制在这张图片上,

再通过一个 plane对象,放在场景中,这样,就能让 模拟的影子显示出来了。

(图4)

第四步,我们新建一个 camera ,

这里,取名叫 shadowCamera ,

这就像是,我们通过这个摄像机,可以看到一些图像,

而这个图像,也可以看成是 一种 “阴影”

这里需要注意的是, background 的 Color 的  rgba 中的 a ,应该设置为 0 ,

target texture 设置为 刚才创建的 shadowRenderTexture ,

可以理解为,通过这个摄像机所看到的图像,绘制到这张图片上,

(图5)

第五步,创建一个 Plane ,用它来显示 摄像机所拍摄下来的图片。

我们可以调整其大小,角度,位置

(图6)

第六步,我们调整 shadowCamera 的位置和角度,
直接就能观察到 投影出的图片是什么效果,

这里,摄像机的拍摄角度,就像是我们模拟的阳光角度。

(图7)

第七步,我们故意将 plane 拉长,此时,我们可以看到一个图像已经呈现在了场景中,

但是,这是一张彩色图片,我们希望得到的效果是,

一个透明的,只保留阴影的效果。

(图8)

最后,我们将 Rendering Mode 改为 fade ,

再调整一下颜色。

(图9)

此时,我们打开 自然光 选项, 可以看到,

在关闭了 shadow后, 人物的阴影,通过这种方式,是可以进行简单模拟的,

这里,是将图片通过  Plane 显示出来,

如果不是出于特殊原因,人物的阴影还是使用 unity自己的阴影更好一些。

unity 中,有非常好的光照阴影效果,

一般情况,直接使用就可以,

假如,在某种特殊情况下,自然光的 阴影需要关闭,

但是,主角的阴影,还是需要动态的显示出来,

有什么办法吗?

实际上,可以通过Camera来模拟一个影子,

效果如下,
unity <wbr>使用Camera模拟人物的阴影

看上去,效果还可以接受,

那么,怎么做呢?




unity <wbr>使用Camera模拟人物的阴影

第一步,我们先创建一个 新 layer ,这里取名叫 

jarodShadow , 相当于我们将这种模拟的阴影,进行单独处理,

不和其他层发生关系。

unity <wbr>使用Camera模拟人物的阴影

第二步,

我们在自然光下,先将 Culling Mask 设置为 jarodShadow ,然后看一下效果,

创建两个相同的模型,一个 layer 设置为 jarodShadow ,另一个设置默认,

我们可以看到,这两个模型,设置为 jarodShaow 的,显示出了阴影,

而另一个没有阴影,这就是 Culling Mask 的作用,有一个 选择的作用,

就像是对哪些起作用, 如果是 everything ,就是对所有的都有作用,

如果是 nothing ,就是对所有的都没作用。

unity <wbr>使用Camera模拟人物的阴影

第三步,我们创建一个新的 Render Texture ,

可以理解为,一会我们要将 人物模拟的影子,绘制在这张图片上,

再通过一个 plane对象,放在场景中,这样,就能让 模拟的影子显示出来了。

unity <wbr>使用Camera模拟人物的阴影

第四步,我们新建一个 camera ,

这里,取名叫 shadowCamera ,

这就像是,我们通过这个摄像机,可以看到一些图像,

而这个图像,也可以看成是 一种 “阴影”

这里需要注意的是, background 的 Color 的  rgba 中的 a ,应该设置为 0 ,

target texture 设置为 刚才创建的 shadowRenderTexture ,

可以理解为,通过这个摄像机所看到的图像,绘制到这张图片上,

unity <wbr>使用Camera模拟人物的阴影

第五步,创建一个 Plane ,用它来显示 摄像机所拍摄下来的图片。

我们可以调整其大小,角度,位置

unity <wbr>使用Camera模拟人物的阴影

第六步,我们调整 shadowCamera 的位置和角度,
直接就能观察到 投影出的图片是什么效果,

这里,摄像机的拍摄角度,就像是我们模拟的阳光角度。

unity <wbr>使用Camera模拟人物的阴影

第七步,我们故意将 plane 拉长,此时,我们可以看到一个图像已经呈现在了场景中,

但是,这是一张彩色图片,我们希望得到的效果是,

一个透明的,只保留阴影的效果。
unity <wbr>使用Camera模拟人物的阴影
最后,我们将 Rendering Mode 改为 fade ,

再调整一下颜色。
unity <wbr>使用Camera模拟人物的阴影

此时,我们打开 自然光 选项, 可以看到,

在关闭了 shadow后, 人物的阴影,通过这种方式,是可以进行简单模拟的,

这里,是将图片通过  Plane 显示出来,

如果不是出于特殊原因,人物的阴影还是使用 unity自己的阴影更好一些。
展开阅读全文

没有更多推荐了,返回首页