海洋个人博客

喜欢自由的飞翔!

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

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

2018-12-07 08:07:47

阅读数 711

评论数 7

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

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

2018-08-16 15:39:57

阅读数 1392

评论数 4

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

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

2018-08-07 16:29:55

阅读数 7062

评论数 6

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

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

2018-05-08 22:04:28

阅读数 2089

评论数 3

图形学渲染算法资料持续更新中

Forward vs Deferred vs Forward+ Rendering with DirectX 11 https://www.3dgep.com/forward-plus/ Fundamentals of Ray Tracing http://www.cosinekitty.c...

2019-01-11 20:57:53

阅读数 253

评论数 3

聊聊引擎底层如何实现Bloom渲染算法

Bloom渲染是游戏中常用的,在Unity和UE4中也有Bloom渲染算法如果我们自己实现Bloom渲染算法,该如何实现呢?网上关于Bloom的实现算法讲述的也比较多,但是我们本篇实现的Bloom渲染算法相对来说比较简单,但是效果也不赖。我们讲述的同样是引擎底层实现的Bloom渲染算法,我们在实现...

2019-01-03 15:39:36

阅读数 405

评论数 1

[译]体素技术介绍

A voxel representation of a scene has spatial data as opposed to the conventional rasterization view (as stored in a render target) which just has a ...

2019-01-01 09:18:04

阅读数 326

评论数 0

聊聊引擎底层如何实现BRDF渲染算法

BRDF作为比较流行的渲染算法,但凡成熟的引擎的都有此功能,我们自己写引擎也不例外,我在编写引擎时也会参考网上的一些资料,这也是学习的过程,先介绍BRDF,它是双向反射分布函数,说白了它是对于物体表面上光的处理,BRDF有很多模型,我们在编写Shader的时候也是基于这些模型。BRDF使用的数学模...

2018-12-29 08:38:58

阅读数 1611

评论数 2

Fog Volume渲染算法实现

由于项目需求,需要实现Fog Volume的效果,查阅了网上资料没有找到相关算法介绍,Unity虽然提供了插件但是效果不是项目想要的,只能自己去写,为了便于日后查阅,写篇博客记录下来,在介绍Fog Volume算法实现之前,先介绍Fog Volume可以实现的效果表现,它可以跟blinn phon...

2018-12-27 21:42:51

阅读数 381

评论数 2

聊聊引擎底层如何实现Forward+Phone渲染

现在的渲染技术由于硬件的提升,算法也得到了极大的改进,Forward,Deferred在成熟引擎中已经得到了广泛的应用,比如Unity,UE4等。下面我们将其应用到我们自己的引擎中,先看看Phone算法。 Phone算法 首先要了解Phone模型算法的作用,它是计算镜面反射光强的模型,它的...

2018-12-21 13:22:08

阅读数 284

评论数 0

聊聊引擎底层如何实现SSAO渲染

SSAO被称为屏幕空间环境光遮蔽,它的原理是:对于铺屏四边形(Screen-filled Quad)上的每一个片段,我们都会根据周边深度值计算一个遮蔽因子(Occlusion Factor)。这个遮蔽因子之后会被用来减少或者抵消片段的环境光照分量。遮蔽因子是通过采集片段周围球型核心(Kernel)...

2018-12-19 09:01:56

阅读数 240

评论数 0

聊聊引擎底层如何实现Deferred延迟渲染

Deferred又称为延迟渲染,它是后处理渲染技术的一种,网上也有相关的定义说明,它主要是采用GBuffer实现的,GBuffer可以存储的信息相比ZBuffer更多,这也是Unity引擎也提供了Deferred渲染,只是在手机端比较耗,所以大部分开发者并不是特别关注,其实它在引擎渲染里面也是非常...

2018-12-17 19:22:48

阅读数 487

评论数 1

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

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

2018-12-15 16:51:21

阅读数 510

评论数 1

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

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

2018-12-08 10:53:43

阅读数 357

评论数 0

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

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

2018-12-03 21:14:45

阅读数 276

评论数 0

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

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

2018-12-01 16:57:24

阅读数 993

评论数 1

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

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

2018-11-23 14:06:11

阅读数 231

评论数 0

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

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

2018-11-07 10:58:47

阅读数 416

评论数 4

D3D渲染技术之混合案例

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

2018-11-05 09:57:01

阅读数 296

评论数 3

D3D12渲染技术之混合

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

2018-10-14 10:12:42

阅读数 379

评论数 0

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