Chango的数学Shader世界(七)水波模拟-透明水面,菲涅尔(Fresnel)效应

本文深入解析并改进了一款免费透明水面Shader,探讨了菲涅尔效应在水面材质中的应用,涉及造型、Fresnel函数、金属度、反光度、粗糙度、不透明度、折射率等多个方面。通过分析,揭示了Shader背后的物理原理,并指出了UE4材质系统存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:

解析,改进,批评一个国外免费透明水面Shader,进一步了解Shader背后的物理原理。

参考:

菲涅尔反射

分析:

我将原水面Shader一再简化,从中抽取最主要的部分,忽略细枝末节,并改掉缺陷,指出不足。

简化版:

1.造型

其中,顶点偏移,也就是波的造型,是用贴图制造的,一目了然:

就是一张高度图经过4方向扰动,乘以波高度。然后它再乘上顶点法线在世界坐标系上的Z轴高度,这个莫名奇妙的操作会使得Normal朝上的顶点的波高更加高,而偏的更加低。我认为编者脑子里也不清楚,所以我修改了,直接乘以(0,0,1)。如果你的高度图只有b通道,这个(0,0,1)都不用乘。

2.Fresnel_Function

再观原材质图,你一定会注意到我们的主角,一个叫Fresnel_Function的节点。

UE4这样起名字,也真是大言不惭,一会我们会说到。

这个节点,涉及到一个现象,菲涅尔效应。国外一般不称为效应,搜索Fresnel equations

现象倒是很简单:

对着玻璃看,越斜着看,它反射越多,越不透明,越像镜子;

正着看,反射越少,就越透明。

我们在生活中常常见到过这种现象:

(我怀疑夏天远方道路反光,也是这个原因)

总之,这是个在各个材质上都很普遍发生的现象,包括水面。

如果说我们之前的不透明水面本质就是镜子,那我们这次的透明水面本质就是玻璃。

真正的Fresnel方程比较复杂,可脱胎于麦克斯韦电磁学方程

对于透明物体:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值