前言

最近在搭建完整的PBR环境时,用到了挺多相机的知识。借此机会重新温习了下大一写摄影技术的词条,同时为了适应博客删掉了很多不必要的内容。

不过既然是大一写的,想必难免会有一些疏漏,而且当初的目标形式是词条,相应知识也不会过于深入,但大体上还是没问题的。

a). 摄影机成像原理

一、小孔成像

​ 光线沿直线传播。用一个带小孔的板遮挡在物体与成像面间,物体反射的光线经过小孔,在成像面上形成倒立的像。在一定范围内,小孔越小,成像越清晰,但小孔过小会导致发生衍射,使成像模糊。

摄影技术_摄影机成像原理_小孔成像原理

阅读全文 »

Mesh Distance FieldsReal Shading in Unreal Engine 4

a). Shading from Environment Lighting(IBL)

EnvironmentLight01a

  • 通过环境贴图着色的方式,又被命名为 Image-Based Lighting (IBL)

a.1). How

EnvironmentLight01b

  • 对于IBL,可以看做是上半球(可以联想下UE中的HDRI)的光照和BRDF的积分;
  • Observation:

    IBL_BRDF

    • 对于Glossy,其BRDF支持集很小(Lobe范围小);

    • 对于Diffuse,其BRDF非常平滑;

    • 联想到上节课渲染方程不等式成立的条件(拆出乘积积分的那个)

      IBL_BRDF02

      • 这里$\Omega_{G}$ 指积分域上,$g(x)$有值的区域。

        • 如$g(x)$ 为BRDF,$\Omega_{G}$ 即为原点向Lobe各点出发,与积分半球相交的区域集合

          IBL_BRDF02b


We can safely take the lighting term out!

IBL_BRDF03

我们把渲染方程分为了两部分积分,分别是:

  • 在$\Omega_{fr}$(即Lobe对应的半球区域),对光照Radiance积分
  • 在半球内对BRDF积分;
阅读全文 »

a). Shadow Mapping

  • A 2-Pass Algorithm
    1. Light pass: Generate the SM(Shadow Map)
    2. Camera pass: uses the SM
  • An image-space algorithm
    • Pro(优点): no knowledge of scene’s geometry is required
    • Con(缺点): causing self occlusion(自遮挡) and aliasing(走样) issues

Pass 1: Render from Light

  • 输出一张光源视角深度图(Depth Buffer)

SM_Pass01

Pass 2: Render from Eye(Camera)

SM_Pass02

  • 将光源视角对应的深度转换到View Space, 与Camera视角的深度进行深度比较;

    • 如$Depth_{cam} > Depth_{light}$ ,那说明该点在阴影中(相机可见,光源不可见)
    • 如$Depth_{cam} < Depth_{light}$ ,那说明该点在不在阴影中(相机可见,光源可见)
  • 用于比较的深度值:

    • 经过透视投影中的Squeez矩阵后(具体看Games101 Math笔记),z会被推向远平面

      $M_{\text {persp } \rightarrow \text { ortho }}=\left(\begin{array}{cccc}
      n & 0 & 0 & 0 \\
      0 & n & 0 & 0 \\
      0 & 0 & n+f & -nf \\
      0 & 0 & 1 & 0
      \end{array}\right)$

    • 用于比较的$Depth$ 可以是经过MVP中的深度值(即Depth Buffer中的深度值);

    • 也可以是该点在同一空间(如模型空间)中,该点到相机/光源的线性距离;

SM_vs

阅读全文 »

a). Graphics Pipeline

GraphicsPipeline

b). OpenGL

OpenGL01a

A. Place objects/models

  • Model specification(模型信息)
  • Model transformation

OpenGL_A

B. Set up an easel(画架)

  • View transformation
  • Create /use a framebuffer

OpenGL_B

C. Attach a canvas to the easel

指定Pass到framebuffer,就和Unity中FS的SV_TARGET一样。

E. you can also paint multiple pictures using the same easel

  • 一个Rendering Pass,使用一个framebuffer,渲染一个或多个texture(shading, depth, etc.)作为输出

  • 即一个framebuffer可以绑定多个纹理(MRT)

  • Multiple Render Target(MRT)是一种指可以使绘制程序在单帧中同时渲染多个Render Target

