Physics Based Differentiable Rendering: Preliminaries
Introduction
Differentiable rendering is the inverse problem of traditional rendering. Instead of rendering the image from given scene parameters, differentiable rendering trying to recover scene parameter from a given image. To do this, a common idea is using gradient based optimization methods like SGD, Adam, etc. An important part of gradient based optimization is calculating the derivative of the render result w.r.t. certain scene parameters.
In traditional physics based rendering, we have v ...
实时阴影系统
阴影系统是一个渲染器的重要部分,对渲染品质有至关重要的作用。本文将介绍Ilum渲染器的阴影系统,针对渲染器目前支持的三种光源:聚光灯、平行光和点光源,我们分别有三种不同的阴影渲染策略:Shadow Map、Cascade Shadow Map和Omnidirectional Shadow Map,并通过实现PCF和PCSS两种软阴影滤波方式,提高阴影渲染的品质,后续有时间也可能将继续探索VSM、SDF Shadow等阴影渲染方法,目前我们只实现一个最基本的阴影系统。
1. 实时阴影渲染概述实时渲染阴影主要是解决一个可见性的问题,将渲染方程引入可见性可以建模为:$$L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)\cos\theta_iV(p,\omega_i)\mathrm d\omega_i$$利用实时渲染中一个常用的近似:$$\int_\Omega f(x)g(x)\mathrm dx\approx \frac{\int_\Omega f(x)\mathrm dx}{\int_\ ...
计算机辅助几何设计(7):细分曲线与曲面
1. 简介样条曲面的局限性
连续张量积样条曲面的参数域仅在特定的方形网格上定义,因此拓扑受限
将多个参数域装配到一个曲面非常繁琐,很难获得连续性保证
曲线的处理与剪枝很困难
细分方法的优点
提供几何体的粗略表示
获得光滑的表示
通过递归进行实现
细分方法的缺点
没有了参数化的表示
细分方法的基本步骤
细分当前多边形/网格
插入插值点(分裂)
移动点:局部加权平均(均一化)
对于所有的点:逼近方法
仅对于新生成的点:插值方法
2. 细分曲线2.1. Corner Cutting Splines
2.1.1. 基本流程:
将每条线段分为两半
顺时针地与其邻接点求平均
重复上述操作
能够收敛至二次B样条曲线
2.1.2. 矩阵表示
记:
$l$阶控制点为:$\pmb p_i^{(l)}$
$l+1$阶分裂点为:$\tilde{\pmb p}_i^{(l+1)}$
$l+1$阶平均控制点:$\pmb p_i^{(l+1)}$
分裂操作的矩阵表示:$$\begin{pmatrix}\vdots\\\tilde x_{2i}^{(l+1)}\\\til ...
计算机辅助几何设计(5):有理样条曲线
Bézier曲线和B样条曲线均不能用于表示圆锥曲线(如圆、椭圆、双曲线),我们需要一种更强大的样条曲线表示方法。
1. 二次曲面与圆锥曲线1.1. 定义圆锥曲线可以表示为二次函数的零集:$$\begin{aligned}ax^2+bxy+cy^2+dx+ey+f&=0\\\\\pmb{x}^\top\left[\begin{matrix}a & \frac{b}{2}\\\\\frac{b}{2} & c\end{matrix}\right]\pmb{x}+\left[\begin{matrix}d & e\end{matrix}\right]\pmb{x}+f=0\end{aligned}$$
示例:
圆锥的隐式表示 $Ax^2+By^2=z^2$
平面的隐式表示 $z=Dx+Ey+F$
圆锥曲线 $Ax^2+By^2=(Dx+Ey+F)^2$
二次曲线是二次方程(任意维数)的零集:$$\{\pmb{x}\in \mathbb{R}^d|\pmb{x}^\top M \pmb{x}+\pm ...