海洋个人博客

喜欢自由的飞翔!

手把手教你成为Shader编程达人系列概述

最近,很多大型的游戏公司或者虚拟现实公司,都在大量招聘资深的GPU渲染引擎程序员或者引擎主管等。对于从事游戏开发的程序员,尤其是客户端程序员掌握GPU编程非常重要,由于项目分工的缘故,大部分程序员并没有接触到GPU编程,认为GPU编程很高深,在项目开发过程中并不关心,只负责写逻辑,这样会严重阻碍自...

2018-12-07 08:07:47

阅读数:142

评论数:4

手把手教你架构3D引擎高级篇概述

前几年写过一本书《手把手教你架构3D游戏引擎》电子工业出版社,主要内容讲的是固定流水线编程,目的是让读者理解第一代引擎是如何实现的,从本篇博客开始,给读者介绍关于使用可编程流水线自己搭建3D游戏引擎,我将它设为高级篇,我会从查资料学习技术最基本的讲起,教给读者如何一个人搭建一款接近商业的自研引擎,...

2018-08-16 15:39:57

阅读数:818

评论数:4

Unity大场景数据加载及优化方案

前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前提写了这个课程,希望给读者提供一些解决问题的思路。 目前,大地形动态加载已经成为当前游戏开发或者虚拟仿...

2018-08-07 16:29:55

阅读数:3135

评论数:5

学习3D引擎架构技术概述

      近期对3D引擎的架构设计做了一个梳理总结,现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等。很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇到Shader编程以及优化就感到头疼,长此以往对自己技术提升非常不利的。要改变现有的状...

2018-05-08 22:04:28

阅读数:1312

评论数:3

聊聊引擎底层如何编译Shader脚本

由于现在的引擎都比较完善,开发者无需关心引擎底层的技术,只负责写逻辑即可,比如Unity引擎和UE4引擎,它们的出现确实为开发者提供了便利,但是对开发者来说,个人认为并不是好事情,它导致了大部分开发者只能做些没有任何科技含量的东西,请允许我这么说,因为我们只是在如何用好引擎方面大动脑筋,而不是去思...

2018-12-15 16:51:21

阅读数:38

评论数:1

手把手教你成为Shader编程实战达人—GPU

GPU编程市场应用 GPU全称是Graphics Processing Unit,中文成为图形处理器,所以GPU编程也叫图形学编程,它是针对的显卡中的芯片编程,游戏引擎的更新换代发展的一个重要阶段是显卡芯片的出现,引擎的渲染能力得到极大提升。GPU 加速器于 2007 年由 NVIDIA® ...

2018-12-08 10:53:43

阅读数:117

评论数:0

手把手教你架构3D引擎高级篇系列八

本篇博客是给读者介绍引擎底层如何与Lua进行结合,方便开发者直接使用脚本编程,为什么选择Lua,通常开发者会使用Json,XML,txt等等。相比Lua有哪些优点呢? a、除了Lua库,在没有使用其他库可以使用。 b、可以在文件中使用不同的公式,例如:some_variable = math....

2018-12-03 21:14:45

阅读数:167

评论数:0

手把手教你架构3D引擎高级篇系列七

前面封装了数据结构中常用算法,接下来给读者封装一个好用的东西——委托。使用过Unity开发的人知道,我们经常在项目中使用委托,类似我们说的回调。使用C#编写委托,其实质是什么呢?其实就是把委托函数加到一个列表中。我们在实现引擎的委托时,首先要清楚我们的委托面对的是所有类型的,因此很容想到模板。在实...

2018-12-01 16:57:24

阅读数:842

评论数:1

手把手教你架构3D引擎高级篇系列六

前面给读者介绍了哈希表的封装,其实我们实现的是数据结构的算法,

2018-11-23 14:06:11

阅读数:138

评论数:0

手把手教你架构3D引擎高级篇系列五

内存管理给读者介绍完了,其实我们只是简单的用了一个HashTable哈希表对资源做了一个统一管理,哈希表系统有自己的封装,因为我们是自己写引擎,在此我们自己实现了一遍,自己封装的优点是便于控制,缺点是要优化好效率问题。我们的Hash表采用了迭代器的形式,由于该类代码量比较大,在此只把关键的几个函数...

2018-11-07 10:58:47

阅读数:291

评论数:4

D3D渲染技术之混合案例

