中级Shader教程15 地形渲染

1.前置知识链接1.FBM请参考这篇文章中给出的链接 2.ranymarching 框架 2.抽取地形shader 通用函数  在处理类地形raymarching的过程中,为了优化,在raycast阶段会有一个大循环,为了性能,我们在这里采样的精度低一点,在计算法线的时候精度高一点,因为计算法线的时候,只有一次。 所以我们分为三种不同精度的Map函数,同样为了...
摘要由CSDN通过智能技术生成

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

  • shader tutorial
    tags: shader_tutorial mountain shader
    img_path: /assets/img/blog/ShaderTutorial2D/Snow
    mathjax: true

Shader 视频教程

1.前置知识链接

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

2.抽取地形shader 通用函数

在处理类地形raymarching的过程中,为了优化,在raycast阶段会有一个大循环,为了性能,我们在这里采样的精度低一点,在计算法线的时候精度高一点,因为计算法线的时候,只有一次。

所以我们分为三种不同精度的Map函数,同样为了减少重复代码,我们使用宏来展开

#define Terrain(pos,NUM)\
    float2 p = pos.xz*.9/_MaxTerrianH;\
    float a = 0.0;\
    float b = 0.491;\
    float2  d = float2(0.0,0.);\
    for( int i=0; i<NUM; i++ ){\
        float n = Noised(p).x;\
        a += b*n;\
        b *= 0.49;\
        p = p*2.01;\
    }\
    return float2(pos.y - _MaxTerrianH*a,1.);

float2 TerrainL(float3 pos){
    
    Terrain(pos,5.);
} 
float2 TerrainM(float3 pos){
   
    Terrain(pos,9.);
} 
float2 TerrainH(float3 pos){
   
    Terrain(pos,15.);
}  


float RaycastTerrain(float3 ro, float3 rd) {
    
    _MRCRO_RAY_CAST(ro,rd,10000.,TerrainL);  
}
float3 NormalTerrian( in float3 pos, float rz ){
   
    _MACRO_CALC_NORMAL(pos,rz,TerrainH); 
<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JiepengTan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值