zoukankan      html  css  js  c++  java
  • 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.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/IlidanStormRage/p/8735653.html
Copyright © 2011-2022 走看看