相机物理基础

光圈与通光率的关系
* 对任意焦段,同样的f值拥有相同的通光率
* 光圈值为f,则通光率正比于1/f^2

曝光与白平衡

  • 感光原件特性
    感光元件的宽容度非常小,当拍摄范围内明暗变化大时,极容易出现暗部欠曝或亮部过曝的情形,不像人眼,同时可以看见亮部和暗部的细节。另外,过曝通常要比欠曝更容易被系统控制。
  • 曝光和白平衡
    在数码时代,我们应该忽略这两个因素,相机的自动系统会为我们留下最多的细节,利用后期调节要远比现场选择参数更加高效。
    事实上,拍摄系统依据18%灰度原则,自动曝光时总是会选择一个参数,使整体获得尽可能多的细节。这也就产生了所谓的曝光误差,例如雪景偏暗,暗室偏亮。这些曝光误差在模拟时代是致命的,它让照片显得不真实,因此需要精确的调节曝光参数;而在数码时代,由于后期的存在,我们应当尽量多的保留拍摄细节,使自己有更多的可调节范围,当然,你如果不喜欢或不擅长后期,直接利用灰卡测光,直出也是可以的。

复制比与放大率

  • 复制比是指 拍摄主体在感光原件上成的像 占 感光元件长度 的 比例。复制比的极限值为100% 。面部拍摄,花草鱼虫,小尺寸主体拍摄等通常都要求有1:1的复制比。另外
    对一个确定的系统,1:1复制比有一个极限尺寸。

    1. 只有线度大于极限复制尺寸的主体才能进行1:1复制比的拍摄。
      极限尺寸越小,可拍摄的对象也就越多。拍摄者也可以有更多的拍摄参数可选,例如站的更远,或者使用更短的焦距。
    2. 对于常规的单反定焦系统,其视角是确定的,这个极限尺寸在最短对焦距离处取到。一般而言,长焦的最短对焦距离都远的惊人,不能进行小尺寸主体的摄影,所以通常用中短焦距以非常近的距离拍摄。厂商在制作有短对焦距离的长焦头时都会特意的加个”Marco”提醒你一下。
  • 放大率是一个相对概念,对于仅有焦距可变的系统,拍摄主体在感光元件上成像的尺寸和焦距呈线性关系。

透视作用

  • 透视的直观作用是近大远小,对于单反,线条会向中央汇聚
  • 透视是客观存在的,强度只和拍摄距离有关,越近效果越强。如果构图相同,广角端会让拍摄者站的离主体更近,透视更强烈,导致主体看起来更加巨大。近距离拍摄有强烈的”纵深效应”,远距离拍摄则有强烈的”压缩效应”。例如,同样的球,一个你5米,B离你500米,你会明显觉得近的大,换言之你明显感觉到大的球离你更近,但是如果一个离你500米,另一个离你1000米,无论是距离还是大小,你都感觉不到什么明显的差异了。

透视作用的应用

  1. 在确定构图后,第一要务就是选择合适的拍摄距离以控制透视,再在此距离上依构图变焦。
    对于人像照(构图就是脸充满视野),3-5米是比较合适的距离,不会让鼻子太大,也不会让面部显得太平坦,如果你无法确定这个距离,那么使用35系统的85-135焦段,这个焦段内拍摄大脸照,你只能站在3-5米处。如果你没有合适的焦距,站在这个距离拍摄,再进行拼接或裁剪也可以。
  2. 风光摄影应合理布置前景,利用透视形成广大的感觉,否则视角再大也不震撼。另外,要尽量避免长焦端的压缩效应,压缩效应的效果不易被控制
  3. 线条的透视应尽量对称,否则会引起视觉的不适应

关于等效焦距

等效焦距的概念仅适用于控制构图和透视:在与35等效的焦距下,如果站在同样的拍摄点,你们的构图是相同的,自然透视效果也是相同的。
然而此时物理焦距不同,不同系统对景深的控制能力则差很多,例如35系统的75焦段对比APS-C的50焦段。

景深范围

合焦后像的清晰范围大致是焦平面前L,焦平面后2L,L正比于1/f。这对于拍摄有纵深的画面(如毕业照)时很重要,有n排人,那么你应当选择大致n/3排的人进行对焦,保证尽可能多的人是清晰的。

Read more

Coroutine

从一般概念上说, 协程是特殊的函数调用: 被调用的函数可以在可控的位置被中断,然后在下一次调用时,继续从上次中断的位置继续执行。 本文主要通过Python的协程来介绍协程, 这是我唯一熟悉的一种协程实现. Classic Coroutine 下面的python代码很好的说明了协程的核心功能 def co_routine(): recv0 = yield 996 # hangs here after first coro.send assert recv0 == "Second" yield 711 # hangs here after second coro.send return def main(): coro = co_routine() # Create a new coroutine object value = coro.send(None)

By Edimetia3D

GDB with Python

这篇文章的主要应用场景是调试Python的C/C++ Extension 1. 同时使用pdb / gdb 进行调试. 通俗点说, 既可以break在 .py 文件中,也可以break在 .cc 文件中 2. 在gdb中不但可以获得常规的调试信息, 还可以获得python VM 的调试信息, 例如获得python的调用栈, 访问Python局部变量等. 这将会在调试exception时(如Segmentfalut)非常有用, 这种场景下, 定位 Python VM 正运行到哪一行代码往往可以提供一些直观的重要信息. 第一步: 编译源码以获得一些辅助数据. 我们并不真的需要使用从源码编译的Python, 但是一些调试相关的辅助文件需要从源码中获得, 包括 python-gdb.py及debug symbol等. 在 https://www.python.org/ftp/python/ 或 https://github.com/python/cpython

By Edimetia3D

Bazel Notes

这是一篇2019年左右的记录, 内容可能过时, 也不太全面 杂谈 Bazel是Google为Monorepo服务而开发的构建工具. 首先是巨大,当问题的规模变大,事情总是会变得更复杂. 而Google面对的"巨大Monorepo",应该是世间罕有的. 然后是Monorepo,这极大的影响了代码的组织风格.例如,你要写一个操作系统内核ProjectOS,还要写一个游戏ProjectGame.在传统的开发习惯中,这两个项目会组织到两个不同的Repo里,PorjectOS和ProjectGame之间无法直接相互引用,例如,你在ProjectOS里写了一个高级的数据结构,想要在Game里也使用,要么直接复制粘贴,要么是创建一个新的CommonRepo,把可公用的代码都放在Common里,然后两个项目各自引入Common作为依赖. 使用MonoRepo则不存在这个问题,Game可以直接依赖OS内的组件,按照Bazel的语法描述,就是在Game中可以直接使用@ProjectOS//path/to/package:AdvancedStruct.当然,你仍然可以选择重构一

By Edimetia3D

Unix related things

这是一篇2017年左右的记录, 仅用作分享 杂 * 在shell内能干的事,我们都可以比较简单地通过系统调用实现. * `称为反引号,^称为脱字符,常用来表示CTRL * windows的系统调用是不开放的,windows下只能直接使用windows.h里的windows API. * /dev目录下的设备是供用于程序直接使用的,主要由block,char,pipe,socket类型 * 并不是所有设备都能映射为这种形式 * /sys/device/目录称为sysfs,他下面存放了所有设备的信息.(不能直接从/dev获得任何设备信息) * udevadm info --query=all --name="/dev/sda1"可以用于查询/dev下某个设备对应的sysfs路径 权限系统 * 权限系统由两部分组成 * 文件属性:用于标注文件owner,所属组,以及权限的设定(默认只有owner和root可以修改权限设置) *

By Edimetia3D