中级Shader教程16 水渲染

这是一篇中级Shader教程,主要讲解如何在Unity中实现水渲染,包括使用Noise和FBM模拟水面波动,通过time变量实现动态效果,以及详细阐述了反射和折射的模拟过程,利用raymarching技术来增强视觉效果。

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


layout: post
title: “中级Shader教程16 水渲染”
date: 2018-04-23 16:09:03
author: Jiepeng Tan
categories:

  • shader tutorial
    tags: shader_tutorial shader sky water lake mountain
    mathjax: true

Shader 视频教程

1.前置知识链接

1.Noise和FBM请参考这篇文章中给出的链接
2.ranymarching 框架

2.分析

1.基本形状构造

这里利用了Noise本身随机的同时也连续的特性来模拟水面的变动
1.使用FBM来实现水面的基本形状
2.水的动态是通过在Noise中使用time作为一个维度,来实现水的扰动

2.着色

1.水渲染需要考虑的有diffuse,specular,reflect,refract,fresnel这几种不同的效应

3.实现

1.波浪

1.使用FBM 来模拟水的波动 (利用的是其随机性和连续性)
2.在Noise中使用time作为其中的一维度来模拟水的动态

float WaterMap( fixed3 pos ) {
   
   
    return FBM( fixed3( pos.xz, ftime )) * 1;
}

float3 WaterNormal(float3 pos,float rz){
   
   
    //注意这里的小技巧 法线随着距离而变化幅度小的,
    //不会造成因ray采样少而导致的噪音波动
    float EPSILON = 0.003*rz*rz;
    float3 dx = float3( EPSILON, 0.,0. );
    float3 dz = float3( 0.,0., EPSILON );
        
    float3  normal = float3( 0., 1., 0. );
    float bumpfactor = 0.4 * pow(1.-
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiepengTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值