表面均匀采样

球体

球体表面上的点 (x,y,z)(x,y,z)(x,y,z) 可以通过半径 RRR ,方位角 ϕ∈[0,2π]\phi\in [0,2\pi]ϕ∈[0,2π] ,天顶角 θ∈[0,π]\theta\in [0,\pi]θ∈[0,π] 来定义。
x=sin⁡θcos⁡ϕy=sin⁡θsin⁡ϕz=cos⁡θx = \sin{\theta} \cos{\phi} \\ y = \sin{\theta} \sin{\phi} \\ z = \cos{\theta} x=sinθcosϕy=sinθsinϕz=cosθ
如果只是均匀随机生成方位角 ϕ\phiϕ 和 天顶角 θ\thetaθ ,在球体表面所采样到的点,实际上并不是均匀分布,而是在两极附近更密集的分布。这是因为球体表面的微分面积 dA=r2sin⁡θdθdϕdA=r^2\sin{\theta}d{\theta}d\phidA=r2sinθdθdϕ 不仅同时受到微分方位角和微分天顶角的影响,还受到了天顶角正弦值 sin⁡θ\sin{\theta}sinθ 的影响。当天顶角 θ\thetaθ 贴近极轴即 θ=π\theta= \piθ=π 时,sin⁡θ=1\sin{ \theta} = 1sinθ=1 ,面积最大。

由微分立体角的定义 dω=sin⁡θdθdϕd\omega = \sin \theta d \theta d \phidω=sinθdθdϕ 可以得出球体的表面积。
∫Θdω=∫02π∫0πsin⁡θdθdϕ=4π\int_{\Theta} d \omega=\int_{0}^{2 \pi} \int_{0}^{\pi} \sin \theta d \theta d \phi = 4\pi ∫Θ​dω=∫02π​∫0π​sinθdθdϕ=4π

因此在球体表面均匀采样入射方向 ωi\omega_iωi​ 时,其概率密度函数为面积的倒数,是一个常数。由此可以推出在一个微分面积 dAdAdA 内均匀采样的概率密度函数。
pdf(ωi)=14πPA=14πdApdf(\omega_i) = \frac{1}{4\pi} \\ P_A = \frac{1}{4\pi}dA pdf(ωi​)=4π1​PA​=4π1​dA
通过二维独立连续随机变量方位角 ϕ\phiϕ 和天顶角 θ\thetaθ 来实现在球体表面的均匀采样,需要计算出用来参数化二者的概率密度函数 pdf(θ,ϕ)pdf(\theta,\phi)pdf(θ,ϕ) ,那么首先求出对应的边缘密度函数。
f(θ)=∫02πpdf(θ,ϕ)dϕ=sin⁡θ2f(ϕ)=∫0πpdf(θ,ϕ)dθ=12πf(\theta)=\int_{0}^{2\pi} pdf(\theta, \phi) d \phi=\frac{\sin \theta}{2} \\ f(\phi)=\int_{0}^{\pi} pdf(\theta, \phi) d \theta = \frac{1}{2\pi} f(θ)=∫02π​pdf(θ,ϕ)dϕ=2sinθ​f(ϕ)=∫0π​pdf(θ,ϕ)dθ=2π1​
根据边缘密度函数求出累积分布函数 FX(x)F_{X}(x)FX​(x)。
Fθ(θ)=∫0θf(θ^)dθ^=1−cos⁡θ2F_{\theta}(\theta)=\int_{0}^{\theta} f(\hat{\theta}) d \hat{\theta} = \frac{1-\cos \theta}{2} Fθ​(θ)=∫0θ​f(θ^)dθ^=21−cosθ​
Fϕ(ϕ)=∫0ϕf(ϕ^)dϕ^=ϕ2πF_{\phi}(\phi)=\int_{0}^{\phi} f(\hat{\phi}) d \hat{\phi}=\frac{\phi}{2 \pi} Fϕ​(ϕ)=∫0ϕ​f(ϕ^​)dϕ^​=2πϕ​
对累积分布函数做逆变换取样,得到累积分布函数的反函数 FX−1(x)F_X^{-1}(x)FX−1​(x)
Fθ−1(x)=arccos⁡(1−2x)F_{\theta}^{-1}(x)=\arccos (1-2 x) Fθ−1​(x)=arccos(1−2x)

