海洋个人博客

喜欢自由的飞翔!

排序:
默认
按更新时间
按访问量

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

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

2018-12-07 08:07:47

阅读数:112

评论数:4

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

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

2018-08-16 15:39:57

阅读数:796

评论数:4

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

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

2018-08-07 16:29:55

阅读数:2985

评论数:5

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

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

2018-05-08 22:04:28

阅读数:1268

评论数:3

应聘引擎程序需做哪些准备

每个人进入企业都面临面试这一关,不同的职业面试的内容是不同的,即使都是IT游戏行业,也分多个职业,从技术角度讲,有客户端,服务器,引擎程序。它们面试的内容也是不同的,工欲善其事必先利其器,要想进入某个领域必须武装好自己,不打无准备的仗。下面就给读者分享关于面试引擎程序的一点心得。 简历 ...

2018-12-11 07:21:24

阅读数:98

评论数:1

利用运动学实现导弹仿真飞行

利用Unity实现导弹飞行的算法网上案例很多,本篇博客主要给读者介绍如何将所学算法运用到项目开发的实战教程。 我们将使用运动学原理实现仿真,这意味着我们将只在计算中使用速度,而不考虑物体上的质量和其他作用的物理力,这些力会影响物体的运动,比如阻力。为了能够模拟导弹击中目标,我们将考虑以下变量: ...

2018-12-10 14:15:11

阅读数:35

评论数:0

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

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

2018-12-08 10:53:43

阅读数:97

评论数:0

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

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

2018-12-03 21:14:45

阅读数:149

评论数:0

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

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

2018-12-01 16:57:24

阅读数:832

评论数:1

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

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

2018-11-23 14:06:11

阅读数:132

评论数:0

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

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

2018-11-07 10:58:47

阅读数:282

评论数:4

D3D渲染技术之混合案例

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

2018-11-05 09:57:01

阅读数:182

评论数:3

D3D12渲染技术之混合

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

2018-10-14 10:12:42

阅读数:305

评论数:0

D3D12渲染技术之地形和水

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

2018-10-12 13:37:21

阅读数:325

评论数:0

D3D12渲染技术之纹理案例

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

2018-10-11 09:39:08

阅读数:228

评论数:0

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

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

2018-10-10 13:35:38

阅读数:199

评论数:0

D3D1渲染技术之采样

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

2018-10-08 10:07:41

阅读数:201

评论数: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

阅读数:185

评论数:0

D3D12渲染技术之过滤

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

2018-10-05 09:14:28

阅读数:227

评论数:0

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

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

2018-10-04 09:11:49

阅读数:216

评论数:0

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