(二十四)unity shader之——————使用噪声:下篇(水波效果)

本文详细介绍了如何使用噪声纹理在Unity中实现水波效果,包括利用噪声纹理作为高度图改变水面法线,结合时间变量模拟流动,以及运用菲涅耳效应融合反射和折射。通过声明属性、渲染队列设置、顶点和片元着色器的编写,最终实现了具有真实感的水面波动和折射反射效果。文章还探讨了噪声纹理的生成及其在模拟自然纹理中的应用。
摘要由CSDN通过智能技术生成

在模拟真实水面过程中,我们往往也会使用噪声纹理。此时噪声纹理通常会用做一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,在进行正常的反射+折射计算,得到最后的水面波动效果。

本篇文章会使用一个噪声纹理得到的法线贴图,实现一个包含菲涅耳反射的水面效果,如下图:

我们使用一张立方体纹理(cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染纹理,并使用切线空间下的法线方向对像素的屏幕坐标进行偏移,再使用该坐标对渲染纹理进行屏幕采样,从而模拟近似的折射效果其中水波的法线纹理是由一张噪声纹理生成而得,而且会随着时间变化不断平移,模拟波光粼粼的效果。除此之外,我们没有使用一个定值来混合反射和折射颜色,而且使用之前提到的菲涅耳系数来动态决定混合系数,使用如下公式来计算菲涅耳系数:

fresnel=pow(1-max(0,v·n),4)

其中,v和n分别对应了视角方向和法线方向。它们之间的夹角越小,fresnel值越小,反射越弱,折射越强。菲涅耳系数还经常用于边缘光照的计算中。

实现:

1.声明属性

Properties {
		_Color ("Main Color", Color) = (0, 0.15, 0.115, 1)
		_MainTex ("Base (RGB)", 2D) = "white" {}
		_WaveMap ("Wave Map", 2D) = "bump" {}
		_Cubemap ("Environment Cubemap", Cube) = "_Skybox" {}
		_WaveXSpeed ("Wave Horizontal Speed", Range(-0.1, 0.1)) = 0.01
		_WaveYSpeed ("Wave Ve
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值