如何写一个软渲染(1)-Set Up

如何写一个软渲染(1)-Set Up

前言

本来想用英文做标题-How to write a soft renderer——但是发现字数超了。

算是填两年前的坑?

当时是在 @易恺铭 的建议下开始写这个东西的,然而当时是只画出来了一个带纹理的Box就草草弃坑了。今年开始,觉得有必要再完善一下这个东西,所以又慢慢开始重新启动这个项目。由于工作的项目比较紧张,所以只能平时生挤出一些时间来完成这个,断断续续又是半年多。


一些渲染的截图

什么是软渲染?

这个软应该是相对于GPU绘制而言。除了使用系统提供的

DrawPixel(int x, int y, Color c)

之外,所有的逻辑都在CPU完成(或者输出到一张贴图上)。

知乎的热贴可以翻翻 - 如何开始用 C++ 写一个光栅化渲染器?


为什写软渲染?

彻底搞明白基于栅格化的Rendering Pipeline。

其实想搞明白Rendering Pipeline有很多中方式:

网上搜搜,找点资料看看 - 新手

从美术建模工具导出个模型到Uniy里瞅瞅 - 中级

从美术建模工具导出个模型到自己写的OpenGL/DX的程序里瞅瞅 - 困难

从美术建模工具导出个模型到自己写的软渲染里瞅瞅 - 炼狱

唯一的缺点-容易弃坑。


写到什么程度?

加载sponza场景并显示。

这一系列文章会从浅入深讲解软渲染的实现,基本有一些C++和图形学基础的朋友都可以看懂并且照着实现出来。

主要还是针对入门的图形学爱好者还有游戏从业者。

强烈建议新手不要一开始就深入去看XX行实现XXX之类的文章,大部分都是老司机秀车技,看看就好。

一些Shader的效果或者后处理其实不用在这里搞,如果目的是要学习这些的话,直接在unity或者ShaderMonkey里面写可能更快一些。


环境

语言选择

C++,没啥好说的,不要乱用boost和一些高级特性。

第三方库选择

SDL,有窗口管理,开源,代码简单明了

不要输出到一张图片上,很不直观,调试麻烦。

模型加载- TinyObj,自己改成了C++版本了

Matrix class by songhe,写得实在好,直接拿来用了,补充了点函数。

其他基本都是自己实现了。


开发环境

Linux - Ubuntu 16.04 gnome + VSCode + CMake

Windows 10 - VS2015


大部分在Linux环境下完成,VSCode配置好之后非常好用(和VA差别不大),构建的所有流程通过CMake控制。


新手还是推荐Windows。


怎么配置环境这里就不说了,这边准备好了两个SetUp工程,有DrawPixel函数可以直接用,github走一个。

SilangQuan/SoftRenderergithub.com图标


下一篇将会将讲基础图元的绘制。

再次鸣谢@易恺铭 的帮助。

一些有用的Link和Book

DX 9.0 3D游戏开发编程基础

Rasterization: a Practical Implementationwww.scratchapixel.com图标


gameknife/SoftRenderergithub.com图标


OpenGLwww.songho.ca


https://developer.nvidia.com/content/life-triangle-nvidias-logical-pipelinedeveloper.nvidia.com


Vladimir Bondarevbondarev.nl

编辑于 2018-09-15

文章被以下专栏收录