Games101(图形学基础)
文章平均质量分 75
Games101整套课程的学习笔记,包括学习笔记,拓展内容,代码实现,环境配置,以及实现中的问题和解决方案
Elsa的迷弟
在珠海西山居、北京点点互动实习过。
目前在北京点点互动实习。
展开
-
Games101,作业7(微表面模型)
微表面模型微表面模型属于材质方面,因此需要修改材质类Material.hpp。本片文章补充了https://blog.csdn.net/qq_36242312/article/details/116307626?spm=1001.2014.3001.5502博客中的一些细节。BRFD已知:入射方向wiwiwi出射方向wowowo法线NNN求:光线反射的(RGB)反射率frf_rfr。微表面模型的BRFD基于物理的渲染(PBR)fs=D∗G∗F4∗(n⃗⋅l⃗)∗(n⃗⋅v⃗原创 2022-01-27 15:11:25 · 2561 阅读 · 7 评论 -
Games101,作业7(多线程提速)
多线程多线程的相关信息可根据我的另一个blog查看。多线程处理提速方式将像素width*height分隔为多份,每一份交给一个线程处理。分隔方式有:网格分隔(代码中使用了这种分隔方式)条形分隔(每一列 或 每一行 为一个线程,更利于编程)线程代码输入为线程需要操作的像素区间。x∈[min_x,max_x],y∈[min_y,max_y]。对于网状分隔方式,m横线移动时,数值是连续的,故只需要在纵向移动时初始化m的值。std::lock_guard<std::mutex>原创 2022-01-21 22:02:53 · 813 阅读 · 2 评论 -
Games101,作业7(模板分析)
该博客只分析较难理解的函数和用途,以及程序运行方式,简单的函数不再赘述。首先,我们将从程序运行的流程来理解代码框架。之后再按照代码文件来分析整个框架的构造思路。程序流程(main函数进入)构造Scene类(构造场景)Scene scene(784, 784);Scene参数: int width = 1280; int height = 960; double fov = 40; Vector3f backgroundColor = Vector3f(0.原创 2022-01-18 21:51:57 · 889 阅读 · 0 评论 -
Games101,作业7(作业代码分析)
需要编写的函数Vector3f Scene::castRay(const Ray &ray, int depth) const输入为一个光线,一个深度。1.求出该光线与场景的交点Intersection inter = intersect(ray);该函数调用Intersection Scene::intersect(const Ray &ray) const{ return this->bvh->Intersect(ray);}调用场景bvh类中原创 2022-01-18 12:20:37 · 1630 阅读 · 4 评论 -
Games101 Lecture16 Ray Tracing 4笔记
原创 2022-01-14 11:27:09 · 168 阅读 · 0 评论 -
games101,Lecture18(现代计算机)
现代渲染双向路径追踪(BDPT)相同采样数,有更好的效果(对于光线不好被捕捉的情况),但实现难度很大,运行速度会慢很多。Metropolis Light Transport(MLT)Metropolis光线传播markov链被积函数和pdf同形时variance最小(适合做复杂的,困难的光路传播,但很难估计什么时候收敛,所有操作都是局部的,不适合做动画,因为上一帧和这一帧图像会很抖)光子映射适合用来渲染聚焦的光线。和很困难的路径SDS(Specular-Diffuse-Specular原创 2022-01-06 00:30:03 · 306 阅读 · 0 评论 -
Games101,Lectrue17
漫反射材质frf_rfr为漫反射的BRDF,p为漫反射率为(0~1之间)。抛光金属透明材质(玻璃,水)反射角度计算光的反射系数与角度之间的关系绝缘体s,p为偏振光,红线为平均值。导体级化的光的反射率计算公式这个公式太复杂,可以用简单的曲线来拟合拟合曲线公式基于物理的材质(微表面材质)从远处看是材质,从近处看是几何。用微表面的法线分布来表示物体表面的粗糙程度。Fresnel term :反映某个角度上反射的强度(上面提到的)。shadowing-maskin原创 2022-01-02 02:03:53 · 447 阅读 · 0 评论 -
games101,作业6
配置环境修改为c++17。C/C++ -> 预处理器 -> 预处理器定义 添加 _CRT_SECURE_NO_WARNINGS。在main函数MeshTriangle bunny("./models/bunny/bunny.obj");处修改路径为项目图片路径(这里将../修改为了./)配置引用代码Render() in Renderer.cpp在框架中已经给出了x,y的求解 // generate primary ray directionfloat x = (2 * (i原创 2021-12-22 02:22:09 · 719 阅读 · 3 评论 -
games101,作业5(whitted-style光线追踪)
任务你需要修改的函数是:Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光线,然后调用函数 castRay() 来得到颜色,最后将颜色存储在帧缓冲区的相应像素中。Triangle.hpp 中的 rayTriangleIntersect(): v0, v1, v2 是三角形的三个顶点,orig 是光线的起点,dir 是光线单位化的方向向量。tnear, u, v 是你需要使用我们课上推导的 Moller-Trumbore 算法来更新的参数。说明第一个函数需要我原创 2021-12-20 23:20:18 · 2215 阅读 · 3 评论 -
Games101 Lecture15 Ray Tracing3笔记
该章总结BRDF模型,这是一种基于物理的分析模型,创建的光照模型效果较好BRDF的理解基于物理着色:BRDF微分立体角含义:在某个三维方向上,θ和Φ各移动一个微小位移。则这个微小位移所包含的表面积可近似为微分立体角即为微分角所包含的表面积除以r的平方即:irradiance(power per unit area)辐射度: 单位面积(垂直于光线)上的辐射通量单位瓦特/平方米注意若某个面与光线不垂直,则需要将该面变为与光线垂直投影面。(与我们处理漫反射相似)irradi原创 2021-11-18 00:16:22 · 713 阅读 · 0 评论 -
Games101,Lecture14(通过包围盒分隔三角形)
宣布GTC(GPU technology conference)GPU科学会议。news:DLSS 2.0(Deep Learning Super Sampling) : 将720的图拉成4K的图,并且不模糊,效果还很好。(深度学习超级采样)https://zhuanlan.zhihu.com/p/116211994GPU要求:所有RTX GUPRXTGI (RTX全局光照)https://developer.nvidia.com/rtxgi如今的一些颠覆性技术对未来的发展原创 2021-12-19 18:38:56 · 384 阅读 · 0 评论 -
Games101,Lecture 13(光线与物体求交,引入包围盒)
光线追踪光线追踪更多的用于离线应用。因为一帧一般需要一万个CPU小时。原理由摄像机发出感应光线,判断与物体相交的点是否可以与。光源连线(无遮挡物)。如何判断光线与物体有交点,是管线追踪中最难的部分(我认为)。光线与物体求交1.与隐式表示的曲面求交通过 光线方程 与 曲面方程求解 是否有根 判断光线与曲面是否有交点。2、与显式表面(三角形)求交补充:可以通过光线与三角形求交,还可以判断光线是否在三角形内。光线与三角形求交可以分解成两个物体:光线与平面相交判定交点是否在三角形内原创 2021-12-19 16:03:16 · 752 阅读 · 0 评论 -
Games101,Lecture 12(网格细分,网格简化)
Loop细分首先在每个三角形的三条边的中点添加顶点对每一个新顶点加权平均(38∗(A+B)+18∗(C+D){3 \over8} *(A + B) + {1 \over8}*(C+D)83∗(A+B)+81∗(C+D))。更新旧的顶点(源三角形顶点)定义某个旧顶点的度为n。定义u为加权系数。(u约小表示旧的顶点的变化程度越小)。更新顶点坐标=(1−n∗u)∗原顶点坐标+u∗周围旧顶点坐标之和(n个)更新顶点坐标 = (1-n*u)*原顶点坐标 + u*周围旧顶点坐标之和(n个)更新原创 2021-12-18 16:41:14 · 712 阅读 · 0 评论 -
games101,lecture11(obj文件)
OBJ这里的obj是一个文本文件,和编译生成的obj文件是不一样的。更多详解https://blog.csdn.net/shenshen211/article/details/51740988/添加链接描述https://www.jianshu.com/p/f7f3e7b6ebf5添加链接描述OBJ文件 – 基本结构(引自百度百科)OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以一个“井”号(#)为开头转载 2021-12-18 15:06:36 · 135 阅读 · 0 评论 -
games101,作业4
最简单的作业,没有之一。De Casteljau 算法(德卡斯特里奥算法)一个很简单的递归算法。数学子领域数值分析中的德卡斯特里奥算法(De Casteljau’s algorithm),以发明者保尔·德·卡斯特里奥命名,是计算伯恩斯坦形式的多项式或贝济埃曲线的递归方法。虽然对于大部分的体系结构,该算法和直接方法相比较慢,但它在数值上更为稳定。代码bezier函数控制每一个t参数。recursive_bezier函数对每一个t递归计算t点的坐标。cv::Point2f recursive_原创 2021-12-18 14:30:15 · 340 阅读 · 0 评论 -
games101,Lecture9(Texture Mapping)
纹理分级映射,三线性插值,各向异性纹理映射。原创 2021-12-14 15:58:19 · 424 阅读 · 0 评论 -
games101,作业3
games101 作业3 任务1.1. 配置环境2. 任务(代码分析,框架解释,运行错误的解决)3. 运行结果原创 2021-12-11 23:47:52 · 2336 阅读 · 3 评论 -
games101 Lecture 9 线性插值(对三角形内部的线性插值)
线性插值,games101,重心坐标。原创 2021-12-10 22:09:09 · 1227 阅读 · 0 评论 -
games101,作业2
需要补充的函数rasterize_triangle(): 执行三角形栅格化算法static bool insideTriangle(): 测试点是否在三角形内。你可以修改此函 数的定义,这意味着,你可以按照自己的方式更新返回类型或函数参数。判断点是否在三角形内若三角形ABC中有一点p,则AP x AB, BP x BC,CP x CA三个向量的叉乘方向相同。若在平面上,则两向量叉乘方向平行z轴,为正为负取决于屏幕坐标向内为正为负。代码Eigen::Vector2f p; p <&原创 2021-12-06 21:12:03 · 574 阅读 · 0 评论 -
games101,作业1
正交变换左边是缩放变换,右边是平移变换对图形进行正交变换需要:先平移再缩放但是做矩阵乘法时,先相乘的矩阵放在右边,后相乘的矩阵放在左边。视口平移(Translate)M_ortho_trans << 1, 0, 0, -(r + l) / 2, 0, 1, 0, -(t + b) / 2, 0, 0, 1, -(zNear + zFar) / 2, 0, 0, 0, 1;视口原创 2021-12-01 22:18:13 · 741 阅读 · 0 评论 -
games101课程作业,在Vs2019环境下的配置环境(不使用虚拟机)
为什么不使用虚拟机因为虚拟机使用ubuntu x64版本系统,是一个从未接触过的系统 ,不好使用。虚拟机中无法使用中文输入法,无法对代码进行注释,不利于学习。虚拟机性能差,打开两三个文件就卡,令人抓狂!!!要使用终端进行编译,很是麻烦,还是喜欢集成开发环境的方便。(点击即运行@-@)。。。。。Vs2019环境下搭建的内容Eigen库opencv库Eigen库在官网下载Eigne库的zip格式。解压到指定路径(自己指定)打开VS2019配置,项目 -> 选择属性 -&g原创 2021-11-30 21:30:02 · 6576 阅读 · 2 评论