网络电话聊天网站建设多少钱,山西太原网站建设公司,微信网站什么做,网站搜索防止攻击全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者#xff0c;东汉书院在致力于使得更多人群具备内核级竞争力的道路上#xff0c;将带给小伙伴们更多的公开技术教学和视频#xff0c;感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们…全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者东汉书院在致力于使得更多人群具备内核级竞争力的道路上将带给小伙伴们更多的公开技术教学和视频感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们构建一套成体系的图形学知识架构你在我们这里获得的不止于那些毫无意义的代码我们这里更多的是代码背后的故事以及精准、透彻的理解。我们不会扔给人们一本书或者给个思路让人们去自学我们是亲自来设计出好的课程让人们明白到底背后还有哪些细节。这里插播一个引擎大赛的消息感兴趣的同学可以看一眼这也是东汉书院的立项使命大赛官方主页东汉书院-自己动手写游戏引擎edu.battlefire.cn基本概念介绍求积分其实要么是求面积要么就是在求体积。可能有的人会觉得积分很讨厌那么一大堆奇怪的符号不知道该怎么办但是实际上这是最自然的去描述一个自然事物的公式。同学们可以去尝试了解一下黎曼和因为这个家伙在我们的图形学中也很重要重要的是它的思想只不过它用了一种逼近的方式去描述出了积分如果说成是人话的话那么就是黎曼和用离散的数据去逼近求解得到了连续的积分。不过我们说了这只是一种思想实际上我们相信这种思想只要是个人就能想到只不过要形成一套整体的方法论和解决方案我们需要把这些思想武器摆放到正确的位置上。我们先前的文章介绍了蒙特卡洛方法它是一种统计学的方法那么我们怎么把这个统计学的方法与定积分联系起来呢为什么我们要做这样的一套思路连接呢那是因为我们在做PBS或者PBR的时候我们会去一个半球上对一个小区域内的灯光进行球面积分然后算出这些入射光最终得出了怎样的一个色彩。为什么我们在PBS或者PBR里要对一个半球上的光线做积分呢难道我们在传统光栅化的Lmabert光照的计算方式有什么错误吗要解决这个问题就需要同学们去学习光线追踪了我们之所以要在一个半球上对光线做积分最主要的原因是在现实世界中射入我们眼睛的光线是由很多光线共同作用的结果而不是我们在光栅化中提到的那个一个入射光对应一个出射光的模型。所以我们要尽可能的采样更多的光束才能得到一个相对正确的结果。这也是PBS或者PBR是基于物理的渲染的原因我们没有说这套渲染方式是物理渲染。其中的含义就是我们采用的是一套逼近物理世界的算法在进行渲染因此叫Physical Based Rendering或者是Physical Based Shading。与定积分做连接我们知道真实的环境中射到物体表面的光线数量是无限多的所以我们这里要采用统计学的方式去模拟这种效果因此我们就需要背后的这套蒙特卡洛方法与无限多的入射光的这一现实问题做思路的对接。为了说明蒙特卡洛方法是如何解决现实中的连续数据问题的我们来看看下面这个小例子这个例子其实就是在求在第一象限 的图像与 轴夹着的区域的面积。换成蒙特卡洛方法我们怎么样看待这个问题呢其实还是跟之前那个求PI的思路一样我们之前是在一个边长为2的盒子里算随机出来的点落在圆里面的概率那么我们依照这个思路我们在第一象限里执行n次下面的操作在0~2的范围内随机出一个点x然后求出 把所有第一步求出来的 的和求出来为sum然后用sum乘以2再除以n这便得到了 的图像与x轴夹着的区域的面积的近似逼近值。我们把这些思路写成代码就是下面这样运行结果正好是8/32.66667完美。#include iostream
#include stdio.h
#include math.h
float randf() {return float(rand()) / float(RAND_MAX);
}
float srandf() {return randf()*2.0f - 1.0f;
}
int main(int argc, char **argv) {int count 1000000;float sum 0.0f;for (int i0;icount;i){float x randf()*2.0f;sum x * x;}printf(area is %fn, 2.0f*sum /float(count));return 0;
}
上面这些代码为什么可以这么写呢背后我们出于怎样的思路把代码写成这样子的呢因为我们的定积分公式表示的是 这条曲线与x轴夹着的面积而 在x的值为0~2的时候它的曲线大概是下面这样子的所以对于积分公式而言我们求的就是这条曲线下面的这块积分面积。这里底边x轴的边长是2如果我们把求面积的方法写成近似的值的话我们可以把它看成是把底边切成n份每一份的宽度是 每一份的面积是 这样总面积就是所有的 之和。那么这里 所以我们可以通过这样的公式来求得下面的面积 然后这里的 是 所以最终的公式可以写成 把 提取出来那么我们在循环里头只需要求解sum 。所以我们最终求得的面积为 。这里n越大我们最终得到的结果就越精确。完结撒花这貌似就是一个求积分吧跟蒙特卡洛方法有联系当然是有联系的我们看到具体的代码实现不难发现我们的x并不是等于 我们的x的值是随机数是一个范围在0~2内的随机数。为何会如此呢那就是因为我们的积分区间是0~2我们在这个区间内随机出来一个数字落在我们 与x轴夹着的面积的概率是确定的当我们随机的次数越多这个面积就会越逼近。如果没办法想明白这个x取随机数的原因那么可以回想一下先前我们举例的圆的例子在一个方形内随机一个点落在圆里的概率通过那个概率我们可以求出PI的值。稍后我们再来更新更多内容直到我们的光照计算模块。在光照模块来临之前同学们需要先看懂概念疯狂的程序员引擎内核基础技术-球面坐标是何物zhuanlan.zhihu.com疯狂的程序员蒙特卡洛方法-最简单的代码zhuanlan.zhihu.com我们核心关注和讨论的领域是引擎的底层技术以及商业化方面的信息可能并不适合初级入门的同学。另外官方维护两个公众号第一个公众号是关于我们企业自身产品的信息与动态的公众号如果对我们自身信息与动态感兴趣的同学可以关注图形之心。我们核心关注和讨论的领域是引擎的底层技术以及商业化方面的信息可能并不适合初级入门的同学。另外官方维护两个公众号第一个公众号是关于我们企业自身产品的信息与动态的公众号如果对我们自身信息与动态感兴趣的同学可以关注图形之心。除此之外我们为了更频繁的发布一些咨询与文章我们维护的第二个公众号是“内核观察”内核观察提供的主要是一些与我们无关的咨询与文章。只言片语无法描绘出整套图形学领域的方方面面只有成体系的知识结构才能够充分理解和掌握一门科学这是艺术。我们已经为你准备好各式各样的内容了东汉书院等你来玩。