Fϕ−1(x)=2πxF_{\phi}^{-1}(x)=2 \pi x Fϕ−1​(x)=2πx

对于连续随机变量方位角 ϕ\phiϕ 和天顶角 θ\thetaθ ,如果要获得球体表面上均匀分布的点,只需要给定均匀分布变量 ξ1,ξ2∼Uniform[0,1]\xi_1, \xi_2 \sim Uniform[0,1]ξ1​,ξ2​∼Uniform[0,1] 。
θ=Fθ−1(ξ1)=arccos⁡(1−2ξ1)ϕ=Fϕ−1(ξ2)=2πξ2\theta =F_{\theta}^{-1}(\xi_1) = \arccos(1-2\xi_1) \\ \phi =F_{\phi}^{-1}(\xi_2) = 2\pi\xi_2 θ=Fθ−1​(ξ1​)=arccos(1−2ξ1​)ϕ=Fϕ−1​(ξ2​)=2πξ2​

转为三维坐标可得
x=2ξ1cos⁡(2πξ2)y=2ξ1sin⁡(2πξ2)z=1−2ξ1x = \sqrt{2\xi_1} \cos{(2\pi \xi_2)} \\ y = \sqrt{2\xi_1} \sin{(2\pi \xi_2)} \\ z = \sqrt{1-2\xi_1} x=2ξ1​​cos(2πξ2​)y=2ξ1​​sin(2πξ2​)z=1−2ξ1​​

三角形

取两个标准正态分布变量 u,v∼Uniform[−1,1]u,v \sim Uniform[-1,1]u,v∼Uniform[−1,1] 。利用三角形重心坐标,我们可以通过两个随机变量,使得重心坐标 α,β,γ\alpha , \beta, \gammaα,β,γ 线性组合的结果落在三角形内,且三者分布是均匀的,即可实现在三角形内均匀采样。
α=1−u,β=u⋅v,γ=u⋅(1−v)α = 1 - \sqrt{u}, β = \sqrt{u} \cdot v, γ = \sqrt{u} \cdot (1 - \sqrt{v}) α=1−u​,β=u​⋅v,γ=u​⋅(1−v​)
设 s=us = \sqrt{u}s=u​ ,则可以进一步简化公式。
α=1−s,β=s⋅v,γ=1−α−βα = 1 - s, β = s \cdot v, γ = 1 - α - β α=1−s,β=s⋅v,γ=1−α−β

矩形

取两个标准正态分布变量 u,v∼Uniform[−1,1]u,v \sim Uniform[-1,1]u,v∼Uniform[−1,1] 。从矩形 ABCDABCDABCD 中选取相邻两边 AB,ADAB,ADAB,AD。
P=u⋅AB+v⋅ADP = u \cdot AB + v \cdot AD P=u⋅AB+v⋅AD

拒绝采样法

拒绝采样法是一个有效但不太优雅的算法。例如在单位球体内均匀采样时,随机生成一个标准立方体范围的点,计算该点到球心的距离,大于球体半径则重新随机生成点。

再例如在一个二维三角形内均匀采样,首先确定三角形的包围盒范围,即从三角形三个顶点中选取最大最小 xxx 坐标和 yyy 坐标。
max=(xmax,ymax)min=(xmin,ymin)max = (x_{max}, y_{max}) \\ min = (x_{min}, y_{min}) max=(xmax​,ymax​)min=(xmin​,ymin​)
取两个标准正态分布变量 u,v∼Uniform[−1,1]u,v \sim Uniform[-1,1]u,v∼Uniform[−1,1] ,随机生成一个包围盒内的点。由最大坐标和最小坐标求出在包围盒内的均匀取样点 PPP 。再通过重心坐标或者叉乘法等方法判断该点是否三角形内,不在则重新随机生成点
P=(xmin+u⋅xmax,ymin+v⋅ymax)P = (x_{min} + u \cdot x_{max}, y_{min} + v \cdot y_{max}) P=(xmin​+u⋅xmax​,ymin​+v⋅ymax​)

