
入门图形学之图形学理论
羊羊2035
deepseek和chatgpt更能让你我进步
展开
-
入门图形学:Deferred Rendering
这一篇来聊一聊Deferred Rendering,中文名延迟渲染。 之前我们简单聊过主机游戏和手机游戏的差别,其中聊到主机图形API全是专用开发的,而专用开发的API具有更好的运行效率。这一点相信写过代码的都理解,通用代码框架和API因为要考虑兼容性,一般都会添加接口层、抽象层,而针对不同硬件(一般情况下只区分硬件构架的不同,例如移动端GPU构架三巨头:PowerVR/Adreno/Mali)就需要派生实现不同的代码分支,同时为了实现最大化兼容性,主体抽象层就需要实现全集AP...原创 2020-09-12 21:53:13 · 871 阅读 · 0 评论 -
C for Graphic:GPU Instancing
最近要实现一下大规模渲染,需要用的GPU Instancing,所以记录一下。 按惯例,上官方:GPUInstancing 首先我们知道渲染流程有三大阶段:应用阶段、几何阶段、光栅阶段。 而渲染绘制的关键瓶颈就是DrawCall,也就是调用一次GPU绘制的过程。需要我们在渲染流程应用阶段“整理”给GPU需要绘制的数据,总共需要CPU调用磁盘/内存IO、总线BUS等,这个过程因为涉及硬件结构和交互多,所以属于耗时的一个操作。常见的优化DrawCall方式有...原创 2020-08-30 20:49:17 · 696 阅读 · 0 评论 -
入门图形学:CommandBuffer
unity提供给我们的commandbuffer可是个好东西,最近我正好用上了,所以来学习理解一下。 unity commandbuffer manual 按惯例先上官方介绍。 command buffer包含一系列渲染命令,类似于opengl的gl.xxx渲染命令函数但也不尽相同,最重要可以渲染开发者指定的object到延迟渲染的gbuffer中,在场景渲染后进行渲染。 那么我们就可以通过command buffer去特定渲染一些物体,特别是在延迟渲染等后处理中操作。...原创 2020-06-07 21:47:36 · 6188 阅读 · 0 评论 -
入门图形学:平直着色和平滑着色
真是在老家关得有点郁闷了,不晓得这疫情什么时候结束。虽然我个人非常喜欢放假,因为有更多时间学习、玩游戏和搞自己的事情。不过这次疫情时间掐得太准了,刚好是放年假回老家拜年的时间,直接把我关在老家四十天,手上除了一台低配笔记本外什么都没有,每天最多的事情就是看下pdf和电影(笔记本屏幕又小、独显也没有、cpu也不行、项目也跑不动、游戏也不能玩)。 不过最近发现一个好玩的建...原创 2020-03-07 16:34:40 · 10201 阅读 · 1 评论 -
入门图形学:HDR
已经三月了,武汉以及湖北的疫情结束还没看到苗头,我已经离开我的开发机和笔纸一个多月了,现在每天在老家农村看看计算机书。 这次我们聊聊HDR,也就是高动态范围(high dynamic range),而什么是动态范围呢?我们先得从颜色说起。 我们找到一张图片,找到一个像素,像素的格式RGB24,意思就是红绿蓝每个参数占用8个字节,那么RGB分量的取值范围...原创 2020-03-01 20:26:11 · 1838 阅读 · 1 评论 -
入门图形学:抗锯齿
抗锯齿(anti-aliasing)这个名词我相信大家都听说过,特别是玩单机游戏挺常见的,如果你和我一样用的一张性能一般般的显卡(虽然我公司开发机是gtx1080,但我家里自用的gtx750ti),偶尔在家玩单机游戏的时候,那个“狗牙”(锯齿)可严重了。 先来说下锯齿如何产生的,锯齿嘛,顾名思义,想像一下链锯的锯条,图片如下: 那么为什么三维引擎中,...原创 2019-11-10 15:00:06 · 6539 阅读 · 1 评论 -
入门图形学:颜色空间
图形学,顾名思义就是给人看的,所以最终呈现在人们眼前的是“观感”,但这个“观感”里面还有些学问。 比如我国庆去海边看日出,五六点起来,看着太阳渐渐从海水水平线升起,可以感受光强逐渐加强的过程,如果把黑暗表示为光强为0,把白昼表示为光强为1,那么太阳逐渐升起,则光强线性的从0到1。什么是“线性”?大家应该理解吧,就是可加性和比例性,如果用函数表示就是: 1.f(a+...原创 2019-11-02 20:55:30 · 640 阅读 · 0 评论 -
入门图形学:透明混合
这一篇是为了继续深入之前透明原理而写,为了更好的理解图形学理论知识,如果不明白透明原理的同学务必返回图形学理论分类去找到透明原理这一篇博客看明白。 以上是前提,那么接下来入正题,我们知道透明其实也就是颜色缓冲区中已存在的片段颜色值ColorFrame和需要覆盖的片段颜色值ColorGenerated进行“混合”计算得到新的片段颜色值ColorFinal,然后Col...原创 2019-07-27 10:25:26 · 1914 阅读 · 0 评论 -
入门图形学:模板缓冲区/模板测试
最近因为家庭原因回老家了,在家里办了两三周杂七杂八的事情后,考虑是否继续去北上广深漂着(不得不说码农就是这个命啊)。家人和朋友让我在老家先呆着再说,于是准备了尝试找下工作。 前两天碰到面试官问了一个问题,就是关于模板缓冲区的原理,我只说了个大概而在细节上就卡壳了,因为我自己项目中实在很少用到这个,所以基本都搞忘了,今天晚上有点时间就回顾一下。 首先贴上这个以...原创 2019-04-06 18:06:30 · 2602 阅读 · 0 评论 -
入门图形学:数据精度
shader开发中,提供了一些预编译指令,可以指定硬件按照规定的条件去运行,比如: #pragma fragmentoption ARB_precision_hint_fastest 这个预编译指令告诉fragment处理时按照fastest去改变数值精度运行,也就是将数值精度降低,提高运行效率。 ARB_precision_hint_fastest 16...原创 2019-06-17 10:21:28 · 758 阅读 · 0 评论 -
入门图形学:渲染队列
请提前查看之前的相关博客:透明原理 要是了解三维图形学中透明原理,也大致知道引擎处理场景渲染是先处理不透明渲染,然后处理透明渲染,根据透明渲染的对象的深度值进行AlphaTest或者AlphaBlend,这种处理也比较符合真实世界的实际情况。但是在三维图形场景中,并不一定是那么的符合真实世界,如以下问题: 1.如果美术创建场景的时候将两面墙壁网格贴近,导致他们在...原创 2019-05-06 15:05:02 · 2282 阅读 · 0 评论 -
入门图形学:透明原理
因为我们后面要大量使用透明效果(或者说透明效果是实现我们需要的着色特效的基础部分),所以这里就来非常通俗详细说一下透明的原理。 先来从最简单易懂的二维层面来讲解。 我猜大家使用最常见的透明效果就是在ui中使用.png(带有透明通道)的sprite吧,我们在ps中通过背景透明的模板文件制作保存的.png图片就是这个了,.png的图片在rgb三通道分量之外还附带一个a...原创 2019-02-27 19:25:43 · 7915 阅读 · 1 评论 -
入门图形学:图形学原理(二)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/79865679 这篇我们了解一下“显示处理器”,也称为GPU,显卡,视觉处理器等等,也就是做图像处理工作的微处理器芯片。我们对显卡应该不陌生,毕竟我们玩游戏都需要购买显卡,那么选购显卡就成了需要考虑的问题,即想价格便宜又想性能高,价格看下标价就行了,性能就不...原创 2018-04-20 10:36:51 · 5624 阅读 · 1 评论 -
入门图形学:图形学原理(三)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/79984729 之前我们了解了计算机图形显示所需要的两个重要硬件(显示器和GPU),现在我们就来学习下到底GPU是怎么把应用数据处理好并输出给显示器进行图形显示的。 目前我们只能浅层次的了解图形显示的这个过程,就跟工厂流水线一样(为什么...原创 2018-05-06 21:32:32 · 4561 阅读 · 1 评论 -
入门图形学:图形学原理(四)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/80015565原创 2018-05-16 14:17:05 · 3195 阅读 · 3 评论 -
入门图形学:光照模型(一)
之前我们了解了渲染管线的流程,基本上知道了一个图形是如何从一串串二进制数据最终变成显示器上的图案的,原创 2018-07-04 14:49:19 · 4930 阅读 · 1 评论 -
入门图形学:光照模型(四)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/80924102 上一篇我们用cg中比较常见的vertex fragment函数去实现了通用光照模型的效果,功能和效果虽然很详细的实现了,但是从代码复用性来讲,不那么友好,这次就按照unity cg编译器的规范去实现一个通用光照模型的函数。 首先为了系统的学习...原创 2018-08-15 18:10:15 · 1905 阅读 · 1 评论 -
入门图形学:光照模型(二)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/80654923 前面我们谈到了光照作用最终表面颜色公式,如下: surfaceColor = emissive + ambient + diffuse + specular; 这篇我们就来看看其中分量的意义。 ...原创 2018-07-04 18:21:41 · 2103 阅读 · 2 评论 -
入门图形学:光照模型(三)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/80912620 之前两篇博客,我们学习了一般光照模型对物体颜色的作用公式,如下:surfaceColor = emissive + ambient + diffuse + specular;这次我们就来实际在图形引擎中...原创 2018-07-05 17:49:32 · 1461 阅读 · 4 评论 -
入门图形学:光照模型(五)
紧接上一篇:https://blog.youkuaiyun.com/yinhun2012/article/details/81061129 之前我们详细的学习了怎么使用unity buildin的标准光照模型,给我们的shader指定这个标准光照模型,然后观察呈现出什么样的效果。 具体做法就是添加一个预编译指令: #pragma surfa...原创 2018-08-21 20:04:46 · 1861 阅读 · 1 评论 -
入门图形学:模板/深度/颜色缓冲区
这一篇来谈一下渲染流程中存在的几个缓冲区。 在日常的cpu程序开发中,缓冲区也就是堆内存区。我做过视频帧的单帧缓存,消息的队列缓存等,都是缓冲区的用法,其主要作用是存储数据后提供对外访问,比如用ffmpeg解码出一帧视频画面并用swscale转为RGB位图数据,储存在一个开辟好大小为width*height*3byte的内存区域中,并提供内存指针供调用者进行mencpy或...原创 2019-02-13 14:27:35 · 4673 阅读 · 0 评论 -
入门图形学:图形学原理(一)
前面我们闲聊谈到作为一个准备长期坚持在研发道路上的程序员,怎么样才能保证自己所学的知识属于持久长存的,而不至于在新老交替的时候淘汰掉。那么什么知识属于保质期长久的呢?其中就谈到了理论,也就是也就是原理,或者说事物的本质。图形学也是遵循其原理衍生而来的,从这里开始我们就来学习理解图形学原理。 这里先说些历史事件,也就是图形学起源。在1950年,第一台图形(阴极射线管CR...原创 2018-04-17 18:25:51 · 27543 阅读 · 5 评论