KERenderer ——我的软渲开坑啦
项目链接:
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
(基本上有一些了解的全贴上来了,后面这些随缘吧)