重要性采样

蒙特卡洛积分方法的路径追踪在半球面上进行采样。已知球面上均匀采样的三维坐标,同理可求得在半球上采样时,给定均匀分布变量 ξ1,ξ2∼Uniform[0,1]\xi_1, \xi_2 \sim Uniform[0,1]ξ1​,ξ2​∼Uniform[0,1] ,求出满足其累积分布函数的随机变量 θ,ϕ\theta, \phiθ,ϕ,从而得到采样入射方向的三维坐标 x,y,zx,y,zx,y,z
θ=arccos⁡(1−ξ1)\theta = \arccos(1-\xi_1) θ=arccos(1−ξ1​)
ϕ=2πξ2\phi= 2\pi\xi_2 ϕ=2πξ2​

x=ξ1cos⁡(2πξ2)x = \sqrt{\xi_1} \cos{(2\pi \xi_2)} x=ξ1​​cos(2πξ2​)
y=ξ1sin⁡(2πξ2)y = \sqrt{\xi_1} \sin{(2\pi \xi_2)} y=ξ1​​sin(2πξ2​)
z=1−ξ1z = \sqrt{1-\xi_1} z=1−ξ1​​

均匀采样

若在半球面上进行均匀采样,则概率密度函数 pdf(x)pdf(x)pdf(x)应该是各处相同的常数 CCC 。将积分域转换到半球面上,即可求出常数 CCC 。
∫Ω+Cdx=1\int_{\Omega^+} C d x=1 ∫Ω+​Cdx=1
∫02π∫0π2Csin⁡θdθdϕ=1\int_{0}^{2 \pi} \int_{0}^{\frac{\pi}{2}} C\sin \theta d \theta d \phi = 1 ∫02π​∫02π​​Csinθdθdϕ=1
C=12πC=\frac{1}{2\pi} C=2π1​

cosine-weighted 采样

对 cosine\text{cosine}cosine 项进行重要性采样,即 PDF\text{PDF}PDF 与 cosine\text{cosine}cosine 成正比。 将积分域转换到半球面上,即可求出系数 ccc 。
pdf(x)=c⋅cos⁡θpdf(x) = c \cdot \cos{\theta} pdf(x)=c⋅cosθ
∫Ω+c⋅cos⁡θdω=1\int_{\Omega^+}c \cdot \cos{\theta}d\omega = 1 ∫Ω+​c⋅cosθdω=1
∫02π∫0π2c⋅cos⁡θsinθdθdϕ=1\int_{0}^{2 \pi} \int_{0}^{\frac{\pi}{2}} c \cdot \cos{\theta} sin{\theta} d \theta d \phi = 1 ∫02π​∫02π​​c⋅cosθsinθdθdϕ=1
c=1πc = \frac{1}{\pi} c=π1​

Cook-Torrance BRDF 重要性采样

漫反射项

通过 Cook-Torrance BRDF\text{Cook-Torrance BRDF}Cook-Torrance BRDF 中漫反射的 BRDF\text{BRDF}BRDF ,我们可以计算得出其渲染方程和蒙特卡洛积分方法下的渲染方程。
fr(p,ωo,ωi)=1πf_r(p, \omega_o,\omega_i) = \frac{1}{\pi} fr​(p,ωo​,ωi​)=π1​
Lo(p,ωo)=cos⁡θiπLi(p,ωi)L_o(p,\omega_o) = \frac{\cos \theta_{\mathrm{i}}}{\pi} L_{\mathrm{i}}\left(\mathrm{p}, \omega_{\mathrm{i}}\right) Lo​(p,ωo​)=πcosθi​​Li​(p,ωi​)
Lo(p,ωo)≈1N∑i=1Ncos⁡θiπLi(p,ωi)pdf(ωi)L_o(p,\omega_o) ≈ \frac{1}{N} \sum_{i=1}^{N}\frac{\cos \theta_{\mathrm{i}}}{\pi} \frac{ L_i(p, \omega_i)}{pdf(\omega_i)} Lo​(p,ωo​)≈N1​i=1∑N​πcosθi​​pdf(ωi​)Li​(p,ωi​)​
观察渲染方程,我们可以对漫反射采用 cosine-weighted\text{cosine-weighted}cosine-weighted 采样以加快渲染方程的收敛。

