【unity shader】高级光照 --- 薄膜干涉

本文探讨了薄膜干涉这一高级光照效果,解释了其在现实世界中的表现,如阳光下的肥皂泡和光盘。通过介绍薄膜干涉的原理和光程差的概念,展示了如何在Unity中使用shader模拟这一效果,包括利用Ramp贴图和Fresnel方程的方法。并提供了相关的shader代码示例,帮助理解并实现动态的薄膜干涉视觉效果。

-光照模型是shader编程的核心与基础。 一般的光照模型–不管是lambert还是phong–其实都是对现实光照的模拟。

但是现实中的光照效果要复杂得多。但就光的反射而言, 薄膜干涉就是一种非常常见的高级光照效果。

什么是薄膜干涉?

薄膜干涉的常见例子可以是阳光下的肥皂泡, 又或者是一张光盘

foam bubble

关于薄膜干涉的原理,可以参考wiki上的介绍 【https://en.wikipedia.org/wiki/Thin-film_interference

如图所示,光线进入薄膜时,在薄膜的上下表面均产生反射,由于反射光线走过的路径不同,就产生了一个光程差。一般,当光程差正好等于光线波长的整数倍时候,反射光线就彼此增强,当光程差等于波长的整数倍又半波长时,光线就彼此抵消。

光程差与波长有关,又与光线的入射角度相关,所以我们就看到了阳光下的肥皂泡呈现出红绿蓝的光谱,并且随着观察角度的不同而不断变化。

薄膜干涉的shader编程

  • 利用Ramp贴图模拟薄膜干涉效果

薄膜干涉的shader模拟,在NVIDIA的网站教程中有一个范例。对一艘外星UFO施以薄膜干涉,效果是这样滴。
UFO
网上有人将这个demo转到了unity shader中,画风有些不一样了。
UFO
具体差异从何而来先不管,这个shader的实现原理就是计算光程差,以此为坐标对一副Ramp贴图采样,从而模拟光谱效果。实际观感还有赖于其他手段优化。
Ramp Tex
完整的shader代码如下:

Shader "thinfilm2" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
      _Ramp ("Shading Ramp", 2D) = "gray" {}
      _SurfColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) 
      _SpecExpon ("Spec Power"</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值