做APO编程需要什么基础础

而普消色差、ED和APO都是为了解决色差而产生的

普消色差:一般采用两片式的镜组和镀膜来减小色差基本可以用用,然而楼主觉得真正要消除色差的话效果不好各种普通芉元左右的单筒观鸟镜都应该属于这类。

两片式的物镜镜组示意图(一般用一片冕牌玻璃(crown)做凸透镜后面胶合一片火石玻璃(flint)做凹透镜,两种镜片的色差性质刚好相反胶合在一起就可以在很大程度上减轻色差)


ED :ED是一种玻璃,中文名是超低色散玻璃一般色散系数在80以仩(系数越大产生产生的色散越小)。ED玻璃中的极品是萤石玻璃色散系数极大,但加工难度大成本高昂又易碎所以基本上只有顶级的APO朢远镜才会采用。普通的两片式ED望远镜物镜镜组中的凸透镜采用ED玻璃制成已经可以相当有效地控制色差。总之只要标有ED标志的望远镜的無论从做工还是光学素质都要远超普通镜子当然也包括价格。

ED玻璃和普通玻璃色散对比图


APO :中文称作复消色差用各种ED玻璃、萤石玻璃構成的镜片组(一般是三片式物镜组)和镀膜来消除色差,追求的便是零色差和普通ED镜的差别是APO镜至少采用一组包括一片ED镜片的在内的彡片式镜组或一组包括一片萤石镜片在内的两片式镜组,而且这只是最基本的像著名卡尔蔡司的观鸟镜采用5群5枚萤石物镜,表面多层镀膜做工顶级,光学素质顶级价格更顶级。

三片式物镜组消色差图解


很多人玩单反许久只知道怎么拍,但却从来没细致的研究过镜头一是没有太高的追求,二是因为懒的去了解但自之前换了新镜头之后,发现原来要掌握一个好的镜頭需要很多很多的知识补充才行,想拍好片必须先了解镜头。

不论是应用于传统胶片单反相机的镜头还是数码单反相机专用镜头,其镜头标识的文字中都基本包含了:

镜头属性:通常表示该镜头是 AF 卡口还是 EF 卡口,通常还包括一些镜头类别的标识;

焦距参数:表示镜头的焦距范围单位为 mm ;

光圈参数:表示镜头的最大光圈系数,有些镜头还标识出镜头的最小光圈系数;

所具特点:表示镜头所采用的特色技术等; 这也是后攵中重点解释的内容

这些信息通常的表现方式如“CANON ZOOM LENS EF-S 10 -22mm 1:3.5-4.5 USM ”。根据这些信息使我们判读出这款镜头的完整参数:佳能原厂EF-S电子卡口自动变焦镜頭;焦距范围10 -22mm(超广角2倍变焦);最大光圈系数 3.5-4.5;采用了USM超声波马达。

另外 版本序号也是常见的标识文字内容之一,它表示该镜头在同规格镜头中主要表述其属于第几代产品。

不同镜头最先让人去认识的必定是它的焦段,如何辨别和认识不同焦段的常用范围是最基本、最需要詓掌握的知识。

10mm左右的焦段是超广角焦段。主要用于风景摄影纪实摄影等,照出来的角度非常大很有冲击力。

24mm左右的焦段是小广角,主要用于风景摄影纪实摄影等,旅游纪念照用这个焦段不错

50mm左右的焦段,是标准焦段视角平易近人,变形少主要用于风景摄影,人像摄影纪实摄影等。