镜面反射项

镜面反射项中可以排除需要知道采样方向才能计算的菲涅尔项、非连续函数的几何项,因此我们只需要使概率分布函数近似法线分布函数即可。

根据法线分布函数 D(ωh)D(\omega_h)D(ωh​) 的物理含义——每单位立体角 dωd\omegadω 、每单位面积 dAdAdA 上所有法向量为 ωh\omega_hωh​ 的微平面的面积,约定微表面中符合法线分布的微表面投影在宏观平面的面积为1,因此我们可以得到其关于法向量为 ωh\omega_hωh​ 的概率密度函数。
∫Ω+cos⁡θhD(ωh)dωh=1\int_{\Omega^+}\cos{\theta_h}D(\omega_h)d\omega_h=1 ∫Ω+​cosθh​D(ωh​)dωh​=1

经过推导可得出法线和入射方向二者的换算关系,经过转换得到关于入射方向 ωi\omega_iωi​ 的镜面反射项 pdf(ωi)pdf(\omega_i)pdf(ωi​)。

dωhdωi=14(ωi⋅ωh)\frac{d\omega_h}{d\omega_i}= \frac{1}{4(\omega_i \cdot \omega_h)} dωi​dωh​​=4(ωi​⋅ωh​)1​
∫Ω+cos⁡θh4(ωi⋅ωh)D(ωh)dωi=1\int_{\Omega^+}\frac{\cos{\theta_h}}{4(\omega_i \cdot \omega_h)}D(\omega_h)d\omega_i=1 ∫Ω+​4(ωi​⋅ωh​)cosθh​​D(ωh​)dωi​=1
pdf(ωi)=cos⁡θh4(ωi⋅ωh)D(ωh)pdf(\omega_i) =\frac{\cos{\theta_h}}{4(\omega_i \cdot \omega_h)}D(\omega_h) pdf(ωi​)=4(ωi​⋅ωh​)cosθh​​D(ωh​)

但在计算采样方向时我们无需使用 pdf(ωi)pdf(\omega_i)pdf(ωi​) ,还是使用前面已经计算好的 pdf(ωh)pdf(\omega_h)pdf(ωh​) ,通过该 PDF 推导出法向量 ωh\omega_hωh​ 后,再以 ωh\omega_hωh​ 为镜面反射法线计算我们最终需要的入射方向 ωi\omega_iωi​ 即可。

如果使用不同的法线分布函数,显然随机采样的方向计算公式也是不同的,积分计算过程较为复杂,这里不一一计算了。

对光源重要性采样

当我们要对光源进行直接采样时,需要将原本渲染方程中对微分立体角的微元,换源成在光源上的面积微元。

dω=sin⁡θdθdϕd\omega = \sin{\theta}d\theta d\phi dω=sinθdθdϕ

我们知道微分立体角 dωd\omegadω 可以认为是一个微小矩形,如果存在矩形光源,则可以根据相似三角形原则,得到单位半球的半径的平方与着色点 xxx 到矩形光源的距离平方之比,即为 dωd\omegadω 的面积与映射到光源上的面积 dA⋅cos⁡θdA \cdot \cos{\theta}dA⋅cosθ 之比,从而得到新的渲染方程。