D. Paint to the canvas

  • This is when vertex / fragment shaders will be used
  • For each vertex in parallel
    • OpenGL calls user-specified vertex shader: Transform vertex (ModelView, Projection), other ops
  • For each primitive, OpenGL rasterizes
    • Generates a fragment for each pixel the fragment covers
  • For each fragment in parallel
    • OpenGL calls user-specified fragment shader: Shading and lighting calculations
    • OpenGL handles z-buffer depth test unless overwritten

Summary: in each pass

  • Specify objects, camera, MVP, etc.

  • Specify framebuffer and input/output textures

  • Specify vertex / fragment shaders

  • (When you have everything specified on the GPU) Render

阅读全文 »

Lecture19

b). Light Field / Lumingraph(光场)

LF_000
LF_001
  • 两者看到的光线信息完全相同,那人眼中的世界就完全相同;

b.1). The Plenoptic Function(全光函数)

PlenopticFunc

  • 现实世界可以用一个七维的全光函数进行描述,记录了任意时间,不同位置的不同方向接收光的波长
  • 参数:
    • $\theta$ :方位角
    • $\phi$:俯仰角
    • $\lambda$:波长
    • $t$:时间
    • $V_X,V_Y,V_Z$:位置

b.2). Light Field

光场则可以认为是记录了任何一个点所接收的任何一个方向的irradiance。

  • 可用四维函数表示,二维描述位置,二维描述方向
  • 光线可由两个点定义,因此这四维可改写成s,t,u,v。即两个平面上的位置;

LF_2Plane

  • 由此得出,描述一个物体的光场,只需要记录其包围盒上四维的全光函数即可

    PF_Thing

  • 从uv平面看向st平面,得到的是这个物体从各个方向看的相应的图像;

  • 而从st看向uv,则得到的是这个物体在这个方向的irradiance的集合(不是合起来,而是类似二维数组的集合)即radiance

    uvst

  • st到uv

    st2uv

    • 记录不同方向的光线radiance(注意和拜耳阵列的区分,这里三色只是代表不同方向)
阅读全文 »

Lecture 17 Materials and Appearances

Material == BRDF

a). Diffuse / Lambertian Material

Diffuse_Lambertian_Mat

  • 对于此类材质,当假定各方向9入射的光线radiance相同,反射的光同样是Uniform的。因为能量守恒(假定不发光,不吸收),使得进入的 Irradiance 和出去的 Irradiance相同;

    Diffuse_Lambertian_Mat02

b). Glossy material

Glossy_Mat

c). Ideal reflective / refractive material(BSDF)

Reflective_Refractive_Mat

  • 计算镜面反射方向

    Perfect_Specular_Reflection

    • 几何
    • 方位角

c.1). Specular Refraction

Specular Refraction

  • 现象:色散、Caustic等

  • Snell’s Law

    Snell Law

    • 可推出只有当光密到光疏介质时,才有可能发生折射;(${n_i\over n_t}>1$)

      Snell Law_02

  • 折射属于BT(Transmit)DF;

    • BTDF + BRDF = BSDF

c.2). Fresnel Reflection(菲涅尔)

  • 反应了特定方向的入射光的反射和折射的比例;
绝缘体_Fresnel
导体(金属)_Fresnel
  • 左图是绝缘体的菲涅尔项,右图是导体(金属)的菲涅尔项

FresnelTerm

阅读全文 »

Lecture 21 Animation

a). History

b). Keyframe

c). Physical Simualtion

PhysicalBasedAnimation

c.1). Mass Spring System

MassSpringSystem_eg00

  • Idealized spring

    IdealizedSpring

    • 但永远不会停止,因此加入摩擦力

