图形学
_DavidWang_
计算机硕士,全国信标委虚拟现实与增强现实标准工作组成员(CNITSC)、中国增强现实核心技术产业联盟成员(CARA)、华为HDE(Huawei Developer Experts)、Unity UVP(Unity Valuable Professional)、CSDN博客专家,主编国家级团体标准1项,参与国家级标准编写1项,授权和在审发明专利十余项,软件著作权若干。专注图形学/XR开发,著有《基于Unity的ARCore开发实战详细讲解》、《AR开发权威指南-AR Foundation》、《ARKit原生开发入门精粹》、《HoloLens2开发入门精要-基于Unity和MRTTK》等书籍6本。
展开
-
噪 声
噪 声一. 噪声定义 从物理学的角度来看:噪声是发声体做无规则振动时发出的声音。在图形学中,我们把各种妨碍人们对其信息接受的因素称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。由此看来,噪声是百无一用了,确实,因为噪声的出现,让图像原创 2017-07-15 10:27:32 · 5959 阅读 · 8 评论 -
Introduction to 3D Game Programming with Directx12 Chapter6
(一)、前言 相比Introduction to Directx11,Introduction to Directx12由于页面的问题(目前已经是900余页),删除了Terrain Rendering、Particle System and StreamOut、Meshes、Displacement Mapping相关内容。因为Directx12底层架构的巨大变化,因此,很多章节都重新进...原创 2018-04-02 23:11:00 · 1155 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter8
(一)、习题解答1、EXERCISE1 本习题中,我们只需要对light的strength进行修改即可,需要注意的是,光照强度不能为负,因此我们需要将sin后的strength值映射到[0,1]范围内。mMainPassCB.Lights[0].Strength = { sin(gt.TotalTime()) / 2 + 0.5f ,0.0f,0.0f}; 作者注:图中...原创 2018-04-10 20:10:12 · 292 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter13
(一)、习题答案1、EXERCISE1 本题与向量相加类似,但我们先需要构建一个模在[1,10]之间的向量,利用Computer shader来计算其模并输出到文件中,结果如下:length:(5.51851)length:(8.07565)length:(5.9656)length:(8.82879)length:(9.11016)length:(8.8439)...原创 2018-04-22 12:45:33 · 434 阅读 · 0 评论 -
Directx12 曲面细分详解
(一),曲面细分 曲面细分(Tessellation)。最初由ATI开发,主要目的是用来细化模型,精细化场景表现,微软将其采纳后加入DirectX 11,成为DirectX 11的组成部分之一,Directx12自然也是包含这部分技术。这种技术广泛的应用在曲面的几何处理上,但这种技术也可以用在其他诸如模型构建、平滑处理等领域。 这张图直观的展示了曲面细分的一个重要能力--细化模型,...原创 2018-04-22 12:46:54 · 2990 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter10
(一)、习题答案1、EXERCISE1 本习题主要是对融合方式的学习,如设置如下则结果是将源像素与目标像素相乘: transparencyBlendDesc.SrcBlend = D3D12_BLEND_ZERO; transparencyBlendDesc.DestBlend = D3D12_BLEND_SRC_COLOR; transparencyBle...原创 2018-04-18 21:37:49 · 287 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter11
(一)、习题答案1、EXERCISE3 本习题是模拟不使用stencil的情况下物体会绘制到反射面的后面,但是我们启用了深度测试,因此深度测试是有效的。 2、EXERCISE4 本习题是在不启用stencil计数时会导致的Bouble Blending。这会导致局部阴影被多次绘制出现黑斑。 3、EXERCISE5 这是第一种情况下绘制的场景,反射的骷髅浮在...原创 2018-04-19 22:33:36 · 388 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter12
(一)、习题答案1、EXERCISE1 本题中,我们需要先构建一个circle,然后将其扩展为一个无盖无底的圆柱。本题需要手动创建一个circle。结果如下: 2、EXERCISE2 本题是对一个二十面体进行细分的考察,这里我们使用几何着色器来完成(也可以使用曲面细分着色器来完成),通过距离来控制细分程度。 3、EXERCISE3 本题我们只要将三角形沿法向方...原创 2018-04-21 21:15:39 · 1041 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter14
(一)、习题答案1、EXERCISE1 本题只需要要对控制点进行处理即可,效果一样。 2、EXERCISE2 本题需要根据距离对二十面体进行细分。结果如下: 3、EXERCISE3/4 习题3与习题4请参阅前文 《Directx12 曲面细分详解》6、EXERCISE6 通过设置控制点的值,可以方便的控制生成的曲面的形状,这也是贝塞尔曲线曲面得以大规...原创 2018-05-03 22:31:12 · 299 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter15
(一)、常见操作 摄像机操作是最基本的操作,在摄像机操作中,有些专用名词这里一并归纳如下: Strafe:左右侧行 Picth:摄像机围绕right上下旋转,即上下打量,也叫俯仰角。 Rotate:摄像机围绕up左右旋转,即左右打量,也叫偏航角(yaw)。 Walk:前进后退。 Roll:摄像机围绕look旋转,即翻滚,也叫翻滚角。(二)、习题答案1、E...原创 2018-05-06 22:10:05 · 255 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter16
(一)、习题答案1、EXERCISE1 用Bounding spheres 替换 Bounding boxes 本章其他习题均为数学题,不赘述。(二)、源码下载本章习题解答源码下载 源码...原创 2018-05-13 20:37:03 · 242 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter17
(一)、习题答案1、EXERCISE1 使用 Bounding sphere 替换 AABB 使用Octrees来管理游戏场景是一种常见的加速策略,网上类似例子很多。(二)、源码下载本章习题解答源码下载 习题源码...原创 2018-05-16 21:51:47 · 488 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter18
(一)、习题答案1、EXERCISE1 查看不同的FresnelR0,Roughness对光线和反射产生的影响,并使圆柱体跟立方体反射周围环境,如下图所示。 2、EXERCISE2 需要利用texassembel工具生成cubemap,结果如下图所示: 3、EXERCISE3 利用snell折射定率来处理折射问题。 eta=0.9 etq=0.95...原创 2018-06-20 21:49:00 · 419 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter19
(一)、习题答案1、EXERCISE1 习题1不赘述,效果如下: 2、EXERCISE1 习题2不赘述,效果如下: 3、EXERCISE4 习题4不赘述,本题需要将视线、光照向量从世界坐标系转换到法向贴图所在的切线坐标系。效果如下: 4、EXERCISE5 习题5按使用两张高度图、两张法向贴图做叠加,需要注意的是,在叠加时高度图的平铺数要与法向贴图...原创 2018-06-24 20:21:12 · 285 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12系列小结
Introduction to 3D Game Programming with DirectX系列书箱对DirectX技术的学习推广起到了非常大的作用,从原理到实践、从数学到物理、从渲染管线到常见技术思路都进行了比较深入的讲解,是难得的DirectX学习资料。DirectX12是Directx系列API的最新迭代,其出现代表了微软在图形硬件处理上的最新成果,也在一定程度上代表了未来图形处理的...原创 2018-07-01 23:18:05 · 3768 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter20
(一)、习题答案1、EXERCISE1 使用投影纹理模拟投影机效果,如下: 2、EXERCISE2 使用截断纹理地址寻址模式,本习题结果如下: 3、EXERCISE3 使用聚光灯,本习题结果如下: 4、EXERCISE4 使用透视投影,效果如下: 5、EXERCISE5 越大的阴影图尺寸,效果越精细,越小的阴影图尺寸,效果越粗糙,如...原创 2018-06-26 19:44:34 · 429 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter9
(一)、习题答案1、EXERCISE1 本习题是基本练习,直接上图 point filter linear filter mirror clamp border2、EXERCISE2 本习题主要是熟悉mipmap。 3、EXERCISE3 本习题需要同时向GPU传递两张纹理,然后在HLSL中采样两张纹理并进行分量乘运算。 4、...原创 2018-04-14 16:38:17 · 397 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter7
(一)、习题解答1、EXERCISE1 CreateGeosphere()方法是先构造一个20面体,然后再在20面体的基础上进行CPU曲面细分,通过细分来达到逐步精细化模型的目的。这种曲面细分方法占用CPU资源,在细分精度增加时对CPU是比较大的压力,后面我们将看到,从Directx11开始,微软提供了利用GPU来加速的方法。 Subdivision 0 Subdivisio...原创 2018-04-08 19:39:50 · 369 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 0
(一)Directx12现状 从Directx9.0以来,DirectX的第一次版本升级都牵动业内及整个游戏世界的脉搏,也给人们很多希望和期许。自2015年到现在,Directx12伴随WIN10发布已经有三年时间,WIN10应该是得到了认可,而伴随WIN10而来的重大更新的Directx12却显得不那么风光。之前,微软给Directx12的最大卖点是性能的巨大提升,而两年来的游戏产品却给出...原创 2018-03-29 22:17:43 · 861 阅读 · 1 评论 -
Perlin noise(一)
Perlin noise(一)一、分形噪声 分形几何学的基本思想是:客观事物具有自相似的层次结构,局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,称为自相似性。客观自然界中许多事物,具有自相似的“层次”结构,在理想情况下,甚至分形分形至具有无穷层次。适当的放大或缩小事物的几何尺寸,整个结构并不改变。不少复杂的物理现象,背后就是反映着这类层次结构的分形几何学。分形思想的提出让我原创 2017-08-02 14:48:45 · 6332 阅读 · 8 评论 -
Perlin noise(三)
Perlin noise(三) 前文学习了1D、2D Perlin噪声的生成算法,本文将更进一步,学习3D、4D Perlin噪声的生成。我们不仅需要2D的噪声面纹理,也需要3D的体纹理(后面将进一步学习),同时,我们可以利用3D体纹理来生成2D动态面纹理,也可以利用4D的超纹理来生成3D的动态体纹理,这就是我们为什么要学习4D Perlin噪声的原因。4D Perlin噪声的生成需要用到超晶格的原创 2017-08-15 21:39:00 · 5610 阅读 · 0 评论 -
Perlin noise(二)
Perlin noise(二) 通过前面两篇文章,我们现在对噪声已经有了初步的了解,对Perlin噪声生成原理也进行了阐述,现在是时候开始学习噪声生成了,即将进入程序纹理这个神秘而又让人觊觎的国度了。(一)、1D Perlin Noise 前面我们是以2D Perlin 噪声来讲解Perlin噪声的原理的,对于1D Perlin噪声,我们首先要明白,1D Perlin噪声就是点,通过插值我们可以原创 2017-08-10 21:16:39 · 2607 阅读 · 3 评论 -
Perlin Noise变种及无缝纹理生成
一、Perlin Noise变种 通过前面几篇文章,我们已经成功实现了1D,2D,3D,4D Perlin 噪声,Perlin噪声实现不是很复杂,但是我们也应该注意到,随着维度的增多,实现的复杂度也在大幅度增加,包括permutation表的检索和插值都会变得越来越难以控制,而且性能瓶颈表现得也是越来越明显。当然,我们平时很少用到超过4D以上的Perlin噪声,事情还不没有想象的那么困难。在Ke原创 2017-09-24 08:48:32 · 7015 阅读 · 0 评论 -
Value Noise(一)
Value noise(值噪声)原本应该放在噪声系列开篇来讲,因为Value噪声起到一个承上启下的作用(承白噪声,启Perlin噪声),同时因为学习难度低,可以为Perlin噪声学习铺路。但之前我们已经学习了Perlin噪声了,现在反过来学习Value噪声感觉有些本末倒置,但没有Value噪声,本系统又显得不够完整,所以我们还是将他写出来,同时我们将更加深入的理解噪声,学习一些高级的知识点。一、再议原创 2017-11-07 23:09:07 · 2030 阅读 · 0 评论 -
Value Noise(二)
一、Value Noise 1D 根据之前学习的Value 噪声原理,我们分步来实现之。但在这之前,我们还有一些准备工作要做,如之前所说的,Value噪声是将随机值赋于晶格点,然后根据输入点所处晶格,对随机值进行线性插值而得到噪声值,所以,我们首先初始化一个晶格顶点值数组,并将各顶点的随机值保存在顶点上,在实施中,我们初始化了一个长度512的float数组保存我们的晶格顶点随机值,即我们完成了如下原创 2017-11-08 21:34:36 · 939 阅读 · 0 评论 -
Worley Noise(一)
一、Worley噪声原理 (细胞噪声)Cell Noise,常用来模拟细胞类有孔纹理,是一种基于NORONI图的噪声生成算法,1996年,在Siggraph96上,Steven Worley发表的论文《A Cellular Texture Basis Function》提出了一种用于实现cellular texture方法,能有有限的资源时间内快速生成Cell噪声,因此Cell噪声也常被称为Wor原创 2017-10-29 17:44:37 · 4541 阅读 · 4 评论 -
Worley Noise(二)
根据前文所述,Worley噪声代码实现比较简单,我们着重讲解一下2D噪声的算法,3D、4D实现基本一致,不作详细描述。一、Worley Noise 2D实现 还是与以前一样,我们分步来实现Worley噪声,根据前文步骤,Worley噪声实现共分六步: 第一步、确定输入点所在的晶胞 这与Perlin噪声确定输入点所在晶格是一样的,代码如下: int evalCubeX原创 2017-10-29 19:38:20 · 2695 阅读 · 0 评论 -
Simplex Noise (三)
一、3D Simplex Noise 在学习完2D Simplex 噪声之后,3D Simplex噪声实现就很简单了,按照之前学习的,我们还是按照分步的方法来实现3D Simplex 噪声。(一)、坐标变换(Coordinate skewing)。 根据变换公式,我们可以很容易的实现顶点在单形与其对应的正超晶格之间进行变换,不再赘述,代码如下: double F3 = 1.原创 2017-10-27 21:49:51 · 3150 阅读 · 2 评论 -
Simplex Noise(一)
一、Simplex Noise优势 通过前面我们的学习,知道Perlin噪声的算法复杂度为O(2^n),生成噪声维度越高,计算复杂性增长越快,同时,在实现时对Permutation表的操作也越复杂,插值运算也越多,代码操作时难度也越来越大。正是因为如此,2001年,ken perlin对Perlin噪声进行了改进,希望凭借新的理论解决高维度的噪声生成计算量的问题,克服了Perlin噪声的很多缺点原创 2017-09-26 19:57:32 · 9275 阅读 · 0 评论 -
Worley Noise (三)
一、不同距离算法下的Worley变种 在前面学习中,我们学过三个图形学中常用的距离量算方法(欧几里得距离(euclidean Distance),曼哈顿距离(Manhattan Distance),切比雪夫距离(Chebyshev Distance)),在Worley噪声生成算法中,也使用了距离量算,因此很自然就会用三种不同的Worley变种算法,下图展示了采用不同距离量算方法生成的噪声。原创 2017-11-02 21:01:31 · 1478 阅读 · 0 评论 -
Simplex Noise(二)
一、2D Simplex Noise 这次我们不打算从1D做起而是直接从2D Simplex Noise做起,不是因为Simplex Noise不能实现1D噪声,而是应用中2D、3D、4D用得更多一些。从前面的学习中,我们将Simplex Noise生成算法分成四个步骤,本文将继续采用这种分步实现的模式。(一)、坐标变换(Coordinate skewing)。 根据变换公式,我们可以很容易的实原创 2017-10-25 21:46:11 · 1881 阅读 · 0 评论 -
程序纹理小结
程序纹理(Procedural texture)在国外研究得比较早目前发展也比较靠前,然而国内在这块的研究却还是非常有限,甚至我在搜索引擎上都找不到程序纹理的词条,相关的资料也是非常之缺乏,而且大多是为了解决应用问题,真正吃透原理并加以改进的资料更罕见,这也是我写本系列的初衷,希望后来之人能在我的基础上做些更深入的基础研究,而不仅仅是知其然。一、程序纹理 在计算机图形学中,程序纹理通常是指使用原创 2017-11-15 22:00:32 · 3959 阅读 · 0 评论 -
Voronoi Noise
一、Voronoi Noise 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家Georgy Fedoseevich Voronoi建立的空间分割算法,其空间划分思想来源于笛卡尔用凸域分割空间理论,也就是说,Voronoi图实际是一种空间划分方法,这种划分方法解决了这样一个问题:如何根据已知点划分空间,使得晶胞与点一一对应原创 2017-11-14 21:40:35 · 3210 阅读 · 0 评论 -
程序纹理应用之静态纹理生成
自然界的自然现象均是连续的,如山脉、花纹、烟雾、流水;自然界又是分形的,宏观与微观具有几何相似性;自然界的自然现象还具有流畅的变化特征。用传统的图形学来描绘一些自然现象,如火焰、流水、烟雾,存在很大的难度,一方面是需要大量的纹理,另一方面还需要复杂的运算,导致模拟得不像不真。而利用噪声函数来模拟却可以很好的达到效果,甚至是用粒子系统也无法达到的效果。目前使用得最广的是粒子系统,还有细胞自动机和基于物原创 2017-12-05 16:59:26 · 3342 阅读 · 0 评论 -
Introduction to 3D Game Programming with Directx12 Chapter21
(一)、习题答案1、EXERCISE1 游戏场景管理一直是游戏优化非常重要的一个方面,对场景管理有很多空间数据算法,如KD-Trees,Quadtrees,Octrees。本习题我们重点采用八叉树来对场景进行管理和检测加速。在本习题中,我们将实现本章前面部分采用的Ray-Cast方法来实现环境光遮挡。为方便比较,我们将有光照,无光照(只有环境光),采用环境光遮挡方法所实现的效果对比如...原创 2018-06-27 21:56:12 · 430 阅读 · 0 评论