自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海洋个人博客

喜欢自由的飞翔!

原创 D3D12渲染技术之纹理数据源

为游戏创建纹理的最流行的方法是让美工在Photoshop或其他图像编辑器中制作它们,然后将它们保存为图像文件,如BMP,DDS,TGA或PNG。 然后游戏应用程序将加载时的图像数据加载到ID3D12Resource对象中, 对于实时图形应用程序,DDS(DirectDraw表面格式)图像文件格式是...

2018-09-30 09:46:07 484 0

原创 D3D12渲染技术之纹理坐标

Direct3D使用纹理坐标系,该坐标系包含一个水平延伸到图像的u轴和一个垂直于图像运行的v轴。 坐标(u,v)使得0≤u,v≤1,识别纹理上称为纹素的元素。 请注意,v轴在“向下”方向上为正(见下图)。 另外,请注意使用的归一化坐标间隔[0,1],因为它为Direct3D提供了与维度无关的范围;...

2018-09-29 09:55:14 576 0

原创 D3D渲染技术之纹理

纹理映射是一种允许我们将图像数据映射到三角形上的技术,从而使我们能够显着增加场景的细节和真实感。 例如,我们可以通过在每一侧绘制板条纹理来构建一个立方体并将其转换为板条箱下图所示。 在这里给读者再回顾一下如何学习纹理技术: 1、要了解如何指定映射到三角形的纹理部分。 2、了解如何创建和启...

2018-09-28 10:56:48 659 0

原创 D3D12渲染技术之光源

灯光有Point光源,Spot光源,Directional光源,Area光源等等,网上这方面的文章很多,在此我们就不详细介绍每个光源的计算公式了,我们直接介绍将光源应用到我们的案例中。先看我们已经实现好的案例截图: 顶点格式 照明计算需要表面法线, 我们在顶点级别定义法线; 然后在三角形的...

2018-09-27 17:58:08 402 0

原创 D3D12渲染技术之向量法线

面法线是描述多边形面向的方向的单位矢量(即,它与多边形上的所有点正交); 表面法线是与表面上的点的切平面正交的单位矢量; 观察表面法线确定表面上的点“朝向”的方向。上面说的两点分别见下图所示: (a)面部法线与面部上的所有点正交。 (b)表面法线是与表面上的点的切平面正交的矢量。 对于...

2018-09-25 09:51:14 450 0

原创 D3D12渲染技术之灯光

灯光在引擎中占用重要地位,引擎没有灯光就是漆黑一片,见下图,左边我们有一个没有照明的球体,在右边,我们有一个点亮的球体。 正如你所看到的,左边的球体看起来很平坦 - 也许它根本不是一个球体,而只是一个2D圆圈! 另一方面,右边的球体确实看起来是3D - 照明和阴影有助于我们对物体的固体形状和体积的...

2018-09-24 10:29:38 341 0

原创 D3D12渲染技术之网格地形

本篇博客我们将展示一个案例, 该案例实现在程序上构造三角形网格,通过偏移顶点高度以创建地形。 此外,使用另一个三角形网格来表示水,并设置顶点高度的动画以创建波浪。 此案例还切换到使用根描述符作为常量缓冲区,这允许我们放弃对CBV的描述符堆的支持。 我们用函数y = f(x,z)实现表面,...

2018-09-23 16:14:58 446 0

原创 D3D12渲染技术之根签名

我们在前面的博客中介绍了根签名, 根签名定义在发出绘制调用之前需要将哪些资源绑定到管道以及这些资源如何映射到着色器输入寄存器, 需要绑定哪些资源取决于当前着色器程序所期望的资源, 创建PSO时,将验证根签名和着色器程序组合。 根参数 回想一下,根签名是由一组根参数定义的, 到目...

2018-09-22 14:27:58 843 0

原创 D3D12渲染技术之形状几何