DampSpring

  • 中间项为相对速度在向量$ab$方向的投影,因为(处于原长状态时)如果a点不动,b点绕a点做圆周运动,那$f_b=0$;

    • 但是无法表现剪切力(如对角线拉布,布基本形状不变)、弯曲力(out-of-plane,抗拒被像纸一样完全折叠为两个三角形)等

      MassSpringSystem_01

  • 加入两条对角线,以及skip connection

    MassSpringSystem_03

    • 红色较弱,仅其辅助作用;蓝色较强,其主要作用;
  • 其他方式:FEM (Finite Element Method, 有限元) Instead of Springs,考虑力传导


c.2). Particle System

ParticleSystemForces

  • 粒子系统不仅可描述微小粒子,还可以描述一些群落;
    • SimulatedFlocking
    • SimulatedCrowds

d). Forward Kinematics(FK)

FK

  • 关节(Joint)分类:

    JointTypes

e). Inverse Kinematics(IK)

IK_eg

IK00

  • 解决多个解的方法:梯度下降

f). Rigging

Rigging

  • Blend shapes: 混合控制点或骨骼位置

    Blend Shapes

g). Motion Capture / Facial Motion Capture

阅读全文 »

Lecture 13 Ray Tracing

a). vs. Rasterization

  • 光栅化难以表现全局(global)效果,如

    • (软)阴影(Soft shadows)
    • 光线反弹超过一次(Glossy reflection)
    • Indirect illumination(间接光照)

    vs.Rsaterization

  • Rasterization is fast, but quality is relatively low;

RayTracing00

b.). Basic Ray-Tracing Algorithm

  • 光追中光线的性质:

    1. 光是沿直线传播的;
    2. 光相交时,并不产生干扰;
    3. 光从光源出发,传播到眼睛(由于光路可逆,也可是光线从眼睛出发,传播到光源)

    EmissionTheory

b.1). Ray Casting

  • 做法:

    1. Generate an image by casting one ray per pixel;(生成从眼睛出发的光线)
    2. Check for shadows by sending a ray to the light;(检查光线投射点是否可传播到光源)
  • CastingRay CastingRay01
    • 光线由眼睛出发,可不再使用深度缓存;
    • 投射点到光源发射Shadow Ray,查看该点是否在阴影里(是否对光源可见);
阅读全文 »

Lecture 10/11: Geometry 1 2

  • 不可能所有物体都用三角面表示,一些复杂的物体如毛发、水滴等用三角面表示开销极大;

a). 几何的表示形式

  • 隐式(Implicit)
    • algebraic surface
    • level sets
    • distance functions
  • 显式(Explicit)
    • point cloud
    • polygon mesh
    • subdivision, NURBS
阅读全文 »

Lecture 07/08 Shading(Illumination, Shading and Graphics Pipeline)

a). Definition

Shading_Definition

b). A Simple Shading Model(Blinn-Phong Reflectance Model)

b.1). Fundamental

  • Blinn-Phong是一个经验模型,并不是严格基于物理的;

  • 进入视线内的光照一般有以下构成:

    • 高光(Specualr)
    • 漫反射(Diffuse)
    • 环境光(Ambient)
    • 自发光(Emissive)
  • Shading is Local: Compute light reflected toward camera at a specific shading pointShadingInput

    • No shadows will be generated! (shading ≠ shadow)

      • 阴影会由另外的Shadow Caster来着色;

      NoShadow

b.2). Diffuse Reflection

  • Blinn-Phong中,漫反射的光均匀散射到各个方向;Blinn-Phong_Diffuse
  • Lambert’s cosine law:接收到的能量与 $l·n$ 成正比例Lambert_cos_law

  • Light FalloffLightFalloff

  • 漫反射最终的着色:LambertDiffuseShadingDiffuse_kd

b.3). Specular Term(Blinn-Phong)

  • Intensity depends on view direction

    Specular

  • Blinn-Phong_Half_vector

    • 采用半程向量简化计算。采用半程向量$h$与$n$点乘的是Blinn-Phong模型,而采用镜面反射方向$r$和视线方向$v$点乘的是Phong模型;
    • 指数$p$的作用:Increasing p narrows the reflection lobeSpecular_Power
    • 效果总览:Specular_Term

b.4). Ambient Term

AmbientTerm

Blinn-Phong

阅读全文 »