unreal 中增加镜头光圈_unreal4 镜头动画 - CSDN
精华内容
参与话题
  • UE4使用UMG接口操作界面

    万次阅读 2016-12-24 15:04:29
    原文链接:http://gad.qq.com/article/detail/7181131本文首发腾讯GAD开发者平台,未经允许,不得转载UE4的蓝图之强大让人欲罢不能,但是实际在项目的开发,C++与蓝图都需要结合使用,单独选择一样开发都不是特别...

    原文链接:http://gad.qq.com/article/detail/7181131

    本文首发腾讯GAD开发者平台,未经允许,不得转载


    UE4的蓝图之强大让人欲罢不能,但是实际在项目的开发中,C++与蓝图都需要结合使用,单独选择一样开发都不是特别科学,这里我就来研究了一下C++使用UMG接口来操作界面,我的目的非常简单,用C++来创建界面,并在创建成功的时候,告诉界面打印出相关信息。

    1.创建一个C++的空模板工程,命名UMGProject,用VS打开工程文件,找到UMGProject.Build.cs,在PublicDependencyModuleNames后面添加UMG模块,并取消PrivateDependencyModuleNames的注释,并编译工程。
    using UnrealBuildTool;
    public class UMGProject : ModuleRules
    {
    	public UMGProject(TargetInfo Target)
    	{
    		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","UMG" });
    
    		PrivateDependencyModuleNames.AddRange(new string[] {  });
    
    		// Uncomment if you are using Slate UI
    		 PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
    		
    		// Uncomment if you are using online features
    		// PrivateDependencyModuleNames.Add("OnlineSubsystem");
    
    		// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
    	}
    }

    2.回到UE4的工程中,在Content下创建一个Blueprint的文件夹,在Blueprint下右键空白处点击选择User Interface/Wiget Blueprint,命名BP_UI
    3.双击打开BP_UI,在中间添加一个Text控件,并设置为显眼一点的红色,并设置它的IsVariable为true,后面再创建函数的时候才方便使用。
    4.并且我在BP_UI里面创建一个函数接口,在右上角点击Graph,添加一个Functions,命令为ShowMessage,功能就是用Text显示传送过来的信息。

    5.在C++ Classes下面创建一个新的Class,继承自PlayerController,命名为UMGPlayerController,用VS打开后,我们需要在UMGPlayerController.h文件中的UCLASS里面添加Abstract和Blueprintable,UCLASS表示类修饰符,里面的参数是类具体的表述。
    Abstract 类修饰符将类声明为“抽象基类”,这样会阻止用户在虚幻编辑器中向这个世界中添加这个类的Actor,或者在游戏过程中创建这个类的实例,而Blueprintable指定该类为创建蓝图的可接受基类。除非被继承,否则默认值为NotBlueprintable。它由子类继承。
    同时在这个类中,我们还会用到一个函数修饰符,BlueprintImplementableEvent,表示此函数可以在蓝图或关卡蓝图图表内进行重载。这里就是用于C++与蓝图的交互接口,同时这个函数不用在cpp中再去实现它,完成后编译。
    #include "GameFramework/PlayerController.h"
    #include "UMGPlayerController.generated.h"
    /**
     * 
     */
    UCLASS(Abstract, Blueprintable)
    class UMGPROJECT_API AUMGPlayerController : public APlayerController
    {
    	GENERATED_BODY()
    public:
    		/**此函数可以在蓝图或关卡蓝图图表内进行重载*/
    		UFUNCTION(BlueprintImplementableEvent, Category = "UMG")
    		void PrintMessage(const FString &Message);
    };

    6.在ue4中,Content/Blueprint下创建一个新的蓝图继承自上面所写的UMGPlayerController,命名为BP_UMGController。
    7.我们再打开C++下面的UMGProjectGameMode,详细解释,都写在了注释中,主要在C++的顶上要添加UMG.h的头文件,在UMG.h包括了UMG整个模块的所有头文件,所以我们只添加它一个就可以了,在完成后,编译一下。
    头文件:
    #pragma once
    #include "UMG.h"
    #include "GameFramework/GameMode.h"
    #include "UMGProjectGameMode.generated.h"
    /**
     * 
     */
    UCLASS()
    class UMGPROJECT_API AUMGProjectGameMode : public AGameMode
    {
    	GENERATED_BODY()
    public:
    	AUMGProjectGameMode();
    	~AUMGProjectGameMode();
    
    	virtual void BeginPlay() override;
    	//获取菜单
    	UFUNCTION(BlueprintCallable, Category = "UMG")
    	UUserWidget* GetCountWidget();
    
    protected:
    	//菜单
    	UPROPERTY()
    	UUserWidget* CountWidget;
    	//创建菜单
    	void CreateCountWidget();
    };

    源文件:

    #include "UMGProject.h"
    #include "UMGProjectGameMode.h"
    #include "UMGPlayerController.h"
    
    AUMGProjectGameMode::AUMGProjectGameMode()
    {
    	//通过路径找到蓝图,并将蓝图控制器的类设置给PlayerControllerClass  
    	static ConstructorHelpers::FClassFinder<AUMGPlayerController> UMGControllerClassFinder(TEXT("/Game/Blueprint/BP_UMGController"));
    	PlayerControllerClass = UMGControllerClassFinder.Class;
    
    	CreateCountWidget();
    }
    AUMGProjectGameMode::~AUMGProjectGameMode()
    {
    }
    
    void AUMGProjectGameMode::BeginPlay()
    {
    	Super::BeginPlay();
    	//获取PlayerController并调用开始所写的PrintMessage函数
    	Cast<AUMGPlayerController>(GetWorld()->GetFirstPlayerController())->PrintMessage(TEXT("开始游戏~~~"));
    }
    
    UUserWidget* AUMGProjectGameMode::GetCountWidget()
    {
    	//返回计数界面
    	return CountWidget;
    }
    
    void AUMGProjectGameMode::CreateCountWidget()
    {
    	//通过路径找到蓝图
    	static ConstructorHelpers::FClassFinder<UUserWidget> UMGClassFinder(TEXT("/Game/Blueprint/BP_UI"));
    	//通过蓝图的类,创建菜单
    	CountWidget = CreateWidget<UUserWidget>(GetWorld(), UMGClassFinder.Class);
    	//添加到视图中
    	if (CountWidget != nullptr)
    		CountWidget->AddToViewport();
    }

    8.再打开ue4的BP_UMGController,点击Functions的Override,就会看到我们所写的PrintMessage
    然后点击PrintMessage链接以下蓝图,就是在调用PrintMessage的时候,我们再去调用UI的ShowMessage,将传来的Message显示出来。
    9.编译运行,运行顺序差不多就是在GameMode的构造函数里面设置PlayerController,然后通过路径找到并创建我们的BP_UI,然后再在BeginPlay里面输出文字信息。
    感觉绕了一大圈,做了一个特别小的功能,不过这里主要也是为了表现C++使用UMG的接口,和C++调用蓝图的函数,在实际开发中C++与蓝图的交互是相当重要的。
    展开全文
  • 这是一篇近万字的文章,关于基于图像的渲染(Image-Based Rendering,简称IBR)技术的方方面面,将总结《RTR3》书第十章提到的16种游戏开发常用的IBR渲染技术。他们包括: 渲染谱 The Rendering Spectrum 固定视角...

     

    本文由@浅墨_毛星云 出品,转载请注明出处。  
    文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500


     


    这是一篇近万字的总结式文章,关于基于图像的渲染(Image-Based Rendering,简称IBR)技术的方方面面,将总结《RTR3》书中第十章提到的16种游戏开发中常用的IBR渲染技术。他们包括:

    • 渲染谱 The Rendering Spectrum
    • 固定视角的渲染 Fixed-View Rendering
    • 天空盒 Skyboxes
    • 光场渲染 Light Field Rendering
    • 精灵与层 Sprites and Layers
    • 公告板 Billboarding
    • 粒子系统 Particle System
    • 替代物 Impostors
    • 公告板云 Billboard Clouds
    • 图像处理 Image Processing
    • 颜色校正 Color Correction
    • 色调映射 Tone Mapping
    • 镜头眩光和泛光 Lens Flare and Bloom
    • 景深 Depth of Field
    • 运动模糊 Motion Blur
    • 体渲染 Volume Rendering


    在过去很多年里,基于图像的渲染(Image-Based Rendering ,简称IBR),已经自成一派,逐渐发展成了一套广泛的渲染理念。正如其字面所表示的,图像是用于渲染的主要数据来源。用图像表示一个物体的最大好处在于渲染消耗与所要绘制的像素数量成正比,而不是几何模型的顶点数量。因此,使用基于图像的渲染是一种有效的渲染模型的方法。除此之外,IBR技术还有其他一些更为广泛的用途,比如云朵,皮毛等很多很难用多边形来表示的物体,却可以巧妙运用分层的半透明图像来显示这些复杂的表面。


    OK,下面开始正文,对这16种常见的基于图像的渲染技术,分别进行介绍。

     

     

     



    一、渲染谱 The Rendering Spectrum



    众所周知,渲染的目的就是在屏幕上渲染出物体,至于如何达到结果,主要依赖于用户的选择,白猫黑猫,抓到老鼠的就是好猫。而用多边形将三维物体显示在屏幕上,并非是进行三维渲染的唯一方法,也并非是最合适的方法。多边形具有从任何视角以合理的方式表示对象的优点,当移动相机的时候,物体的表示可以保持不变。但是,当观察者靠近物体的时候,为了提高显示质量,往往希望用比较高的细节层次来表示模型。与之相反,当物体位于比较远的地方时,就可以用简化形式来表示模型。这就是细节层次技术(Level Of Detail,LOD)。使用LOD技术主要目的是为了加快场景的渲染速度。

    还有很多技术可以用来表示物体逐渐远离观察者的情形,比如,可以用图像而不是多边形来表示物体,从而减少开销,加快渲染速度。另外,单张图片可以很快地被渲染到屏幕上,用来表示物体往往开销很小。

     

    如《地平线:黎明》远处的树木,即是采用公告板技术(Billboard)替换3D树木模型进行渲染。(关于公告板技术的一些更具体的总结,详见本文第六节)。


    图1  《地平线:黎明》中利用了Billboard进行画面的渲染

     

    Lengyel于1998在《The Convergence of Graphics and Vision》一文中提出了一种表示渲染技术连续性的方法,名为The Rendering Spectrum 渲染谱,如下图所示。


    图2 渲染谱 The Rendering Spectrum(RTR3书中版本)

     


    图3 渲染谱 The Rendering Spectrum(Lengyel 1998论文版本)

     

    可以将渲染谱理解为渲染的金字塔。从左到右,由简单到复杂,由二维图像到几何模型,从外观特征到物理渲染。

     

     





    二、固定视角的渲染 Fixed-View Rendering



    固定视角的渲染(Fixed-View Rendering),通过将复杂几何模型转换为可以在多帧中重复使用的一组简单的buffer来节省大量渲染时间与性能。

     

    对于复杂的几何和着色模型,每帧去重新渲染整个场景很可能是昂贵的。可以通过限制观看者的移动能力来对渲染进行加速。 最严格的情况是相机固定在位置和方位,即根本不移动。而在这种情况下,很多渲染可以只需做一次。

     

    例如,想象一个有栅栏的牧场作为静态场景,一匹马穿过它。牧场和栅栏渲染仅一次,存储其颜色和Z缓冲区。每帧将这些buffer复制到可显示的颜色和Z缓冲中。为了获得最终的渲染效果,马本身是需要渲染的。如果马在栅栏后面,存储和复制的z深度值将把马遮挡住。请注意,在这种情况下,马不能投下阴影,因为场景无法改变。可以进行进一步的处理,例如,可以确定出马影子的区域,根据需求进行处理。关键是对于要显示的图像的颜色何时或如何设置这点上,是没有限制的。固定视角的特效(Fixed-View Effects),可以通过将复杂几何模型转换为可以在多帧中重复使用的一组简单的buffer来节省大量时间。

     

    在计算机辅助设计(CAD)应用程序中,所有建模对象都是静态的,并且在用户执行各种操作时,视图不会改变。一旦用户移动到所需的视图,就可以存储颜色和Z缓冲区,以便立即重新使用,然后每帧绘制用户界面和突出显示的元素。 这允许用户快速地注释,测量或以其他方式与复杂的静态模型交互。通过在G缓冲区中存储附加信息,类似于延迟着色的思路,可以稍后执行其他操作。 例如,三维绘画程序也可以通过存储给定视图的对象ID,法线和纹理坐标来实现,并将用户的交互转换为纹理本身的变化。

     

    一个和静态场景相关的概念是黄金线程(Golden Thread)或自适应(Adaptive Refinement)渲染。其基本思想是,当视点与场景不运动时,随着时间的推移,计算机可以生成越来越好的图像,而场景中的物体看起来会更加真实,这种高质量的绘制结果可以进行快速交换或混合到一系列画面中。这种技术对于CAD或其他可视化应用来说非常有用。而除此之外,还可以很多不同的精化方法。一种可能的方法是使用累积缓冲器(accumulation buffer)做抗锯齿(anti- aliasing),同时显示各种累积图像。另外一种可能的方法是放慢每像素离屏着色(如光线追踪,环境光遮蔽,辐射度)的速度,然后渐进改进之后的图像。

     

    在RTR3书的7.1节介绍一个重要的原则,就是对于给定的视点和方向,给定入射光,无论这个光亮度如何计算或和隔生成这个光亮度的距离无关。眼睛没有检测距离,仅仅颜色。在现实世界中捕捉特定方向的光亮度可以通过简单地拍一张照片来完成。

    QuickTime VR是由苹果公司在1995年发布的VR领域的先驱产品,基本思路是用静态图片拼接成360度全景图。QuickTime VR中的效果图像通常是由一组缝合在一起的照片,或者直接由全景图产生。随着相机方向的改变,图像的适当部分被检索、扭曲和显示。虽然这种方法仅限于单一位置,但与固定视图相比,这种技术具有身临其境的效果,因为观看者的头部可以随意转动和倾斜。

     

    Kim,Hahn和Nielsen提出了一种有效利用GPU的柱面全景图,而且通常,这种全景图也可以存储每个纹素的距离内容或其他值,以实现动态对象与环境的交互。

    如下的三幅图,便是是基于他们思想的全景图(panorama),使用QuickTime VR来渲染出的全景视野范围。其中,第一幅是全景图原图,后两幅图是从中生成的某方向的视图。注意观察为什么这些基于柱面全景图的视图,没有发生扭曲的现象。

     

                                                                                             图4 全景图原图

     

     

                                                        图5 通过全景图得到的视图1

     

                                                  图6 通过全景图得到的视图2

     





    三、天空盒 Skyboxes

     


    对于一些远离观众的物体,观众移动时几乎没有任何视差效果。换言之,如果你移动一米,甚至一千米,一座遥远的山本身看起来通常不会有明显的不同。当你移动时,它可能被附近的物体挡住视线,但是把那些物体移开,山本身看起来也依旧一样。天空盒就属于这种类型的物体。

     

     

                                                                             图7 基于天空盒渲染的场景 @mad max

     

    环境贴图(environment map)可以代表本地空间入射光亮度。虽然环境贴图通常用于模拟反射,但它们也可以直接用来表示环绕环境的远处物体。任何独立于视图的环境地图表示都可以用于此目的;立方体贴图(cubic maps)是最为常见的一种环境贴图。环境贴图放置在围绕着观察者的网格上,并且足够大以包含场景中所有的对象。且网格的形状并不重要,但通常是立方体贴图。如下图,在该图所示的室内环境更像是一个QuickTime VR全景的无约束版本。观众可以在任何方向观察这个天空盒,得到很好的真实体验。但同样,任何移动都会破坏这个场景产生的真实感错觉,因为移动的时候,并不存在视差。


    图8 一个典型的立方体环境贴图

     

    环境贴图通常可以包含相对靠近反射对象的对象。因为我们通常并没有多精确地去在乎反射的效果,所以这样的效果依然非常真实。而由于视差在直接观看时更加明显,因此天空盒通常只包含诸如太阳,天空,远处静止不动的云和山脉之类的元素。

     


    图9 玻璃球折射和反射效果的一个立方体环境贴图,这个map本身用可作天空盒。

     

    为了使天空盒看起来效果不错,立方体贴图纹理分辨率必须足够,即每个屏幕像素的纹理像素。 必要分辨率的近似值公式:

                                                                   

    其中,fov表示视域。该公式可以从观察到立方体贴图的表面纹理必须覆盖90度的视域(水平和垂直)的角度推导出。并且应该尽可能隐藏好立方体的接缝处,最好是能做到无缝的衔接,使接缝不可见。一种解决接缝问题的方法是,使用六个稍微大一点的正方形,来形成一个立方体,这些正方形的每个边缘处彼此相互重叠,相互探出。这样,可以将邻近表面的样本复制到每个正方形的表面纹理中,并进行合理插值。

     


                                                                         图10 基于天空盒渲染的场景 @battlefield 1

     

     

     

     



    四、光场渲染 Light Field Rendering

     


    所谓光场(Light Field),可以理解为空间中任意点发出的任意方向的光的集合。

    而光场渲染(Light Field Rendering),可以理解为在不需要图像的深度信息或相关性的条件下,通过相机阵列或由一个相机按设计的路径移动,把场景拍摄下来作为输出图像集。对于任意给定的新视点,找出该视点邻近的几个采样点进行简单的重新采样和插值,就能得到该视点处的视图。

    magic leap公司目前的原型产品,Nvidia 公司的near-eye light field display,Lytro公司发布的光场相机,都是基于Light Field技术。

     

    图11 Lytro公司的光场相机

     


    图12  SIGGRAPH 2014会议上,MIT’s Camera CultureGroup介绍了一种基于开普勒望远镜中投影机和光学技术的无眼镜3D的新方法。 他们提出的“压缩光场投影(Compressive Light Field Projection)”新方法由单个设备组成,并没有机械移动的物件。







    五、精灵与层 Sprites and Layers

     


    最基本的基于图像的渲染的图元之一便是精灵(sprite)。精灵(sprite)是在屏幕上移动的图像,例如鼠标光标。精灵不必具有矩形形状,而且一些像素可以以透明形式呈现。对于简单的精灵,屏幕上会显示一个一对一的像素映射。存储在精灵中的每个像素将被放在屏幕上的像素中。可以通过显示一系列不同的精灵来生成动画。

     


                                                                图13 基于Sprite层级制作的《雷曼大冒险》@UBISOFT

     

    更一般的精灵类型是将其渲染为应用于总是面向观看者的多边形的图像纹理。图像的Alpha通道可以为sprite的各种像素提供全部或部分透明度。这种类型的精灵可以有一个深度,所以在场景本身,可以顺利地改变大小和形状。一组精灵也可以用来表示来自不同视图的对象。对于大型物体,这种用精灵来替换的表现效果会相当弱,因为从一个精灵切换到另一个时,会很容易穿帮。也就是说,如果对象的方向和视图没有显着变化,则给定视图中的对象的图像表示可以对多个帧有效。而如果对象在屏幕上足够小,存储大量视图,即使是动画对象也是可行的策略。

     

    考虑场景的一种方法是将其看作一系列的层(layers),而这种思想也通常用于二维单元动画。每个精灵层具有与之相关联的深度。通过这种从前到后的渲染顺序,我们可以渲染出整个场景而无需Z缓冲区,从而节省时间和资源。


    图14 基于Sprite层级制作的《雷曼大冒险》@UBISOFT
     

     




    六、公告板 Billboarding

     


    我们将根据观察方向来确定多边形面朝方向的技术叫做公告板(Billboarding,也常译作布告板)。而随着观察角度的变化,公告板多边形的方向也会根据需求随之改变。与alpha纹理和动画技术相结合,可以用公告板技术表示很多许多不具有平滑实体表面的现象,比如烟,火,雾,爆炸效果,能量盾(Energy Shields),水蒸气痕迹,以及云朵等。如下文中贴图的,基于公告板渲染出的云朵。

     

     

    图15 一棵由公告板技术渲染出的树木

     


    图16 给定表面的法线向量n和近似向上方向的向量u,通过创建一组由三个相互垂直的向量,就可以确定公告板的方向。其中,左图是互相垂直的u和n。中图是r向量通过u和n的叉乘得到,因此同时垂直于u和n,而在右图中,对固定向量n和r进行叉乘就可以得到与他们都垂直的的向上向量u’

     

     

    有三种不同类型的Billboard,分别是:

    • Screen-Aligned Billboard 对齐于屏幕的公告板
    • World-Oriented Billboard 面向世界的公告板
    • Axial Billboard 轴向公告板

     

    其中:

    • Screen-Aligned Billboard的n是镜头视平面法线的逆方向,u是镜头的up。
    • Axial Billboard的u是受限制的Axial, r = u* n,(n是镜头视平面法线的逆方向,或,视线方向的逆方向),最后再计算一次n' = r * u,即n'才是最后可行的代入M的n,表达了受限的概念。
    • World-orientedbillboard就不能直接使用镜头的up做up,因为镜头roll了,并且所画的billboard原本是应该相对世界站立的,按Screen-Aligned的做法就会随镜头旋转,所以此时应该r = u * n(u是其在世界上的up,n是镜头视线方向的逆方向),最后再计算一次u = r * n,即u'才是最后的up,即非物体本身相对世界的up,亦非镜头的up。

     

     

    所以公告板技术是一种看似简单其实较为复杂的技术,它的实现变种较多。归其根本在于

    • View Oriented / View plane oriented的不同
    • Sphere/ Axial的不同
    •  Cameraup / World up的不同

     

    如View Oriented 和View plane oriented的不同,得到的公告板效果就完全不同:


    图17 两种公告板对其技术的顶视图,左图为view plane-aligned(视图平面对齐),右图为viewpoint-oriented(视点对齐),其面向的方向根据算法的不同而有所不同。


     

    图18 使用world-oriented Billboard创建的云层

     


    在Unreal 4 Engine中,使用Axial Billboard作为树木LOD中的一级的一些图示 :

     

    图19 使用Axialbillboard作为树木LOD中的一级 @Unreal 4 Engine



    图20 使用Axialbillboard作为树木LOD中的一级 @Unreal 4 Engine

     

     





    七、粒子系统 Particle System

     



    粒子系统(Particle System)是一组分散的微小物体集合,其中这些微小物体按照某种算法运动。粒子系统的实际运用包括模拟火焰,烟,爆炸,流水,树木,瀑布,泡沫,旋转星系和其他的一些自然现象。粒子系统并不是一种渲染形式,而是一种动画方法,这种方法的思想是值粒子的生命周期内控制他们的产生,运动,变化和消失。

     

    可以用一条线段表示一个实例,另外,也可以使用轴向公告板配合粒子系统,显示较粗的线条。

     

    除了爆炸,瀑布,泡沫以及其他现象以外,还可以使用粒子系统进行渲染。例如,可以使用粒子系统来创建树木模型,也就是表示树木的几何形状,当视点距离模型较近时,就会产生更多的粒子来生成逼真的视觉效果。

     

    以下是一幅用粒子系统渲染树木的示例:

     


    图21 基于粒子系统渲染的树木

     

     




    八、替代物 Impostors



    作为一种公告板技术,替代物(Impostors)是通过从当前视点将一个复杂物绘制到一幅图像纹理上来创建的,其中的图像纹理用于映射到公告板上,渲染过程与替代物在屏幕上覆盖的像素点数成正比,而不是与顶点数或者物体的复杂程度成正比。替代物可以用于物体的一些实例上或者渲染过程的多帧上,从而使整体性能获得提升。



    图22 一幅树的视图和一个Impostors(Impostors的黑色背景是透明通道,在渲染时可以处理)

     


    图23 一幅相同的树和Impostors的线框视图

     

    另外,Impostors和Billboard的纹理还可以结合深度信息(如使用深度纹理和高度纹理)进行增强。如果对Impostors和Billboard增加一个深度分量,就会得到一个称为深度精灵(depth sprite)或者nailboard(译作钉板,感觉很奇怪)的相关绘制图元。也可以对Impostors和Billboard的纹理做浮雕纹理映射(relief texture mapping)。

     

    关于Impostors,一篇很好的文章是William Damon的《Impostors Made Easy》,有进一步了解兴趣的朋友可以进行延伸阅读:

    https://software.intel.com/en-us/articles/impostors-made-easy

     






    九、公告板云 Billboard Clouds



    使用Imposters的一个问题是渲染的图像必须持续地面向观察者。如果远处的物体正在改变方向,则必须重新计算Imposters的朝向。而为了模拟更像他们所代表的三角形网格的远处物体,D´ecoret等人提出了公告板云(Billboard Clouds)的想法,即一个复杂的模型通常可以通过一系列的公告板集合相互交叉重叠进行表示。我们知道,一个真实物体可以用一个纸模型进行模拟,而公告板云可以比纸模型更令人信服,比如公告板云可以添加一些额外的信息,如法线贴图、位移贴图和不同的表面材质。另外,裂纹沿裂纹面上的投影也可以由公告板进行处理。而D´ecoret等人也提出了一种在给定误差容限内对给定模型进行自动查找和拟合平面的方法。

     

    如下是在UNIGINE Engine(注意这不是虚幻引擎,经常会被看错)中基于Billboard Clouds技术创建云层效果的一个示例:

     

    图24 Billboard Clouds技术创建云层示例图 @UNIGINE Engine



    图25 Billboard Clouds技术创建云层的最终效果图 @UNIGINE Engine

     

     






    十、图像处理 Image Processing

     



    图像处理的过程,一般在像素着色器中进行,因为在像素着色器中,可以很好地将渲染过程和纹理结合起来,而且在GPU上跑像素着色器,速度和性能都可以满足一般所需。

    一般而言,首先需要将场景渲染成2D纹理或者其他图像的形式,再进行图像处理,这里的图像处理,往往指的是后处理(post effects)。而下文将介绍到的颜色校正(Color Correction)、色调映射(Tone Mapping)、镜头眩光和泛光(Lens Flare and Bloom)、景深(Depth of Field)、运动模糊(Motion Blur),一般而言都是后处理效果。

     

     

    图26 使用像素着色器进行图像处理。左上为原始图像;右上角为高斯差分操作的图像,左下为经过边缘检测的图像,右下为边缘检测与原图像的混合。

     

     




     


    十一、颜色校正 Color Correction

     


    色彩校正(Color correction)是使用一些规则来转化给定的现有图像的每像素颜色到其他颜色的一个过程。颜色校正有很多目的,例如模仿特定类型的电影胶片的色调,在元素之间提供一致的外观,或描绘一种特定的情绪或风格。一般而言,通过颜色校正,游戏画面会获得更好的表现效果。

     

     

    图27 左图是准备进行颜色校正的原图。右图是通过降低亮度,使用卷积纹理(Volume Texture),得到的夜间效果。@Valve

     


    颜色校正通常包括将单个像素的RGB值作为输入,并向其应用算法来生成一个新的RGB。颜色校正的另一个用途是加速视频解码,如YUV色彩空间到RGB色彩空间的转换。基于屏幕位置或相邻像素的更复杂的功能也可行,但是大多数操作都是使用每像素的颜色作为唯一的输入。

     

    对于一个计算量很少的简单转换,如亮度的调整,可以直接在像素着色器程序中基于一些公式进行计算,应用于填充屏幕的矩形。

     

    而评估复杂函数的通常方法是使用查找表(Look-Up Table,LUT)。由于从内存中提取数值经常要比复杂的计算速度快很多,所以使用查找表进行颜色校正操作,速度提升是很显著的。

     

     

    图28 原图和经过色彩校正后的几幅效果图 @Unreal 4 Engine

     

     

    图29 原图和经过颜色校正的效果图 @Crysis

     

     





    十二、色调映射 Tone Mapping

     


     

    计算机屏幕具有特定的亮度范围,而真实图像具有更巨大的亮度范围。色调映射(Tonemapping),也称为色调复制(tone reproduction),便是将宽范围的照明级别拟合到屏幕有限色域内的过程。色调映射与表示高动态范围的HDR和HDRI密切相关:

    • HDR,是High-Dynamic Range(高动态范围)的缩写,可以理解为一个CG的概念,常出现在计算机图形学与电影、摄影领域中。
    • HDRI是High-Dynamic Range Image的缩写,即HDR图像,高动态范围图像。
    • 而实际过程中,HDR和HDRI两者经常会被混用,都当做高动态范围成像的概念使用,这也是被大众广泛接受的。

    本质上来讲,色调映射要解决的问题是进行大幅度的对比度衰减将场景亮度变换到可以显示的范围,同时要保持图像细节与颜色等表现原始场景的重要信息。

    根据应用的不同,色调映射的目标可以有不同的表述。在有些场合,生成“好看”的图像是主要目的,而在其它一些场合可能会强调生成尽可能多的细节或者最大的图像对比度。在实际的渲染应用中可能是要在真实场景与显示图像中达到匹配,尽管显示设备可能并不能够显示整个的亮度范围。

     


    图30 经过色调映射得到的高动态范围图像 @新西兰惠灵顿圣保罗教堂

     

     

     


     


     

    十三、镜头眩光和泛光 Lens Flare and Bloom

     



    镜头眩光(Lens flare)是由于眼睛的晶状体或者相机的透镜直接面对强光所产生的一种现象,由一圈光晕(halo)和纤毛状的光环(ciliary corona)组成。光晕的出现是因为透镜物质(如三棱镜)对不同波长光线折射数量的不过而造成的,看上去很像是光周围的一个圆环,外圈是红色,内圈是紫红色。纤毛状的光环源于透镜的密度波动,看起来像是从一个点发射出来的光线。Lens flare是近来较为流行的一种图像效果,自从我们认识到它是一种实现真实感效果的技术后,计算机便开始模拟此效果。


    图31 镜头眩光效果 @WatchDogs

     


    泛光(Bloom)效果,是由于眼睛晶状体和其他部分的散光而产生,在光源附近出现的一种辉光。在现实世界中,透镜无法完美聚焦是泛光效果的物理成因;理想透镜也会在成像时由于衍射而产生一种名为艾里斑的光斑。


    常见的一个误解便是将HDR和Bloom效果混为一谈。Bloom可以模拟出HDR的效果,但是原理上和HDR相差甚远。HDR实际上是通过映射技术,来达到整体调整全局亮度属性的,这种调整是颜色,强度等都可以进行调整,而Bloom仅仅是能够将光照范围调高达到过饱和,也就是让亮的地方更亮。不过Bloom效果实现起来简单,性能消耗也小,却也可以达到不错的效果。

     


    图32 Bloom效果 @ Battlefield3

     


    图33 《Battlefield 3》中的渲染效果,同时包含镜头眩光(Lens flare),泛光(Bloom)和Dirty Lens

     





     

    十四、景深 Depth of Field

     



    在光学领域,特别是摄影摄像领域,景深(Depth of field,DOF),也叫焦点范围(focus range)或有效焦距范围(effective focus),是指场景中最近和最远的物体之间出现的可接受的清晰图像的距离。换言之,景深是指相机对焦点前后相对清晰的成像范围。在相机聚焦完成后,在焦点前后的范围内都能形成清晰的像,这一前一后的距离范围,便叫做景深。

     

    图34 摄影中典型的景深效果

     

    虽然透镜只能够将光聚到某一固定的距离,远离此点则会逐渐模糊,但是在某一段特定的距离内,影像模糊的程度是肉眼无法察觉的,这段距离称之为景深。当焦点设在超焦距处时,景深会从超焦距的一半延伸到无限远,对一个固定的光圈值来说,这是最大的景深。

     

    景深通常由物距、镜头焦距,以及镜头的光圈值所决定(相对于焦距的光圈大小)。除了在近距离时,一般来说景深是由物体的放大率以及透镜的光圈值决定。固定光圈值时,增加放大率,不论是更靠近拍摄物或是使用长焦距的镜头,都会减少景深的距离;减少放大率时,则会增加景深。如果固定放大率时,增加光圈值(缩小光圈)则会增加景深;减小光圈值(增大光圈)则会减少景深。

     

    景深的效果在计算机图形学中应用广泛,电影,游戏里面经常会利用景深特效来强调画面重点。相应的,已经有了很多成熟的算法在不同的渲染方法,而光栅化可以很高效的实现现有的景深算法。



    图35 景深效果 @Battlefield 4

     

     

    图36 景深效果 @ Witcher2

     

     

     



    十五、运动模糊 Motion Blur

     


    现实世界中,运动模糊(Motion Blur,或译为或动态模糊),是因为相机或者摄影机的快门时间内物体的相对运动产生的。在快门打开到关上的过程中,感光材料因为受到的是物体反射光持续的照射成像。即在曝光的这个微小时间段内,对象依然在画面中移动,感光材料便会记录下这段时间内物体运动的轨迹,产生运动模糊。

    我们经常在电影中看到这种模糊,并认为它是正常的,所以我们期望也可以在电子游戏中看到它,以带给游戏更多的真实感。

     

    若无运动模糊,一般情况下,快速移动的物体会出现抖动,在帧之间的多个像素跳跃。这可以被认为是一种锯齿,但可以理解为基于时间的锯齿,而不是基于空间的锯齿。在这个意义上,运动模糊可以理解为是一种时间意义上的抗锯齿。

     

    正如更高的显示分辨率可以减少但不能消除锯齿,提高帧速率并不能消除运动模糊的需要。而视频游戏的特点是摄像机和物体的快速运动,所以运动模糊可以大大改善画面的视觉效果。而事实表明,带运动模糊的30 FPS画面,通常看起来比没有带运动模糊的60 FPS画面更出色。

     


    图37 Motion Blur效果 @GTA5

     

    在计算机绘制中产生运动模糊的方法有很多种。一个简单但有限的方法是建模和渲染模糊本身。

     

    实现运动模糊的方法大致分3种:

     

    1、直接渲染模糊本身。通过在对象移动之前和之后添加几何体来完成,并通过次序无关的透明,避免Alpha混合。

    2、基于累积缓冲区(accumulationbuffer),通过平均一系列图像来创建模糊。

    3、基于速度缓冲器(velocity buffer)。目前这个方法最为主流。创建此缓冲区,需插入模型三角形中每个顶点的屏幕空间速度。通过将两个建模矩阵应用于模型来计算速度,一个用于最后一个帧,一个用于当前模型。顶点着色器程序计算位置的差异,并将该向量转换为相对的屏幕空间坐标。图10.34显示了速度缓冲器及其结果。


    图38 Motion Blur效果 @Battlefield4

     

    运动模糊对于由摄像机运动而变得模糊的静态物体来说比较简单,因为往往这种情况下不需要速度缓冲区。如果需要的是摄像机移动时的运动感,可以使用诸如径向模糊(radial blur)之类的固定效果。如下图。


    图39 径向模糊可以增强运动感  @《刺客信条》Ubisoft

     

     





    十六、体渲染 Volume Rendering

     


    体渲染(Volume Rendering),又称立体渲染,体绘制,是一种用于显示离散三维采样数据集的二维投影的技术。体渲染技术中的渲染数据一般用体素(Volumeric Pixel,或Voxel)来表示,每个体素表示一个规则空间体。例如,要生成人头部的医学诊断图像(如CT或MRI),同时生成256 x256个体素的数据集合,每个位置拥有一个或者多个值,则可以将其看做三维图像。因此,体渲染也是基于图像的渲染技术中的一种。


    图40 一个典型的体渲染Pipeline

     

    体渲染技术流派众多,常见的流派有:

    • 体光线投射Volume ray casting
    • 油彩飞溅技术Splatting
    • 剪切变形技术Shear warp
    • 基于纹理的体绘制Texture-based volume rendering
    • 等。


     

    图41 基于Splatting和voxel在Unreal 4中进行的体渲染

     

     

    图42 Volume Cloud(体积云)效果 @Unity 5

     


    图43 Volume Fog(体积雾)效果 @CRY ENGINE 3

     



    其他参考

     

    [1] https://udk-legacy.unrealengine.com/udk/Three/ColorGrading.html

    [2] http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=DD633186A6579497B8B1434252979C80?doi=10.1.1.164.7222&rep=rep1&type=pdf

    [3] http://blendermama.com/precise-distribution-of-trees-using-particles.html

    [4] https://software.intel.com/en-us/articles/impostors-made-easy

    [5] http://lightfield-forum.com/2014/05/mit-compressive-light-field-projection-system-for-new-glasses-free-3d-displays/

    [6] https://bartwronski.com/2014/04/07/bokeh-depth-of-field-going-insane-part-1/

    [7] http://blog.csdn.net/silangquan/article/details/17148757

    [8] https://en.wikipedia.org/wiki/Skybox_(video_games)

    [9] 胡孔明, 于瀛洁, 张之江. 基于光场的渲染技术研究[J].微计算机应用, 2008, 29(2): 22-27.

    [10] https://forums.unrealengine.com/community/community-content-tools-and-tutorials/82804-free-trees-library

    [11] http://unigine.com/cn/articles/procedural-content-generation2

    [12] https://en.wikipedia.org/wiki/Tone_mapping

    [13] https://en.wikipedia.org/wiki/Volume_rendering

     

     

     

     

     

     

     

     

    展开全文
  • Post Process Volume是Unreal 提供给创作者的一个非常有用的功能,不仅仅可以进行颜色的调制,也可以进行特效的混合,或者是视频输出时的电影效果处理,又或者是输出单帧照片时镜头的焦距调节,是一种非常特殊的体积...

    Post Process Volume各参数的释义

    Post Process Volume是Unreal 提供给创作者的一个非常有用的功能,不仅仅可以进行颜色的调制,也可以进行特效的混合,或者是视频输出时的电影效果处理,又或者是输出单帧照片时镜头的焦距调节,是一种非常特殊的体积,可以在场景中的任何地方放置。
    Transform:没什么可说的,控制盒子的位置旋转及缩放。
    在这里插入图片描述

    Lens(镜头):

    在这里插入图片描述

    Mobile Depth of Field:(移动平台景深)
    High Quality Gaussian DOF on Mobile:   在高端移动平台上启用HQ高斯。
    Focal Region(焦点区域): 在Focal Distance之后开始聚焦所有内容的人工区域。
    Focal Distance(焦距): 表示焦距区域和将被捕获的视角,场效景深影响的距离。较长焦距的景深较浅,导致物体在焦距区域之外更加模糊,而较短焦距的景深较宽,焦点较清晰,失焦的物体较少。f-stop数可以保持不变,并且改变透镜尺寸可以调整场效应深度的浅或宽。
    Near Transition Region(近过渡区): Unreal单位中距靠近相机的一侧的焦点区域的距离,当使用Bokeh或高斯自由度时,该距离使场景从聚焦过渡到模糊。
    Far Transition Region(远过渡区): Unreal单位中距靠较远相机的一侧的焦点区域的距离,当使用Bokeh或高斯自由度时,该距离使场景从聚焦过渡到模糊。
    Scale: 基于Bokeh的模糊的整体比例因子。
    Near Blur Size: 高斯基自由度的近模糊的最大大小(以视宽的百分比)性能成本随大小而变化。
    Far Blur Size: 高斯基自由度远模糊的最大尺寸。

    Bloom:
    在这里插入图片描述
    Bloom卷积设计(即Method中的Convolution)用于游戏内或离线电影或高端硬件,而标准bloom应该用于大多数游戏应用程序。在评估权衡时,标准bloom具有显著的性能优势,但它不是保守的(它可以导致图像的整体亮度),并且它缺乏Bloom卷积的视觉复杂性。
    Method:
    Method-Standard: 标准高斯模糊形式。
    Method-Convolution: 卷积模式,对游戏性能消耗大。
    Intensity: 用于调节光线绽放、灯光溢出的效果,通常在强光以及灰尘反光时会将辉光体现出来。
    Threshold: Bloom阀值。

    Exposure:
    在这里插入图片描述
    Metering Mode:
    Auto Exposure Histogram: 构造了一个64bin直方图,通过高级设置可以更好地控制自动曝光。
    Auto Exposure Basic: 是一种通过降采样计算单个值的快速方法。
    Manual: 允许使用后处理卷内的相机设置来控制曝光,而不是曝光设置。
    Exposure Compensation: 曝光的强度。
    Min Brightness: 最小亮度的自动曝光,限制较低的亮度,眼睛可以适应。值必须大于0,并且应该小于或等于最大亮度。一个好的值应该在0附近为正值,并且应该在黑暗照明的情况下进行调整:如果值太小,图像看起来太亮,如果太大,图像看起来太暗。实际值取决于所使用的内容的HDR范围。如果最小亮度=最大亮度,则禁用自动曝光。
    Max Brightness: 最大亮度的自动曝光,限制上部亮度的眼睛可以适应。值必须大于0,并且应该大于或等于最小亮度。好的值应该是正值(2是好值),并且应该在明亮的照明情况下进行调整:如果值太小,图像就显得太亮,如果太大,图像就显得太暗。实际值取决于所使用的内容的HDR范围。如果最小亮度=最大亮度,则禁用自动曝光。
    Speed Up: 适应从黑暗环境到明亮环境发生的速度。(变亮速度)
    Speed Down: 适应从明亮环境到黑暗环境发生的速度。(变暗速度)

    Chromatic Aberation(色差):
    模拟真实相机镜头颜色偏移的色差效应,镜头周围的屏幕偏移blur和色差效果非常明显。
    在这里插入图片描述
    Dirt Mask(脏迹遮罩):
    通过一个Mask贴图,模拟镜头上的脏迹,应用在游戏中穿越沙漠或者泥地时镜头上会产生灰尘或泥点等效果。可调节强度。
    在这里插入图片描述
    Camera(相机):
    Shutter Speed (1/t): 相机的快门速度
    ISO: 摄像机传感器的灵敏度。
    Aperture (f-stop): 光圈,定义相机镜头的开口的大小。使用较大的数字将减少自由度效应
    在这里插入图片描述
    Lens Flares(镜头光晕):
    Lens Flare(镜头闪光): 透镜耀斑效应是一种基于图像的技术,它模拟了由于相机镜头的缺陷而导致观看明亮物体时的光散射。
    Tint: 整个镜头的闪光颜色效果。
    Bokeh Size: 缩放Bokeh形状的半径。可能的用途:调整基于图像的镜头耀斑外观和性能(2倍半径->4倍填充率)。
    Bokeh Shape: 用来定义镜头耀斑形状的纹理。
    在这里插入图片描述
    Image Effects(图片效果):
    Vignette Intensity(暗角强度): 该参数效果如参数名称所见,即对于整个镜头的暗角处理,值越大,暗角越大。
    Grain Jitter(颗粒抖动): 该值影响颗粒的抖动频率,值越大抖动越强烈,前提是要开启下面的颗粒感参数。
    Grain Intensity(颗粒感): 该参数控制颗粒化的生成,值越大,颗粒的强度越大。
    在这里插入图片描述
    Depth of Field(景深):
    Focal Distance: 焦距,场效景深影响的距离。这个值用虚单位(cm)测量。
    在这里插入图片描述

    Color Grading(调色):

    WhiteBalance(白平衡):
    Temp(色温): 以6500为界限,低于6500,整体色调趋向于冷(偏蓝),高于6500,整体色调趋向于暖(偏黄)
    Tint(色调): 这将通过调整青色和品红色的颜色范围来调整场景的白平衡温度色调。理想情况下,一旦您调整了白平衡Temp属性以获得准确的颜色,就应该使用这个设置。在一些光温下,颜色可能看起来更黄或更蓝。这可以用来平衡输出的颜色,使之看起来更自然。
    在这里插入图片描述
    Global(全局):
    Saturation(饱和度): 指的是场景的鲜艳程度,在全局参数里显得尤为突出,通常决定场景中的颜色纯度,绿叶更绿亦或是更灰,当饱和度降低时,颜色将出现更多的灰色或褪色。
    Contrast(对比度): 指的是场景中明暗区域最亮的白与最暗的黑之间不同亮度层级之间的测量,对比度越高,对比越大。这将调整场景中明暗颜色值的色调范围。降低亮度会去除高光,使图像变亮,从而产生被冲刷的外观,而较高强度会收紧高光,使整个图像变暗。
    Gamma(伽马值): 显示器的物理属性,无法改变,因此通过引擎的属性来进行动态的调控,平衡色彩。
    Shadows(阴影): 调节整个场景中的暗部,其中的饱和度、对比度、伽马值解释同全局。
    Midtones(中间调): 调节整个场景中的灰色调,其中的饱和度、对比度、伽马值解释同全局。
    Highlights(高光): 调节整个场景中的高亮部分,其中的饱和度、对比度、伽马值解释同全局。
    在这里插入图片描述
    Misc(其他杂项):
    Scene Color Tint(颜色色调): 这是一个颜色乘法器,它是应用于HDR场景颜色的滤色器颜色
    Color Grading LUT Intensity: LUT颜色的强度
    Color Grading LUT: LUT纹理用作颜色校正的查找表
    在这里插入图片描述

    Film(电影):

    Slope、Toe、Shoudler: 三个值相当于PS之中的曲线调整,分别为曲线的高中低位。
    Black Clip: 该值会设置(定义)暗色的范围为0到black clip值。一般不调改值。
    White Clip: 该值会设置(定义)白色的范围为0到White clip值。在大多数情况下,这将表现为细微的变化。值在[0.0,1.0]的范围内。一般不调改值。
    在这里插入图片描述

    Rendering Features(渲染功能):

    Post Process Materials(后处理材质): 处理材质可以设置可与后处理一起使用的材质,以创建只能通过后处理材质来实现的视觉效果,伤害,区域类型效果或游戏的整体效果。比如扫描、描边等特效的实现。
    在这里插入图片描述
    Ambient Cubemap(环境贴图): 添加一个环境贴图,HDR贴图即可。
    Ambient Occlusion(环境光遮蔽): 同环境光遮蔽,(SSAO)是一种近似于遮挡引起的光衰减的效果。除了标准的全局照明,这通常最好用作一种微弱的效果,它使角落、缝隙或其他特征变暗,以创建更自然、更逼真的外观
    Global IIlumintaion(全局光照): 同词义,全局光的照明强度。
    Motion Blur(运动模糊):
    Amount: 运动模糊的数值,数值越大,模糊值越高,等于0时,关闭运动模糊;
    Max: 运动模糊造成的最大失真比例。
    Terget FPS: 定义FPS的运动模糊,使运动模糊独立于实际帧率,值越高,意味着将具有更短的快门时间与更小的运动模糊,反之则会得到更强的动态模糊。0时关闭。
    在这里插入图片描述
    Light Propagation Volume(光的传播体积):
    用于动态生成全局照明的系统。
    LPV的官方详细介绍
    Screen Space Reflections(屏幕空间的反射):
    Intensity(强度): 百分比,0的时候没有反射。
    Quality(质量): 0为最低质量,100为最高质量。关乎性能。
    Max Roughness(最大粗糙度): 粗糙度的最大值,0.8效果最佳,数值越小,性能越高。

    Post Process Volume Settings(后处理盒子设置):

    在这里插入图片描述
    Priority(优先级): 当多个盒子存在时,处理其渲染的优先级。
    Blend Radius(混合范围): 后期盒子之间过渡的范围。Unbound模式打开时此项禁用。
    Blend Weight(混合权重): 0,无效果;1,全效果。
    Enabled(启用): 是否启用
    Infinite Extent(Unbound): 是否受框大小的限制。

    部分资料引用于腾讯游戏学院开发者社区以及官方文档
    链接:https://gameinstitute.qq.com/community/detail/128919

    希望大家互相学习。
    展开全文
  • 1.元祖 元祖(Tuple)由不同元素组成,每个元素可以储存不同类型的数据,如字符串、数字或元祖本身。 ...元祖由不同元素组成,所有元素被包含在一个圆括号。...元祖元素的值通过索引访问,索引是方括

    1.元祖

    元祖(Tuple)由不同元素组成,每个元素可以储存不同类型的数据,如字符串、数字或元祖本身。
    元祖由不同元素组成,所有元素被包含在一个圆括号中。
    tuple_name=(a1,a2,a3...)
    像数组之类的

    2.各种缓冲区

    2.1颜色缓冲区

      颜色缓冲区(COLOR_BUFFER)就是帧缓冲区(FRAME_BUFFER),你需要渲染的场景最终每一个像素都要写入该缓冲区,然后由它在渲染到屏幕上显示.

    2.2深度缓冲区

      深度缓冲区(DEPTH_BUFFER)与帧缓冲区对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确.

    2.3模板缓冲区

      模版缓冲(STENCIL_BUFFER)与深度缓冲大小相同,通过设置模版缓冲每个像素的值,我们可以指定在渲染的时候只渲染某些像素,从而可以达到一些特殊的效果.


    3.BRDF(Bidirectional Reflectance Distribution Function,即双向反射分布函数

    光线照到一个物体,首先产生了反射,吸收和透射,所以BRDF的关键因素即为多少光被反射、吸收和透射(折射)了,是怎样变化的。这时的反射多为漫反射。而要知道这些光线反射透射的变化就需要清楚三样东西,物体的表面材质、光线的波长(即它是什么样的光,是可见太阳光,节能灯光还是紫外线)和观察者与物体之间的位置关系。三维世界角度可以类似是球体的,光线角度除了纵向180°的变化,还有横向360的不同发散方向。会有相应的入射光,反射光,入射角和反射角,它们在物体表面的法平面和切平面上的关系成为了BRDF的关键参数。由于人类眼睛对光的特殊敏感性,我们之所以能看到物体都是通过光线在物体上的发射和转移实现的。而双向反射分布这样的函数表示可以更好地描述光线在物体上的变化,反射光线同时发向分布在法线两边的观察者和光源两个方向,从而使人在计算机等模拟环境下,视觉上可以看到更好的物体模拟效果,仿佛真实的物体存在。



    http://baike.baidu.com/view/2285120.htm?fr=aladdin


    http://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function



    4.struct SurfaceOutput的结构体

    http://blog.csdn.net/candycat1992/article/details/39994049


    struct SurfaceOutput {  
        half3 Albedo;  
        half3 Normal;  
        half3 Emission;  
        half Specular;  
        half Gloss;  
        half Alpha;  
    };  

    • Albedo:

    • 我们通常理解的对光源的反射率。它是通过在Fragment Shader中计算颜色叠加时,和一些变量(如vertex lights)相乘后,叠加到最后的颜色上的。

    • Normal

    • 即其对应的法线方向。只要是受法线影响的计算都会受到影响。

    • Emission:

    • 自发光。会在Fragment 最后输出前(调用final函数前,如果定义了的话),使用下面的语句进行简单的颜色叠加:
    • c.rgb += o.Emission; 
    • Specular:

    • 高光反射中的指数部分的系数。影响一些高光反射的计算。按目前的理解,也就是在光照模型里会使用到(如果你没有在光照函数等函数——包括Unity内置的光照函数,中使用它,这个变量就算设置了也没用)。有时候,你只在surf函数里设置了它,但也会影响最后的结果。这是因为,你可能使用了Unity内置的光照模型,如BlinnPhong,它会使用如下语句计算高光反射的强度(在Lighting.cginc里):
    • float spec = pow (nh, s.Specular*128.0) * s.Gloss; 
    • Gloss:

    • 高光反射中的强度系数。和上面的Specular类似,一般在光照模型里使用。
    • Alpha:

    • 通常理解的透明通道。在Fragment Shader中会直接使用下列方式赋值(如果开启了透明通道的话):
    • c.a = o.Alpha;  
      

    shader(Surface) 官方例子

    http://game.ceeger.com/Components/SL-SurfaceShaderLightingExamples.html


    http://game.ceeger.com/Components/SL-SurfaceShaders.html


    5.H,L,R,V,N

    用来计算镜面反射(specular reflection)的中间方向矢量(halfway vector)\hat{\mathbf{H}}为什么是:

    \hat{\mathbf{H}} = \frac{\hat{\mathbf{L}} + \hat{\mathbf{V}}}{\left \| \hat{\mathbf{L}} + \hat{\mathbf{V}} \right \|}

    这个问题可分为两个层次去答。首先,要计算两个非完全背向的单位矢量在几何上的中间方向矢量,可以对两个单位矢量作线性插值:

    \text{Lerp}(\mathbf{\hat{L}}, \mathbf{\hat{V}}, 0.5) =  (1 - 0.5)\mathbf{\hat{L}} + 0.5 \mathbf{\hat{V}}=0.5(\mathbf{\hat{L}} + \mathbf{\hat{V}})

    如果想得到单位矢量,就需要再归一化(normalization)。归一化时,上面的0.5就被消去。

    另一个问题是,Phong Reflection Modle是使用\hat{\mathbf{R}} \cdot \hat{\mathbf{V}}而不是Blinn提出的\hat{\mathbf{H}} \cdot \hat{\mathbf{V}}去计算镜面反射,为什么?


    其实这两种计算方法也只是一种 BRDF,问题是哪种模型比较接近现实中的某种材质。[1] 7.5.7 节有比较详细的论述,在这里暂不详细展开了。

    [1] Akenine-Möller, Tomas, Eric Haines, and Natty Hoffman. "Real-time rendering" 3rd edition, AK, 2008.



    http://www.zhihu.com/question/25266627

    6.VTF

    Shader Model顶点纹理取码(vertex texture fetch)是相当值得关注的一项技术。顶点纹理取码允许应用程序直接从显存中提取纹理信息来作顶点处理,这种技术可以用在包括实时位移贴图(displacement mapping)等方面使用,通过这个功能你可以在顶点着色器3.0中实现各顶点的位移工作。

    7.Reyes渲染架构

    Reyes 渲染架构,是三维计算机图形学的一个软件架构,用于渲染照片一样真实的图像。该架构是80年代中期由卢卡斯影业的计算机图形研究小组成员艾德文·卡特姆洛伦·卡彭特罗伯特·库克所开发的,那个研究小组最后发展成了今天的皮克斯[1] 该架构最早使用于1982年的科幻片《星际迷航2:可汗之怒》中的创世片段。皮克斯的PRMan是Reyes算法的一个实现。

    根据最初描述该算法的论文,Reyes渲染系统是一个用于复杂图像的快速高质量渲染的“架构”,论文中指出Reyes包括一系列算法和数据处理系统,不过本词条中的“算法”和“架构”是同义的。

    ReyesRenders Everything You Ever Saw(渲染你曾见到的任何物体)的首字母缩写,这个名字也是卢卡斯影业以前所在地——加州Reyes海角的名字,因此Reyes是双关语,它还暗指和光学影像系统有关的过程。根据罗伯特·库克的说法,Reyes的正确写法是首字母大写,其余小写,和1987年库克/卡彭特/卡特姆的SIGGRAPH论文中一样。

    Reyes架构的设计遵从以下目标:

    • 模型复杂性和多样性:为了产生复杂和样式丰富的图像,渲染系统的用户必须能通过分形粒子系统等,经由编写程序生成大量复杂的几何结构。
    • 复杂着色:场景的复杂度通常由光线和物体表面的相互作用产生。通常,在计算机图形学里,这是通过使用纹理来表现的,纹理可以是一组像素,用于描述表面位移(置换)、透明度或反射率等。Reyes允许用户用计算机程序来描述表面结构和光学互作用,而不是简单的数据查询表,并和可编程着色器结合。算法的一个重要目标是减少处理器从存储器中读取纹理的时间。
    • 避免光线追踪:Reyes架构提出的时候,计算机的处理能力和存储量都很有限,意味着使用光线追踪需要耗费几万小时才能渲染完一个图像,Reyes算法避免使用光线追踪,因此渲染快的多,并且图像也非常逼真。
    • 速度:(单个计算机)一年能渲染完成一部每秒24帧的两小时影片,即平均每帧只需要渲染3分钟。
    • 图像质量:任何图像,若带有无用的、因算法导致的缺陷,都是不可接受的。
    • 灵活性:该架构必须足够灵活,在引入新技术时,不需把算法完全重写。

    Reyes算法能很高效的渲染一些电影画面要求的必不可少的效果:光滑的曲面、表面纹理、运动模糊景深

    Reyes渲染流程

    Reyes算法通过把参数曲面分割成微多边形(micropolygon)——小于一个像素的四边形,来渲染光滑曲面。虽然要精确逼近曲面需要很多微多边形,不过他们可以简单并行的进行处理。Reyes渲染器对高级的几何图形进行细分时,会根据需要来进行,它只需要刚好细分到使图形在最终图像中看起来光滑的程度。

    然后,一个着色系统给微多边形的每个顶点赋予一个颜色和透明度,许多Reyes渲染器允许用户使用着色语言编写任意的灯光和纹理函数。微多边形可以在一个大的网格里进行处理,因此可以进行并行向量处理。

    经过着色的微多边形在屏幕空间进行采样,以生成输出图像。Reyes引入了一个开创性的隐面判别算法或者叫hider,算法对运动模糊和景深进行必要的整合,而无需比未加模糊的渲染使用更高的模型和着色采样数。hider通过一种称为随机采样蒙特卡洛方法收集一定时间和镜头位置内每个像素里微多边形的颜色。

    基本Reyes渲染管线工序

    1. Bound,计算几何图形的边界。
    2. Split,把大的图形分割为更小的图形。
    3. Dice,把图形转换成微多边形网格,每个大概一个像素大小。
    4. Shade,计算每个微多边形网格顶点的灯光和颜色。
    5. Bust,把网格炸开成单个的微多边形,对每个计算边界并判断是否可见。
    6. Hide,对微多边形进行采样,并生成最后的平面图像。

    在这个设计中,渲染器必须把整个图像缓存在内存中,因为必须把所有的图形都处理完成以后才能输出最终图像。一般在dice步骤之前会进行一步叫bucketing的常见内存优化,这一步中,输出图像被分割成若干指定大小的小块,通常每一块是16x16像素大小,之后,场景中的物体沿着每小块的大致边缘按照位置分割到不同的块里,然后每个小块分别进行处理,处理下一小块之前会先丢弃上一个小块的数据。如此只有当前的小块区域里的图形被加载到内存里,通常的情况下,这种处理能比未修改的Reyes算法显著的减少内存的使用。

    http://zh.wikipedia.org/wiki/Reyes%E6%B8%B2%E6%9F%93%E6%9E%B6%E6%9E%84


    8.GI

    实时全局光照

    9.IBL

    image based lighting  基于图像的照明(cubemap)

    10.SVOGI

    Sparse Voxel Octree Global Illumination

    11.res(resolution)

    分辨率


    12.双曲函数

    http://baike.baidu.com/link?url=3d7DBH8LZbYbrzvsnh4JPOfwyqQnnCej87WdrIEtYijU2xSdwIxwm-rB5xpUfOqXpUc3zRQIhU17qjIhwa4aQq

    数学中,双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦“sinh”,双曲余弦“cosh”,从它们导出双曲正切“tanh”等。也类似于三角函数的推导。反函数是反双曲正弦“arsinh”(也叫做“arcsinh”或“asinh”)依此类推。




    双曲函数出现于某些重要的线性微分方程的解中,譬如说定义悬链线拉普拉斯方程
    如同点 (cost,sint) 定义一个圆,点 (cosh t,sinh t) 定义了右半直角双曲线x- y= 1。这基于了很容易验证的恒等式
    参数 t 不是圆角而是双曲角,它表示在 x 轴和连接原点和双曲线上的点 (cosh t,sinh t) 的直线之间的面积的两倍。
    函数 cosh x 是关于 y 轴对称的偶函数。函数 sinh x 是奇函数,就是说 -sinh x = sinh (-x) 且 sinh 0 = 0。


    y=sinh x,定义域:R,值域:R,奇函数,函数图像为过原点并且穿越Ⅰ、Ⅲ象限的严格单调递增曲线,函数图像关于原点对称。
    y=cosh x,定义域:R,值域:[1,+∞),偶函数,函数图像是悬链线,最低点是(0,1),在Ⅰ象限部分是严格单调递增曲线,函数图像关于y轴对称。
    y=tanh x,定义域:R,值域:(-1,1),奇函数,函数图像为过原点并且穿越Ⅰ、Ⅲ象限的严格单调递增曲线,其图像被限制在两水平渐近线y=1和y=-1之间。
    y=coth x,定义域:{x|x≠0},值域:{x||x|>1},奇函数,函数图像分为两支,分别在Ⅰ、Ⅲ象限,函数在(-∞,0)和(0,+∞)分别单调递减,垂直渐近线为y轴,两水平渐近线为y=1和y=-1。
    y=sech x,定义域:R,值域:(0,1],偶函数,最高点是(0,1),函数在(0,+∞)严格单调递减,(-∞,0)严格单调递增。x轴是其渐近线。
    y=csch x,定义域:{x|x≠0},值域:{x|x≠0},奇函数,函数图像分为两支,分别在Ⅰ、Ⅲ象限,函数在(-∞,0)和(0,+∞)分别单调递减,垂直渐近线为y轴,两水平渐近线为x轴。


    13.贝塞尔函数

    http://baike.baidu.com/link?url=1fF-oIgIpoLfZdQIHg123EI61QbyvBBKbZPrwMSz8iIR80coEbvXGUwAQZjnrj6rSXBvJQgzlk3iXbuNqxNfdK#2_4

    第一类贝塞尔函数


      第一类&alpha;阶贝塞尔函数''J''<sub>&alpha;</sub>(''x'')是贝塞尔方程当&alpha;为整数或&alpha;非负时的解,须满足在''x'' = 0 时有限。这样选取和处理''J''<sub>&alpha;</sub>的原因见本主题下面的贝塞尔函数#性质|性质介绍;另一种定义方法是通过它在''x'' = 0 点的泰勒级数展开(或者更一般地通过幂级数展开,这适用于&alpha;为非整数):
      
    http://g.hiphotos.baidu.com/baike/s%3D249/sign=d290d4b430fa828bd5239ae7c41e41cd/d31b0ef41bd5ad6eb36a345b82cb39dbb7fd3ceb.jpg
    上式中
    为Γ函数(它可视为阶乘|阶乘函数向非整型因变量和自变量|自变量的推广)。第一类贝塞尔函数的形状大致与按<math>1/\sqrt x </math>速率衰减的正弦或三角函数|余弦函数类似(参见本页下面对它们渐进形式的介绍),但它们的零点并不是周期性的,另外随着''x''的增加,零点的间隔会越来越接近周期性。图2所示为0阶、1阶和2阶第一类贝塞尔函数<math>J_\alpha (x)</math>的曲线(<math>\alpha = 0, 1, 2</math>)。
      如果&alpha;不为整数,则<math>J_\alpha (x)</math>和<math>J_{-\alpha} (x)</math>线性无关,可以构成微分方程的一个'''解系'''。反之若<math>\alpha</math>是整数,那么上面两个函数之间满足如下关系:
      :<math>J_{-\alpha}(x) = (-1)^{\alpha} J_{\alpha}(x)\,</math>
      于是两函数之间已不满足线性无关条件。为寻找在此情况下微分方程与<math>J_\alpha (x)</math>线性无关的另一解,需要定义'''第二类贝塞尔函数''',定义过程将在后面的小节中给出。


    14.方位角(azimuths)


    http://baike.baidu.com/link?url=lh9XTmb9RI2kVzkULIBzcM9CpWBZG2PfwEiNwThJVMWCefw9OjZfsLvxfre3if86AvB1uzRa33WBb7mlKUTRLx7vVeIIYGzXACYS4IhuqqZHoKztYecHKQPUWnvgIV2XvfcNM2mp4ajFby3tGsz55K


    由于每点都有真北、磁北和坐标纵线北三种不同的指北方向线,因此,从某点到某一目标,就有三种不同方位角。
    (1)真方位角。某点指向北极的方向线叫真北方向线,而经线,也叫真子午线。
    由真子午线方向的北端起,顺时针量到直线间的夹角,称为该直线的真方位角,一般用A表示。通常在精密测量中使用。
    (2)磁方位角。地球是一个大磁体,地球的磁极位置是不断变化的
    ,某点指向磁北极的方向线叫磁北方向线,也叫磁子午线。在地形图南、北图廓上的磁南、磁北两点间的直线,为该图的磁子午线。由磁子午线方向的北端起,顺时针量至直线间的夹角,称为该直线的磁方位角,用Am表示。
    (3)坐标方位角。坐标纵轴方向的北端起,顺时针量到直线间的夹角,称为该直线的坐标方位角,常简称方位角,用a表示。

    15.Rayleigh Scattering瑞利散射


    瑞利散射Rayleigh scattering)由英国物理学家瑞利的名字命名。它是半径比波长小很多的微粒对入射光的散射。瑞利散射光的强度和入射光波长λ的4次方成反比:

    I(\lambda)_{scattering} \propto \frac{ I(\lambda)_{incident}}{\lambda^4}

    其中\scriptstyle I(\lambda)_{incident}是入射光的光强分布函数。

    也就是说,波长较短的蓝光比波长较长的红光更易散射。

    瑞利散射可以解释天空为什么是蓝色的。白天,太阳在我们的头顶,当日光经过大气层时,与空气分子(其半径远小于可见光的波长)发生瑞利散射,因为蓝光比红光波长短,瑞利散射发生的比较激烈,被散射的蓝光布满了整个天空,从而使天空呈现蓝色,但是太阳本身及其附近呈现白色或黄色,是因为此时你看到更多的是直射光而不是散射光,所以日光的颜色(白色)基本未改变——波长较长的红黄色光与蓝绿色光(少量被散射了)的混合。

    当日落或日出时,太阳几乎在我们视线的正前方,此时太阳光在大气中要走相对很长的路程,你所看到的直射光中的蓝光大量都被散射了,只剩下红橙色的光,这就是为什么日落时太阳附近呈现红色,而天空的其它地方由于光线很弱,只能说是非常昏暗的蓝黑色。如果是在月球上,因为没有大气层,天空即使在白天也是黑的。


    米氏散射(Mie scattering)   
    米氏发表了任何尺寸均匀球形粒子散射问题的严格解,具有极大的实用价值,可以研究雾、云、日冕、胶体和金属悬浮液的散射等。   当大气中粒子的直径与辐射的波长相当时发生的散射称为米氏散射。   这种散射主要由大气中的微粒,如烟、尘埃、小水滴及气溶胶等引起。米氏散射的辐射强度与波长的 二次方成反比,散射在光线向前的方向比向后的方向更强,方向性比较明显。如云雾的粒子大小与红外线(0.7615um)的波长接近,所以云雾对红外线的辐 射主要是米氏散射。是故,多云潮湿的天气对米氏散射的影响较大。

    16.DOF

    Depth Of Field  (缩写啊。。= =;)

    17.CIE 1976 (L*, a*, b*) 色彩空间 (CIELAB)

    http://blog.163.com/manzanillo@126/blog/static/63883857201051142734264/


    CIE 1976 (L*, a*, b*) 色彩空间 (CIELAB)
    CIE L*a*b* (CIELAB)
    是惯常用来描述人眼可见的所有颜色的最完备的色彩模型。它是为这个特殊目的而由国际照明委员会(Commission Internationale d'Eclairage 的首字母是CIE)提出的。L、a 和 b 后面的星号(*)是全名的一部分,因为它们表示 L*, a* 和 b*, 不同于 L, a 和 b。因为红/绿和黄/蓝对立通道被计算为(假定的)锥状细胞响应的类似孟塞尔值的变换的差异,CIELAB 是 Adams 色彩值(Chromatic Value)空间。
    三个基本坐标表示颜色的亮度(L*, L* = 0 生成黑色而 L* = 100 指示白色),它在红色/品红色和绿色之间的位置(a* 负值指示绿色而正值指示品红)和它在黄色和蓝色之间的位置(b* 负值指示蓝色而正值指示黄色)。


    18.导航名词

    航线 : 若干有路由性质(可能只有AB两点)的航点组合
    航迹 : 行走轨迹,以一定的时间间隔连续记录下一串航点的记录
    通俗的说法:
    航点:每个点的详细信息,也就是指的位置
    航线:你所走的线路就叫做航线
    航迹:由每个点组合在一起,就够成了航迹

    19.YUV

    http://baike.baidu.com/link?url=WCzIwfRqN-CkstM5Iv6yiXTZm2QzXw4cQLly-lR2-JqQ7ZyAfuNJefj6QUtFX2CKBNQCI89HVFsCTAWTf0UG3q

    YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
    采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
    对于数字视频,定义了从 RGB 到两个主要 YUV 的转换。这两个转换都基于称为 ITU-R Recommendation BT.709 的规范。第一个转换是 BT.709 中定义用于 50-Hz 的较早的 YUV 格式。它与在 ITU-R Recommendation BT.601 中指定的关系相同, ITU-R Recommendation BT.601 也被称为它的旧名称 CCIR 601。这种格式应该被视为用于标准定义 TV分辨率(720 x 576) 和更低分辨率视频的首选 YUV 格式。它的特征由下面两个常量 Kr 和 Kb 的值来定义:
    Kr = 0.299Kb = 0.114第二个转换为 BT.709 中定义用于 60-Hz 的较新 YUV 格式,应该被视为用于高于 SDTV 的视频分辨率的首选格式。它的特征由下面两个不同的常量值来定义:Kr = 0.2126Kb = 0.0722从 RGB 到 YUV 转换的定义以下列内容开始:L = Kr * R + Kb * B + (1 – Kr – Kb) * G然后,按照下列方式获得 YUV 值:
    Y = floor(2^(M-8) * (219*(L–Z)/S + 16) + 0.5)U = clip3(0, 2^M-1, floor(2^(M-8) * (112*(B-L) / ((1-Kb)*S) + 128) + 0.5))V = clip3(0, 2^M-1, floor(2^(M-8) * (112*(R-L) / ((1-Kr)*S) + 128) + 0.5))其中
    M 为每个 YUV 样例的位数 (M >= 8)。
    Z 为黑电平变量。对于计算机RGB,Z 等于 0。对于 studio视频RGB,Z 等于 16*2,其中 N 为每个 RGB

    样例的位数 (N >= 8)。S 为缩放变量。对于计算机RGB,S 等于 255。对于 studio视频RGB,S 等于 219*2。
    函数floor(x) 返回大于或等于 x 的最大整数。函数clip3(x, y, z) 的定义如下所示:
    clip3(x, y, z) = ((z < x) ? x : ((z > y) ? y : z))Y 样例表示亮度,U 和 V 样例分别表示偏向蓝色和红色的颜色偏差。Y 的标称范围为 16*2 到 235*2 。黑色表示为 16*2 ,白色表示为 235*2 。U 和 V 的标称范围为 16*2 到 240*2 ,值 128*2 表示中性色度。但是,实际的值可能不在这些范围之内。
    对于 studio 视频 RGB 形式的输入数据,要使得 U 和 V 值保持在 0 到 2M-1 范围之内,必需进行剪辑操作。如果输入为计算机RGB,则不需要剪辑操作,这是因为转换公式不会生成超出此范围的值。
    这些都是精确的公式,没有近似值。
    在DirectShow中,常见的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32等;常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。

    20.Gfx

    1、图形加速\图形加速器\显卡
    (Graphics Force Express)
    同意词Graphics Acceleration
    2、GFX文件格式:GFX 是一套跨平台的图形生成包,底层模型大致参照了 SVG,展现层同时支持 SVG 和 VML,GFX 可以帮助用户生成基于网页的矢量图,能够做到动态生成以及和用户发生交互。能够支持的图形包括矩形(Rectangle),圆弧(Circle),椭圆(Ellipse),多边形(polygon),线(Line),路径(polygon),图片(Image),文本(Text),文本路径(TextPath)。是一种可用于交互的图形格式,目前常应用于DoJo,也运用于游戏星际争霸2上。

    21.SSR

    screen space rendering


    22.bokeh焦外成像

    摄影镜头光圈大小和拍摄距离决定了拍摄时的景深,相对于焦点位置,焦点前与焦点后的被拍摄物体会显得模糊,这个模糊区域被称为焦外
    焦外具体的模糊程度还受到镜头中镜片单体和组合的物理特性影响,形成了由镜头不同而得到的不同的焦点外的图像。于是焦外成像这个技术名词出现了。
    优秀的焦外成像柔顺而迷人,色彩过渡自然,丝毫不逊色于焦点处的图像魅力。

    23.NURBS

    NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式。NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真、生动的造型。

    NURBS是非均匀有理B样条曲线(Non-Uniform Rational B-Splines)的缩写,NURBS由Versprille在其博士学位论文中提出,1991年,国际标准化组织(ISO)颁布的工业产品数据交换标准STEP中,把NURBS作为定义工业产品几何形状的唯一数学方法。1992年,国际标准化组织又将NURBS纳入到规定独立于设备的交互图形编程接口的国际标准PHIGS(程序员层次交互图形系统)中,作为PHIGS Plus的扩充部分。Bezier、有理Bezier、均匀B样条和非均匀B样条都被统一到NURBS中。
    NURBS曲线和NURBS曲面在传统的制图领域是不存在的,是为使用计算机进行3D建模而专门建立的。在3D建模的内部空间用曲线和曲面来表现轮廓和外形。它们是用数学表达式构建的,NURBS数学表达式是一种复合体。在这里,只是简要地介绍一下NURBS的概念,来帮助了解怎样建立NURBS和NURBS物体为什么会有这样的表现。

    24.Reinhard

    Reinhard中文意思是莱因哈德
    reinhard曝光的参数控制是将曝光方式控制在线性曝光和指数曝光之间的一种效果 burn=1为线性曝光burn=0为指数曝光
    是一种现在很常用的曝光方式

    25.马赫带

    是1868年奥地利物理学家 E. 马赫发现的一种明度对比的视觉效应。是一种主观的边缘对比效应。当观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显。

    马赫带(Mach band)马赫发现的一种明度对比现象。它是一种主观的边缘对比效应。当观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显。例如,将一个星形白纸片贴在一个较大的黑色圆盘上,再将圆盘放在色轮上快速旋转。可看到一个全黑的外圈和一个全白的内圈,以及一个由星形各角所形成的不同明度灰色渐变的中间地段。而且还可看到,在圆盘黑圈的内边界上,有一个窄而特别黑的环。由于不同区域的亮度的相互作用而产生明暗边界处的对比,使我们更好地形成轮廓知觉。这种在图形轮廓部分发生的主观明度对比加强的现象,称为边缘对比效应。边缘对比效应总是发生在亮度变化最大的边界区域。




    26.蒙特·卡罗方法

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛


    当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
    工作过程
    蒙特卡罗方法的解题过程可以归结为三个主要步骤:构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。
    蒙特卡罗方法解题过程的三个主要步骤:
    (1)构造或描述概率过程
    对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过 程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
    (2)实现从已知概率分布抽样
    构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。
    (3)建立各种估计量
    一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。
    数学应用:
    通常蒙特·卡罗方法通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到解析解或者根本没有解析解的问题,蒙特·卡罗方法是一种有效的求出数值解的方法。一般蒙特·卡罗方法在数学中最常见的应用就是蒙特·卡罗积分。

    27.预渲染


    简单的说,实时渲染就是每一帧都不假设任何条件,都是针对当时实际的光源,相机和材质参数进行光照计算——常见的D3D,OPENGL的光照计算。   
      预先渲染一般是固定光源,和物体的材质参数,通过其他的辅助工具,把光源对物体的光照参数输出成纹理贴图,在显示的时候不对物体进行光照处理,只进行贴图计算   
        
      预先渲染可以借助复杂的高效果的工具,对场景进行精细的长期的渲染,然后在浏览的时候直接利用这些以前渲染的数据来绘制,从而可以在保证渲染的速度的时候获得很好的渲染质量。   
      但是缺点是,不能很好的处理动态的光源和变化的材质,在交互性比较强的环境当中无法使用。

    10.1.4  游戏中渲染与预渲染

    镜头切换中一个为某些玩家所排斥而为另外一些玩家所推崇的方面(这种现象在过去尤为明显),就是玩家需要对游戏中过场动画和预渲染动画进行辨别。游戏中过场动画是使用游戏内置的美术资源和渲染引擎实时渲染的。预渲染过场动画则不同,它们通常是在3D应用程序中利用高分辨率美术资源创建并渲染的。最终制成的视频片段只是在游戏中回放一遍罢了。

    随着Unreal Engine 3及其高质量的渲染系统的诞生,这两种渲染技术之间的界线已经变得模糊起来。使用游戏中美术资源制作的游戏中过场动画与使用高分辨率美术资源制成的现代影片具有同样高的视觉逼真度。Matinee系统也已焕然一新,并成为非线性全效特征的编辑器。在过去,只能通过预渲染得到的高质量的过场动画,现在可以在UnrealEd内部直接创建,并可以在游戏播放时更为简便地实时渲染了。

    对于游戏开发者而言,这意味着游戏、游戏过场动画,以及过去用作宣传目的的动画,如今都可以共享美术资源,这样就节省了开发者制作的时间花费或是外包给其他艺术工作室制作过场动画的经费。这也意味着,过场动画和实际的游戏在视觉上不再有什么区别了。对于玩家而言,此问题历来都是至关重要的。商业宣传时使用的游戏广告看上去都惊人的逼真。而当玩家把游戏买回家开始运行时,才发现其画面与广告的画面完全不同。Unreal Engine 3提供的强大性能已经使这一鸿沟成为了历史。

    28.光谱


    光谱(spectrum) :复色光经过色散系统(如棱镜光栅分光后,被色散开的单色光波长(或频率)大小而依次排列的图案,全称为光学频谱。光谱中最大的一部分可见光谱是电磁波谱中人眼可见的一部分,在这个波长范围内的电磁辐射被称作可见光。光谱并没有包含人类大脑视觉所能区别的所有颜色,譬如褐色和粉红色。
    光波是由原子内部运动的电子产生的。各种物质的原子内部电子的运动情况不同,所以它们发射的光波也不同。研究不同物质的发光和吸收光的情况,有重要的理论和实际意义,已成为一门专门的学科——光谱学
    发射光谱
    物体发光直接产生的光谱叫做发射光谱。只含有一些不连续的亮线的光谱叫做明线光谱。明线光谱中的亮线叫做谱线,各条谱线对应于不同波长的光。稀薄气体或金属的蒸气的发射光谱是明线光谱。明线光谱是由游离状态原子发射的,所以也叫原子光谱。观察气体的原子光谱,可以使用光谱管,它是一支中间比较细的封闭的玻璃管,里面装有低压气体,管的两端有两个电极。把两个电极接到高压电源上,管里稀薄气体发生辉光放电,产生一定颜色的光。
    线状光谱
    由狭窄谱线组成的光谱。单原子气体或金属蒸气所发的光波均有线状光谱,故线状光谱又称原子光谱。当原子能量从较高能级向较低能级跃迁时,就辐射出波长单一的光波。严格说来这种波长单一的单色光是不存在的,由于能级本身有一定宽度和多普勒效应等原因,原子所辐射的光谱线总会有一定宽度(见谱线增宽);即在较窄的波长范围内仍包含各种不同的波长成分。原子光谱按波长的分布规律反映了原子的内部结构,每种原子都有自己特殊的光谱系列。通过对原子光谱的研究可了解原子内部的结构,或对样品所含成分进行定性和定量分析。

    带状光谱
    由一系列光谱带组成,它们是由分子所辐射,

    故又称分子光谱。利用高分辨率光谱仪观察时,每条谱带实际上是由许多紧挨着的谱线组成。带状光谱是分子在其振动和转动能级间跃迁时辐射出来的,通常位于红外远红外区。通过对分子光谱的研究可了解分子的结构。

    连续光谱
    连续分布的包含有从红光到紫光各种色光的光谱叫做连续光谱。炽热的固体、液体和高压气体的发射光谱是连续光谱。例如电灯丝发出的光、炽热的钢水发出的光都形成连续光谱。
    原子光谱
    观察固态或液态物质的原子光谱,可以把它们放到煤气灯的火焰电弧中去烧,使它们气化后发光。
    实验证明,原子不同,发射的明线光谱也不同,每种元素的原子都有一定的明线光谱。彩图7就是几种元素的明线光谱。每种原子只能发出具有本身特征的某些波长的光,因此,明线光谱的谱线叫做原子的特征谱线。利用原子的特征谱线可以鉴别物质和研究原子的结构。
    吸收光谱
    高温物体发出的白光(其中包含连续分布的一切波长的光)通过物质时,某些波长的光被物质吸收后产生的光谱,(或具有连续谱的光波通过物质样品时,处于基态的样品原子或分子将吸收特定波长的光而跃迁到激发态,于是在连续谱的背景上出现相应的暗线或暗带),叫做吸收光谱。每种原子或分子都有反映其能级结构的标识吸收光谱。研究吸收光谱的特征和规律是了解原子和分子内部结构的重要手段。吸收光谱首先由J.V.夫琅和费在太阳光谱中发现(称夫琅和费线),并据此确定了太阳所含的某些元素。

    29.CIE

    CIE色度图:




    CIE的总部位于奥地利维也纳
    CIE目前约有40个成员国单位,大会每四年举办一次,至今已举办27届,与国际电工委员会(IEC国际规范化组织)ISO享有同等知名度的国际化专业组织。CIE共有七个分部
    (Division)从事光和照明领域的研究:第一分部:视觉和颜色;第二分部:光与辐射的丈量;第三分部:内部环境和照明设计;第四分部:交通照明和信号;第五分部:外部
    照明和其它应用;第六分部:光生物和光化学;第七分部:图像技术。原有第七分部在1999年并入其它分部。
    会议期间将召开CIE大会、各分部(DⅣ)会议和技术委员会(TC)会议。按照惯例,在每届大会之前要召开CIE理事会,并进行换届安排确认和新一届理事会的工作安排,在2011年第27次大会上,来自中国的崔中平教授当选为第一个代表中国大陆的CIE副主席(VP)、复旦大学林燕丹教授成为第一个当选分部副部长(AD)的中国专家。






    颜色是一门很复杂的学科,它涉及到物理学、生物学、心理学和材料学等多种学科。颜色是人的大脑对物体的一种主观感觉,用数学方法来描述这种感觉是一件很困难的事。现在已经有很多有关颜色的理论、测量技术和颜色标准,但是到目前为止,似乎还没有一种人类感知颜色的理论被普遍接受。
    RGB模型采用物理三基色,其物理意义很清楚,但它是一种与设备相关的颜色模型。每一种设备(包括人眼和现在使用的扫描仪、监视器和打印机等)使用RGB模型时都有不太相同的定义,尽管各自都工作很圆满,而且很直观,但不能相互通用。
    为了从基色出发定义一种与设备无关的颜色模型,1931年9月国际照明委员会在英国的剑桥市召开了具有历史意义的大会。CIE的颜色科学家们试图在RGB模型基础上,用数学的方法从真实的基色推导出理论的三基色,创建一个新的颜色系统,使颜料、染料和印刷等工业能够明确指定产品的颜色。会议所取得的主要成果包含:
    1、 定义了标准观察者(Standard Observer)标准:普通人眼对颜色的响应。该标准采用想象的X,Y和Z三种基色,用颜色匹配函数(color-matching function)表示。颜色匹配实验使用2°的视野(field of view);
    2、定义了标准光源(Standard Illuminants):用于比较颜色的光源规范;
    3、定义了CIE XYZ基色系统:与RGB相关的想象的基色系统,但更适用于颜色的计算;
    4、定义了CIE xyY颜色空间:一个由XYZ导出的颜色空间,它把与颜色属性相关的x和y从与明度属性相关的亮度Y中分离开;
    5、定义了CIE色度图(CIE chromaticity diagram):容易看到颜色之间关系的一种图。
    其后,国际照明委员会的专家们对该系统做了许多改进,包括1964年根据10°视野的实验数据,添加了补充标准观察者(Supplementary Standard Observer)的定义。
    1976年国际照明委员会又召开了一次具有历史意义的会议,试图解决1931的CIE系统中所存在两个问题:
    1、该规范使用明度和色度不容易解释物理刺激和颜色感知响应之间的关系;
    2、 XYZ系统和在它的色度图上表示的两种颜色之间的距离与颜色观察者感知的变化不一致,这个问题叫做感知均匀性(perceptual uniformity)问题,也就是颜色之间数字上的差别与视觉感知不一致。
    为了解决颜色空间的感知一致性问题,专家们对CIE 1931 XYZ系统进行了非线性变换,制定了CIE 1976 L*a*b*颜色空间的规范。事实上,1976年CIE规定了两种颜色空间,一种是用于自照明的颜色空间,叫做CIELUV,另一种是用于非自照明的颜色空间,叫做CIE 1976 L*a*b*,或者叫CIELAB。这两个颜色空间与颜色的感知更均匀,并且给了人们评估两种颜色近似程度的一种方法,允许使用数字量ΔE表示两种颜色之差。
    CIE XYZ是国际照明委员会在1931年开发并在1964修订的CIE颜色系统(CIE Color System),该系统是其他颜色系统的基础。它使用相应于红、绿和蓝三种颜色作为三种基色,而所有其他颜色都从这三种颜色中导出。通过相加混色或者相减混色,任何色调都可以使用不同量的基色产生。虽然大多数人可能一辈子都不直接使用这个系统,只有颜色科学家或者某些计算机程序中使用,但了解它对开发新的颜色系统、编写或者使用与颜色相关的应用程序都是有用的。
    按照三基色原理,颜色实际上也是物理量,人们对物理量就可以进行计算和度量。根据这个原理就产生了用红、绿和蓝单光谱基色匹配所有可见颜色的想法,并且做了许多实验。1931年国际照明委员会综合了不同实验者的实验结果,得到了RGB颜色匹配函数(color matching functions),其横坐标表示光谱波长,纵坐标表示用以匹配光谱各色所需要三基色刺激值,这些值是以等能量白光为标准的系数,是观察者实验结果的平均值。为了匹配在438.1 nm和546.1 nm之间的光谱色,出现了负值,这就意味匹配这段里的光谱色时,混合颜色需要使用补色才能匹配。虽然使用正值提供的色域还是比较宽的,但像用RGB相加混色原理的CRT虽然可以显示大多数颜色,但不能显示所有的颜色。
    CIE 1931 RGB使用红、绿和蓝三基色系统匹配某些可见光谱颜色时,需要使用基色的负值,而且使用也不方便。由于任何一种基色系统都可以从一种系统转换到另一种系统,因此人们可以选择想要的任何一种基色系统,以避免出现负值,而且使用也方便。1931年国际照明委员会采用了一种新的颜色系统,叫做CIE XYZ系统。这个系统采用想象的X,Y和Z三种基色,它们与可见颜色不相应。CIE选择的X,Y和Z基色具有如下性质:
    1、 所有的X,Y和Z值都是正的,匹配光谱颜色时不需要一种负值的基色;
    2、用Y值表示人眼对亮度(luminance)的响应;
    3、 如同RGB模型,X,Y和Z是相加基色。因此,每一种颜色都可以表示成X,Y和Z的混合。
    根据视觉的数学模型和颜色匹配实验结果,国际照明委员会制定了一个称为 “1931 CIE 标准观察者”的规范,实际上是用三条曲线表示的一套颜色匹配函数,因此许多文献中也称为“CIE 1931标准匹配函数”。在颜色匹配实验中,规定观察者的视野角度为2度,因此也称标准观察者的三基色刺激值(tristimulus values)曲线。
    CIE 1931标准匹配函数中的横坐标表示可见光谱的波长,纵坐标表示基色X,Y和Z的相对值。三条曲线表示X,Y和Z三基色刺激值如何组合以产生可见光谱中的所有颜色。例如,要匹配波长为450 nm的颜色(蓝/紫),需要0.33单位的X基色,0.04单位的Y基色和1.77单位的Z基色。
    计算得到的数值(X,Y,Z)可以用三维图表示。图中只表示了从400 nm (紫色)到700 nm (红色)之间的三基色刺激值,而且所有数值都落在正XYZ象限的锥体内。
    可以看到:
    1、所有的坐标轴都不在这个实心锥体内;
    2、 相应于没有光照的黑色位于坐标的原点;
    3、曲线的边界代表纯光谱色的三基色刺激值,这个边界叫做光谱轨迹(spectral locus);
    4、光谱轨迹上的波长是单一的,因此其数值表示可能达到的最大饱和度;
    5、所有的可见光都在锥体上。
    CIE XYZ的三基色刺激值X,Y和Z对定义颜色很有用,其缺点是使用比较复杂,而且不直观。因此,1931年国际照明委员会为克服这个不足而定义了一个叫做CIE xyY的颜色空间
    定义CIE xyY颜色空间的根据是,对于一种给定的颜色,如果增加它的明度,每一种基色的光通量也要按比例增加,这样才能匹配这种颜色。因此,当颜色点离开原点(X=0,Y=0,Z=0)时,X:Y:Z的比值保持不变。此外,由于色度值仅与波长(色调)和纯度有关,而与总的辐射能量无关,因此在计算颜色的色度时,把X,Y和Z值相对于总的辐射能量=(X+Y+Z)进行规格化,并只需考虑它们的相对比例,因此,x,y,z称为三基色相对系数,于是配色方程可规格化为x+y+z=1。由于三个相对系数x,y,z之和恒为1,这就相当于把XYZ颜色锥体投影到X+Y+Z=1的平面上。
    由于z可以从x+y+z=1导出,因此通常不考虑z,而用另外两个系数x和y表示颜色,并绘制以x和y为坐标的二维图形。这就相当于把X+Y+Z=1平面投射到(X,Y)平面,也就是Z=0的平面,这就是CIE xyY色度图。
    在CIE xyY系统中,根据颜色坐标(x,y)可确定z,但不能仅从x和y导出三种基色刺激值X,Y和Z,还需要使用携带亮度信息的Y,其值与XYZ中的Y刺激值一致。
    CIE xyY色度图是从XYZ直接导出的一个颜色空间,它使用亮度Y参数和颜色坐标x,y来描述颜色。xyY中的Y值与XYZ中的Y刺激值一致,表示颜色的亮度或者光亮度,颜色坐标x,y用来在二维图上指定颜色,这种色度图叫做CIE 1931色度图(CIE 1931 Chromaticity Diagram)。例如一个点在色度图上的坐标是x=0.4832,y=0.3045,那么它的颜色与红苹果的颜色相匹配。
    CIE 1931色度图是用标称值表示的CIE色度图,x表示红色分量,y表示绿色
    CIE 1931 色彩空间色度图
    分量。E点代表白光,它的坐标为(0.33,0.33);环绕在颜色空间边沿的颜色是光谱色,边界代表光谱色的最大饱和度,边界上的数字表示光谱色的波长,其轮廓包含所有的感知色调。所有单色光都位于舌形曲线上,这条曲线就是单色轨迹,曲线旁标注的数字是单色(或称光谱色)光的波长值;自然界中各种实际颜色都位于这条闭合曲线内;RGB系统中选用的物理三基色在色度图的舌形曲线上。

    30.摩尔定律

    摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。
    尽管这种趋势已经持续了超过半个世纪,摩尔定律仍应该被认为是观测或推测,而不是一个物理或自然法。预计定律将持续到至少2015年或2020年[1] 。然而,2010年国际半导体技术发展路线图的更新增长已经放缓在2013年年底,之后的时间里晶体管数量密度预计只会每三年翻一番。

    31.vrml(Virtual Reality Modeling Language

    VRML(Virtual Reality Modeling Language)即虚拟现实建模语言。是一种用于建立真实世界的场景模型或人们虚构的三维世界的场景建模语言,也具有平台无关性。是目前Internet上基于 WWW的三维互动网站制作的主流语言。 VRML是虚拟现实造型语言(Virtual Reality Modeling Language)的简称,本质上是一种面向web,面向对象的三维造型语言,而且它是一种解释性语言。VRML的对象称为结点,子结点的集合可以构成复杂的景物。结点可以通过实例得到复用,对它们赋以名字,进行定义后,即可建立动态的VR(虚拟世界)。

    32.x3d

    X3D是一种专为万维网而设计的三维图像标记语言。全称可扩展三维(语言),是由Web3D联盟 设计的,是 VRML 标准的最新的升级版本。 X3D 基于 XML 格式开发,所以可以直接使用 XML DOM 文档树、XML Schema 校验等技术和相关的 XML 编辑工具。目前 X3D 已经是通过 ISO 认证的国际标准。


    33.亏格

    亏格是代数几何代数拓扑中最基本的概念之一。
    定义:若曲面中最多可画出n条闭合曲线同时不将曲面分开,则称该曲面亏格为n
    以实的闭曲面为例,亏格 g 就是曲面上洞眼的个数。

    34.费马大定理Fermat's last theorem

    费马大定理,又被称为“费马最后的定理”,由法国数学家费马提出。
    它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。
    被提出后,经历多人猜想辩证,历经三百多年的历史,最终在1995年被英国数学家安德鲁·怀尔斯证明。

    35.游戏开发箴言-奥卡姆剃刀定律

    奥卡姆剃刀
      奥卡姆剃刀(Occam's Razor, Ockham's Razor)又称“奥康的剃刀”。

      奥卡姆剃刀,是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。奥卡姆(Ockham)在英格兰的萨里郡,那是他出生的地方。他在《箴言书注》2卷15题说“切勿浪费较多东西去做用较少的东西同样可以做好的事情。”

      这个原理称为“如无必要,勿增实体”(Entities should not be multiplied unnecessarily)。有时为了显示其权威性,人们也使用它原始的拉丁文形式:

    Pluralitas non est ponenda sine necessitate.  
    Frustra fit per plura quod potest fieri per pauciora.  
    Entia non sunt multiplicanda praeter necessitatem.
      公元14世纪,英国奥卡姆的威廉对当时无休无止的关于“共相”、“本质”之类的争吵感到厌倦,于是著书立说,宣传唯名论,只承认确实存在的东西,认为那些空洞无物的普遍性要领都是无用的累赘,应当被无情地“剃除”。

    他所主张的“思维经济原则”,概括起来就是“如无必要,勿增实体。”因为他是英国奥卡姆人,人们就把这句话称为“奥卡姆剃刀”。

    这把剃刀出鞘后,剃秃了几百年间争论不休的经院哲学和基督教神学,使科学、哲学从神学中分离出来,引发了欧洲的文艺复兴和宗教改革。同时,这把剃刀曾使很多人感到威胁,被认为是异端邪说,威廉本人也受到伤害。然而,这并未损害这把刀的锋利,相反,经过数百年越来越快,并早已超越了原来狭窄的领域而具有广泛的、丰富的、深刻的意义。

    奥卡姆的代表作是《逻辑大全(Summa Logical)》(商务印书馆有中译本),书中指出,世界是由具体的事物构成,不存在包罗万象的实体,而逻辑学是独立于形而上学的自然哲学工具。科学是关于具体事物的,事物是个别的,但在词语中有共相,逻辑是研究共相、词语和概念的。奥卡姆使逻辑学独立于形而上学和神学之外。

    36.功能蔓延 feature creep

    日益增加的理想的特性,大大延长其完成所需的开发时间

    特征蠕动(Feature Creep)(有时候也称为需求漂移或者是范围蠕动)是产品或项目的需要在除了最开始的预见之外,在开发过程中还产生了新的要求的趋势,它导致了刚开始没有计划到的特征,对产品的质量和计划也带来了风险.特征蠕动可能是由客户增长的“需求列表”或者是开发者本身看到改进该产品的机会所带来的.为了控制特征漂移,项目管理工具,比如需求稳定指数(RSI)有时候被大家提倡.

    功能蔓延(feature creep),有时也被称为需求蔓延(requirements creep)或范围蔓延(scope creep),它是指在发展过程中产品或设计的需求增加大大超过他们原来预期的趋势,导致其功能不是原本计划的并且要承担产品质量或生产进度的风险。功能蔓延可能是由于客户期望功能的增加或由于开发者自身发现了改善产品的机会而导致的。为了控制功能蔓延,设计管理工具有时被提倡使用,比如需求稳定性索引(RSI)。 

    37.原语

    原语 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。


    介绍

    操作系统用语范畴。
    是由若干条指令组成的,用于完成一定功能的一个过程。
    primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的,在执行过程中不允许被中断

    分类

    计算机网络中也有“原语”一词,它与操作系统的“原语”概念不同。服务原语是指协议中的下层协议通过接口为上层协议提供某种服务而发送的原语操作。
    原语分为四类:请求(Req)型原语,用于高层向低层请求某种业务;证实(Cfm)型原语,用于提供业务的层证实某个动作已经完成;指示(Ind)型原语,用于提供业务的层向高层报告一个与特定业务相关的动作;响应(Res)型原语,用于应答,表示来自高层的指示原语已收到

    组成及功能

    原语通常由若干条指令组成,用来实现某个特定的操作。通过一段不可分割的或不可中断的程序实现其功能。原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作系统的状态)下执行,并且常驻内存,而个别系统有一部分不在管态下运行。原语和广义指令都可以被进程所调用,两者的差别在于原语有不可中断性,它是通过在执行过程中关闭中断实现的,且一般由系统进程调用。许多广义指令的功能都可用目态(一种机器状态,通常把它作为用户程序执行时的状态)下运行的系统进程完成,而不一定要在管态下完成,例如文件的建立、打开、关闭、删除等广义指令,都是借助中断进入管态程序,然后转交给相应的进程,最终由进程实现其功能。引进原语的主要目的是为了实现进程的通信和控制。

    38.GC

    Garbage Collection垃圾回收

    GC(Garbage Collection):JAVA/.NET中的垃圾收集器。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。而C#又借鉴了JAVA。
    在老式的C/C++程序中,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。由于内存是有限的,所以当程序不再需要使用某个变量的时候,就需要销毁该对象并释放其所占用的内存资源,好重新利用这段空间。在C/C++中,释放无用变量内存空间的事情需要由程序员自己来处理。就是说当程序员认为变量没用了,就手动地释放其占用的内存。但是这样显然非常繁琐,如果有所遗漏,就可能造成资源浪费甚至内存泄露。当软件系统比较复杂,变量多的时候程序员往往就忘记释放内存或者在不该释放的时候释放内存了。
    有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)或.NETCLR发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间(这里的说法略显粗略,事实上何时清理内存是个复杂的策略)。如果需要,可以在程序中显式地使用System.gc() / System.GC.Collect()来强制进行一次立即的内存清理。Java提供的GC功能可以自动监测对象是否超过了作用域,从而达到自动回收内存的目的,Java的GC会自动进行管理,调用方法:System.gc() 或者Runtime.getRuntime().gc();

    39.soak test

    浸泡测试(soak test):Soak test是在一个稳定的并发用户上进行的long run测试,用来测试应用程序的健壮性。通过soak test往往可以发现内存泄露,频繁 GC 
    等严重性能问题。进行soak test需要注意以下两点:
    Soak test需要在一定适中的用户负载量下进行,最好低于应用支持最大的负载量。
    在执行long run测试时,采用几种不同用户组,并且每个用户组织性不同的业务流程。
    
    Soak 
    test实际上比较简单的性能测试,测试最好能够运行几天,以真正得到一个健壮的应用。确保应用测试是贴近真实世界,尽量与实际使用情况接近。
    
    Soak testing involves testing a system with a significant load extended over a significant period of time, to discover how the system behaves under sustained use.
    For example, in software testing, a system may behave exactly as expected when tested for 1 hour. However, when it is tested for 3 hours, problems such as memory leaks cause the system to fail or behave randomly.
    Soak tests are used primarily to check the reaction of a subject under test under a possible simulated environment for a given duration and for a given threshold. Observations made during the soak test are used to improve the characteristics of the subject under test further.
    In electronics, soak testing may involve testing a system up to or above its maximum ratings for a long period of time. Some companies may soak test a product for a period of many months, while also applying external stresses such as elevated temperatures.
    This falls under stress testing.

    40.魔数magic number

    在代码中出现但没有解释的数字常量或字符串称为魔数 (magic number)或魔字符串。

    41.IDE集成开发环境

    IDE,即Integrated Development Environment,是“集成开发环境”的英文缩写,可以辅助开发程序的应用软件。
    软件是用于程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。就是集成了代码编写功能、分析功能、编译功能、debug功能等一体化的开发软件套。所有具备这一特性的软件或者软件套(组)都可以叫做IDE。如微软的VisualStudio系列,Borland的C++Builder,Delphi系列等。该程序可以独立运行,也可以和其它程序并用。例如,BASIC语言在微软办公软件中可以使用,可以在微软Word文档中编写WordBasic程序。IDE为用户使用VisualBasic、Java和PowerBuilder等现代编程语言提供了方便。不同的技术体系有不同的IDE。比如可以称为C++、VB、C#、易语言等语言的集成开发环境,所以可以叫做IDE。同样,Borland的JBuilder也是一个IDE,它是Java的IDE。zendstudio、editplus、ultraedit这些,每一个都具备基本的编码、调试功能,所以每一个都可以称作IDE。
    IDE多被用于开发HTML应用软件。例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver、FrontPage,等等),因为很多项任务会自动生成。IDE集成代码编辑,代码生成,界面设计,调试,编译等功能,目前还融合了建模功能。

    42.self语言

    Self语言,是一种基于原型的面向对象程序设计语言,于1986年由施乐帕洛阿尔托研究中心的David Ungar和Randy Smith给出了最初的设计。

    原则

    Self语言把概念上的精简作为设计原则。它取消了的概念,只有对象的概念,同时把消息作为最基本的操作。把对象属性理解为获取或更改属性这两种方法,从而把属性的概念简化为方法;取消了变量赋值,替代它们的是通过消息来读槽和写槽。

    程序

    在发展Self的过程中,Self的设计研究人员也探索了Self的程序设计。他们提出了traits的概念,用对象实现了名字(对象名或方法名)的管理,用动态继承实现模式转换。
    在实现Self系统的过程中,设计研究人员发展出了一种适应性编译(adaptive compilation)技术。这种技术的采用提高了Self代码的执行效率。

    43.first class

    类型,定义了一个取值的集合,以及可作用的操作的集合。如C语言的int类型有一个上下界,可进行加减乘除等操作。变量可能有 int,float,string。。等类型,函数、对象等也有类型。

    进一步,我们把类型分为三类:
    First Class。该类型的值可以作为函数的参数和返回值,也可以赋给变量。
    Second Class。该类型的值可以作为函数的参数,但不能从函数返回,也不能赋给变量。
    Third Class。该类型的值作为函数参数也不行

    多数程序语言中的整型、字符类型都是First Class的。在函数式语言(或支持函数式的语言)中,函数也是First Class的,或者说函数是“一等公民”。以函数为参数或返回值的函数称为“高阶函数”。
    Scheme的Continuation也是First Class的

    First class function意义何在?

    结构化程序设计的精髓在于模块复用和访存控制。如果说函数实现了代码复用,那么在支持First Class Function的语言中,高阶函数作为函数之间的胶水,进一步方便了函数的复用。

    学函数式语言,基本都会遇到map, reduce, filter, zip这些经典的高阶函数。
    学习Fortran、C语言时,我们习惯通过传参、返回值,来实现函数的交互、复用,然而传的参数大部分只是基础数据类型。高阶函数、递归数据类型,实现了不同程序模块间更方便地交互与复用。

    更自由、细粒度的模块化,程序员用得飞起,需要自己“设计”的也多了。Huges指出“采用函数式编程的程序员必须努力确保程序使用更小、更简单、更通用的模块”,这构成了新的挑战


    44.Race Condition引起的性能问题 

    Race Condition(也叫做资源竞争),是多线程编程中比较头疼的问题。特别是Java多线程模型当中,经常会因为多个线程同时访问相同的共享数据,而造成数据的不一致性。为了解决这个问题,通常来说需要加上同步标志“synchronized”,来保证数据的串行访问。但是“synchronized”是个性能杀手,过多的使用会导致性能下降,特别是扩展性下降,使得你的系统不能使用多个CPU资源。  这是我们在性能测试中经常遇见的问题。


    45.时间戳timestamp

    http://baike.baidu.com/link?url=86cyudgDdVcQ7BASz-GUySeAixaJ_C46ZOjGmYB2WB9wvewGZicRSqi3eKEMBA9AwzFNcLT0kijJqg19CvJRca

    时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。数字时间戳技术是数字签名技术一种变种的应用。


    46.指令缓存

    http://baike.baidu.com/link?url=SCrMgc0nPFiLAQOx9uN55szJVmumrM6mcs6-ddW5UZT09r8fUI9GYDMMrSFNNp8aZVyQFnsJYCsGt-ikM-6yua

    CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即 将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。


    47.hardcode硬编码

    在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。大部分程序语言里,可以将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变量名不变,这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。尽管通过编辑器的查找替换功能也能实现整个变量名称的替换,但也很有可能出现多换或者少换的情况,而在计算机程序中,任何小错误的出现都是不可饶恕的。最好的方法是单独为变量名划分空间,来实现这种变化,就如同前面说的那样,将需要改变的变量名暂时用一个定义好的标记名称来代替就是一种很好的方法。通常情况下,都应该避免使用硬编码方法。 
    java小例子: int a=2,b=2;
    硬编码:if(a==2) return false;
    不是硬编码 if(a==b) return true;
    一个简单的版本:
    顾名思义, 就是把数值写成常数而不是变量
    如求圆的面积 的问题 PI(3.14)
    3.14*r*r (这个3.14就是hardcode)
    PI*r*r (这里的PI用的是变量形式,就不是hardcode)
    C++例子:
    int user[120];
    如果突然在程序中出现下面一段代码
    for (int i=0; i<120; i++){
    ...
    }
    120是什么,为什么是120?这里的120就属于数字式“硬编码”,这不仅让程序很难读,而且不易维护。如果要修改120,就的修改程序中所有与此有关的120。应将数字式“硬编码”声明成一个宏,这样程序不仅易读,而且还可以一改全改。
    #define MAX_USER_CNT 120
    for (int i=0; i<MAX_USER_CNT; i++){
    ...
    }[1] 

    48.Back Buffer

    https://msdn.microsoft.com/en-us/library/ff604993.aspx

    A back buffer is a render target whose contents will be sent to the device when GraphicsDevice.Present is called.

    The graphics pipeline renders to a render target. The particular render target that the device presents to the display is called the back buffer. Use the BackBufferWidth and BackBufferHeight properties to get the back buffer dimensions. Render directly to the back buffer or to a render target by configuring the device using GraphicsDevice.SetRenderTarget and GraphicsDevice.SetRenderTargets.


    49.Overdraw过度绘制

    Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。

    50.Depth Bias深度偏移

    Depth Bias深度偏移

    通过给多边形增加一个z方向深度偏移(depthbias,z_bias),使3D空间的共面多边形看起来好像并不共面,以便它们能够被正确渲染。这种技术是很有用的,例如,我们要渲染投射在墙上的阴影,这时候墙和阴影共面,如果没有深度偏移,先渲染墙,再渲染阴影,由于depthtest,阴影可能不能正确显示。我们给墙设置一个深度偏移,使它增大,例如z增加0.01,先渲染墙,再渲染阴影,则墙和阴影可以正确的显示。

       Depth-bias操作在clipping之后进行实施,所以depth-bias对几何clipping没有影响。另外需要注意的是:对一个给定体元(primitive),bias值是一个常量,在进行差值操作之前,它施加在每个顶点上。偏移操作都是32位浮点运算,还有Bias不能施加在点以及线体元上(除了线框模式的线段)。

    转自http://blog.sina.com.cn/s/blog_61feffe10100ng4t.html

     Depth-bias操作在clipping之后进行实施,所以depth-bias对几何clipping没有影响。

    另外需要注意的是:对一个给定体元(primitive),bias值是一个常量,在进行差值操作之前,它施加在每个顶点上。

    偏移操作都是32位浮点运算,还有Bias不能施加在点以及线体元上(除了线框模式的线段)。

    http://blog.csdn.net/claien/article/details/8971125

    当2个片元距离近裁减平面 w  落在同一个区间的时候,他们的深度是相等的. 最终你所看到的结果,就是下面的这种样子:

    注意到蓝圈里面.

    如果避免发生Z-Fighting 才是关键. 注意到上面的depth - w 的位平面对应关系. 由于硬件都只能支持一定的深度格式,也就是说,Depth bits 是一定的,假为 D.而顶点的投影深度则毫无限制,他可以是 near_clip ---> far_clip 的任意一个浮点数.因此
          dw/D = (far_clip - near_clip)/near_clip;
        从上面可以看出, 要想dw 更精确,那么 near_clip 必然要更大(适用范围是far_clip >> near_clip).
    上面那张存在depth-fighting 的截图当时的情况是 near_clip :0.0001 far_clip : 64000.0
    下面的是在near_clip 0.1 far_clip 不变.


    继续提高定点投影深度,也不会出现难看的深度冲突了.

    要解决这个问题, 你只要google 或者去 beyond3d,等论坛,搜索 depth fighting ,得到的答案往往就是设置深度偏移. OpenGL : Polygon offset. D3D: Depth Bais.

    http://blog.csdn.net/claien/article/details/8971125


    51.Color bleeding (computer graphics)

    https://en.wikipedia.org/wiki/Color_bleeding_(computer_graphics)

    In computer graphics and 3D rendering, color bleeding is the phenomenon in which objects or surfaces are colored byreflection of colored light from nearby surfaces.

    Color Bleeding - The transfer of color between nearby objects or, caused by the colored reflection of indirect light. This is a visible effect that appears when a scene is rendered with Radiosity or full global illumination, or can otherwise be simulated by adding colored lights to a 3D scene.


    52.Solid Angle立体角



    53.设计模式之Dirty bit

    https://en.wikipedia.org/wiki/Dirty_bit

    A dirty bit or modified bit is a bit that is associated with a block of computer memory and indicates whether or not the corresponding block of memory has been modified.[1] The dirty bit is set when the processor writes to (modifies) this memory. The bit indicates that its associated block of memory has been modified and has not yet been saved to storage. When a block of memory is to be replaced, its corresponding dirty bit is checked to see if the block needs to be written back to secondary memory before being replaced or if it can simply be removed. Dirty bits are used by the CPU cache and in the page replacement algorithms of an operating system.

    Dirty bits can also be used in Incremental computing by marking segments of data that need to be processed or have yet to be processed. This technique can be used with delayed computing to avoid unnecessary processing of objects or states that have not changed. When the model is updated (usually by multiple sources), only the segments that need to be reprocessed will be marked dirty. Afterwards, an algorithm will scan the model for dirty segments and process them, marking them as clean. This ensures the unchanged segments are not recalculated and saves processor time.

    Page replacement[edit]

    When speaking about page replacement, each page (frame) may have a modify bit associated with it in the hardware. The dirty bit for a page is set by the hardware whenever any word or byte in the page is written into, indicating that the page has been modified. When we select a page for replacement, we examine its modify bit. If the bit is set, we know that the page has been modified since it was read in from the disk. In this case, we must write that page to the disk. If the dirty bit is not set, however, the page has not been modified since it was read into memory. Therefore, if the copy of the page on the disk has not been overwitten (by some other page, for example), then we can avoid writing the memory page to the disk: it is already there.[2]

    54.薄透镜

    http://baike.baidu.com/link?url=EFGmAQIGWzEMS76JQz2EEU0jG_bbKjzRyhiDeeobR7HQN2l61FXjCkNYvBbJ_Iil9ZNC7r241IIU-_4HneKHKq

    薄透镜(thin lenses),在光学中,是指透镜的厚度(穿过光轴的两个镜子表面的距离)与焦距的长度比较时,可以被忽略不计的透镜。厚度不能被忽略的透镜有时会称为厚透镜。薄透镜的主要参数有焦距、色差、球差、折射率等。

    一种很薄的透镜,它的厚度可以在计算物距、像距、放大率等时忽略不计.


    早期的眼镜片,视做薄透镜。透镜的厚度被忽视,镜片的两个主点、两个节点被减化为一个光学中心点。通过这一点的光线不发生曲折。
    薄透镜片的总镜度等于两个折射面镜度之和。D=D1+D2。
    如D1=+6.00DS;D2=-8.00DS。则D=-2.00DS。
    平行光线入射凸薄透镜可以会聚成一点,于凹透镜会分散,其反向延长线也会聚一点(不考虑球面象差)。此点至镜片距离为该薄透镜的后焦距f',f'=1/D。
    薄透镜的两折射面的镜度:D1=n-1/r1 D2=1-n/r2
    D=D1+D2=(n-1)/r1+(1-n)/r2
    =(n-1)(1/r1-1/r2)此乃著名的透镜制造式。
    (其中:r1为第一折射面曲率半径,r2是第二折射面曲率半径,n是镜片折射率)
    例1:欲加工,D1=+6.00;D2=-8.00的薄镜片,镜片n=1.5,选用镜片模具的曲率半径各为多少?
    D1=n-1/r1
    r1=n-1/D1=1.5-1/6=0.0833m=83.3mm
    r2=1-n/D2=1-1.5/-8=0.0625m=62.5mm
    磨具的曲率半径为:r1,83.3mm;r2,62.5mm.
    例2:r1为10.46cm, r2为5.23cm. n=1.523, 问薄镜片镜度?
    D=(n-1)(1/r1-1/r2)=(1.523-1)/(1/0.1046-1/0.0523)
    =-0.5D
    薄透镜镜度为:-0.50D
    如果用聚散度表示,则:
    D=(n-1)(R1-R2)
    (其中:R1为第一折射面曲率,R2是第二折射面曲率。
    R1=1/r,R2=1/r2)。
    一般透镜的两个表面中至少有一个表面是球面的一部分,如果透镜的厚度小于球面的半径,这种透镜叫做薄透镜

    54.Depth peeling


    半透明z顺序

    Depth peeling is a method of Order-independent transparency. Depth peeling has the advantage of being able to generate correct results even for complex images containing intersecting transparent objects.

    Method

    its quality and performance determined by the number of rendering passes.." Depth peeling works by rendering the image multiple times.[1] The twist is that depth peeling uses two Z buffers, one that works conventionally, and one that is not modified, and sets theminimum distance at which a fragment can be drawn without being discarded. For each pass, the previous pass' conventional Z-buffer is used as the minimal Z-buffer, so each pass draws what was "behind" the previous pass. The resulting images can be combined to form a single image.

    https://en.wikipedia.org/wiki/Depth_peeling

    https://en.wikipedia.org/wiki/Order-independent_transparency


    55.结构张量structure tensor

    http://www.cnblogs.com/tiandsp/archive/2013/09/07/3307378.html


    根据结构张量能区分图像的平坦区域、边缘区域与角点区域。

    此算法也算是计算机科学最重要的32个算法之一了。链接的文章中此算法名称为Strukturtensor算法,不过我搜索了一下,Strukturtensor这个单词好像是德语,翻译过来就是structure tensor结构张量了。

    此处所说的张量不是相对论或黎曼几何里的张量,黎曼几何的张量好多论文都叫张量场了。也不是数学界还没研究明白的对矩阵进行扩展的高阶张量,主要是张量分解。这里的结构张量就是一个矩阵,一个对图像像素进行组织的数据结构而已。

    像素组织而成的矩阵如下:

    这个公式太常见了,在harris角点检测中就用到了。其中Ix,Iy就是原对原图像在x和y方向求得的偏导。

    然后求矩阵E的行列式K和迹H。然后根据K和H的关系就能区分图像的区域模式了。

    模式分以下三类:

    平坦区域:H=0;

    边缘区域:H>0 && K=0;

    角点区域:H>0 && K>0;

    harris角点检测就用到了第三类判断。

    当然,在实际应用的时候H和K的值肯定都不会是理想,所以我用的都是近似判断。

    处理结果如下:

    原图:

    平坦区域:

    边缘区域:

    角点区域(好像也不全角点,求角点还是harris好了):

    结构张量行列式与迹的关系:

    其中红框为平坦区域,黄框为边缘区域,铝框为角点区域。



    https://en.wikipedia.org/wiki/Structure_tensor

    In mathematics, the structure tensor, also referred to as the second-moment matrix, is amatrix derived from thegradient of a function. It summarizes the predominant directions of the gradient in a specified neighborhood of a point, and the degree to which those directions are coherent. The structure tensor is often used inimage processing and computer vision

    56.梯度

    设体系中某处的物理参数(如温度、速度、浓度等)为w,在与其垂直距离的dy处该参数为w+dw,则称为该物理参数的梯度,也即该物理参数的变化率。

    http://baike.baidu.com/link?url=KyLEqZ1N2I_YnW0Efr3CZ-5cQtYc2emG6GxeC_THjW4viKYNHyLsq5itp81NX1Fsk9M1bQKgeS1cQ3AG-Ef-7IfCcn3VDcF1qzl5_IdD4Bm

    57.argmax

    函数y=f(x),x0= argmax(f(x)) 的意思就是参数x0满足f(x0)为f(x)的最大值;换句话说就是 argmax(f(x))是使得 f(x)取得最大值所对应的变量x。

    http://baike.baidu.com/link?url=PztToXJ1wBvc62Wr46uJayCXlB2IiYIasPWYc1z1GIhUpeq5ndZm7TmMB0NkWhHZ4Wss88cdeBDDcfFCKopOG_


    58.The Accumulation Buffer

    The accumulation buffer is an extended-range color buffer.Images are not rendered into it.Rather,images rendered into one of the color buffers  are added to the contents of the accumulation buffer after rendering.Effects such as antialiasing (of points, lines, and polygons),motion blur,and depth of field can be created by accumulating images generated with different transformation matrices.Each portion of a pixel in the accumulation buffer consists offour values:one for each of R, G, B, and A.

    The accumulation buffer holds RGBA color data just like the color buffers do in RGBA mode. (The results of using the accumulation buffer in color-index mode are undefined.) It's typically used for accumulating a series of images into a final, composite image. With this method, you can perform operations like scene antialiasing by supersampling an image and then averaging the samples to produce the values that are finally painted into the pixels of the color buffers. You don't draw directly into the accumulation buffer; accumulation operations are always performed in rectangular blocks, which are usually transfers of data to or from a color buffer.

    The accumulation buffer provides support for many special effects such as motion blur and depth of field. It also supports full-screen anti-aliasing, although other methods (such as multisampling) are better suited to this task.

           

    59.Moire effect莫尔效应

    http://whatis.techtarget.com/definition/moire-effect

    Moiré effect is a visual perception that occurs when viewing a set of lines or dots that is superimposed on another set of lines or dots, where the sets differ in relative size, angle, or spacing. The moiré effect can be seen when looking through ordinary window screens at another screen or background. It can also be generated by a photographic or electronic reproduction, either deliberately or accidentally.


    莫尔效应(moiré effect)是当注视一组线或点与另一组线或点的叠层时的一种视觉效果,这两组点或线在相对大小,角落或间距上不同。莫尔效应可以在通过平常的纱窗看另一个纱窗或背景时被观察到。在照片或电子复制品上也能产生这种效果。

    The illustration below shows two sets of lines of equal thickness and equal spacing, but one set is angled at a few degrees while the other set runs vertically. The moiré effect in this case appears as a set of thick, ill-defined, nearly horizontal bars.
      下面的图展示了两组厚度和间距相同的直线,只是一组是垂直的,而另一组有点倾斜。这个例子中的莫尔效应看来像一组厚而不清楚的单杆。                     

    moire.gif (7956 bytes)

    Moiré effect can produce interesting and beautiful geometric patterns. However, the phenomenon degrades the quality and resolution of graphic images. Problems occur when a screened image, such as is found in a newspaper, is directly photographed and then the photograph is reprinted in screened format. It can also occur when the image from a computer display is reproduced by photographic means and then rendered in a screened or dot-matrix format. The fine matrix of dots in the original image almost invariably conflicts with the matrix of dots in the reproduction. This generates a characteristic criss-cross pattern on the reproduced image.

    莫尔效应(moiré effect)能产生有趣和美丽的几何图样。然而,这种现象减低了图画的质量,歪曲了原来面目。当一个屏像被直接拍照得到然后照片被印刷再版时就会出现问题。当计算机显示的图象被通过照相的方式复制,然后以点矩阵格式还原时也会产生这种情况。原时图片的优良的点矩阵总是和复制品的点矩阵相冲突。在重现图像时就产生了一个特色的十字型模式。

    The word moiré is French (from the past participle of the verb moirer, meaning to water) and can be written with or without an accent aigu on the final "e." It was originally used to describe an effect applied to silk material to give it a wavy or rippled texture.

    单词moire是法文(动词moirer的过去分词,意思是水),可以在最后一个"e"上加上或不加重音符号。它原本是用来描述给丝绸材料加上纹理的效果的。

    60.T&L

    Transforming & Lighting


















    展开全文
  • 大多数文章都是只讲到大致的UE4网络的概念,并未涉及实际使用。事实上在使用的时候还是有很多要注意的地方。这篇文章会展示如何使用蓝图制作一个简单的局域网对战小游戏及使用UE4网络的需要注意的地方。...
  • HDR渲染器的实现(基于OpenGL)

    千次阅读 2012-09-01 19:09:43
    作者:何咏(欢迎和大家交流,我的QQ:35574585,Email:hyestar@126.com) 我的个人网站:http://www.graphixer.com.cn 原文出处:http://www.graphixer.com.cn/ShowWorks.asp?Type=1&ID=48 Demo下载:...
  •   本文由@浅墨_毛星云 出品,转载请注明...
  • 很全的电脑专业术语英文对照

    万次阅读 2008-06-12 21:12:00
    一、港台术语与内地术语之对照由于港台的计算机发展相对快一些,许多人都去香港或台湾寻找资料,但是港台使用的电脑专业术语与内地不尽相同,你也许曾被这些东西弄得糊里糊涂的。 ---------------------------港台...
  • 计算机缩写术语完全介绍

    万次阅读 2018-07-10 11:44:40
    计算机缩写术语完全介绍 在使用计算机的过程,你可能会碰到各种各样的专业术语, 特别是那些英文缩写常让我们不知所云,下面收集了各方面的词组, 希望对大家有帮助。 一、港台术语与内地术语之对照 由
  • 计算机缩写术语完全介绍

    千次阅读 2007-02-14 08:52:00
    在使用计算机的过程,你可能会碰到各种各样的专业术语,特别是那些英文缩写常让我们不知所云,下面收集了各方面的词组,希望对大家有帮助。 一、港台术语与内地术语之对照 由于港台的计算机发展相对快一些,许多人...
  • 文章经授权转载自iFeng科技(ID:ifeng_tech)早在2016年vivo悄然成长为全球第五大智能手机厂商的时候,《华尔街日报》的一位记者跑到中国,试图找到背...
  • 计算机语言缩写大全

    万次阅读 2010-09-16 19:24:00
    (源自:http://www.syncr.com/forums/thread/353.aspx)3C(China Compulsory Certification,中国强制性产品认证制度)3D(Three Dimensional,三维)3DCG(3D computer graphics,三维计算机图形)3DNow!...
  • 港台术语与内地术语之对照

    万次阅读 2006-06-27 15:25:00
    在使用计算机的过程,你可能会碰到各种各样的专业术语,特别是那些英文缩写常让我们不知所云,下面收集了各方面的词组,希望对大家有帮助。&|©雷傲极酷超级论坛 -- 雷傲极酷超级论坛,最新软件,BT 下载,游戏...
  • 计算机专业术语

    千次阅读 2010-03-29 11:45:00
    一、港台术语与内地术语之对照港台术语...接口母板 主板主机板 主板软碟机 软驱记忆体 内存绘图卡 显示卡监视器 显示器声效卡 音效卡解析度 分辨率相容性 兼容性数据机 调制解调器二、英文术语完全介绍在每组术语,我
  • 计算机缩写术语完全介绍 By 001pc @ 1997.10.1-2004-6-12 在使用计算机的过程,你可能会碰到各种各样的专业术语,特别是那些英文缩写常让我们不知所云,下面收集了各方面的词组,希望对大家有帮助。...
1 2
收藏数 27
精华内容 10
关键字:

unreal 中增加镜头光圈