在本篇博客中,我们将展示如何为椭圆体,球体,圆柱体和圆锥体创建几何体。 这些形状对于绘制天空圆顶,调试,可视化碰撞检测和延迟渲染非常有用。 例如,我们可能希望将所有游戏角色渲染为调试测试的球体。 我们将过程几何生成代码放在GeometryGenerator类(GeometryGenerator...

2018-09-21 13:46:45 328 0

原创 D3D12渲染技术之渲染

绘制对象需要设置多个参数,例如绑定顶点和索引缓冲区,绑定对象常量,设置基元类型以及指定DrawIndexedInstanced参数。 当我们开始在场景中绘制更多对象时,创建一个存储绘制对象所需数据的轻量级结构会很有帮助。 这些数据因应用程序而异,因为我们添加了需要不同绘图数据的新功能。 我们将提交...

2018-09-20 14:39:53 445 0

原创 D3D12渲染技术之帧资源

在前面博客中,我们要让CPU和GPU并行工作, CPU构建并提交命令列表(除了其他CPU工作之外),GPU处理命令队列中的命令, 目标是让CPU和GPU忙碌,以充分利用系统上可用的硬件资源。 到目前为止,在我们的演示中,我们已经每帧同步CPU和GPU一次, 为什么这是必要的两个例子是: 1、在...

2018-09-19 09:10:07 441 0

原创 D3D12渲染技术之几何辅助结构

我们绘制一个立方体需要一组顶点和索引,将顶点和索引缓冲区组合在一起可以定义一组几何图形的结构, 此外,该结构的顶点和索引数据是在系统内存中的,以便CPU可以读取它, CPU需要访问几何数据以进行拾取和碰撞检测。 每当我们定义几何时,我们使用以下MeshGeometry(在d3dUtil.h中定义)...

2018-09-18 09:30:12 295 0

原创 D3D12渲染技术之光栅化与管道

光栅化状态 虽然渲染管道的许多部分都是可编程的,但某些部分只是可配置的。 由D3D12_RASTERIZER_DESC结构表示的光栅化器状态组用于配置渲染管道的光栅化阶段: typedef struct D3D12_RASTERIZER_DESC { D3D12_FILL_MODE FillM...

2018-09-17 13:42:22 276 0

原创 D3D12渲染技术之编译Shader

很多人只知道写Shader,但是并不了解DX或者OpenGL是如何编译Shader的,我们写的Shader是一种文本文件,它可以被DX或者OpenGL读取,说明它们提供了接口编译Shader。3D引擎都与DX或者OpenGL相关的,本篇博客就给读者介绍如何编译Shader的。 在Direct3D...

2018-09-17 08:48:47 1224 0

原创 D3D12渲染技术之常量缓冲区

常量缓冲区是GPU资源(ID3D12Resource)的示例,其数据内容可以在着色器程序中引用。 正如我们将在博客中学到的,纹理和其他类型的缓冲区资源也可以在着色器程序中引用。顶点着色器具有以下代码: cbuffer cbPerObject : register(b0) { float4...

2018-09-16 13:45:56 1316 0

原创 D3D12渲染技术之像素着色器

再介绍一下片段着色器,在光栅化期间,从顶点着色器(或几何着色器)输出的顶点属性在三角形的像素上进行插值。 然后将插值作为输入,输入到像素着色器。 假设没有几何着色器,下图说明了到目前为止顶点数据的路径。 每个顶点元素都有一个由D3D12_INPUT_ELEMENT_DESC数组指定的相关语义...

2018-09-15 13:03:56 331 0

原创 谈谈程序员如何快速提升职业技能

IT行业有很多分支:AI,大数据,区块链,游戏等等,其中游戏开发由于Unity引擎的普及入门门槛很低,收入相对来说比较高,导致了大量的应届毕业生或者说其他IT行业的人转到游戏开发中,游戏开发涉及到的技术也是很多的,其中包括很多算法:四叉树,八叉树,Bezier,A* 算法,人工智能,行为树,高斯,...

2018-09-15 10:45:40 3004 0

原创 D3D12渲染技术之顶点着色器

相信大家以前用过D3D9的或是编写过Shader的对顶点着色器都比较了解,现在我们回顾一下: cbuffer cbPerObject : register(b0) { float4x4 gWorldViewProj; }; void VS(float3 iPosL : POSITIO...

2018-09-14 08:34:52 487 1

原创 D3D12渲染技术之绘制网格

在前几篇博客中,我们主要关注渲染管道的概念和数学方面。 反过来,从本篇博客开始重点介绍配置渲染管道,定义顶点和像素着色器以及将几何图形提交到渲染管道以进行绘制所需的Direct3D API接口和方法。 学习配置渲染管道,对于学习Unity的自定义渲染管线有很大帮助,它们的原理类似的,做到举一反三。...

2018-09-13 13:48:25 904 2

原创 手把手教你架构3D引擎高级篇系列四

第三方库已经完成,接下来我们要考虑引擎架构的事情了,架构一款从无到有的引擎,从哪里下手呢?面对架构一款比较庞大的引擎,建议先从引擎的内存管理入手,因为内存是跟硬件相关的,它也是引擎的心脏,处理不好,引擎会经常崩溃的。还有因为引擎的代码量比较大,这里只把核心的代码给读者展示,如果全部展示信息量太庞大...

2018-09-12 10:39:29 734 0

原创 手把手教你架构3D引擎高级篇系列三

Unity对于开发者来说是一个黑盒子,开发者只需掌握引擎提供的脚本语言,能够熟练运用就可以了,这导致了现在很多程序员对于C++编程或者说对于引擎只会一些表面的东西,深入的一概不知。久而久之,你就只是一个脚本程序员,你能做的事情别人也能做,对于公司来说你就属于可有可无的,薪资方面不会有大的长进,随时...

2018-09-11 14:55:41 1749 1

原创 D3D12渲染技术之渲染管线

渲染管线指的是基于虚拟相机看到的内容生成2D图像所需的整个步骤序列,在博客D3D12渲染技术概述中介绍过渲染管线,本篇博客具体讲解各个模块的作用,先看下图所示: Input Assembler Stage 上图中Input Assembler Stage表示的是从存储器读取几何数据(顶...

2018-09-10 09:12:43 522 0

原创 手把手教你架构3D引擎高级篇系列二

系列一给读者介绍了我们查阅的相关资料,下面我们需要选择引擎的渲染库了,在这里先谈谈我对引擎的学习: 上图是我做项目用过的或者说自学所用到的引擎,我刚开始接触引擎是在读研究生的时候,是实验室自研的引擎,是为项目开发定制的,功能现在来说是比较陋的,后来我先接触的是Ogre引擎,利用它也做过一些小...

2018-09-10 09:03:44 1088 0

原创 手把手教你架构3D引擎高级篇系列一

最近一段时间事情比较多,从本篇博客开始,我手把手教大家如何开发一款类似商业引擎Unity的开发,我们在这里要阅读学习一些编写引擎的知识,编写引擎之前,我们需要安装Visual Studio VS2017,Windows操作系统是64位的,编程语言是C++,我们的引擎会使用比如Lua,C#都可以使用...

2018-09-09 08:23:54 5010 4

原创 Unity大密度建筑场景加载解决方案

现在虚拟城市仿真,以及军事仿真项目越来越多,开发此类项目,首先面对的一个比较棘手的问题是内存管理,城市中的建筑物特别多,这些建筑物的面数和贴图都要被加到内存中的,内存有自己的峰值,超过了就要崩掉,所以内存的优化是必须要面对以及解决的问题。 Unity官方提供了Occlusion Culling的...

2018-09-07 09:41:09 6143 2

原创 Unity移动端软阴影技术总结

在移动端实现阴影技术可以提升画面品质,我们说的实时阴影也成为软阴影,鉴于移动端硬件的限制,一些复杂的算法比如PSSM,CSM等不可能在移动端去实时,我们只能找一种捷径,既能把实时阴影实现出来,效率还要正常运行。本篇博客把市面上比较流行的在移动端运行的算法或者阴影插件给读者汇总一下,以便读者在项目开...

2018-09-06 08:17:03 4189 0

原创 D3D渲染技术之简易框架

在上一篇博客中,我们介绍了D3D12初始化流程实现过程,本篇博客我们搭建一个简易的迷你型小框架用于实现我们的初始化流程,在游戏编程中,我们都需要定时器的封装,比如骨骼动画需要,联网也需要定期判断是否短线,断线后多久开始重连,帧的时间间隔等等,可见时间定时器是很重要的,在这里我们未雨绸缪也实现一个定...

2018-09-04 16:52:05 1380 4

提示
确定要删除当前文章?
取消 删除