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.-