项目链接:

Eykenis/KERenderer: My first attempt to build my own software renderer (github.com)

进行了一个月左右的 CG 基础知识学习后,我终于依葫芦画瓢写出了软渲的基本框架。当然,如果没有 ssloy/tinyrenderer,我肯定是办不到的。设计方法和具体代码大量参考了 tinyrenderer,而且读取 .obj 和 .tga 文件部分是直接 copy 的。.obj 还好,.tga 的文档对我来说还是有点难啃了(英语苦手),所以只能照搬了 qwq. 文件读取就当是套用了一个外部接口吧。当然,我还希望能找到 .png,.fbx 的接口。

从这个页面 post 出的接下来几个月内,我会不断更新完善我的 这个 software renderer,尽可能涉及到所有我学过的,在 Unity 中用 Unity Shader 实现过的渲染方法。

目前支持的功能 (0.2.0)

  • 深度测试
  • 透视投影 (raw)
  • Flat Shading
  • Gouraud Shading
  • Phong Shading
  • Z-Buffering
  • 背面剔除
  • 高光以及 Blinn 光照方法
  • 单张UV纹理渲染

pre release](https://github.com/Eykenis/KERenderer/releases/tag/0.2.0)) 目前支持使用 Blinn-Phong 渲染两个模型(完整的 BRDF —— 环境光、漫反射光和高光),可以按键盘方向键以旋转和缩放。目前只能在 Windows 上运行,源代码为 Visual Studio 工程。

实际上源代码中也有 Phong/Gouraud 漫反射、Z-Buffring 深度图和 Flat Shading 的实现方式,不过该 release 的主入口没有使用。

更新计划(按大致优先度排序)

肯定会更新的东西

  • 高度图

    和UV一样好加。

  • 阴影

    最重要的还是尽可能少点宏,把 lightDir 抽象出来,别写到宏里改不了了。抽象出来之后其实是做一个测试就行了。

  • 多纹理(.mtl)支持

  • 抗锯齿

  • TBN法线贴图

    有些模型的 .obj 文件没有存储法线信息,这就导致我现在没法渲染出这些模型,只能把 Flat Shading 加回来或者是用 Z-Buffering. 除开这个需求,法线贴图也是很有必要的。难点主要在切线空间的转化。

  • 基于 RampTex 的非真实感渲染

  • 轨道式相机

  • 齐次边界裁剪

  • 透明度测试/混合

  • Cubemap 以及 Skybox

  • Make it cross-platform

    主要还是得去了解 linux 和 macOS 的图形接口

  • 基于物理渲染 PBR

    理论看了那么多也没记住,什么时候能实践?

  • 基于 Cubemap 的环境反射

以上更新完之后就算 release 1.0 啦!

可能会更新的东西

  • 动画
  • 多文件格式支持
  • Image-based lighting
  • 渲染多物体的合适渲染顺序,渲染路径
  • 多光源

一些也想加进来但不咕可能性比较小的东西

(主要是后处理)

  • 边缘检测
  • Mipmap
  • 线性缓冲
  • 高斯模糊
  • Motion blur(天哪)
  • 不止于 RampTex 的卡渲
  • 噪声模拟消融效果
  • 水波效果,FFT Ocean

(基本上有一些了解的全贴上来了,后面这些随缘吧)