dωdA⋅cos⁡θ=1∥x−x′∥2\frac{d\omega}{dA \cdot \cos{\theta}} = \frac{1}{\left\| x-x^{\prime} \right\|^2} dA⋅cosθdω​=∥x−x′∥21​

Lo≈1N∑i=1NLicos⁡θicos⁡θo1∥x−x′∥21pdfdAL_o ≈ \frac{1}{N} \sum_{i=1}^{N} L_i \cos{\theta_i} \cos{\theta_o} \frac{1}{\left\| x-x^{\prime} \right\|^2} \frac{1}{pdf} dA Lo​≈N1​i=1∑N​Li​cosθi​cosθo​∥x−x′∥21​pdf1​dA

对于面光源,在面光源上均匀采样则其概率密度函数是一个常数。对于球体光源,相比面光源较为复杂,在此不做计算。

pdf=1Areapdf = \frac{1}{Area} pdf=Area1​

反走样

SSAA

超采样抗锯齿 Super-Sampling Anti-aliasing\text{Super-Sampling Anti-aliasing}Super-Sampling Anti-aliasing 的原理是提升采样的分辨率。例如先上采样 2×22 \times 22×2 分辨率,则需要四倍的帧缓冲,然后再下采样到原来的分辨率。

MSAA

以 2×2MSAA2 \times 2 \text {MSAA}2×2MSAA 为例,多重采样抗锯齿 Multi-Sampling Anti-aliasing\text{Multi-Sampling Anti-aliasing}Multi-Sampling Anti-aliasing 将像素分为四个子像素,根据三角形覆盖四个子像素的比例决定该像素颜色。

例如一个三角形占据了四分之一个子像素,则该三角形为该像素贡献了四分之一的自身颜色值。但由于需要进行深度测试,每个子像素也都需要存储一个深度值,因此深度缓冲将变为原来的 2×22 \times 22×2 倍。考虑到多个三角形再单个像素区域有可能发生各占据一部分子像素的情况,因此颜色缓冲也将变为原来的 2×22 \times 22×2 倍。

三角形滤波

光线追踪的反走样算法,通常分为两种,一种是先均匀采样再加权累加。一种是先按概率密度采样,再累加平均。

后者的方法中,显然最合理的光线采样分布应该是边缘稀疏,越靠近中心越密集。这种分布理论上 sinc\text{sinc}sinc 函数是最优的,其能过滤掉高频信号,保留低频信号。但是完美的 sinc\text{sinc}sinc 函数只存在于理论,实际工程中只能近似模拟,例如三角形滤波。

sinc(x)=sin(x)/xsinc(x) = sin(x)/x sinc(x)=sin(x)/x

∫−∞+∞sinc(x)=π\int_{-\infty}^{+\infty} sinc(x)=\pi ∫−∞+∞​sinc(x)=π

∫−∞+∞sinc(πx)=1\int_{-\infty}^{+\infty} sinc(\pi x)=1 ∫−∞+∞​sinc(πx)=1