在本篇内容中,我们将介绍用于获得特定效果的一些混合因子组合, 在这些示例中,我们仅查看RGB混合。 Alpha混合的处理方式类似。 无颜色写入 假设我们想要保持原始目标像素的原样,而不是覆盖它或将其与当前光栅化的源像素混合。 这可能很有用,例如,如果您只想写入深度/模板缓冲区,而不是后台缓冲区...

2018-11-05 09:57:01

阅读数:188

评论数:3

D3D12渲染技术之混合

本篇博客给读者介绍混合,见下图所示, 我们首先绘制地形,然后绘制木箱,然后将地形和板条箱像素放在后面的缓冲区上。 我们使用混合将水面绘制到后面的缓冲区,以便水像素与地形混合,并在后面缓冲区上放置像素,使地形和板条箱通过水显示。 从本篇博客开始,我们将研究混合技术,这些技术允许我们将当前光栅化的像素...

2018-10-14 10:12:42

阅读数:309

评论数:0

D3D12渲染技术之地形和水

在这个案例中,我们为山和水场景添加纹理, 第一个关键问题是我们在地上铺设草纹理, 因为地网格是一个大的表面,如果我们简单地在其上拉伸纹理,那么使用较少的纹理像素将覆盖每个三角形。 换句话说,表面没有足够的纹理分辨率; 我们会得到放大的纹理,因此,我们在地网格上重复草纹理以获得更高的分辨率。 第二个...

2018-10-12 13:37:21

阅读数:339

评论数:0

D3D12渲染技术之纹理案例

我们现在回顾一下将纹理添加到箱子模型上面,就跟以前的博客中提到的那样。下面我们详细介绍如何实现? 指定纹理坐标 GeometryGenerator :: CreateBox生成箱子的纹理坐标,以便将整个纹理图像映射到箱子的每个面上。 为简洁起见,我们仅显示正面,背面和顶面的顶点定义。 另请注意...

2018-10-11 09:39:08

阅读数:232

评论数:0

D3D12渲染技术之在着色器中采样

纹理对象在HLSL中定义,并使用以下语法分配给纹理寄存器: Texture2D gDiffuseMap : register(t0); 这个换成在Unity引擎或者UE4引擎中就是提供的可视化操作界面,而在DX中的表示是按照上面的写法,这样可以通过引擎对其进行赋值操作。 请注意,纹理寄存...

2018-10-10 13:35:38

阅读数:212

评论数:0

D3D1渲染技术之采样

在前面的博客,我们看到除了纹理数据之外,还有两个与使用纹理相关的关键概念:纹理过滤和寻址模式。 采样纹理资源时使用的过滤器和寻址模式由采样器对象定义, 应用程序通常需要多个采样器对象以不同方式对纹理进行采样。 创建采样器 正如我们将在下面看到的,采样器用于着色器, 为了将采样器绑定到着色器以供...

2018-10-08 10:07:41

阅读数:212

评论数:0

D3D12渲染技术之寻址模式

结合常数或线性插值的纹理定义了矢量值函数T(u,v)=(r,g,b,a), 也就是说,给定纹理坐标(u,v)∈[0,1] ,纹理函数T返回颜色(r,g,b,a)。 Direct3D允许我们以四种不同的寻址方式(称为地址模式):wrap,border color,clamp和mirror。 1、w...

2018-10-07 10:19:20

阅读数:190

评论数:0

D3D12渲染技术之过滤

纹理贴图的元素应该被认为是来自连续图像的离散颜色样本,它们不应该被认为是带有区域的矩形。所以问题是:如果我们的纹理坐标(u,v)与其中一个纹素点不一致,会发生什么?这可能发生以下情况。假设播放器放大场景中的墙壁,使墙壁覆盖整个屏幕,例如,假设显示器分辨率为1024×1024,墙壁的纹理分辨率为25...

2018-10-05 09:14:28

阅读数:233

评论数:0

D3D12渲染技术之创建和启用纹理

加载DDS文件 Microsoft提供了轻量级源代码来加载DDS文件: https://github.com/Microsoft/DirectXTK/wiki/DDSTextureLoader 但是,代码仅支持DirectX 11,我们修改了DDSTextureLoader.h / .cpp...

2018-10-04 09:11:49

阅读数:220

评论数:0

D3D12渲染技术之纹理数据源

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

2018-09-30 09:46:07

阅读数:214

评论数:0

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