图形学
文章平均质量分 82
图形学学习和实践
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
-
GAMES202 PCSS软阴影算法细节解析
在LearnOpenGL框架的基础上实现了一遍GAMES202的PCF+PCSS软阴影,之前学习GAMES202时一些没弄清楚的问题顺便搞清楚了。注:本文中代码和shader均在笔者中实现,因此有一些细节可能和GAMES202作业框架不一致,且对202框架中的一些错误进行了修正。原创 2023-02-09 17:34:42 · 1504 阅读 · 0 评论 -
GAMES101笔记:辐射度量学(下)
辐射度量学的重要概念Irradiance和Radiance解析原创 2023-02-01 17:47:29 · 670 阅读 · 0 评论 -
GAMES101笔记:辐射度量学(上)
Radiant Energy 是电磁辐射的能量。单位为“焦耳”,符号为Q。Radiant flux (power)是单位时间内辐射、反射、传输或接受的能量。其实就是功率,单位为瓦特(Watt)W。在光学中,一般使用单位流明(lumen)lm。注意,流明不等于瓦特:所谓的流明(LM)简单来说,就是指蜡烛一烛光在一公尺(1 公尺 = 1 米)以外的所显现出的亮度。一个普通40瓦的白炽灯泡,其发光效率大约是每瓦10流明,因此可以发出400流明的光。原创 2023-02-01 16:50:19 · 1067 阅读 · 0 评论 -
NVidia Maxwell GPU Tile-based 光栅化模式分析
视频所描述的实验,使用一个特定的shader去绘制一组三角形,这些三角形在shader中被设置顶点位置为屏幕的左上角,右上角和左下角。并且可以在Shader中设置三角形数量,全局可绘制的像素的百分比,每个三角形的顶点属性的floats数量,像素格式和采样数。即上图截图中,右下角的从上到下的选项。三角形的颜色是从7个设定好的颜色中选择,相邻三角形是不同的颜色。上图中,是使用了AMD的某个桌面GPU,是传统的立即渲染模式(IMR)。整个实验都绘制12个三角形。原创 2022-11-28 21:27:19 · 1144 阅读 · 0 评论 -
Unity内置管线Projector原理分析
Unity 内置管线的Projector功能Unity内置管理的Projector功能还是比较简单的。首先给投影体加一个 Projector组件:这个Projector定义了一个视锥体,可以是透视投影也可以是平行投影。场景中和这个视锥体相交的物体会绘制投影纹理。所以总的效果就是投影体镜头上的贴图(材质)被绘制在场景物体中,例如上图的两个Plane和一个Cube。投影纹理的原理这儿使用的技术叫做 Projective Texture Mapping,使用这个关键词可以搜索到一篇论文。基本原理是对于原创 2022-04-01 19:38:46 · 7584 阅读 · 0 评论 -
基于Unity的软光栅实现(3):基于Job system的多核加速光栅化
文章目录系列文章导航拥抱CPU多核计算Job System简介ParallelFor Job系列文章导航本系列文章是关于本人的开源项目 URasterizer: A software rasterizer on top of Unity, accelerated by Job system & Compute Shader的总结和介绍,一共四篇。第一篇:基于Unity的软光栅实现(1):框架搭建和矩阵构造第二篇:基于Unity的软光栅实现(2):CPU单线程软光栅第三篇:基于Unity的软原创 2022-03-30 14:50:21 · 4909 阅读 · 2 评论 -
基于Unity的软光栅实现(2):CPU单线程软光栅
文章目录CPURasterizer渲染数据: CPURenderObjectData输入数据中间输出数据缓冲区缓冲区定义清除缓冲区视锥剔除顶点变换图元集成ClippingBackface cullingViewport transform光栅化三角形透视校正插值片段着色MSAA输出到贴图CPURasterizer本篇介绍基于CPU单线程的软光栅渲染器 CPURasterizer。包括数据准备,缓冲区构建,顶点变换,图元集成,光栅化和片段着色,MSAA等内容,基本就是一个完整的光栅化流水线了。渲染数据:原创 2022-03-23 16:00:53 · 2914 阅读 · 0 评论 -
基于Unity的软光栅实现(1):框架搭建和矩阵构造
提纲基于CPU的光栅化实现约定矩阵和变换左手系数据转右手系使用Compute Shader的GPU Driven光栅化实现原创 2022-03-23 00:08:58 · 3372 阅读 · 1 评论 -
GPU架构和Compute Shader线程规划
文章目录GPU多处理器,线程组和线程GPU多处理器,线程组和线程在GPU中有若干多处理器,一个线程组运行于一个多处理器上。为了让原创 2022-03-07 00:36:39 · 4676 阅读 · 1 评论 -
[GAMES101]现代计算机图形学课程总结4:重心坐标,作业2
文章目录重心坐标与三角形内部插值在三角形内部插值为什么要插值哪些属性需要插值如何插值重心坐标:在三角形上使用的一种坐标系统三角形顶点的重心坐标重心坐标的计算:通过三角形面积比重心的重心坐标:重心坐标公式使用重心坐标线性插值作业2总结关于作业框架的一些问题实现三角形栅格化算法以及z-buffer算法测试点是否在三角形内的具体算法:实现MSAA (2x2):首先扩大了深度缓冲和颜色缓冲为原先的4倍,并且建立一个masks缓冲来存储sub pixel是否可见。在rasterize_triangle函数中在draw原创 2022-02-10 23:44:33 · 1718 阅读 · 0 评论 -
[GAMES101]现代计算机图形学课程总结3:Shading
文章目录概要Shading的定义Shading是局部的输入不产生阴影(shading不等于shadow)Blinn-Phong Reflectance Model漫反射 (Diffuse Reflection)光线在所有方向上均匀散射着色点能接受到的光线(能量)的计算角度和距离兰伯特漫反射Shading计算公式高光项 Specular Term (Blinn-Phong)高光强度依赖于视线方向使用half vectorBlinn-Phong高光环境光项漫反射+高光项+环境光项着色频率 Shading Fre原创 2022-02-10 22:46:12 · 761 阅读 · 0 评论 -
[GAMES101]现代计算机图形学课程总结2:光栅化和反走样
文章目录屏幕空间GAMES101的屏幕空间约定标准立方体到屏幕的变换光栅化光栅显示器光栅化Rasterization定义三角形-基础的形状图元,使用三角形的优点采样(Sampling)采样一个函数就是求某个点的函数值采样是图形学的核心概念光栅化是采样2D位置检查屏幕中所有像素太浪费!使用包围盒优化真实显示设备中的光栅化走样和反走样图形学中的采样Artifacts走样(Aliasing)的背后原因反走样(Antialiasing)的方法背后的原理:频域屏幕空间GAMES101的屏幕空间约定原点在屏幕原创 2022-02-05 12:15:25 · 1266 阅读 · 0 评论 -
[GAMES101]现代计算机图形学课程总结1:线性代数和变换,作业1
文章目录向量点积点积性质点积的作用叉积叉积性质使用矩阵表示叉积叉积的作用变换仿射变换关于推导任意空间变换矩阵推导视图变换矩阵推导投影矩阵作业1向量点积点积性质点积的作用计算两个向量的夹角计算一个向量在另一个向量上的投影衡量两个向量方向的接近程度两个单位向量同向时点积为1,反向时为-1,为0时互相垂直。点积大于0时,点积越接近1说明方向越趋于相同。点积小于0,点积越接近-1说明方向越趋向于不同。分解向量在坐标轴上分解向量,只要将向量投影到其中一个坐标轴上,平行向量使用原向量减原创 2022-02-02 00:13:32 · 2132 阅读 · 0 评论 -
GAMES101投影矩阵推导详解和分析
GAMES101投影矩阵推导详解和分析前言GAMES101投影矩阵相关坐标系的约定正交投影矩阵的推导和OpenGL正交投影矩阵的比较正交投影clip space中顶点的w值透视投影矩阵的推导推导透视投影frustum挤压到平行投影视景体的矩阵GAMES101思考题:视景体挤压后z值为(n+f)/2的点会挤向n还是f完整的透视投影矩阵w值和clip space的取值范围前言之前推导过OpenGL的投影矩阵,学了GAMES101之后,发现老师的推导方式很有意思,且GAMES101的坐标系约定和OpenGL不原创 2022-01-17 19:57:18 · 3082 阅读 · 6 评论 -
关于ShadowMap中Shadow acne现象的解释
什么是Shadow acne先看一张图:这张图是我在GAMES202的作业1中,将光源高度调低,从而使得光线入射方向和地面之间夹角比较小,并且不做任何bias处理,从而得到比较明显的shadow acne现象。即左边地面上奇怪的花纹。产生Shadow ance的原因原因其实很简单,简单说,shadow map对于光源空间的深度的采样是离散的,shadow map上每个texel只能记录一个深度值。而计算阴影的平面,比如地面本身是连续的。在传统shadow map的第二个pass中,将任意片段所对应原创 2021-04-12 19:27:40 · 1457 阅读 · 1 评论 -
半透明物体渲染总结
文章目录半透明渲染要解决的问题深度测试解决可见性问题的原理渲染顺序半透明物体不能开启深度写入整体透明(内部不透明)的渲染双面透明渲染混合公式Alpha Test半透明渲染要解决的问题需要将半透明物体按照正确的顺序进行渲染,以便让它们的片元和远处已经绘制到color buffer中的片元颜色进行混合,从而达到半透明的效果。为了完成颜色的正确混合,所有半透明物体应该在不透明物体渲染完成之后进行渲染,且半透明物体之间应该是按照距离camera从远到近渲染。但是物体是若干三角形图元的集合,包含了很多的片元,无法原创 2020-08-04 18:34:53 · 4038 阅读 · 0 评论 -
Gamma Correction & sRGB texture
文章目录显示器gamma值的由来gamma correctionsRGB texture参考资料显示器gamma值的由来gamma correctionsRGB texture参考资料Gamma-Correction原创 2020-06-10 20:55:24 · 875 阅读 · 0 评论 -
法线贴图技术原理与实践
本文讲述了法线贴图技术的原理,切线空间的概念,切线空间和世界空间的转换,计算顶点切线的方法,并给出了在切线空间和世界空间使用法线贴图进行光照的shader例子。原创 2020-06-09 19:00:44 · 1126 阅读 · 1 评论 -
谈一谈3D编程中的矩阵
行主列主,右乘左乘,空间变换,法线变换,shader中矩阵的使用,打好基础才能写好shader原创 2020-05-22 20:53:33 · 2825 阅读 · 1 评论 -
顶点法线计算的几种方式
首先,顶点法线都是从面法线加权平均计算得到。所以有两个维度,一是哪些面参与计算,二是权重如何计算。一 哪些面参与计算如果建模工具导出了光滑组,那么方案一是直接使用光滑组信息,属于同一个光滑组的面参与计算。方案二是同时使用光滑组信息以及面的夹角的阈值。方案三是只使用面的夹角阈值。二 权重如何计算方案一是用三角形面积作为权重方案二是用面的夹角作为权重方案三是同时使用面积和夹角作为权重...原创 2020-02-07 20:43:25 · 5997 阅读 · 0 评论 -
关于四元数的一些误解和问题
(先简单记录一下结论,有时间再完善)四元数可以避免gimbal lock理论上如果只使用四元数,不会有万向锁的问题。但实际上很多时候,还是在使用欧拉角,然后把欧拉角转成四元数,最后四元数再被转换成矩阵,合并到最终的Model2World变换矩阵中。这样并不能避免gimbal lock。因为你操作的旋转还是一系列绕独立轴的旋转的组合,你用欧拉角+矩阵会遇到gimbal lock (证明方法是...原创 2020-02-06 20:33:33 · 1401 阅读 · 0 评论 -
glActiveTexture和glBindTexture的一些理解
在openGL中,存在一系列的texture unit,通过 glActiveTexture激活当前的texture unit,默认的unit是0。而当前的texture unit中存在多个texture target,例如GL_TEXTURE_2D, GL_TEXTURE_CUBEMAP。通过glBindTexture将一个texture object绑定到当前激活的texture unit...原创 2019-05-09 18:53:37 · 4342 阅读 · 1 评论 -
着色模型和光照模型
#着色模型:高洛德着色(Gouraud shading):即基于顶点计算颜色后在渲染的图元内部进行线性插值。当光照模型中有非线性的计算时(如计算高光反射),这种逐顶点的光照就会出问题。另外由于是图元内部线性插值,会导致渲染图元内部的颜色总是暗于顶点处,在某些情况下会产生明显的棱角现象。Phong着色(Phong shading):即在片元上计算颜色,需要对顶点法线进行插值然后进行光照模型的计...原创 2018-11-27 17:30:37 · 1482 阅读 · 1 评论 -
Cubemap应用之反射,折射,菲涅耳反射
cubmap先将场景环境渲染到cubemap中,可以离线渲染,也可以实时渲染。对于静态的效果,离线就可以。离线还可以使用外部资源,如拍摄的全景图生成cubemap。想象cubemap是一个包围在场景外的立方体。通过从场景中心向其发射射线来采样上面的颜色。反射对于反射,想象cubmap上有一个像素发射光线到表面然后反射到眼睛中,为获取这个颜色,需要从视线方向反推出入射光线的方向,即使用视线的...原创 2019-02-20 19:27:46 · 922 阅读 · 0 评论 -
深入理解OpenGL之投影矩阵推导
图形学惯例下的平行投影矩阵推导首先,确定我们使用以下惯例:将视图坐标系中的顶点Pe变换到NDC坐标系中的顶点Pn。视图坐标系使用右手坐标系,NDC也使用右手坐标系。NDC范围为-1<= x <=1, -1<= y <=1, -1<= z <=1NDC和屏幕的对应关系为:x=1的点在屏幕右边, x=-1在左边;y=1在顶部,y=-1在底部;z=1的点距...原创 2019-09-19 20:29:00 · 2852 阅读 · 0 评论 -
图形学基础之透视校正插值
透视校正插值 (Perspective-Correct Interpolation)问题的提出在使用光栅化的图形学方法中,法线,颜色,纹理坐标这些属性通常是绑定在图元的顶点上的。在3D空间中,这些属性值在图元上应该是线性变化的。但是当3D顶点被透视投影到2D屏幕之后,如果在2D投影面上对属性值进行线性插值,其对应的属性在3D空间中确不是线性变化的。如下图所示:图中A,B点被投影到a,b;而...原创 2019-09-15 22:31:14 · 6210 阅读 · 7 评论