对于三角形滤波,其在定义域 [−1,1][-1,1][−1,1] 中满足积分为 111 ,从而可以得出其边缘密度函数 f(x)f(x)f(x) 。如果要得到一个符合三角形滤波分布的变量,只需要给定均匀分布变量 x∼Uniform[0,1]x \sim Uniform[0,1]x∼Uniform[0,1] 。求出其累积分布函数 FX(x)F_{X}(x)FX​(x),然后做逆变换取样得到其反函数 FX−1(x)F_{X}^{-1}(x)FX−1​(x) ,而反函数 FX−1(x)F_{X}^{-1}(x)FX−1​(x) 就是我们想要的随机变量 XXX。
f(x)={x+1,−1≤x≤01−x,0≤x≤1f(x) = \left\{\begin{array}{ll} x+1, &-1≤x≤0\\ 1-x, &0≤x≤1 \end{array}\right. f(x)={x+1,1−x,​−1≤x≤00≤x≤1​

FX(x)=∫−∞xf(t)dt={12(x+1)2,−1≤x≤0−12(x−1)2+1,0≤x≤1F_{X}(x) = \int_{-∞}^{x} f(t)dt = \left\{\begin{array}{ll} \frac{1}{2}(x+1)^2, &-1≤x≤0 \\ -\frac{1}{2}(x-1)^2+1, &0≤x≤1 \end{array}\right. FX​(x)=∫−∞x​f(t)dt={21​(x+1)2,−21​(x−1)2+1,​−1≤x≤00≤x≤1​

X=FX−1(x)={2x−1,0≤x≤121−2−2x,12≤x≤1X= F_{X}^{-1}(x)= \left\{\begin{array}{ll} \sqrt{2x} -1, &0≤x≤\frac{1}{2} \\ 1-\sqrt{2-2x}, &\frac{1}{2}≤x≤1 \end{array}\right. X=FX−1​(x)={2x​−1,1−2−2x​,​0≤x≤21​21​≤x≤1​

如果将每个像素划分为 2×22 \times 22×2 的子像素,分别对每个子像素应用三角形滤波,然后累加后取平均值,即可得到梯形滤波。

纹理采样

采样纹理时需要注意,我们获取了三角形的 UVUVUV 坐标和对应纹理贴图大小后,所计算出的纹理坐标是整形,因此小数部分会舍去。而纹理坐标的范围是 x∼[0,width],y∼[0,height]x \sim [0,width],y \sim [0,height]x∼[0,width],y∼[0,height] 因此需要为纹理坐标各个维度加 0.50.50.5 以实现四舍五入,获取距离采样点最近的纹理坐标。

双线性性插值

以上方法显然不够精准,只是获取了最近的纹理坐标,而双线性插值则将周围的纹理坐标一并考虑进来,进行加权累加。

以采样点所在像素为重心,获取其周围四个象限的八个像素。首先依据象限位置决定要对哪个象限的四个像素进行加权累加。

将四个像素的中心之间的范围视为一个新的像素坐标系,则左下角就是 (0,0)(0,0)(0,0) ,采样点在坐标系中的坐标 (s,t)(s,t)(s,t) 就是各个像素的贡献。先在 xxx 轴上以 sss 对四个像素两两线性插值,最后在 y 轴上以 t 对两个结果进行线性插值。

mipmap

对纹理以相邻四个像素为单位进行加权平均,最终得到一个原图像四分之一大小的纹理,以此类推,最终得到一个金字塔结构的纹理集合,这就是 mipmap\text{mipmap}mipmap 。

mipmap\text{mipmap}mipmap 常用于解决纹理瑕疵,例如过远的三角形,却占据很大一块纹理范围。如果根据远近,获取对于层级的 mipmap\text{mipmap}mipmap纹理,就可以一定程度上结果这个问题。

三线性插值

mipmap\text{mipmap}mipmap 显然是不够完美的,各层级之间的衔接过渡可能过于生硬。因此在双线性插值的基础上,计算 mipmap\text{mipmap}mipmap 的层级不再只取整数,而是允许 1.31.31.3 这种层级的存在,我们可以利用 [0,1][0,1][0,1] 的层级之差对相邻层级再做一次线性插值,也被称为三线性插值。

后处理

mipmap 近似高斯滤波

该技术原理不在此赘述,详情可以阅读另一篇文章

图形学论文阅读 - 使用盒型滤波图像金字塔实时近似大卷积核 - 掘金 (juejin.cn)

渲染中的采样:从概率密度到图像处理相关推荐

  1. 基于光线追踪的渲染中景深(Depth of field)效果的实现

    图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的,其实现通常是从向成像平面上发射ray,并把trace这条ray的结果作为成像平面上对应交点的采样结果.即: 图片来自<Fundam ...

  2. GEE系列:第9单元 在GEE中生成采样数据【随机采样】

     GEE从入门到实战的10个系列单元: GEE系列:第1单元 Google地球引擎简介 GEE系列:第2单元 探索数据集 GEE系列:​第3单元 栅格遥感影像波段特征及渲染可视化 GEE系列:第4单元 ...

  3. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 -- polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  4. 3D渲染中纹理映射技术与贴图制作技巧简介

    最近在做3D渲染画面优化工作,在优化过程中发现了一些贴图制作上的问题.这里针对这类问题的相关技术进行一个简单的介绍,并且针对这些问题给出我自己的一些制作上的建议. 1.什么是纹理映射: 纹理映射是将纹 ...

  5. WOW渲染中的纹理压缩

    WOW渲染中的纹理压缩 一直没玩台服,国服也停留在72级. 成都的天气一天天严峻,更是不想动了,于是用NVPerfHUD挂了下WOW,看看它到底啥样. 用NVPerfHUD挂程序需要被挂的程序自身支持 ...

  6. 关于三角形重心坐标插值/锯齿/抗锯齿/延迟渲染中的抗锯齿问题

    我们都知道,在渲染流水线中,顶点着色器对输入的顶点数据进行处理(如顶点的坐标变换和光照计算)以后,GPU会进行进行齐次除法并将顶点从三维空间转换到二维的屏幕坐标,接着将这些所需要的着色数据发送到光栅化 ...

  7. GNN教程:DGL框架中的采样模型!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:秦州,算法工程师,Datawhale成员 引言 本文为GNN教程的 ...

  8. 查看显卡显存_3d渲染需要多大显存比较合适?显存在渲染中的作用

    今天我们来和大家聊一聊关于3d设计渲染需要多大显存比较合适的问题,其实渲染不光是做3d设计的时候会用到,包括视频剪辑的时候也需要渲染,简单的说,只要是设计到图形.视频的相关工作都会涉及到渲染这个概念, ...

  9. react 绑定 箭头函数_为什么箭头函数和React渲染中的绑定有问题

    react 绑定 箭头函数 (提示:这会使shouldComponentUpdate和PureComponent变得胡思乱想) ((Hint: It makes shouldComponentUpda ...

最新文章

  1. 用SNMP实现对大型网络的轻松管理!
  2. matlab 混合C++编程mex方式初级入门
  3. Apache Tomcat Configuration Reference
  4. python pandas csv读取_如何用 pandas 读取 csv 和 Excel 数据
  5. 【Level 08】U08 Positive Attitude L1 See the world
  6. 力扣——字符串转换整数 (atoi)
  7. 我的SQL相关TIPS
  8. web系统之猜数游戏——项目总结
  9. java 浏览器设置字体大小_css 字体设置(不同浏览器设置效果)
  10. React 预览图片 视频 音频_HDMI录制盒斗鱼虎牙高清视频游戏直播器1080监控switch/ps4采集卡...
  11. linux安装mysql总结
  12. JIEDU7种EMI电磁屏蔽材料介绍
  13. Android 读取、接收、发送 手机短信
  14. 电子科技大学计算机初试分数,电子科技大学计算机,我的分数出来了,考研感受!...
  15. Discuz!创始人戴志康:关于命运、成长和目标
  16. vmware无法使用nat上网解决方式
  17. 2020交友聊天PHP代码 社交网络网站源代码 聊天即时通源代码送APP源码
  18. 【调剂】2020年西安理工大学计算机科学与工程学院硕士研究生调剂
  19. 曼德勃罗(Mandelbrot)集合与其编程实现
  20. 南大通用GBase8s 常用SQL语句(五十一)

热门文章

  1. ant design vue的ApiSelect选择器使用注意点
  2. 用python画国旗的程序_利用python画国旗(示例)
  3. 计算机图像技术在医学上的应用,计算机图像处理技术在医学中的应用
  4. 使用Visual Studio 2010 创建简单的Silverlight应用程序
  5. 基金前15大重仓股持仓股排名
  6. (一) elasticsearch-dsl查询操作
  7. WordPress建站 新手入门
  8. [转载] iframe嵌入网页的用法
  9. StarRocks Contributor 人数破百,极速统一,你我协力
  10. clk_get函数介绍