Pixel World

it's better be burning out than to fade away.

从零实现软渲染(三):Rasterize/绘制三角形

在上一篇文章《窗口系统/viewport》中,通过SDL库我们搭建了一个简易的窗口系统,并通过SDL内置API在屏幕中心绘制了一个矩形来测试RenderLoop。
本章我们将实现自己的渲染器,用它绘制一个三角形。但在开始前,让我们先回顾下渲染的核心概念。

渲染器有两个核心任务:解决可见性着色。解决可见性通常有两种方式:光栅化光追。这两种常用的算法用于解决渲染中的可见性问题, 即找到哪些物体在相机下的视口是可见的.

阅读全文 »

后续文章发布计划

在正式开始本章内容之前,我对专栏后续的更新计划/大纲做了详细梳理,大家可以对整体框架结构及涉及到的知识点有个初步的认识。

在后续的文章更新过程中会基本按照上图框架的内容和顺序逐步展开深入,每一个大的分类代表了渲染系统中的一个组件,正常情况下会做为一篇单独的文章出现,内容过多会拆分为上下两篇(PBR…),另外相对较难或者比较重要的知识点会单独拉出来做为一个专项,预计总共会更新25篇文章左右,从易到难,由浅入深实现整个渲染系统。本系列不涉及图形API,但是shader抽象类会模仿GLSL语言规范的写法和命名方式,使大家有更强的代入感。那么废话不多说,接下来我们正式开始本篇文章的第一个主题:窗口系统的构建。

阅读全文 »

何为软渲染,为什么要学习它

本系列文章将会从零手实现一个mini软渲染器(光栅化), 何谓软渲染? 我们为什么需要学习它? 我们知道复杂的图形渲染一般都是由GPU来处理的,所谓软渲染就是用CPU来模拟GPU的行为,在CPU端完全实现图形的绘制, 这其中包含一系列复杂微妙的过程,但整体上可以将其划分为两个大的模块: 可见性和着色,这其中又包含若干细节:

可见性:

  • 模型变换
  • 视图变换
  • 投影变换
  • 透视除法
  • 视口变换
  • 计算三角形包围盒
  • 三角形光栅化
  • 重心坐标插值
  • 视图变换
  • 深度缓冲
  • 相机模型构建

可见性解决的问题是,对于屏幕上的任意一个像素,场景模型中的哪个片元对它是可见的. 主要通过以下几个步骤完成:

阅读全文 »

截止到目前我们学习了如何将物体拜访到世界空间,如何将三维空间物体投影到二维屏幕上,以及对三角形光栅化,判断哪些像素被三角形所覆盖,接着基于重心坐标对三角形三个顶点插值得到采样点属性,拿到采样点片元的$uv$后可以对纹理采样, 这个过程涉及纹理过滤(双线性插值,最临近采样...)及$Mipmap$等,最后通过深度及透明度将这些片元混合输出到帧缓冲($FrameBuffer$)

阅读全文 »

顶点插值属性不仅仅是颜色值,而是某种可以进行纹理映射的纹理坐标,那么什么是纹理映射?纹理映射一个很好的类比就是包装一份礼物,我有一些彩纸,上面绘制了一些有趣的图案,还有一个平平无奇的立方体,只是一个扁平的盒子,我想把这个有趣的图案放在盒子上,该怎么做呢?把纸包裹在盒子上就行了,这本质上就是纹理映射,将二维图像包裹在三维表面上的方法。

阅读全文 »

本章将开始学习空间变换,空间变换在图形学中有非常广泛的应用,对于深入了解图形学底层有重要意义,特别在光栅化渲染管线中, 我们知道最初输入的顶点坐标都是在对象局部空间的($Local Space$), 需要经过一系列的变换将对象从局部空间变换到世界空间(物体摆放在场景的哪里,物体的相对位置关系),接下来再变换到相机空间(即我们观看的视角,就像拿个相机拍照一样,我们是从哪个角度对场景进行观察的),即$mvp$矩阵中的"$m(model Matrix)$和$v(view Matrix)$".这一系列操作即光栅化渲染管线的第一个阶段,也是理解光栅化背后原理的基础.本章将介绍涉及图形学的基础变换。

阅读全文 »

本系列文章将一步步深入介绍计算机在渲染输出呈现一张图片经历的各种步骤细节以及涉及到的相关其他领域的知识串联,例如:几何,渲染方程, 采样, 蒙特卡洛积分,重要性采样, 辐射度量学, 光照计算, 基于物理的渲染等等.本系列文章不涉及API(openGL directX vulkan 等),皆在带你理解这些API背后的图形学原理,理解图形API函数调用的背后到底在做些什么,有了这些知识做铺垫,可以快速上手API的学习,并且发现bug后也可以快速定位问题所在,而不会被GPU的黑盒搞得一头雾水,因为不同的API虽然架构不同,实现不一,但背后的底层逻辑都是一致的。

阅读全文 »

在计算机图形学中,需要处理多种类型数据,这些数据可能看起来不像一个小箭头,比如多项式,图像,辐射亮度(radiance)等,但它们的行为表现却是和向量一致的,所以这个小箭头仍然是一个有用的思维模式。

阅读全文 »
0%