计算机图形学
文章平均质量分 68
目竞
起承转合
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
补坑:基于2D贴图的3D噪声——偏移(37,17)
shadertoy的iq常用的用于实时渲染的,基于2D贴图的3D noise原创 2022-01-11 12:12:31 · 2847 阅读 · 0 评论 -
最简理解空间线段与球相交判断
输入:线段两端点 Vector3 a,b;球心和半径 Vector3 center; float r;输出:是否相交 bool isIntersect;1.判断线段所在直线与球相交直线距离球心最短距都大于r,不相交;否则进入下一步判断。(记录垂足P,供后续判断使用)2.判断端点是否在球内两点任意一点在球内,相交;否则,继续下一步3.判断两端点是否在垂足同侧两点在垂足两端(前面已经判断不在球内),且直线距离已经小于r,那必然相交;否则必然不交代码:.原创 2022-01-07 17:07:51 · 1802 阅读 · 0 评论 -
直角坐标系转球坐标系 Equirectangular 理解 代码 Unity
起IBL相关,得到dir后需要从HDR图采样,但HDR图是Equirectangular Map,所以需要将dir转球坐标系(得到经纬)再转UV。从定义到实现都有很多约定俗成的东西,记录一下。承由于代码实现需要固定phi的范围。发现需要按符号分类处理,分类其实挺麻烦的。于是到网上找“标准”做法。 这里不能用数学上的标准arctan函数,得改造一下用atan2,它长这样:幸好,hlsl实现了atan2。所以代码是://x: phi [0,2PI)//y...原创 2021-12-02 18:30:17 · 2732 阅读 · 3 评论 -
最简理解空间三角形中线与边的交点
接之前最简理解空间射线与平面交点的场景。获得射线打在三角形上的交点(之后称为“打点”)后,假设三角形为p1,p2,p3,打点为c,想求直线p1c和p2p3的交点。转化为射线与p2p3的法平面交点,于是可以套用同一公式,一个式子算出来。法平面法线通过p2p3和三角面法线n cross获得。...原创 2021-11-29 12:06:19 · 2371 阅读 · 0 评论 -
看图说话:《教团1886》大量使用的SG预光照技术
想要减少PBR中高光的计算量。但不管怎样优化,总要一个函数去画这个高光形状吧。SG(球面高斯)是最简单能模拟高光lobe的函数之一,拥有很多良好性质,而且实现简单。二维SG也可近似pow(x,n0),用于加速静态pow。都是从Sébastien Lagarde里看来的。不知道和SebastianLague是不是同一个人,后者的UTube视频极棒又风趣。PS:图里的PPT也是我做的,无侵犯。...原创 2021-09-24 17:47:51 · 338 阅读 · 0 评论 -
大白话理解:BRDF,皮肤渲染
白话关键词:BRDF 预积分皮肤LUT 曲率起最近搞了皮肤渲染相关。链接1:SIGGRAPH 2011- Pre-Integrated Skin Shading链接2:无LUT皮肤积分优化承1.计算一个微表面出射光时,公式为:2.有多个入射光,我们看一个微表面时,颜色也是多个出射光的合成。3.所以公式应该为一个积分:4.这样搞就太复杂,单看一方向的光5.之所以还有积分项,是因为一个入射光,还是有多个出射光。6.这个积分项,说白了,就是对于某种表面,..原创 2021-08-15 21:32:38 · 1087 阅读 · 0 评论 -
ParticleToy开坑:离线物理+光追渲染引擎
起前阵子又去油管上看了看正经的navier stokes方程解析。发现所谓的正经公式也就是那些微观离散的简单法则给“正经化”,“连续化”。我终于意识到,我以前去看所谓微分方程公开课,根本就是阻碍我去真正理解这些东西的拦路虎。都是很简单的东西,“哪有那么复杂”——《一一》。今天是初二,没有事情做,结合最近一阵子总是鼓捣Houdini和Niagara的工作经历,还有看各种siggraph的视频,我意识到Particle这种思维方式,才是最简单有效,也是最接近真理的。自从去年7月份进了S公司以原创 2021-02-13 11:30:36 · 773 阅读 · 1 评论 -
Chango的数学Shader世界(二十三)漩涡Shader-复数分析(深渊)
目的:我的2D游戏,需要一个有特定感觉的“漩涡shader”。上一节里,我简单实现了这个:但转动有些乏味,它的转动动作是类似这样的:(网图)接下来想让它动起来更加深邃,恐怖。本文先搞了2种效果:(图3,扩散瞳孔)(图4,深渊)抽象分析:前篇的Shader效果之所以看起来乏味,是因为在旋转的时候,像素点的极长(以方块中心为原点极坐标系)并没有改变,只是越接近中心,点的旋转量越小而已。(旋转前后点都在同心圆上)如果我想要深渊有“吃人”的感觉,那么内部的原创 2020-05-10 16:51:09 · 727 阅读 · 0 评论 -
Chango的数学Shader世界(二十二)漩涡Shader-初成品
目的:在自己的引擎中,在实现漩涡Shader和正确贴到场景上后,发现漩涡效果还是不对,需要修正。原图:错误版:修正:分析1.渲染漩涡的时候没用透明混合那加上这个功能。实际就是把GL相关Blend函数封装进引擎:void DrawCall::BeginDo(){ auto blend = material_->blendType_; if (blend == Blend_Alpha) { glBlendFunc(GL_SRC_ALPHA, GL_原创 2020-05-10 12:18:57 · 671 阅读 · 0 评论 -
彻底了解渲染流程,drawcall,material,materialInstance:自己写个引擎(一)
目的:接SDL_Image,d3d9与OpenGL Shader混用方法(一)的”结果“。在OpenGL+SDL2的环境下实现能采用不同shader的图片。为实现此目标,已经基本脱离SDL,到了自己写引擎的地步。在自己实现GL引擎的过程中,对渲染流程,drawcall,material和materialInstance有了更为深刻的体会,在此分享一下。(图1:背景图使用不断...原创 2020-05-05 14:20:13 · 1131 阅读 · 0 评论 -
Chango的数学Shader世界(二十一)漩涡Shader
目的:瓦滴2D游戏需要一个深渊效果,想着就用漩涡效果先试试。在SDL+OpenGL的开发环境下,实现一个类似这样的漩涡效果。(图片来源于:https://www.cnblogs.com/joeshifu/p/5489761.html)简单的漩涡效果没什么难点,主要是记录一下OpenGL涉及Shader方面的基础知识。不过纯理论上可以深究的东西还是挺多的(类似之前的细线...原创 2020-03-15 21:46:07 · 589 阅读 · 0 评论 -
Chango的数学可视化(二) 向量场:梯度,散度,拉普拉斯
起因:在没有看梁昌洪老师的公开课之前,对向量场知识一无所知,碰到泊松融合,泊松重建的文章时非常痛苦。现在将知识慢慢补起来,并用程序可视化,一来巩固知识,二来了解离散化形式和其实际中遇到的问题。目的:从Poisson Surface Reconstruction一文得到启发。先模拟一个包含目标点云的数量场,使得模型点云的数量值为1,其他为0。通过对此数量场进行一次梯度算子,得...原创 2019-11-24 16:39:25 · 2623 阅读 · 0 评论 -
Chango的数学可视化(一) 开篇
这一系列是使用各种工具(主要是游戏引擎),对数学概念的一些可视化。因为个人秉承实事求是的原则,所以保证这些可视化都是从实际项目和论文中引申出来,而不是纯粹“为数学而数学”。目录:Chango的数学可视化(二) 向量场:梯度,散度,拉普拉斯...原创 2019-11-24 15:27:01 · 390 阅读 · 0 评论 -
ORB-SLAM2稠密点云重建:双目室外[0]
由于ORB-SLAM2双目的稠密点云重建与RGBD的稠密重建大同小异,而且很多代码通用。所以建议朋友们可以先看一下我之前的ORB-SLAM2稠密点云重建:RGBD室内。这里先提一下总体思路。由于利用RGBD的框架去做,所以对于双目来说,最主要的就是得到其视差图,然后利用双目的其中1张(你也可以试试用两张,我选择左图)作为rgb图,将视差图得出左图深度信息。这样就通用起来了。也许你会担心ORB-...原创 2018-01-22 15:23:35 · 9965 阅读 · 5 评论 -
Chango的数学Shader世界(十五)油画Shader-技术分析,教程纠错
目的:实现油画后期Shader,探究教程中技术细节,指出错误。参考:搜索ue4 paint filter。UE4.21后整合自定义usf观察:油画的特点:成块的色块,但又保持清晰的边缘。分析:1.先来看一种比较“差”的油画实现先看下外网上的一种简单油画算法。注意这位大师是怎么处理木头纹理的。还有后边黑方块上的纹理是多么残缺。有些边...原创 2019-09-16 15:05:40 · 1008 阅读 · 0 评论 -
Chango的数学Shader世界(十六)RayTrace三维分形(一)—— ue4中最简单的RayMarch
目的:最近接触一些分形Shader。自己实现了一个2D fbm,感觉很好看。然后又看到人家三维的分形,看起来很棒,心里痒痒。影视大作和网上一堆令人惊叹的分形艺术,我也不再多说了。本篇旨在对在ue4中实现分形的第一步,RayTrace和RayMarch加以具体解释,然后给出一个最简单的RayMarch材质,便于读者扩展。(RayMarch一个球形“云”)参考...原创 2019-09-21 23:34:23 · 1524 阅读 · 0 评论 -
Chango的数学Shader世界(十七)RayTrace三维分形(二)—— Julia Set造型
目的:移植Inigo Quilez的可视化三维Julia的算法到ue4。本篇仅考虑造型,忽略表面法线计算和光照模型等。忽略分形相关细节数学原理。参考:最近墙越来越高,我也没法放链接了。1.Inigo Quilez在ShaderToy上的Julia,网址后缀MsfGRr2.维度:数学漫步第一季的复数(下)3.Ray Tracing Quaternion Ju...原创 2019-09-22 12:26:13 · 694 阅读 · 0 评论 -
Chango的数学Shader世界(十八)RayTrace三维分形(三)—— 完善,距离场软阴影
目的:移植Inigo Quilez的可视化三维Julia的算法到ue4。本篇注重完善造型后模型表面的光照,软阴影。参考:1.Inigo Quilez在ShaderToy上的Julia,网址后缀MsfGRr2.之前我讨论简单的Fresnel:Chango的数学Shader世界(七)观察:将上节的基本造型和Inigo Quilez的Julia对比(麦芽糖好想...原创 2019-09-23 15:23:39 · 736 阅读 · 0 评论 -
Chango的数学Shader世界(十九)RayMarch云层(一) —— 造型,优化
目的:在ue4中RayMarch云层效果。本篇只考虑云层造型。参考:1.IQ在shadertoy上的Clouds和其引用https://www.shadertoy.com/view/XslGRrhttps://www.shadertoy.com/view/4sfGzS2.shadertoy上的Simplex3dhttps://www.shadertoy.c...原创 2019-09-27 13:53:32 · 1773 阅读 · 2 评论 -
Chango的数学Shader世界(十四)细线间断,发光闪烁,TAA削弱处理
目的:减少游戏中的细线因屏幕分辨率不足和算法采样不足问题,导致的间断,以及相对的自发光闪烁。解决了此问题也附带解决了因TAA导致的细线自发光微弱的问题。对比视频:https://www.bilibili.com/video/av67438336参考:无,原创。外网UE4 AnswerHub有类似问题,但无正确的解决方案。观察:方块的边缘线条材质,是根据UV坐标判定的...原创 2019-09-15 13:30:39 · 2739 阅读 · 0 评论 -
【转载】Sobel算子的数学原理:城市距离,4方向插值
以前推导Laplace的时候大意了,以为Sobel算子的(1,2,1)(1,-2,1)也是二阶导。最近回看发现并不对,根本找不出Sobel的数学原理...找好久终于找到个似乎正确的:http://wap.sciencenet.cn/home.php?mod=space&mobile=1&do=blog&id=1139187&id=1139187#_motw_...转载 2019-09-14 15:43:44 · 695 阅读 · 0 评论 -
UE4 究极难搞半透明顺序:双半透+双面+凹模型
问题描述:一个一面被挤入的凹体,嵌入了一个小正方体其材质是半透明双面的。如果什么都不做,那么依据ue4引擎的逻辑,半透明渲染顺序上出现了问题。其实说难搞也是我标题党,和一般的海面船的解决办法差不多。只不过由于小正方体也是双面透明,多了一下步骤。问题表现:更详细的视频链接。其实本质上就是引擎判断渲染先后顺序出了问题。该红面在前的没有在前,所以渲染出了草绿色;仅根据...原创 2019-08-31 17:05:40 · 12842 阅读 · 1 评论 -
Chango的数学Shader世界(二)水波模拟
目的:推导出一个水波Shader,先造型,再考虑表面材质。本篇考虑造型。参考:《GPU Gems》引言:我该怎样看待数学与Shader的关系呢?我有一个答案,那就是把数学看作你的朋友/工具,了解它的每一部分,在特效需求的每一步中你都能敏感地发现它的影子。比如,我怎么用拼图拼成一个房子呢?从那个尖角的特征中,你立刻想到了你的好朋友三角形,然后你发现正方形+三角形,...原创 2019-07-10 16:40:43 · 1559 阅读 · 0 评论 -
Chango的数学Shader世界(五)水波模拟-那平静又汹涌的海面:叠加,Gerstner波
目的:根据前篇的水波Shader,优化成一个不透明的,适合广阔海域的Shader,以解决前篇Shader的一些缺陷。参考:《GPU Gems》引言:对于我们之前的初步可用品Shader,可以从不同方面进行改造,适用于不同需求下的水面。接下来几篇着重于造型上的改造,适用于不透明水面,如深邃广阔的大海。思路:回想起前篇结尾我们谈论到的当前Shader的不足之处:...原创 2019-07-13 10:49:45 · 1822 阅读 · 0 评论 -
ORB-SLAM2稠密点云重建:双目室外[2]
接上一篇.上一篇中,看起来我们基本完成了重建。但是有很多问题:问题1:如果你真正跑起来(00数据集),你会发现点云没有正确拼接。这是点云化的部分有问题。 问题2:跑起来,你会发现很乱,除了问题1,还有是因为y方向剪裁不够,即还有很多天空像天花板一样贴在了顶上,所以从上面看是看不到道路的。 问题3:乱的原因除了问题1,2,还有是因为z方向剪裁仍然不够。实际操作发现超过一小段距离点云就开始...原创 2018-01-23 10:33:33 · 4023 阅读 · 1 评论 -
ORB-SLAM2稠密点云重建:双目室外[1]
接上一篇.步骤4:读取每帧位姿信息,初始化点云类似之前的RGBD,先在XCTool.h中加入XCKITTIKey类读取每帧信息:class XCKITTIKey {public: double r00, r01, r02, r10, r11, r12, r20, r21, r22; double tx, ty, tz;};在此要解释一下,输出文件的格式与之前RGBD的不一...原创 2018-01-22 16:19:59 · 4735 阅读 · 5 评论 -
ORB-SLAM2稠密点云重建:RGBD室内[2]
接上一篇。步骤8:从rgb图和d图初始化点云,然后滤波(可选) cout << "Initing...\n"; //初始化点云 vector<PointCloud::Ptr> pcVec; for (int i = 0; i < keyVec.size(); i++) { FRAME tframe; tframe.rgb = cv::imr...原创 2018-01-22 14:02:32 · 6173 阅读 · 10 评论 -
ORB-SLAM2稠密点云重建:RGBD室内[1]
接上一篇.步骤2:了解PCL在PCL文档中简单了解其基本用法和工具。我在其官方教程中学习并使用了PCL的一些滤波工具。步骤3:准备工作首先,根据ORB-SLAM2的git主页,安装好ORB-SLAM2(注意openCV"干净"安装,即如果你要重装openCV,要完整卸载之前版本,具体百度),选择你的数据集跑RGB-D的例子。此时可以得到KeyFrameTrajectory.txt。...原创 2018-01-22 11:46:19 · 6641 阅读 · 3 评论 -
ORB-SLAM2稠密点云重建:RGBD室内[0]
众所周知,ORB-SLAM2可以基于特征点的得到稀疏点云:然而,有时我们需要稠密点云。不知道怎么做?我会在博客中分别介绍:1.基于ORB-SLAM2的RGBD稠密点云重建(多用于室内)2.基于ORB-SLAM2的双目稠密点云重建(多用于室外)注意!:这里的“重建”并没有改变使用的特征点等行为,对原来的ORB-SLAM2没有进行任何改造,只是利用其输出信息与原始图片进行场景重建而...原创 2018-01-22 10:35:30 · 8821 阅读 · 0 评论 -
ShaderToy解析:Minimal ray tracer 光线追踪
原地址:https://www.shadertoy.com/view/XsSSWW这次号称"最小"的ray tracer,但整体不如上篇。代码没有上篇易读。但仍有一些新东西值得我这个初学者学习。1.AAbox怎么Ray。再利用一下线代知识,普通box应该也可以ray。2.反射系数,Schlick approximation。3.Tone mapping。简单来说由于各种原因y=...原创 2019-02-20 18:35:38 · 572 阅读 · 0 评论 -
Chango的数学Shader世界(一)开篇
目的:我打算写一系列教程,关于数学和Shader。先用UE4实现,其他引擎如有读者需要再考虑。目录:Chango的数学Shader世界(二)水波模拟Chango的数学Shader世界(三)水波模拟,法线,切线空间Chango的数学Shader世界(四)水波模拟,优化,初步可用品Chango的数学Shader世界(五)水波模拟-那平静又汹涌的海面:叠加,Gerstner波...原创 2019-07-10 13:28:57 · 710 阅读 · 0 评论 -
Chango的数学Shader世界(三)水波模拟,法线,切线空间
目的:推导出一个水波Shader。本篇考虑造型后的法线修正。参考:《GPU Gems》引言:上一篇我们已经实现了水波Shader的造型,但法线其实有问题。乍看起来还好,因为自身模型产生的阴影,给出了比较好的立体感。(你应该知道常规游戏引擎渲染中,光照和阴影是分开生成的)。但是,当我把模型自身产生的阴影关掉对比旁边平面的反光,我意识到模型的法线在每个顶点处都是和平...原创 2019-07-10 20:10:34 · 1153 阅读 · 1 评论 -
Chango的数学Shader世界(六)水波模拟-不透明海面终版:力所不能及
目的:基于前篇的海面Shader,试图解决Gestner波目前波长固定问题。然后研究一下表面材质以及光照,添加细节。对于当前Shader未做到的事情,进行总结。参考:《GPU Gems》,UE4水面教材工程思路与步骤:1.Gestner波长固定我尝试了很多种方法,最终勉强能看,但还是不够自然,这里就不放出方案了,主要反思。问题出在哪?1.未精确定位问题2.未...原创 2019-07-15 14:48:24 · 821 阅读 · 0 评论 -
Chango的数学Shader世界(十)流体模拟-有限微分形式
目的:参考《GPU Gems》,在UE4中尝试重现2D流体模拟。本节解释连续函数下梯度,散度等各概念在离散情况下的形式。参考:《GPU Gems》观察:分析:1.梯度(数量场)连续:离散:不妨认为两个像素之间距离差为,以此在2D空间上构造x-y坐标系。并且在空间中的位置为推导:记得连续函数中,设函数P(x),求其在x...原创 2019-07-28 15:54:38 · 687 阅读 · 0 评论 -
Chango的数学Shader世界(九)流体模拟-散度,梯度,二阶导与拉普拉斯
目的:参考《GPU Gems》,在UE4中尝试重现2D流体模拟。本节试图结合场论知识粗略理解Navier–Stokes equations。参考:《GPU Gems》观察:水中染料流体制作MV(《花样年华》 梁朝伟)《GPU Gems》中的Navier–Stokes equations描述了一个流体的4部分运动:平流项:烟随着速度场向上升压力项:烟碰...原创 2019-07-27 21:33:01 · 1400 阅读 · 0 评论 -
Chango的数学Shader世界(十二)流体模拟-丑陋的现实之平流,投影算子
目的:参考《GPU Gems》,尝试重现2D流体模拟。本节用UE4实现平流和投影算子部分。并对实际碰到的问题与论文的差距作分析。参考:《GPU Gems》观察:经过实践观察,我发现两个问题:1.速度场的复杂度决定了模拟的流动有多好看,但复杂又无散的速度场我不知道怎么搞。2.对染料浓度进行无散处理(上节的投影算子)没有任何意义,结果也很奇怪。但对速度场...原创 2019-08-01 14:56:03 · 877 阅读 · 0 评论 -
Chango的数学Shader世界(十三)流体模拟-Laplace扩散,Nyquist定理
在知乎专栏Grfx.IO看到了他使用纯蓝图和材质蓝图实现的流体模拟,非常棒。思考后,我意识到我的不足在于1.物理基础不足没能充分理解泊松压力方程2.参考文章老旧虽然是同一篇文章,但我的版本老旧,差别还比较大3.畏难心理从一开始就没有引入鼠标互动,导致最后也很难改成鼠标互动,显得很鸡肋————————————————————————目的:在前篇Shader基础...原创 2019-08-04 14:21:46 · 1008 阅读 · 3 评论 -
Chango的数学Shader世界(十一)流体模拟-Helmholtz分解,边界,场性质
目的:参考《GPU Gems》,尝试重现2D流体模拟。本节解释文中对上上节Navier–Stokes equations的变形,及需要变形的原因,导出最终算法的结构。参考:《GPU Gems》观察:Why so serious分析:1.边界归于实际,我们的这些场是要应用在一个有限的2D区域上的,不妨称此区域为D。一般来说,只有在其边界上处处可微...原创 2019-07-29 14:23:01 · 2563 阅读 · 1 评论 -
Chango的数学Shader世界(七)水波模拟-透明水面,菲涅尔(Fresnel)效应
目的:解析,改进,批评一个国外免费透明水面Shader,进一步了解Shader背后的物理原理。参考:菲涅尔反射分析:我将原水面Shader一再简化,从中抽取最主要的部分,忽略细枝末节,并改掉缺陷,指出不足。简化版:1.造型其中,顶点偏移,也就是波的造型,是用贴图制造的,一目了然:就是一张高度图经过4方向扰动,乘以波高度。然后它再乘上顶点法线在世界坐标...原创 2019-07-16 16:04:10 · 2784 阅读 · 0 评论 -
Chango的数学Shader世界(四)水波模拟,优化,初步可用品
目的:推导出一个水波Shader。本篇基于前篇Shader,进行部分优化,成为初步可用品。(仅参考复制玻璃表面材质,之后博文再分析。本篇仅考虑造型函数上的优化)参考:《GPU Gems》引言:我们之前已经完成了简单水波的造型和法线计算。这一节我们让它动起来,并暴露出一些常用变量,比如水波方向,水波速度等。并要求当我们随意移动和旋转模型时,整体表现还能正常。最后简单参考复制玻...原创 2019-07-11 20:50:05 · 562 阅读 · 2 评论
分享