基于物理的渲染(PBR)

在前面介绍了BDRF函数,那么具体这个函数是什么样子的我们并不知道。接下来简单介绍常用的BRDF函数。

Phong BRDF

在学习PBR之前,我们最常用的是Phong光照模型,为了使得Phong具有物理意义,定义Phong BRDF:

  • $\alpha$是光线出射方向与入射光线理想镜面反射方向之间的夹角;
  • $k_d$是漫反射率(diffuse reflectivity),即投射到物体表面的能量中发生漫反射的比例;
  • $k_s$是镜面反射率(specular reflectivity),即垂直投射到物体表面的能量中被镜面反射的比例;
  • $n$是镜面指数(specular exponent),更高的值会产生更清晰的镜面反射;
  • 为了满足能量守恒,限制$k_d+k_s\le 1$。

Untitled

Read more

深度重建世界坐标

熟悉MVP流程

MVP变换中,一般是这样得到裁剪坐标:

之后,经过透视除法,得到NDC坐标:

深度重建世界坐标

正常的MVP变换中,一般由如下操作获得裁剪坐标:

然后进行透视除法获得NDC坐标:

现在我们需要将NDC坐标逆推回世界坐标,容易知道:

构造一个新的clipPos:

带入回去,得到:

但注意到$\bf worldPos.w=1$,于是:

所以可以间接求出$\bf clipPos.w$

代入原式,得到:

因此我们不需要$\bf clipPos.w$也是可以得到世界坐标的,因为$\bf ((PV)^{-1}\times (NDCPos, 1)).w$其实就是$\bf worldPos.w$,所以只要算出$\bf (PV)^{-1}\times (NDCPos, 1)$,然后除以自身即可!

代码如下:

1
2
3
4
float depth = texture(depthTex, texcoord);
vec4 ndcPos = vec4(2 * texcoord, 2 * depth - 1, 1.0f);
vec4 worldPos = InverseVP * ndcPos;
worldPos.xyz /= worldPos.w
Read more

辐射度量学与光线追踪原理

辐射度量学

背景

Phong和Blinn-Phong的经验模型过于经验,没有严谨的物理定义,所以计算机图形学急需要一个能够符合物理基本规律的光照知识,这就是辐射度量学提出的背景(基于物理光学)。

概念

  1. 辐射能$Q$,单位是焦耳,是能量,表示穿过一个曲面(类似于电磁学的高斯面)的光能。
  2. 辐射通量$\phi$,表示单位时间内穿过曲面的光能(注意是单位时间,辐射通量等价于功率)

  3. 立体角$\omega$(针对球面坐标系),类比于平面角(针对极坐标系):

    可以得到立体角的公式:

    Untitled

Read more

投影矩阵的具体推导

正交投影

正交投影的步骤是先平移到世界原点,然后进行缩放,把视界体缩放成长度为2的正方体,取值为$[-1,1]^3$:

Untitled

左极端点为$(left,bottom,-near)$,右极端点为$(right,top,-far)$

用矩阵变换描述上述过程:

其中,平移的时候,应当让视见体的中心$\left(
\frac{right+left}{2},
\frac{top+bottom}{2},
-\frac{near+far}{2}
\right)$移动到世界原点,于是平移矩阵如下:

Read more

CG_Final : 2020级计算机图形学期末大作业

截图 2023-03-05 03-09-46

构建

项目地址:https://github.com/InverseDa/CG_Final

Windows

对于Windows用户,需要安装vcpkg:https://vcpkg.io/en/index.html

配置好vcpkg之后可以直接使用

1
vcpkg install glfw assimp

之后使用cmake构建(推荐用Visual Studio的MSVC)

1
cmake -DCMAKE_TOOLCHAIN_FILE=<path\to\vcpkg>\scripts\buildsystems\vcpkg.cmake -B . -G "Visual Studio 17 2022"

构建完毕后打开sln文件即可

Read more

采用CMake和CodeLLDB配置Vscode的C++环境

为什么要选择CMake + Clangd + CodeLLDB?

Microsoft的C++插件补全比较垃圾,并且采用LLDB更好一些。这个配方是跨平台的(Windows要使用WSL2),所以大家可以随便cv配置。

需要你对系统比较熟悉,并且会一点点CMake的语法,反正不难。

安装插件

需要安装CMake、CMake Tools、CodeLLDB和Clangd的插件。

image-20230216231520425

Read more

How to set proxy in Bash and Zsh

To set proxy in bash and zsh, we need to code the bash script or zsh script.
We will edit the .bashrc or .zshrc dot file in your home path like:

1
2
3
/home/yourname/.bashrc
or
/home/yourname/.zshrc

Then, use neovim (maybe you can chose your favourite editor whatever :D ) to edit:
1
$ nvim ~/.bashrc

or
1
$ nvim ~/.zshrc

Read more

解决GTASA在Windows10/11的兼容性问题

众所周知,GTASA Steam Version问题特别多。本文针对这种情况给出了如下的解决方案和优化思路。

如有其他疑问,可以参考https://www.pcgamingwiki.com/wiki/Grand_Theft_Auto:_San_Andreas

降级补丁

非常建议打降级补丁,因为GTASA Steam Version真的是出奇的烂。BUG一堆,而且因为版权问题缺少了很多资源。所以最好打降级补丁。如果本身就不是Steam Version,而且版本是v1.0,那么就不需要降级了。

下载GTASA Downgrader来降级:http://downgraders.rockstarvision.com/

image-20230117175204432

Read more

Go的Proxy问题

设置GOPROXY代理:

1
go env -w GOPROXY=https://goproxy.cn,direct

设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔:

1
go env -w GOPRIVATE=*.gitlab.com,*.gitee.com
Read more
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×