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度 角度越大值越小,成反比


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

(该图来自https://blog.csdn.net/puppet_master/article/details/53548134 puppet_master)
为了使我们更容易理解,我们希望得到 值与夹角成正比关系,为此我们通过1-cos来实现。我们在公式里看看是不是成了正比

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


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

通过这个例子我们通过公式编辑器来可视化 分析 Shader中的数学公式,帮助我们理解其中正真的原理是什么
至此我们通过 工具帮我们分析了这个外发光的公式,但是我们真正掌握和理解了吗?
爱因斯坦说过一句话 “如果你不能用最简单的语言来描述,那你就是没有真正领悟”
话虽这么说但是从理解到不理解,探索本质是一个不断求索的过程,没有人能够一步到位找到捷径,除非说你是天才。比如说关于向量点积的应用,把我们刚才所说的重点归一化向量夹角的余玄值,把这种数学语言落实到我们的程序开发中,变成一种通俗易懂的语言,又是什么呢?其实就是比较两个单位向量的相似度,也就是两个向量的夹角越小,价值越大,通过这一句“两个向量的相似度”,替代了以前我们需要两个数学概念的语义。这样我们就很容易理解,物体外发光效果,原理是因为视线与顶点法向量的相似度越小,越小视线所看到的物体的越是边缘,同样的道理是视线与顶点法向量的相似度越大,说明该顶点,越处于我们眼睛的正前方,也就是正对着我们的顶点。那么如果我们想要做物体的积雪效果,那么积雪的顶点的法向量一定是与下雪方向的向量的相似度越高。
那么为什么我们刚开始学习这个点积的时候,没有找到关于归一化向量的相似度的概念呢?原因在于我们的交流和分享还不够,比如遇到了一个问题,如果大家能够积极的讨论分享,评论留言,也许问题会有更好答案和解决的方法,仅此而已。
Shader 学习工具篇 可视化公式工具ZGrapher的更多相关文章
- iOS开发工具篇-AppStore统计工具
苹果官方的iTunes Connect提供的销售数据统计功能比较弱,例如只能保存最近30天的详细销售数据,界面丑陋, 无法查看App的排名历史变化情况等. 早有一些公司提供了专门的解决方案或工具.这些 ...
- Caffe学习系列——工具篇:神经网络模型结构可视化
Caffe学习系列——工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py ...
- spring boot 学习(九)小工具篇:?秒防刷新
注解 + 拦截器:?秒防刷新 小工具篇:工具许多都是我以前在 github 之类开源平台找到的小工具类,作者的信息什么的许多都忘了.先说声不好意思了.若有相关信息,麻烦提醒一下~ 解释 所谓的?秒防刷 ...
- docker学习(三) 安装docker的web可视化管理工具
1.docker是一个一款很轻便的应用容器引擎,为了更好的管理和使用docker,使用web可视化管理工具似乎更符合大多数人的需求.在这里,我给大家分享下自己使用过的几款web工具:docker UI ...
- Docker可视化管理工具对比(DockerUI、Shipyard、Rancher、Portainer)
1.前言 谈及docker,避免不了需要熟练的记住好多命令及其用法,对于熟悉shell.技术开发人员而言,还是可以接受的,熟练之后,命令行毕竟是很方便的,便于操作及脚本化.但对于命令行过敏.非技术人员 ...
- MongoDB 可视化管理工具
MongoDB 可视化管理工具 (2011年10月-至今) 正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡.MongoCola这 ...
- JVM(12)之 可视化分析工具
开发十年,就只剩下这套架构体系了! >>> 经过前几篇博文对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!本篇博客就根据已有的理论知识,通过可视化工 ...
- 3款强大的BootStrap的可视化制作工具推荐
http://www.25xt.com/html5css3/7342.html 25学堂看到最近很多朋友在学习Bootstrap前端主题框架.顾让25学堂的小编给大家找来了3款适合Bootstrap初 ...
- JAVA 可视化分析工具 第12节
JAVA 可视化分析工具 第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...
随机推荐
- 6/11 sprint2 看板和燃尽图的更新
- <构建之法>前三章读后感—软件工程
本教材不同于其他教材一贯的理知识直接灌溉,而是以对话形式向我们传授知识的,以使我们更好地理解知识点,更加清晰明确. 第一章 第一章的概述中,书本以多种方式,形象生动地向我们阐述了软件工程的内容,也让我 ...
- MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题
问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下: 1 2 3 4 5 6 7 +-------+----------+------+-----+ ...
- 【算法复习】codevs1022 匈牙利算法
题目描述 Description 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. ...
- 【BZOJ1858】序列操作(线段树)
[BZOJ1858]序列操作(线段树) 题面 BZOJ 题解 这题思路很简单,细节很烦,很码 维护区间翻转和区间赋值标记 当打到区间赋值标记时直接覆盖掉翻转标记 下放标记的时候先放赋值标记再放翻转标记 ...
- Fowsniff: 1靶机入侵
一.信息收集 1.存活主机扫描 arp-scan -l 发现192.168.1.13是目标靶机的IP地址 2.端口扫描 接下来用nmap神器来扫描目标IP地址,命令如下: root@kali2018 ...
- maven管理工具
Maven解决的问题: 1. 使用maven前搭建项目需要引入各种jar包,并且还可能有jar包冲突的问题 解决jar包冲突的方式: 1. 第一声明优先原则 2. 路径近者优先原则. 直接依赖路径比传 ...
- [Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法(转)
[Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法http://blog.csdn.net/qiujuer/article/details/ ...
- 解题:NOI 2014 购票
题面 观察一下部分分,我们发现链上的部分分是这样一个DP: $dp[i]=min(dp[i],dp[j]+dis(i,j)*p[i]+q[i])(dis(i,j)<=lim[i]\&\& ...
- bzoj : 4504: K个串 区间修改主席树
4504: K个串 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 268 Solved: 110[Submit][Status][Discuss] ...