Unity 关于镜面反射和投影阴影实现

话不多说先上图,有镜面反射,投影器方式实现阴影,下雨效果,工程放最后

镜面反射

镜面反射原理:通俗点说法就是就是在摄象机对称的正下方和主摄象机看同一个焦点,这个反射摄象机看到的东西就是镜面反射的东西,然后这个反射摄象机渲染一张图,扔给地面显示(需要忽略地面层渲染)

具体详细说明可以看这个文章:反射原理

下面是反射镜头渲染的图片

镜面反射优化

1.真实项目中不可能直接用摄象机渲染,多数都会采用替换shader方式渲染,主要是角色shader一般都是比较复杂,使用简单的shader替换渲染提高性能

2.利用cubemap制作反射和反射镜头渲染出来的角色反射结合在一起,这可以减少渲染的物体,渲染和内存就是鱼和熊掌

这两种方式在angrybots里面都有使用过,这个项目很多地方值得参考

3.可以使用反射摄象机使用commandbuff来进行渲染能优化性能(后面工程更新提供)

镜面反射shader相关

shader所要做的事情是计算出镜面在屏幕空间上对应的坐标,然后以此作为UV值去反射纹理取出对应的颜色值

下面是surface代码演示

        struct Input
        {
            float2 uv_MainTex;
			float4 screenPos;
			float3 worldPos;
        };
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
			fixed4 rtRefl = tex2D(_ReflectionTex, (IN.screenPos.xy / IN.screenPos.w)) *0.3;

            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color + rtRefl;
            o.Albedo = c.rgb;
        }

使用投影实现动态阴影

投影阴影原理:固定角度正交摄象机渲染角色的黑白图(需要替换shader方式),渲染出来的图片进行模糊,然后用投影的方式渲染到地面(需要忽略角色层)

下面是投影摄象机渲染的图片

投影动态阴影优化

1.还是使用替换shader方式

2.场景动态进行烘培,只有玩家执行动态阴影

3.投影摄象机使用commandbuff可以提交效率(后面工程更新提供)

关于下雨效果

可以看看链接,下雨效果

地面的效果是根据一张噪音图进行简单扭动,整体效果给人感觉下雨,水往某个方向流动

工程地址

https://gitee.com/PieKen/UnityReflectionAndProjectShadow

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值