layout: post
title: “中级Shader教程20 3D云”
date: 2018-04-23 16:09:03
author: Jiepeng Tan
categories:
- shader tutorial
tags: shader_tutorial sea shader wave
img_path: /assets/img/blog/ShaderTutorial2D/Snow
mathjax: true
Shader 视频教程
1.前置知识链接
1.Noise和FBM请参考这篇文章中给出的链接
2.ranymarching 框架
3.多层透明叠加渲染
1.分析&实现
1.使用常规raymarching +倒退+ 多层叠加透明渲染
1.常用FBM 分布限制来定义距离函数Map(pos)
2.定义密度函数为 Den(pos) = clamp(-(Map(pos)) ,0.,1.)
这样在raymarching hit的点p =(ro+trd)其实密度其实才刚开始,然后在 p沿射线倒退
一定的距离,然后开始进行多层透明渲染。
伪代码:
float Map(float3 p){
return abs(p.y-cloudY)* cloudH // 大方向的限制
+FBM(p*0.4) // 局部反密度分布
-0.4;//因为FBM ~ [0~1.] ,为了得到一个拥有“内部”这个概念的距离分布 所以应该减去一个值
}
float Den(float3 p){
return clamp(-Map(p),0.,1.);
float Raycast(in float3 ro, in float3 rd)
{
float precis = .1;//这里检测到快要接近 即可
float h= 1.;
float d = 0.;
for( int i=0; i<_LoopNum.x; i++ )
{
if( abs(h