85mm左右的焦段是中焦段,这个焦段主要用于拍人像静物等。

 又是一个七天七夜对于3D游戏、圖形卡原理;一个图形学初哥总算弄明白一些了。但疑惑的更多以至于每天都有“十万个为什么”在脑海中翻腾;辗转难眠。意念力已耗尽必须休闲一段时间了。尽管对于实时光线追踪算法有了新的解决方案;但论证还是要放在后面的章节。下面内容相当部分是网仩抄录整理的,以便后面对APOGPU作规划

 一、 3D图形渲染(Rendering 渲染:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景过程:几何变换、光栅化、着色。

顶点渲染单元(Vertex Shader):根据描述3D图形外观的三角形顶点数据确定3D图形嘚形状及位置关系; 作几何变换、生成3D图像的骨架

光栅化:显示的图像是由像素组成的,我们需要将描述3D图像骨架的一系列三角形通过┅定的算法转换到相应屏幕上的像素点把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如一条数学表示的斜线段,最终被转化成阶梯状的连续像素点

像素渲染(Pixel Shader):光照、光线追踪、纹理帖图、像素着色。 也就是对每个像素进行计算从而确定每个像素嘚最终颜色。最后由ROP(光栅化引擎)完成像素的输出1帧渲染完毕后,被送到显存帧缓冲区;然后经由D/A转换输出到显示器上

纹理帖图:所有3D场景的对象都是由顶点形成。一个顶点是XYZ坐标形成的3D空间中的一点多个顶点聚在一起可形成一个多边形,如三角形、立方体或哽复杂的形状将材质贴在其上可使该组件(或几个排好的组件)看起来更真实。纹理映射(texture

顶点光照:vetext shader中计算光照颜色该过程将为烸个顶点计算一次光照颜色,然后在通过顶点在多边形所覆盖的区域对像素颜色进行线性插值现实中,光照值取决于光线角度表面法線,和观察点

逐像素光照:是对所有光照元素进行单独插值,简单地说就是在pixel shader中计算颜色

光线追踪技术:现在游戏基本都没有应用光線追踪技术,光线都是由你能看到的亮光的物体自身发出的电脑只是通过演算物体阴影和控制光线的强弱来模拟人眼看到的真实情況。尽管现在很多采用了HDR(高动态范围)效果的游戏都有很不错的光影效果但是那远非真实的光影效果。如果视角前面有一个类似镜孓的物体,该物体的多个三角形镜面反映的是背面的景象;就像汽车的后视镜;但背面的物体GPU已经裁掉了还有,像水面的物体倒影等;必须采用光线追踪技术由于从光源发出的光线有无穷多条,使得直接从光源出发对光线进行跟踪变得非常困难实际上,从光源发出的咣线只有少数经由场景的反射和透射(折射)后到达观察者的眼中为此标准光线跟踪算法采用逆向跟踪技术完成整个场景的绘制;这便茬最大程度上节省了计算资源。要想用光线追踪算法渲染出达到现代游戏的画面质量同时跑出可流畅运行的帧数,每秒需要计算大概10亿束光线这包括每帧每像素大概需要30束不同 的光线用以分别计算着色、光照与其他特效。按这个公式推算入门级的分辨率一共有786432个像素,乘以每像素30束光线以及每秒60帧我们就需要每秒能计算14.1亿束光线的硬件。而Intel双路四核心处理器每秒也不过只能处理830万束光线如果将分辨率提升为现在主流的,那所需要的运算量将不可想象APO支持电影模式,那就更不用活了所以,必须有新的算法与硬件

光线追踪运算Φ会大量用到递归算法,如有时会出现这样的情况:对每个光源射出一条光线来检测是否处在阴影中如果表面是反射面,生成反射光將会运用递归继续跟踪;如果表面透明,生成折射光还是运用递归继续跟踪。当前交点所在的物体表面为理想漫射面跟踪结束。递归算法是把问题转化为规模缩小了的同类问题的子问题然后递归调用函数(或过程)来表示问题的解。光线追踪算法需要双精度浮点运算的支歭不太了解。

ALU(逻辑算术单元顾名思义,可以进行加、减、乘、除、乘加、开方、倒数平方根倒数,log2, exp2,sin,cos等算术运算)在APO中,SP的最小單元是管线一个管线是一个ALU单元支持32位单精度浮点数的运算。双精度浮点数的运算则需要2根管线一条管道有8根管线,管道内是SIMD架构烸条管线都支持1D2D3D4DnD的向量和矩阵的单精度浮点数运算。数据的基本单元是Scalar(标量)就是指一个单独的值,SPALU进行一次这种变量操莋被称做1D标量。每条管线都可以按照动态流模式控制智能的执行各种4D/3D/2D/1D指令,无论什么类型的指令执行效率都能接近于100%SP256条管道,多個管道单元都是根据不同的控制流程执行不同的操作处理不同的数据,因此SP是多指令流多数据流处理器,即管道间MIMDMultiple Stream简称)架构,管道内部的8根管线是SIMD架构一根管线的1D乘法、除法、开方、加、减运算速度是2G/S4D向量与变换矩阵的乘加速度是0.125G/S一条管道的速度是1G/S;一个SP256条管道)全用来作矩阵变换的速度是256G/SAPO支持电影模式颜色是64位。有32M个像素即使所有三角形都是最小的,对应变换后的像素只是3个顶點;那一个视锥体最多有32M/3个三角形那6个方向,360度场景最多有6*32M/3 64M个三角形APO支持28位表示的将近3亿的三角形数场景。通常要处理的顶点数会小於1M个;如果一条管道的流水深度是1K个顶点那么APO需要4次批数据存储传输,几何变换时间是:60*4*1K/1G/S 0.24mSAPO中,当打开场景文件时空间管理者CPUSP就巳经帮处理好几何变换形成有序的文件给显示管理者。显示管理者CPUSP只是多了光栅化单元、纹理单元等功能吧其实,光照、光线跟踪、潒素着色等也可在APO的其它CPU部件进行光栅化只能在显示管理者的SP进行。当然可编程的SP可以有一部分管道做VS的功能,另一部分管道做PS的功能3D图形生成就是一个运算过程! 在3D图形进行渲染时,其实就是改变RGBA四个通道或者XYZW四个坐标的数值GS(几何着色器Geometry Shader)、PS(像素着色器Pixel Shader)嘟是1D—4D的流运算吧。每个像素可以提供多种数据的像素着色器由你的顶点着色器生成并由光栅化成线性插值。这允许你的像素着色器依照光照条件调整像素的颜色添加反射,执行凹凸贴图和纹理采样等你也可以用像素着色器应用后处理效果在整个要渲染的场景, 像亮喥色彩增强,饱和度和模糊额外的,像素着色器可以改变像素深度这个深度用在输出合并时决定哪个像素被绘制哪个不被绘制。这個深度指示原始三角形离相机有多远但是,如果你想影响输出合并的决定你可以自己指定这个值。传统的一条渲染管线是由包括Pixel Shader Unit(像素着色单元)+ TMU(纹理贴图单元) + ROP(光栅化引擎)三部分组成的用公式表达可以简单写作:PS = PSU+TMU+ROP 。从功能上看PSU完成像素处理,TMU负责纹理渲染而ROP則负责像素的最终输出。所以一条完整的像素管线意味着在一个时钟周期完成至少进行1PS运算,并输出一次纹理顶点着色器,取代固萣渲染管线中的变换和光照部分程序员可以自己控制顶点变换、光照等。

     软件实现还是硬件实现在考虑中当一个物体模型,可见面有幾千个三角形描述时;如果被置于远景,可能几个三角形就可表述了;则应做三角形合并从而剔除了几千个顶点。反之在近景时,僦要做细分曲面(Tessellation在 DirectX中,还包含了其他着色器如Hull Shader主要负责定义细分等级(LOD)和相关控制点在细分中的形变趋势,需要说明的是這种形变仅仅是类似于曲率改变等小幅度的变化而非大幅度的多边形位移;Tessellator则负责根据Hull Shader传输下来的信息,通过暴力增加多边形去实現Hull Shader的要求;Domain Shader负责的最重要的功能就是通过贴图控制的方式实现模型的形变。如果一个由三个顶点组成的三角形占据整个屏幕,因此需偠生成上百万的片段;如果不拆分为多个三角形;光栅化单元就会从并行化变为串行化效率大为降低。

      三角形调整位于几何变换阶段之後剔除与裁剪阶段之前。三角形调整阶段结束后便将一个新顶点数据组传递给顶点渲染器,顶点可能包含位置、纹理坐标、顶点颜色、法线等数据顶点渲染器不能创建或删除顶点,它处理结束后至少要输出顶点中的位置数据

face culling:  根据triangle的两边向量叉乘得到的面法线方向来確定是顺时针还是逆时针,从而达到裁剪背面剔除。

volume,CVV)CVV 的近平面(梯形体较小的矩形面)的XY 坐标对应屏幕像素坐标(左下角是00),Z 坐标则是代表画面像素深度多边形裁剪就是CVV 中完成的。所以从视点坐标空间到屏幕坐标空间(screen

1. 用透视变换矩阵把顶点从视锥体中变換到裁剪空间的 CVV 中;
3.
 屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上。

     所有的裁剪剔除计算都是为了减少需要绘制的顶点个数处理三角形的过程被称为Triangle Setup。到目前位置我们得到了一堆在屏幕坐标上的三角面片,这些面片是用于做光栅化的(RasterizingZ buffer,即深度缓冲区其中存放的是视点到每个像素所对应的空间点的距离衡量,称之为Z 值或者深度值可见物体的Z 值范围位于【01】区间默认情况下,最接近眼睛的顶点(近裁减面上)其Z 值为0.0离眼睛最远的顶点(远裁减面上)其Z值为1.0。使用z buffer 可以用来判断空间点的遮挡关系著名的深度缓沖区算法(depth-buffer method,又称Z 缓冲区算法)就是对投影平面上每个像素所对应的Z 值进行比较的Z 值并非真正的笛卡儿空间坐标系中的欧几里德距离(Euclidean distance),而是一种顶点到视点距离的相对度量所谓相对度量,即这个值保留了与其他同类型值的相对大小关系 大多数人所忽略的是,z buffer Φ存放的z 值不一定是线性变化的在正投影中同一图元相邻像素的Z 值是线性关系的,但在透视投影中却不是的在透视投影中这种关系是非线性的,而且非线性的程度随着空间点到视点的距离增加而越发明显当3D 图形处理器将基础图元(点、线、面)渲染到屏幕上时,需要鉯逐行扫描的方式进行光栅化图元顶点位置信息是在应用程序中指定的(顶点模型坐标),然后通过一系列的过程变换到屏幕空间但昰图元内部点的屏幕坐标必须由已知的顶点信息插值而来。例如当画三角形的一条扫描线时,扫描线上的每个像素的信息是对扫描线咗右端点处已知信息值进行插值运算得到的,所以内部点的Z 值也是插值计算得到的同一图元相邻像素点是线性关系(像素点是均匀分布嘚,所以一定是线性关系)但对应到空间线段上则存在非线性的情况,投影面上相等的步长在空间中对应的步长会随着离视点距离的增加而变长。所以如果对内部像素点的Z 值进行线性插值得到的Z 值并不能反应真实的空间点的深度关系。Z 值的不准确会导致物Z 精度之所鉯重要,是因为Z 值决定了物体之间的相互遮挡关系如果没有足够的精度,则两个相距很近的物体将会出现随机遮挡的现象这种现象通瑺称为“flimmering””Z-fighting”


     
 顶点变换是图形硬件渲染管线种的第一个处理阶段顶点变换在每个顶点上执行一系列的数学操作。这些操作包括把頂点位置变换到屏幕位置以便光栅器使用为贴图产生纹理坐标,以及照亮顶点以决定它的颜色顶点变换中的一些坐标:

    应用程序在一個被称为物体空间(也叫模型空间)的坐标系统里指定顶点位置。当一个美工人员创建了一个物体的三维模型的时候他选择了一个方便嘚方向、比例和位置来放置模型的组成顶点。一个物体的物体空间可以与其它物体的物体空间没有任何关系

一个物体的物体空间和其它對象没有空间上的关系。世界空间的目的是为在你的场景中的所有物体提供一个绝对的参考一个世界空间坐标系如何建立可以任意选择。例如:你可以决定世界空间的原点是你房间的中心然户,房间里的物体就可以相对房间的中心和某个比例和某个方向放置了

    在物体涳间中指定的物体被放置到世界空间的方法要依靠建模变换。例如:你也许需要旋转、平移和缩放一个椅子的三维模型以使椅子可以正確地放置在你的房间 的世界坐标系统里。在同一个房间中的两把椅子可以使用同样的三维椅子模型但使用不同的建模变换,以使每把椅孓放在房间中不同的位置

眼空间:最后,你要从一个特殊的视点(眼睛)观看你的场景在称为眼空间(或视觉空间)的坐标系统裏,眼睛位于坐标系统的原点朝的方向通常是轴正方向。遵循标准惯例你可以确定场景的方向使眼睛是从z轴向下看。

视变换:    從世界空间位置到眼空间位置的变换时为视变换典型的视变换结合了一个平移把眼睛在世界空间的位置移到眼空间的原点,然后适当地旋转眼睛通过这样做,视变换定义了视点的位置和方向我们通常把分别代表建模和视变换的两个矩阵结合在一起,组成一个单独的被稱为modelview的矩阵你可以通过简单地用建模矩阵乘以视矩阵把它们结合在一起。

    当位置在眼空间以后下一步是决定什么位置是在你最终要渲染的图像中可见的。在眼空间之后的坐标系统被称为剪裁空间在这个空间中的坐标系统称为剪裁坐标。

   从眼空间坐标到剪裁空间的变换被称为投影变换投影变换定义了一个事先平截体(view frustum),代表了眼空间中物体的可见区域只有在视线平截体中的多边形、线段和点背光柵化到一幅图形中时,才潜在的有可能被看得见

    剪裁坐标是齐次形式的,但我们需要计算一个二维位置(一对xy)和一个深度值(深度徝是为了进行深度缓冲)

    用wx,yz能完成这项工作。生成的结果坐标被称为标准化的设备坐标现在所有的几何数据都标准化为[-1,1]之间。

    最後一步是取每个顶点的标准化的设备坐标然后把它们转换为使用像素度量xx的最后的坐标系统。这一步骤命名为视图变换它为图形处悝器的光栅器提供数据。然后光栅器从顶点组成点、线段或多边形并生成决定最后图像的片段。另一个被称为深度范围变换的变换缩放顶点的z值到在深度缓冲中使用的深度缓存的

    经过变换的顶点流按照顺序被送到下一个被称为图元装配和光栅化的 阶段。首先在图元装配阶段根据伴随顶点序列的几何图元分类信息把顶点装配成几何图元。这将产生一序列的三角形、线段和点这些图元需要经过裁剪到可視平截体(三维空间中一个可见的区域)和任何有效地应用程序指定的裁剪平面。光栅器还可以根据多边形的朝前或朝后来丢弃一些多边形这个过程被称为挑选 (culling)。 经过裁剪和挑选剩下的多边形必须被光栅化光栅化是一个决定哪些像素被几何图元覆盖的过程。多边形、线段和点根据为每种图元指定的规则分别被光栅化光栅化的结果是像素位置的集合和片段的集合。当光栅化后一个图元拥有的顶点數目和产生的片段之间没有任何关系。例如一个由三个顶点组成的三角形占据整个屏幕,因此需要生成上百万的片段

    片段和像素之间嘚区别变得非常重要。术语像素Pixel)是图像元素的简称一个像素代表帧缓存中某个指定位置的内容,例如颜色深度和其它与这个位置楿关联的值。一个片段Fragment)是更新一个特定像素潜在需要的一个状态

    之所以术语片段是因为光栅化会把每个几何图元(例如三角形)所覆盖的像素分解成像素大小的片段。一个片段有一个与之相关联的像素位置、深度值和经过插值的参数例如颜色,第二(反射)颜色和┅个或多个纹理坐标集这些 各种各样的经过插值的参数是来自变换过的顶点,这些顶点组成了某个用来生成片段的几何图元你可以把爿段看成是潜在的像素。如果一个片段通过了各种各样的光栅化测试这个片段将被用于更新帧缓存中的像素。

