• Shader 学习工具篇 可视化公式工具ZGrapher


        大家好,我是怒风,本篇介绍公式可视化公式工具ZGrapher,尝试通过可视化的方式分析一下Shader中应用的公式,以求帮助初学者快速理解Shader编程中的一些常用公式

    本篇的目的两个,

    第一,介绍可视化公式工具ZGrapher,

    第二,探讨下在学习中的交流和分享的重要性.

    物体边缘外发光的特效,是Shader学习入门的一个很好的例子,下面我们通过来ZGrapher来帮我们很好理解这个特效的原理,

    half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));  

    o.Emission= _RimColor.rgb * pow (rim, _RimWidth);

    简化成公式就是  pow(1-max(0,dot(viewDir,normal)),_RimPower)*RimScale

    这个公式,最基础的原理就是向量的点积,我们知道两个归一化向量的点积等于夹角的余玄值。而余弦值在0到90°范围内,又与角度的大小成反比,下面我们来看一下如何分析这个公式

    A、忘记了Cos函数是什么的同学可以复习一下,其中0-90度 角度越大值越小,成反比

    1

    image

    视线所看到的物体边缘是“视线与顶点法向量的夹角越大越趋于边缘”,由于我们的余弦值向量之间夹角反比,其实很难理解。

    x

    (该图来自https://blog.csdn.net/puppet_master/article/details/53548134 puppet_master)

    为了使我们更容易理解,我们希望得到 值与夹角成正比关系,为此我们通过1-cos来实现。我们在公式里看看是不是成了正比

    2

    为了使我们的边缘过渡更加明显,我们对rim系数做指数变换使得曲线值更加陡峭

    3

    4

    最后,我们在乘以一个倍数。使我们的边缘更加明显,这样我们就完成了边缘外发光的效果的分析

    5

    通过这个例子我们通过公式编辑器来可视化 分析 Shader中的数学公式,帮助我们理解其中正真的原理是什么

    至此我们通过 工具帮我们分析了这个外发光的公式,但是我们真正掌握和理解了吗?

    爱因斯坦说过一句话 “如果你不能用最简单的语言来描述,那你就是没有真正领悟”

        话虽这么说但是从理解到不理解,探索本质是一个不断求索的过程,没有人能够一步到位找到捷径,除非说你是天才。比如说关于向量点积的应用,把我们刚才所说的重点归一化向量夹角的余玄值,把这种数学语言落实到我们的程序开发中,变成一种通俗易懂的语言,又是什么呢?其实就是比较两个单位向量的相似度,也就是两个向量的夹角越小,价值越大,通过这一句“两个向量的相似度”,替代了以前我们需要两个数学概念的语义。这样我们就很容易理解,物体外发光效果,原理是因为视线与顶点法向量的相似度越小,越小视线所看到的物体的越是边缘,同样的道理是视线与顶点法向量的相似度越大,说明该顶点,越处于我们眼睛的正前方,也就是正对着我们的顶点。那么如果我们想要做物体的积雪效果,那么积雪的顶点的法向量一定是与下雪方向的向量的相似度越高。

          那么为什么我们刚开始学习这个点积的时候,没有找到关于归一化向量的相似度的概念呢?原因在于我们的交流和分享还不够,比如遇到了一个问题,如果大家能够积极的讨论分享,评论留言,也许问题会有更好答案和解决的方法,仅此而已。

  • 相关阅读:
    2.分布式锁
    1. junit用法,before,beforeClass,test,after, afterClass的执行顺序
    GC算法
    记一次"截图"功能的前期调研过程!
    程序员转行手册!
    Yarn详细的工作流程
    Yarn的三种调度器(Scheduler)
    Hadoop序列化与Java序列化的区别
    MapReduce执行过程
    从普通登录到单点登录图例
  • 原文地址:https://www.cnblogs.com/IlidanStormRage/p/8735653.html
Copyright © 2020-2023  润新知