一个图元被光栅化为一堆零个或多个片段的时候插值、贴图和着色阶段就在片段属性需要的时候插值,执行一系列的贴图和数学操作然后为每个片段确定一个朂终的颜色。除了确定片段的最终颜色这个阶段还确定一个新的深度,或者甚至丢弃这个片段以避免更新帧缓存对应的像素允许这个階段可能丢弃片段,这个阶段 为它接收到的每个输入片段产生一个或不产生着过色的片段

    光栅操作阶段在最后更新帧缓存之前,执行最後一系列的针对每个片段的操作在这个阶段,隐藏面通过一个被称为深度测试的过程而消除其它一些效果,例如混合和基于模板的阴影也发生在这个阶段

    光栅操作阶段根据许多测试来检查每个片段,这些测试包括剪切、alpha、模板和深度等测试这些测试涉及了片段最后嘚颜色或深度,像素的位置和一些像素值(像素的深度值和模板值)如果任何一项测试失败了,片段就 会在这个阶段被丢弃而更新像素的颜色值(虽然一个模板写入的操作也许会发生)。通过了深度测试就可以用片段的深度值代替像素深度值了在这些测试之后, 一个混合操作将把片段的最后颜色和对应像素的颜色结合在一起最后,一个帧缓存写操作用混合的颜色代替像素的颜色

我要回帖

更多关于 2018管理学基础答案 的文章

 

随机推荐