GameByro渲染系统剖析

本文深入剖析GameByro引擎的设计理念和技术实现,包括其复杂的材质系统、渲染架构、阴影生成机制及后期处理特效的实现方法。

GameByro作为一款次世代引擎,使用了复杂的材质系统,用来满足各种各样的需求。材质代表了物体受到光照后所呈现出的质感,而这种质感在计算 机图形学中需要着色代码来完成,所以当前流行的图形引擎设计是使用被渲染对象的材质与shader相关联,GameByro也不例外。GameByro的 材质系统可以通过shade tree生成shader程序,增强了应用程序层对可编程渲染管线的控制能力。

渲染架构概览:

在GameByro中,对象表面的色彩、纹理、光滑度、透明度、反射率、折射率、发光度等可视属性与传统的材质系统分离,独立的成为了对象的渲染属 性(NiProperty),而材质(NiMaterial)仅用来对着色程序的封装,这样就实现了渲染数据和渲染方法的分离,降低了耦合性。如上所说的 这些可视属性在Gamebyro中会封装成一个属性对象,在应用程序中如果对对象挂载这个属性对象,在GPU程序中就可以访问这个属性对象的值。渲染属性 对象可以在创建时指定其类型,如纹理、浮点、矩阵、向量或数组,此外一些全局性的对象也可以通过在Shader中用语意声明为全局object对象,如灯 光和摄影机等,这样就可以以同样的方式来访问这些对象上的属性。

GameByro每一帧的渲染(NiRenderFrame)划分为多个步骤(NiRenderStep),每个步骤又包含很多个批 (NiRenderClick),NiRenderFrame封装了上层对渲染系统调用的接口,而NiRenderClick则代表了图形硬件的一次绘制 操作(对渲染队列中所有的对象的顶点缓存调用DrawPrimitive),当应用程序调用NiRenderFrame的Display接口时, NiRenderFrame会依次调用每一个NiRenderStep的Render()接口,NiRenderStep就会执行所有的 NiRenderClick操作。

对于每个NiRenderClick来说,首先要设置视口和渲染目标,也就是渲染数据流的入口和出口。视口建立以后就可以通过关联的摄影机对场景图 中的对象进行裁剪(默认的有视口裁剪和遮挡裁剪,此外还可以通过回调函数加入自己的裁剪方式),将未被裁剪的对象放入渲染队列。然后Gambyro会根据 材质来对渲染队列中的对象进行排序,让材质相同的对象处于相邻位置,这样可以减少切换shader的开销。

clip_image002

如图所示为帧渲染系统的结构图(简化版)

材质系统:

GameByro中的材质代表渲染对象所采用的方法。前面说过。纹理属性包含了着色所需的原料,那么材质就指定了对这些原料的加工方法。基于当前可编程渲染管线设计,材质就成为连接对象与GPU程序的中间层,应用程序可以通过材质将shader应用于几何体。

NiMaterial类是所有材质的基类,这个类通过一个Map来保存当前应用程序中所有NiMaterial的指针,当然这个Map是静态也就是 说相当于全局变量,通过static NiMaterial* NiMaterial:: GetMaterial(const NiFixedString& kName)接口对这个全局的Map进行访问。也就是说,当前环境中所有的NiMaterial对象是通过NiMaterial类来管理的。此外 NiMaterial类还通过静态成员变量保存了一个工作路径(即shader文件路径),通过这个路径加载shader文件。NiMaterial就像 是一个中介,全权代理对对象的渲染工作。用户可以通过重载NiMaterial来实现自己的渲染机制。每个NiMaterial都是全局性的,可以作用于 多个甚至是所有的渲染对象,但一个渲染对象也可以拥有多个NiMaterial,但只能有一个处于激活状态的NiMaterial。

NiMaterial的派生类NiFragmentMaterial提供了对可编程渲染管线完整的控制机制,内部保存了NiShader的哈希表、 一个NiGPUProgramCache数组。并且NiFragmentMaterial会生成一个用来编译GPU程序的shade tree(后面会有解释)。这样的话,每个NiFragmentMaterial可以对应多个shader程序,这样就提供了一种机制,在运行时根据不同 的运行环境和渲染对象不同的状态,来选择合适的shader程序。在NiRenderClick依次渲染可见集中的每个对象时,首先会判断其是否需要被渲 染的标记(flag),如果需要被渲染,则使用NiMaterial::IsShaderCurrent接口判断当前shader(上一次渲染所使用的 shader)是否有效,所谓有效就是仍然存在并且可以应用于本次的渲染对象,如果无效,则会调用 NiMaterial::GetCurrentShader获得shader,用于本次渲染。NiMaterial::GetCurrentShader 会根据渲染对象的属性和当前环境硬件条件来选择合适的shader程序。当然,可以通过重载IsShaderCurrent和 GetCurrentShader接口来指定自己的有效性判断规则和如何选择shader程序的方案。 NiFragmentMaterial提供了一套搭建shade tree的框架,用户可以通过重载来搭建自己的shade tree,当然,如果不想通过shade tree的形式生成shader程序也可以,使用NiSingleShaderMaterial可以从文件生成shader程序。

Shade Tree

什么是shade tree呢?我们通常编写的shader代码是线性执行的,即每个pass流程执行的是文本上定义好的shader流程,每一段shader功能模块是按 一定顺序依次执行的。如果需要修改流程中的某一部分就需要更改相关的shader代码并重新编译。而shade tree将shader代码以树形结构组织起来,每一个shader代码块(一般是一个函数)都会被编译成一个节点,通过定义输入变量和输出变量来提供数 据流的入口和出口,这些节点的插入和删除可以通过应用程序来控制,从而灵活的控制整个渲染过程。这样shader程序中的一些核心模块可以由美术通过工具 生成,然后插入到shade tree中,只要输入和输出的接口不变,就无须修改其他代码,从而降低了美术开发shader的门槛。

GameByro通过以下几个类搭建shade tree:

l NiMaterialConfigurator:shade tree被封装在这个对象中,Uniform constants被封装在NiMaterialResource中,而NiMaterialNode封装了相关的shader代码,所有的资源和节点通 过NiMaterialResourceBinding连接起来。当所有的连接都确立以后,NiMaterialConfigurator会调用 Evaluate接口生成GPU程序和一个输入Uniform资源的集合。

l NiMaterialFragmentNodes:这个类包含了一个shader代码片段的集合,这些代码片段为不同的平台和编程语言所编写。这就为 shader程序员提供了更大的灵活性,用以控制他们的代码在不同平台和图形硬件上的表现。例如:在高端平台可以采用高级的shader model提供更好的效果,而在低端平台上可以关闭一些特效来加快速度。

l NiMaterialNodeLibraries:这个类是一个NiMaterialNode的集合,其实也就是一个shader库。它允许shade tree节点完全基于数据驱动。shader库的生成可以通过两种方式,解析XML文件或用XML文件生成C++代码。GameByro提供了相关的解析 器和代码生成器。

l NiMaterialResources:shade tree中的Uniform constants,支持多种数据类型,包括Constant、Predefined、Attribute、Global、Object。

固定管线的渲染:

GameByro支持固定管线的渲染,其纹理混合过程如下。

clip_image004

固定管线的着色处理流程

上图很清楚的显示出了每个stage的操作,平行的表示两张纹理的采样是同时进行的,特定情况下右边的纹理可能被忽略。

大部分情况下,应用程序不会使用上面所有的stage,开启或者关闭那个stage可以由应用程序来指定。

以下为多重采样的原理图:

clip_image006

固定管线的纹理多重采样

缺省的着色处理流程:

GameByro提供了一个默认的着色处理流程,封装在NiMaterial的派生类NiStandardMaterial中,这个类执行类似于固定管线的流程,在不同阶段将纹理采样、并将采样到的数据混合到最终的结果中去。

GameByro默认的材质系统的特性如下:

  • Skinned and unskinned transformations. Skinned transformations can support up to 30 bones per draw call.
  • Vertex colors
  • Base maps
  • Normal maps
  • Parallax maps
  • Dark maps
  • Detail maps
  • Bump environment maps
  • Gloss maps
  • Glow maps
  • Decal maps (up to 3)
  • Cubic and spherical environment maps
  • Point/Spot/Directional/Ambient lights contributing to the diffuse, specular, and ambient color. Up to 8 total lights. Per-pixel or per-vertex.
  • Projected light maps. Clipped or unclipped. (Up to 3)
  • Projected shadow maps. Clipped or unclipped. (Up to 3)
  • Texture transforms per map.
  • Per-vertex fog

下图显示为不同的纹理、灯光、材质属性的组合过程,不过需要注意的是,视差贴图和凹凸贴图属于特殊的情况,它们仅仅影响到纹理采样的UV坐标,而并非直接对最后的颜色值产生贡献。视差贴图会改变所有贴图采样的UV坐标,而凹凸贴图仅对环境贴图的UV产生影响。

clip_image008

以上流程完全由shade tree构建,NiStandardMaterial提供了大量的函数接口用于对每个流程的控制,用户可以通过重载相关的接口,插入自己的shade tree节点,修改每一步的操作或处理过程。例如:

virtual bool HandleBaseMap(Context& kContext, NiMaterialResource* pkUVSet,

NiMaterialResource*& pkDiffuseColorAccum,

NiMaterialResource*& pkOpacity, bool bOpacityOnly);

当然,整个流程的顺序和结构修改起来比较困难,如果有需要可以定制自己的材质系统,搭建自己的shade tree。

NiStandardMaterial提供了若干回调函数,这些函数可以动态的修改流程,分割PASS,对shader运行失败进行容错。

l SplitPerPixelLights/SplitPerVertexLights:这两个函数分别作用于逐顶点光照和逐像素光 照,当物体所受的光源数量太多,超过了顶点或像素着色器的能力时,通过这些函数可以将失败的pass分割成两个,如果分割出的pass仍然不能执行,那么 函数会被递归调用,直到每个pass只有一个光源为止。

l SplitTextureMaps:这个函数会把对纹理采样的pass进行分割,当纹理查询过多时,顶点或像素着色器就会过于复杂,这时就可能导致shader运行失败。此函数只能迭代一次,生成一个额外的pass。

l DropParallaxMap:这个函数用来从几何体上移除视差贴图,且不产生额外的pass。

l DropParallaxMapThenSplitLights:这个函数首先调用DropParallaxMap移除视差贴图,然后一直调用SplitPerPixelLights直到失败为止。

NiMaterialInstance:

NiMaterial并不是直接与NiRenderObject相关联,而是经过了NiMaterialIstance这个中间层,由它来代理将 NiMaterial关联到几何体,它负责调用NiMaterial为NiRenderObject生成NiShader,通过改变 NiMaterialIstance上的接口SetMaterialNeedsUpdate,可以决定每一帧NiRenderObject所使用的材质是 否需要被更换,通过接口SetDefaultMaterialNeedsUpdateFlag,可以决定当前材质所需的数据(即当前渲染流程所需的数据) 是否要被更新。这样每个NiMaterialIstance只能被一个NiRenderObject所拥有,而多个NiMaterialIstance可 以共享一个NiMaterial,这样就减少了重复创建NiMaterial的时间和空间上的开销,同时降低了渲染对象个材质之间的耦合度。

如下为材质系统的类结构简化图:

clip_image010

渲染属性:

前面提到过,GameByro将渲染所需要加工的数据全部封装在了NiProperty中,只要在shader中用指定的语法进行声明,就可以访问这些属性的值。

目前引擎中已经定义了12种属性,均派生自NiProperty,分别代表渲染数据的12种不同类型:

l NiAlphaProperty

l NiDitherProperty

l NiFogProperty

l NiMaterialProperty

l NiRendererSpecificProperty

l NiShadeProperty

l NiSpecularProperty

l NiStencilProperty

l NiTexturingProperty

l NiVertexColorProperty

l NiWireframeProperty

l NiZBufferProperty

用户也可以自定义属性类型,但所对应的数据类型要被shader语言所支持。

光照与阴影:

光照与阴影密不可分,因为阴影就是由光照产生的,前面在材质系统中已经提到过光照对着色的影响,这里重点阐述,GameByro是怎样根据光源产生阴影的。由GameByro提供的阴影均基于ShadowMap技术,

但也提供了ShaowVolume的示例代码。

Shadowing System是完全建立在帧渲染系统上的, 通过一个RenderClick生成ShadowMap,然后在正常渲染流程开始之前将ShadowMap更新到可见集内每一个渲染对象上。这样当渲染对 象使用NiStandardMaterial时就会根据光源的阴影技术来对ShadowMap进行采样,并将结果与最终的输出颜色按一定比例混合。

阴影系统由以下几个类构成:

GameByro提供了三种类型的Shadow Write Materials,分别为NiPointShadowWriteMaterial、

NiDirectionalShadowWriteMaterial、NiSpotShadowWriteMaterial,适用于三种不同的光源类型。

  • Shadow Technique :这个类封装了阴影算法的细节,包括生成ShadowMap和使用ShadowMap投射阴影。
  • Shadow Render Click : 这个类是一个生成ShadowMap的批,这个类的对象是由shadow click generator负责生成。
  • Shadow Click Validator : Shadow Render Click :通过此类对象判断接受阴影的几何体对于shadow generator来说是否可见。
  • Shadow Map : 每个ShadowMap对象包含一个作为阴影图的纹理,shadowmap对象由shadowManager直接管理,每个shadowmap对象都被一个shadow generator引用。
  • Shadow Cube Map : 同shadowmap作用相同,只是阴影图的纹理类型为CubeMap。主要用于点光源生成的全方向阴影。
  • Shadow Generator : 阴影生成器,每个ShadowGenerator都对应一个NiDyamicEffect(NiLight的基类),也就是为这个NiDyamicEffect代表的光源生成阴影, 生成阴影所采用的技术由对象引用的ShadowTechnique来决定。
  • Shadow Click Generator : 生成ShadowMap的Shadow Render Click都由此类负责创建。这个类为每个ShadowGenerator指定ShadowMap,并负责每帧更新ShadowMap和ShadowMap所对应的变换矩阵。
  • Shadow Manager : 所 有的ShadowMap、ShadowTechnique、ShadowGenerator、shadow render click对象都由ShadowManager统一管理,并负责使用一个shadow click generator 在每一帧生成一个shadow render click的列表。

阴影系统静态结构如下:

clip_image012 整个阴影渲染的流程大致如下:

1. 在应用程序初始化阶段,通过调用NiShadowManager的Initialize()接口实现对整个阴影系统的初始化,此时应用程序会注册所有的ShadowTechnique,并初始化NiShadowClickGenerator。

2. 当我们创建一个NiLight以后,我们可以通过NiShadowManager为这个NiLight新建一个 NiShadowGenerator,NiShadowGenerator会通过NiLight的类型来选择合适的NiShadowTechnique, 此时NiShadowManager会为新的NiShadowGenerator创建一个NiShadowRenderClick。

3. 当帧渲染系统启动后,NiShadowRenderClick的PerformRendering()接口会被调用,此时 NiShadowRenderClick会通过引用的NiGenerator获得阴影生成的着色程序和所需的数据(例如深度偏移),同时通过 NiGenerator引用的Camera获得场景图中的可见集。下一步就是对可见集中的渲染对象添加ShadowWriteMaterial并设为激活 状态,而ShadowWriteMaterial的类型是根据NiDyamicEffect的类型指定的。最后NiRenderClick就会启动渲染流 水线,将可见集中的对象的深度全部渲染到ShadowMap中。

4. 在第一个RenderClick中生成了ShadowMap,下面就要使用这些ShadowMap投射阴影。在每一帧开始之前,用户还可以自己指定不接受 阴影的节点,手动将其插入NiShadowGenerator::m_kUnaffectedReceiverList中。在渲染BackBuffer的 RenderClick中,首先会对场景图中的节点进行一次遍历,将不受阴影的节点放入NiShadowGenerator:: m_kUnaffectedCasterList的列表。在对每个节点进行渲染时,会遍历NiShadowManager中所有的 NiShadowGenerator,判断这些NiShadowGenerator是否对这个节点有影响,判断的规则是此节点是否存在于 UnaffectedReceiverList和UnaffectedCasterList这两个链表中,如果存在于任何一个链表,则节点不受此 NiShadowGenerator影响,如果受此NiShadowGenerator影响,那么就将该NiShadowGenerator上的 ShadowMap和数据更新到节点上的渲染属性中,NiStandardMaterial会根据这些数据选择对ShadowMap采样的方式,并将结果 混合到最终的输出颜色中。

值得注意的是,点光源的shadowMap默认的是采用CubeMap实现,用户可以通过接口选择不使用CubeMap实现,当采用CubeMap实现时,光源无法产生软阴影。

渲染系统的扩展:

为了验证GameByro渲染系统的扩展性,笔者尝试着加入了一个后期处理特效Screen Space Ambient Occlusion(SSAO),即屏幕空间的遮蔽,由于仅仅为了熟悉GameByro的渲染流程,所以笔者并未对SSAO算法做深究,仅仅用了自己简化 的算法。

在渲染过程中先单独使用一个RanderClick将场景中的深度渲染到一张纹理上,然后在渲染到后台缓冲区的RenderClick中对深度纹理 进行采样,执行SSAO算法,将结果混合到最终的结果中。采样点的偏移坐标是通过对一组随机向量进行归一化再乘以0~1之间的随机数而生成的,即长度为 0~1之间的随机向量。

PS代码如下:

float VerticalRange:GLOBAL; //控制XY方向采样范围变量,可以在应用程序层对其进行调整

float HorizontalRange:GLOBAL; //控制在Z方向采样范围的变量

float calAO(float2 texCoord,float dw, float dh ) //通过当前像素所标和偏移量计算AO

{

float2 coord = float2(texCoord.x + dw, texCoord.y + dh);

float4 CenterPos = tex2D(DepthSampler,texCoord);

float4 CurPos = tex2D(DepthSampler,coord);

float depthDiff = clamp(CenterPos.z - CurPos.z,0,VerticalRange);

float ao = depthDiff/length(CurPos.xyz - CenterPos.xyz);

return ao;

}

// Pixel shader

float4 PS_SSAO(VS_OUTPUT In) : COLOR

{

float2 texCoord = In.BaseTex;

float depth = tex2D(DepthSampler,texCoord).z;

float ao = 0.0;

float scale = HorizontalRange/depth; //因为采样范围会受深度影响,故除以此系数。

for(int i=0; i<32; ++i)

{

float2 offset = arrRandomPt[i].xy* scale;

ao += calAO(texCoord, offset.x, offset.y);

}

ao/=32;

float4 color = tex2D(BaseSampler,texCoord);

color.xyz *= (1.0 - ao);

return color;

}

最终实现效果如下:

clip_image014 clip_image016

SSAO生成的明暗图 无SSAO材质

以下两图上图为无SSAO效果,下图为开启SSAO后的效果。

clip_image018

clip_image020

总结:

GameByro的帧渲染系统是比较灵活,想加入自己的渲染流程是比较容易的,此外由于RenderTarget和RenderView都可以由用 户指定,所以想实现自己的shader效果不是很难。然而,NiStanderMaterial的shade tree比较复杂,总共高达6000行代码以上,过程非常复杂,这就是说,如果想实现自己的材质处理流程也要付出相当大的工作量,阴影系统虽然实现了较低 的耦合度,但是实现过于复杂,不够简洁高效。

 

附件为链接文件 Gamebryo.3.0 LightSpeed 详情请自行搜索,该资源 来源于互联网。 安装后目录,大小为10G左右 ├─Build │ ├─CoreRuntime │ │ └─Win32 │ │ ├─VC80 │ │ │ └─Property Sheets │ │ └─VC90 │ │ └─Property Sheets │ ├─Foundation │ │ └─Win32 │ │ ├─VC80 │ │ │ ├─efd │ │ │ ├─efdLogService │ │ │ ├─efdNetwork │ │ │ └─efdPhysX │ │ └─VC90 │ │ ├─efd │ │ ├─efdLogService │ │ ├─efdNetwork │ │ └─efdPhysX │ ├─GameFramework │ │ └─Win32 │ │ ├─VC80 │ │ │ ├─ecr │ │ │ ├─ecrInput │ │ │ ├─ecrLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─ecrPhysX │ │ │ ├─ecrPhysXLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egf │ │ │ ├─egfLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egfPhysX │ │ │ ├─egfPhysXLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egfPython │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egmAnimation │ │ │ ├─egmAnimationLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egmPhysXRagdoll │ │ │ ├─egmPhysXTerrain │ │ │ ├─egmTerrain │ │ │ ├─egmTerrainLua │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─egmToolServices │ │ │ ├─egmVisualizers │ │ │ └─egmVisualTracker │ │ └─VC90 │ │ ├─ecr │ │ ├─ecrInput │ │ ├─ecrLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─ecrPhysX │ │ ├─ecrPhysXLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egf │ │ ├─egfLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egfPhysX │ │ ├─egfPhysXLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egfPython │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egmAnimation │ │ ├─egmAnimationLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egmPhysXRagdoll │ │ ├─egmPhysXTerrain │ │ ├─egmTerrain │ │ ├─egmTerrainLua │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─egmToolServices │ │ ├─egmVisualizers │ │ └─egmVisualTracker │ ├─Samples │ │ └─Win32 │ │ ├─VC80 │ │ │ ├─BaseGame │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Scripts │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─CustomTypeExample1 │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─CustomTypeExample2 │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ └─HelloWorld │ │ │ └─Scripts │ │ └─VC90 │ │ ├─BaseGame │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Scripts │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─CustomTypeExample1 │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ ├─CustomTypeExample2 │ │ │ ├─Debug │ │ │ ├─DebugDLL │ │ │ ├─Release │ │ │ ├─ReleaseDLL │ │ │ ├─Shipping │ │ │ └─ShippingDLL │ │ └─HelloWorld │ │ └─Scripts │ └─Tools │ └─Win32 │ ├─VC80 │ │ ├─AssetController │ │ ├─ChannelServer │ │ └─DDEHeaderGen │ └─VC90 │ ├─AssetController │ ├─ChannelServer │ └─DDEHeaderGen ├─Documentation │ └─HTML │ ├─Art │ │ ├─Max │ │ │ └─images │ │ ├─Maya │ │ │ └─images │ │ ├─Other │ │ │ └─images │ │ └─XSI │ │ └─images │ ├─Convert │ │ ├─Announce │ │ └─Previous │ ├─GetStart │ │ ├─All │ │ ├─Architecture │ │ │ └─images │ │ ├─PC │ │ └─Xbox │ ├─Home │ ├─Learn │ │ ├─Demos │ │ │ └─images │ │ ├─FullDemos │ │ │ └─images │ │ ├─MangledMetal │ │ │ └─images │ │ ├─ProductTour │ │ │ └─images │ │ └─Tutorials │ │ └─images │ ├─Programmer │ │ ├─AssetRuntimeService │ │ │ └─images │ │ ├─Behaviors │ │ ├─Build │ │ ├─Builtins │ │ ├─Categories │ │ ├─CoreRuntimeServices │ │ ├─Entities │ │ ├─Entity_Interaction │ │ ├─Entity_Properties │ │ ├─Foundation │ │ ├─Frame_Rendering_System │ │ ├─Game_Initialization │ │ │ └─images │ │ ├─General_Topics │ │ │ └─images │ │ ├─Logging │ │ ├─Messages │ │ ├─Models │ │ │ └─images │ │ ├─NiFloodgate │ │ │ └─images │ │ ├─NiMaterial │ │ │ └─images │ │ ├─NiMesh │ │ │ └─images │ │ ├─NiMetrics │ │ ├─NiParticle │ │ │ └─images │ │ ├─NiPhysX │ │ ├─NiProgramLauncher │ │ ├─NiSceneGraphUpdateService │ │ ├─NiShader │ │ │ └─images │ │ ├─NiTerrain │ │ │ └─images │ │ ├─Object_Systems │ │ │ └─images │ │ ├─Scheduler │ │ ├─Scripting │ │ ├─Shadowing_System │ │ ├─SystemServices │ │ ├─Texturing │ │ │ └─images │ │ └─Toolbench │ │ └─images │ ├─Reference │ │ ├─ecr │ │ │ └─images │ │ ├─ecrInput │ │ │ └─images │ │ ├─ecrPhysX │ │ │ └─images │ │ ├─efd │ │ │ └─images │ │ ├─efdLogService │ │ │ └─images │ │ ├─efdNetwork │ │ │ └─images │ │ ├─efdPhysX │ │ │ └─images │ │ ├─egf │ │ │ └─images │ │ ├─egfLua │ │ │ └─images │ │ ├─egfPhysX │ │ │ └─images │ │ ├─egfPython │ │ │ └─images │ │ ├─egmAnimation │ │ │ └─images │ │ ├─egmPhysXRagdoll │ │ │ └─images │ │ ├─egmPhysXTerrain │ │ │ └─images │ │ ├─egmTerrain │ │ │ └─images │ │ ├─egmToolServices │ │ │ └─images │ │ ├─egmVisualizers │ │ │ └─images │ │ ├─egmVisualTracker │ │ │ └─images │ │ ├─MangledMetal │ │ │ └─images │ │ ├─Namespaces │ │ ├─NiAnimation │ │ │ └─images │ │ ├─NiAnimationCompression │ │ ├─NiApplication │ │ │ └─images │ │ ├─NiAudio │ │ ├─NiBinaryShaderLib │ │ ├─NiCgShaderLib │ │ ├─NiCollision │ │ │ └─images │ │ ├─NiCommonMaterialLibrary │ │ ├─NiControllerExtractor │ │ ├─NiCursor │ │ │ └─images │ │ ├─NiD3D10BinaryShaderLib │ │ ├─NiD3D10EffectShaderLib │ │ ├─NiD3D10Renderer │ │ │ └─images │ │ ├─NiD3DXEffectShaderLib │ │ ├─NiDevImageQuantizer │ │ ├─NiDX9Renderer │ │ │ └─images │ │ ├─NiEntity │ │ ├─NiFloodgate │ │ │ └─images │ │ ├─NiFont │ │ ├─NiFXLShaderLib │ │ ├─NiHDRReader │ │ ├─NiInput │ │ │ └─images │ │ ├─NiMain │ │ │ └─images │ │ ├─NiMaterialNodeXMLLibraryReader │ │ ├─NiMesh │ │ │ └─images │ │ ├─NiMeshProfileProcessor │ │ │ └─images │ │ ├─NiMeshProfileXMLParser │ │ │ └─images │ │ ├─NiMeshTools │ │ ├─NiMetricsOutput │ │ ├─NiNBTGenerator │ │ ├─NiOpenEXRReader │ │ ├─NiOptimization │ │ ├─NiParticle │ │ │ └─images │ │ ├─NiPhysX │ │ │ └─images │ │ ├─NiPhysXFluid │ │ │ └─Images │ │ ├─NiPhysXParticle │ │ │ └─Images │ │ ├─NiPhysXSharedData │ │ ├─NiPhysXTools │ │ ├─NiPluginToolkit │ │ │ └─images │ │ ├─NiPNGReader │ │ ├─NiPortal │ │ │ └─images │ │ ├─NiProgramLauncher │ │ │ └─images │ │ ├─NiSample │ │ ├─NiSceneGraphUpdateService │ │ │ └─images │ │ ├─NiStandardSharedData │ │ ├─NiStripify │ │ ├─NiSystem │ │ ├─NiTerrain │ │ │ └─images │ │ ├─NiTerrainComponent │ │ │ └─images │ │ ├─NiTerrainPhysX │ │ │ └─images │ │ ├─NiUserInterface │ │ ├─NiViewMath │ │ ├─NiVisualTracker │ │ ├─NSBShaderLib │ │ ├─NSFParserLib │ │ ├─QuickRef_Behaviors │ │ ├─QuickRef_Builtins │ │ ├─QuickRef_Config │ │ ├─QuickRef_Models │ │ ├─QuickRef_Services │ │ └─Tool_Plug_ins │ │ └─images │ ├─RelNotes │ │ ├─All │ │ ├─PC │ │ └─Xbox │ ├─shared │ ├─ThirdPartyCode │ │ └─All │ ├─Tools │ │ ├─Animation_Tool │ │ │ └─images │ │ ├─AssetController │ │ ├─Asset_Viewer │ │ │ └─images │ │ ├─ColladaToNSFConverter │ │ ├─CubeMapMaker │ │ │ └─images │ │ ├─DataDrivenEnum │ │ ├─DynamicCgCompiler │ │ ├─EntityModelingTool │ │ │ └─images │ │ ├─ImageGenerator │ │ ├─MeshProfileCompiler │ │ ├─NiFontCreator │ │ │ └─images │ │ ├─NifViewer │ │ │ └─images │ │ ├─NiMaterialNodeXMLLibraryParser │ │ ├─NiThumbnailExtractor │ │ │ └─images │ │ ├─NSFParserUtility │ │ │ └─images │ │ ├─PhysX_Nif_Viewer │ │ ├─PhysX_Scene_Graph_Printer │ │ ├─Scene_Designer │ │ │ └─images │ │ ├─Scene_Graph_Printer │ │ ├─ScriptDebugger │ │ │ └─images │ │ ├─Toolbench │ │ │ └─images │ │ ├─Tool_Plug_in_Batch_Tool │ │ ├─Tool_Plug_in_Testbed │ │ │ └─images │ │ └─WorldBuilder │ │ ├─icons │ │ └─images │ └─Tutorials │ ├─Base_Game │ │ ├─images │ │ └─templates │ ├─Hello_World │ │ ├─images │ │ └─templates │ └─Rapid_Iteration ├─Media │ ├─asset-web-config │ ├─asset-web-metadata │ ├─Enums │ ├─PhysXModelLibrary │ ├─Samples │ │ ├─GameFramework │ │ │ ├─BaseGame │ │ │ ├─CustomTypeExample1 │ │ │ ├─CustomTypeExample2 │ │ │ ├─HelloWorld │ │ │ └─RapidPrototyping │ │ │ ├─Exported │ │ │ └─RapidPrototypingWorld │ │ ├─Graphics │ │ │ └─Art Files │ │ └─SampleUI │ ├─Shaders │ │ └─Data │ │ ├─D3D10 │ │ ├─DX9 │ │ ├─Generated │ │ │ └─NiStandardMaterial │ │ └─Textures │ ├─StandardModelLibrary │ │ └─Media │ └─ToolPluginsData │ └─MeshProfiles ├─others │ ├─Addons │ │ ├─GamebryoExporter │ │ │ ├─Application │ │ │ │ ├─Plugins │ │ │ │ └─toolbars │ │ │ └─Data │ │ │ └─Scripts │ │ └─GamebryoMaterial │ │ ├─Application │ │ │ ├─bin │ │ │ │ └─nt-x86 │ │ │ ├─spdl │ │ │ └─toolbars │ │ └─Data │ │ ├─DSPresets │ │ │ └─Shaders │ │ │ └─Realtime │ │ └─Scripts │ ├─bin │ │ └─plug-ins │ │ └─Gamebryo Scripts │ ├─Icons │ ├─plugins │ │ └─MaxImmerse │ │ └─Scripts │ ├─scripts │ │ ├─Gamebryo │ │ ├─others │ │ └─startup │ └─ui │ ├─Icons │ └─macroscripts ├─Samples │ ├─GameDemos │ │ ├─DodgeBall │ │ │ ├─Art_Files │ │ │ ├─DATA │ │ │ │ └─WIN32 │ │ │ │ ├─Menu │ │ │ │ ├─MILES │ │ │ │ └─SOUNDS │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─LenguinsOnIce │ │ │ ├─Art Files │ │ │ │ ├─Baby │ │ │ │ ├─Fx │ │ │ │ ├─Level │ │ │ │ └─Moma │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ ├─BABY │ │ │ │ ├─Fx │ │ │ │ ├─LEVELS │ │ │ │ ├─Miles │ │ │ │ ├─MOMMA │ │ │ │ ├─ScreenOverlay │ │ │ │ ├─SHADERS │ │ │ │ │ ├─DX9 │ │ │ │ │ └─Generated │ │ │ │ │ └─NiStandardMaterial │ │ │ │ └─SOUNDS │ │ │ ├─NiMenu │ │ │ ├─Tools │ │ │ │ └─MESHDICER │ │ │ │ └─Win32 │ │ │ │ ├─VC80 │ │ │ │ └─VC90 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─MangledMetal │ │ │ ├─Art Files │ │ │ │ ├─Export │ │ │ │ │ ├─Characters │ │ │ │ │ │ ├─BloatThrall │ │ │ │ │ │ ├─DeathRipper │ │ │ │ │ │ ├─Pedestrians │ │ │ │ │ │ ├─Reaper │ │ │ │ │ │ └─Vandal │ │ │ │ │ │ └─.mayaSwatches │ │ │ │ │ ├─FX │ │ │ │ │ └─Props │ │ │ │ ├─Export_Manual │ │ │ │ │ ├─Characters │ │ │ │ │ │ └─DeathRipper │ │ │ │ │ ├─Props │ │ │ │ │ └─Proxies │ │ │ │ ├─ToolScripts │ │ │ │ │ ├─Max │ │ │ │ │ │ ├─plugins │ │ │ │ │ │ │ └─MaxImmerse │ │ │ │ │ │ │ └─Scripts │ │ │ │ │ │ └─UI │ │ │ │ │ │ └─MacroScripts │ │ │ │ │ └─Maya │ │ │ │ │ ├─bin │ │ │ │ │ │ └─plug-ins │ │ │ │ │ │ └─Gamebryo Scripts │ │ │ │ │ └─scripts │ │ │ │ │ └─others │ │ │ │ └─TriggersLibrary │ │ │ ├─Data │ │ │ │ ├─asset-web-config │ │ │ │ ├─asset-web-metadata │ │ │ │ ├─Enums │ │ │ │ ├─Exported │ │ │ │ ├─HUD │ │ │ │ ├─MangledMetal │ │ │ │ │ ├─EntityModels │ │ │ │ │ ├─FlatModels │ │ │ │ │ ├─GamebryoData │ │ │ │ │ │ ├─D3D10 │ │ │ │ │ │ │ ├─Characters │ │ │ │ │ │ │ │ ├─BloatThrall │ │ │ │ │ │ │ │ ├─DeathRipper │ │ │ │ │ │ │ │ ├─Reaper │ │ │ │ │ │ │ │ └─Vandal │ │ │ │ │ │ │ ├─FX │ │ │ │ │ │ │ ├─Props │ │ │ │ │ │ │ ├─Proxies │ │ │ │ │ │ │ └─Terrain │ │ │ │ │ │ ├─DX9 │ │ │ │ │ │ │ ├─Characters │ │ │ │ │ │ │ │ ├─BloatThrall │ │ │ │ │ │ │ │ ├─DeathRipper │ │ │ │ │ │ │ │ ├─Reaper │ │ │ │ │ │ │ │ └─Vandal │ │ │ │ │ │ │ ├─FX │ │ │ │ │ │ │ ├─Props │ │ │ │ │ │ │ ├─Proxies │ │ │ │ │ │ │ └─Terrain │ │ │ │ │ │ └─Generic │ │ │ │ │ │ ├─Characters │ │ │ │ │ │ │ ├─BloatThrall │ │ │ │ │ │ │ ├─DeathRipper │ │ │ │ │ │ │ ├─Pedestrians │ │ │ │ │ │ │ ├─Reaper │ │ │ │ │ │ │ └─Vandal │ │ │ │ │ │ ├─FX │ │ │ │ │ │ ├─Props │ │ │ │ │ │ ├─Proxies │ │ │ │ │ │ └─Terrain │ │ │ │ │ │ ├─Level01 │ │ │ │ │ │ │ └─Sector_0_0 │ │ │ │ │ │ └─Level03 │ │ │ │ │ │ └─Sector_0_0 │ │ │ │ │ └─Scripts │ │ │ │ ├─PhysXModelLibrary │ │ │ │ ├─Shaders │ │ │ │ │ ├─DX9 │ │ │ │ │ ├─NiDirShadowWriteMat │ │ │ │ │ ├─NiStandardMaterial │ │ │ │ │ └─NiTerrainMaterial │ │ │ │ ├─StandardModelLibrary │ │ │ │ │ └─Media │ │ │ │ └─TriggersLibrary │ │ │ │ ├─EntityModels │ │ │ │ ├─FlatModels │ │ │ │ ├─GamebryoData │ │ │ │ │ └─Generic │ │ │ │ │ └─Props │ │ │ │ └─Scripts │ │ │ ├─Tools │ │ │ │ └─BlockFilter │ │ │ │ ├─bin │ │ │ │ └─Win32 │ │ │ │ └─VC80 │ │ │ └─Win32 │ │ │ ├─ResourceFiles │ │ │ ├─VC80 │ │ │ │ ├─Release │ │ │ │ └─Shipping │ │ │ └─VC90 │ │ │ ├─Release │ │ │ └─Shipping │ │ ├─MetalWars │ │ │ ├─Art Files │ │ │ │ └─Textures Win32 │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ ├─Killbot │ │ │ │ ├─Miles │ │ │ │ ├─Scene │ │ │ │ ├─Shaders │ │ │ │ │ └─Generated │ │ │ │ │ ├─ColorDepthMaterial │ │ │ │ │ └─NiStandardMaterial │ │ │ │ └─Sound │ │ │ ├─Menu │ │ │ ├─Sound │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─MOUT │ │ │ ├─Art Files │ │ │ │ ├─DesertTown │ │ │ │ │ └─textures │ │ │ │ └─Soldier │ │ │ ├─Data │ │ │ │ ├─DesertTown │ │ │ │ ├─Shaders │ │ │ │ │ ├─Common │ │ │ │ │ └─D3D10 │ │ │ │ └─Soldier │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ └─SceneApp │ │ ├─Data │ │ │ └─Win32 │ │ │ └─Shaders │ │ │ └─Generated │ │ │ ├─NiDirShadowWriteMat │ │ │ ├─NiSpotShadowWriteMat │ │ │ └─NiStandardMaterial │ │ ├─ShadowMaterialNodeLibrary │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─GameFrameworkTechDemos │ │ ├─BaseGame │ │ ├─CustomTypeExample1 │ │ ├─CustomTypeExample2 │ │ ├─Emergent.Toolbench.CustomType │ │ │ ├─bin │ │ │ │ └─Shipping │ │ │ │ └─Emergent.Toolbench.CustomType │ │ │ ├─Editors │ │ │ ├─obj │ │ │ │ └─Shipping │ │ │ │ └─Editors │ │ │ ├─Properties │ │ │ ├─References │ │ │ └─Types │ │ └─HelloWorld │ ├─GraphicsTechDemos │ │ ├─BackgroundLoad │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ └─WIN32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─BadSushi │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─CharacterAnimationDemo │ │ │ ├─Art Files │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ └─Shaders │ │ │ │ └─Generated │ │ │ │ └─NiStandardMaterial │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─CharacterPerformanceDemo │ │ │ ├─Art Files │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ ├─D3D10 │ │ │ │ └─DX9 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─CollisionTestDynamic │ │ │ ├─Art Files │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ └─Shaders │ │ │ │ └─Generated │ │ │ │ └─NiStandardMaterial │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─CollisionTestStatic │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ └─Shaders │ │ │ │ └─Generated │ │ │ │ └─NiStandardMaterial │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─CubeMap │ │ │ ├─ArtFiles │ │ │ │ └─Textures_Win32 │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─DX9MSAATextures │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─DynamicTexture │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─InputDemo │ │ │ ├─Actions │ │ │ ├─DATA │ │ │ │ └─WIN32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─LogoApplication │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─MeshCreation │ │ │ ├─Art_Files │ │ │ │ └─Water_Height │ │ │ ├─Data │ │ │ ├─Kernels │ │ │ │ └─NiWaterKernel │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─MeshInstancing │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─PhysXFluids │ │ │ ├─ArtFiles │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ │ └─Shaders │ │ │ │ └─Generated │ │ │ │ └─NiStandardMaterial │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─PhysXParticles │ │ │ ├─ArtFiles │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─PhysXParticlesInCode │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─PhysXTerrainDemo │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ ├─NIFs │ │ │ │ ├─Palettes │ │ │ │ ├─Terrain │ │ │ │ │ └─Sector_0_0 │ │ │ │ └─WaterNormalMaps │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─PhysXTiming │ │ │ ├─ArtFiles │ │ │ ├─Data │ │ │ │ └─Win32 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─Picking │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ └─Shaders │ │ │ │ ├─D3D10 │ │ │ │ └─DX9 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─ProfileSample │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─ShaderSample │ │ │ ├─Data │ │ │ │ ├─Art Files │ │ │ │ └─Shaders │ │ │ │ ├─D3D10 │ │ │ │ ├─DX9 │ │ │ │ └─Generated │ │ │ │ └─NiStandardMaterial │ │ │ ├─sdk │ │ │ │ └─Win32 │ │ │ │ ├─Include │ │ │ │ └─Lib │ │ │ │ ├─vc80 │ │ │ │ │ ├─debug │ │ │ │ │ ├─debugdll │ │ │ │ │ ├─release │ │ │ │ │ ├─releasedll │ │ │ │ │ ├─shipping │ │ │ │ │ └─shippingdll │ │ │ │ └─VC90 │ │ │ │ ├─Debug │ │ │ │ ├─DebugDLL │ │ │ │ ├─Release │ │ │ │ ├─ReleaseDLL │ │ │ │ ├─Shipping │ │ │ │ └─ShippingDLL │ │ │ ├─ShaderLibrary │ │ │ │ └─Win32 │ │ │ │ ├─VC80 │ │ │ │ └─VC90 │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─ShadowMap │ │ │ ├─Art Files │ │ │ ├─Data │ │ │ │ └─Shaders │ │ │ │ ├─DX9 │ │ │ │ └─Generated │ │ │ │ ├─NiDirShadowWriteMat │ │ │ │ ├─NiSpotShadowWriteMat │ │ │ │ ├─NiStandardMaterial │ │ │ │ └─NiVSMBlurMaterial │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─SimpleApp │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─SoftParticles │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─StandardMaterial │ │ │ ├─Art_Files │ │ │ │ └─Textures_Win32 │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─StencilShadow │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─TerrainDemo │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ │ ├─NIFs │ │ │ │ ├─Palettes │ │ │ │ ├─terrain │ │ │ │ │ └─Sector_0_0 │ │ │ │ └─WaterNormalMaps │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─UnicodeCharacterSets │ │ │ ├─Data │ │ │ │ └─Font │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─VertexLightingPipeline │ │ │ ├─Art Files │ │ │ ├─Data │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ └─VideoTexture │ │ ├─Data │ │ │ └─Miles │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─Models │ │ ├─AnimationToolExamples │ │ │ ├─BabyLenguin │ │ │ │ └─Max │ │ │ ├─CyberMonkey │ │ │ │ └─Art_Files │ │ │ │ └─.mayaSwatches │ │ │ ├─DestroyerBot │ │ │ │ └─Maya │ │ │ ├─Killbot │ │ │ │ ├─Killbot Default_Pipeline │ │ │ │ │ └─Max │ │ │ │ │ └─maps │ │ │ │ └─Max │ │ │ │ └─maps │ │ │ ├─ROCKY │ │ │ │ └─Max │ │ │ ├─Skeleton │ │ │ ├─Slim │ │ │ ├─Soldier │ │ │ │ └─Max │ │ │ │ └─textures │ │ │ └─Tutorials │ │ │ ├─Blacksmith │ │ │ │ └─Max │ │ │ └─Redcoat │ │ │ └─Max │ │ ├─Collision │ │ │ ├─MAX │ │ │ │ └─1900 MISC Hierarchy (Girl) │ │ │ ├─MAYA │ │ │ │ └─2900 MISC Hierarchy (Robot) │ │ │ └─NIF │ │ ├─Max Artist Examples │ │ │ ├─PhysX │ │ │ │ └─Art Files │ │ │ └─Textures │ │ ├─Maya Artist Examples │ │ │ ├─Animation │ │ │ ├─Geometry │ │ │ ├─Material │ │ │ ├─Misc │ │ │ ├─Particle │ │ │ ├─PhysX │ │ │ └─Shaders │ │ ├─SceneDesignerExamples │ │ │ ├─Holodeck │ │ │ │ ├─Data │ │ │ │ │ └─Max │ │ │ │ └─Palettes │ │ │ ├─MadLab │ │ │ │ ├─Art Files │ │ │ │ │ └─MadLab Materials │ │ │ │ ├─Palettes │ │ │ │ └─Win32 │ │ │ │ └─Shaders │ │ │ │ └─Generated │ │ │ └─Ruins │ │ │ ├─Art_Files │ │ │ ├─Data │ │ │ └─Palettes │ │ └─XSI Artist Examples │ │ ├─Pictures │ │ └─Scenes │ │ └─Exported │ ├─SampleLibs │ │ ├─SamplePluginsDLL │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ └─SceneDesignerPlugins │ │ ├─SamplePluginCpp │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ └─SamplePluginCs │ │ ├─bin │ │ │ └─ShippingDLL │ │ └─obj │ │ └─ShippingDLL │ └─Tutorials │ ├─Graphics │ │ ├─01-Renderers │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─02-NIFFiles │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─03-Shaders │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─04-SceneAttachment │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─05-Transforms │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─06-TimeControllers │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─07-UserInput │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─08-ScreenTexture │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─09-RenderedTexture │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ └─VC90 │ │ ├─ArtFiles │ │ └─Data │ │ └─Shaders │ │ ├─Common │ │ └─D3D10 │ └─PhysX │ ├─01_Initializing │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─02_BallInBox │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─03_Kinematic │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─04_Asynchronous │ │ └─Win32 │ │ ├─VC80 │ │ └─VC90 │ ├─ArtFiles │ │ ├─Models │ │ └─Textures │ └─Data │ └─Win32 ├─sdk │ └─Win32 │ ├─Bin │ │ └─VC90 │ │ └─Shipping │ │ ├─Data │ │ ├─Plugins │ │ │ ├─Emergent.Toolbench.Actions │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.Assets │ │ │ ├─Emergent.Toolbench.Assets.Framework │ │ │ ├─Emergent.Toolbench.CodeEditor │ │ │ │ ├─Compilers │ │ │ │ ├─Icons │ │ │ │ └─Syntax │ │ │ ├─Emergent.Toolbench.Collections.Test │ │ │ ├─Emergent.Toolbench.Connections │ │ │ │ └─Images │ │ │ ├─Emergent.Toolbench.ConsoleLogger │ │ │ ├─Emergent.Toolbench.ContentExporter │ │ │ ├─Emergent.Toolbench.ContentService │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.EntityModeling │ │ │ │ ├─Icons │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.EntityModeling.UI │ │ │ │ ├─Icons │ │ │ │ └─Resources │ │ │ │ └─Images │ │ │ ├─Emergent.Toolbench.EntityModeling.UI.ModelFactory │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.FileAssociator │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.FileAssociator.UI │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.FileSystemMonitor │ │ │ ├─Emergent.Toolbench.Foundation.Interop │ │ │ ├─Emergent.Toolbench.Framework │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.Gamebryo │ │ │ ├─Emergent.Toolbench.GameSolution │ │ │ │ ├─Icons │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.GameSolution.UI │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.MigrationService │ │ │ ├─Emergent.Toolbench.OutputView │ │ │ │ ├─Icons │ │ │ │ ├─Resources │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.PluginBrowser │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.PropertyType │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.ScriptDebugger │ │ │ ├─Emergent.Toolbench.ScriptDebugger.Messaging │ │ │ ├─Emergent.Toolbench.ScriptDebugger.UI │ │ │ │ └─Images │ │ │ ├─Emergent.Toolbench.Settings │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.Settings.UI │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.ShortcutEditor │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.TestAutomater │ │ │ ├─Emergent.Toolbench.TestRunner │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.TextEditor │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.TypeService │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.UI │ │ │ ├─Emergent.Toolbench.UI.Common │ │ │ ├─Emergent.Toolbench.UI.ContentDialogs │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.UI.EditableService │ │ │ │ ├─Icons │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.UI.Help │ │ │ ├─Emergent.Toolbench.UI.Menus │ │ │ ├─Emergent.Toolbench.UI.Undo │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.UI.Workbench │ │ │ │ └─Schemas │ │ │ ├─Emergent.Toolbench.WorldBuilder │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.WorldBuilder.Framework │ │ │ ├─Emergent.Toolbench.WorldBuilder.Messaging │ │ │ ├─Emergent.Toolbench.WorldBuilder.Terrain │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.WorldBuilder.UI │ │ │ │ └─Icons │ │ │ ├─Emergent.Toolbench.WorldBuilder.UI.EmbeddedViewer │ │ │ ├─Emergent.Toolbench.WorldBuilder.UI.Gamebryo │ │ │ │ ├─Icons │ │ │ │ └─Schemas │ │ │ └─Emergent.Toolbench.WorldBuilder.UI.RenderModes │ │ └─Schemas │ ├─DLL │ │ ├─ShaderLibs │ │ │ ├─VC80 │ │ │ └─VC90 │ │ └─ToolPlugins │ │ ├─ConsoleViewers │ │ │ └─SceneViewerD3DData │ │ ├─ImageGenerator │ │ │ ├─Debug │ │ │ └─Release │ │ ├─VC80 │ │ └─VC90 │ ├─Include │ │ ├─ecr │ │ ├─ecrInput │ │ ├─ecrPhysX │ │ ├─efd │ │ │ └─Win32 │ │ ├─efdLogService │ │ ├─efdNetwork │ │ │ └─Win32 │ │ ├─efdPhysX │ │ ├─egf │ │ ├─egfLua │ │ ├─egfPhysX │ │ ├─egfPython │ │ ├─egmAnimation │ │ ├─egmPhysXRagdoll │ │ ├─egmPhysXTerrain │ │ ├─egmTerrain │ │ ├─egmToolServices │ │ ├─egmVisualizers │ │ └─egmVisualTracker │ ├─Lib │ │ ├─vc80 │ │ │ ├─debug │ │ │ ├─DebugDLL │ │ │ ├─release │ │ │ ├─ReleaseDLL │ │ │ ├─shipping │ │ │ └─ShippingDLL │ │ └─VC90 │ │ ├─Debug │ │ ├─DebugDLL │ │ ├─Release │ │ ├─ReleaseDLL │ │ ├─Shipping │ │ └─ShippingDLL │ ├─Lua │ ├─Python │ └─Resource └─Source ├─3rdParty │ ├─Bison │ │ └─Bison2.1 │ │ ├─bin │ │ ├─contrib │ │ │ └─bison │ │ │ └─2.1 │ │ │ ├─bison-2.1 │ │ │ └─bison-2.1-src │ │ │ ├─data │ │ │ └─doc │ │ ├─doc │ │ │ ├─bison │ │ │ │ └─2.1 │ │ │ │ └─bison-2.1 │ │ │ ├─Open Group Base Specifications Issue 6 │ │ │ └─UnixV7 │ │ ├─include │ │ ├─info │ │ ├─lib │ │ ├─man │ │ │ ├─cat1 │ │ │ ├─html │ │ │ ├─man1 │ │ │ ├─pdf │ │ │ └─ps │ │ ├─manifest │ │ └─share │ │ ├─aclocal │ │ ├─bison │ │ │ └─m4sugar │ │ └─locale │ │ ├─da │ │ │ └─LC_MESSAGES │ │ ├─de │ │ │ └─LC_MESSAGES │ │ ├─es │ │ │ └─LC_MESSAGES │ │ ├─et │ │ │ └─LC_MESSAGES │ │ ├─fr │ │ │ └─LC_MESSAGES │ │ ├─ga │ │ │ └─LC_MESSAGES │ │ ├─hr │ │ │ └─LC_MESSAGES │ │ ├─id │ │ │ └─LC_MESSAGES │ │ ├─it │ │ │ └─LC_MESSAGES │ │ ├─ja │ │ │ └─LC_MESSAGES │ │ ├─ms │ │ │ └─LC_MESSAGES │ │ ├─nb │ │ │ └─LC_MESSAGES │ │ ├─nl │ │ │ └─LC_MESSAGES │ │ ├─pl │ │ │ └─LC_MESSAGES │ │ ├─pt_BR │ │ │ └─LC_MESSAGES │ │ ├─ro │ │ │ └─LC_MESSAGES │ │ ├─ru │ │ │ └─LC_MESSAGES │ │ ├─rw │ │ │ └─LC_MESSAGES │ │ ├─sv │ │ │ └─LC_MESSAGES │ │ ├─tr │ │ │ └─LC_MESSAGES │ │ └─vi │ │ └─LC_MESSAGES │ ├─DockPanel │ │ └─WinFormsUI │ │ └─VC80 │ ├─enet │ │ ├─docs │ │ └─include │ │ └─enet │ ├─Flex │ │ └─Flex2.5.4a │ │ ├─bin │ │ ├─contrib │ │ │ └─flex │ │ │ └─2.5.4a │ │ │ └─flex-2.5.4a │ │ │ └─MISC │ │ │ ├─Borland │ │ │ ├─fastwc │ │ │ └─MVS │ │ ├─man │ │ │ └─cat1 │ │ └─manifest │ ├─LibPNG │ │ ├─Installer │ │ ├─NiProject │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ │ ├─Debug │ │ │ │ ├─Release │ │ │ │ └─Shipping │ │ │ └─VC90 │ │ │ ├─Debug │ │ │ ├─Release │ │ │ └─Shipping │ │ └─Package │ │ ├─contrib │ │ │ ├─gregbook │ │ │ ├─pngminus │ │ │ ├─pngsuite │ │ │ └─visupng │ │ ├─projects │ │ │ ├─beos │ │ │ ├─cbuilder5 │ │ │ ├─visualc6 │ │ │ └─visualc71 │ │ └─scripts │ ├─Lua │ │ ├─doc │ │ ├─Installer │ │ │ ├─LNUM │ │ │ └─Lua │ │ └─Package │ │ ├─etc │ │ ├─Porting │ │ ├─Profiler │ │ │ └─analyzer │ │ ├─src │ │ └─test │ ├─OpenEXR │ │ ├─Installer │ │ ├─NiProject │ │ │ └─Win32 │ │ │ ├─VC80 │ │ │ │ ├─Debug_Half │ │ │ │ ├─Debug_Iex │ │ │ │ ├─Debug_IlmImf │ │ │ │ ├─Debug_IlmThread │ │ │ │ ├─Debug_Imath │ │ │ │ ├─Release_Half │ │ │ │ ├─Release_Iex │ │ │ │ ├─Release_IlmImf │ │ │ │ ├─Release_IlmThread │ │ │ │ ├─Release_Imath │ │ │ │ ├─Shipping_Half │ │ │ │ ├─Shipping_Iex │ │ │ │ ├─Shipping_IlmImf │ │ │ │ ├─Shipping_IlmThread │ │ │ │ └─Shipping_Imath │ │ │ └─VC90 │ │ │ ├─Debug_Half │ │ │ ├─Debug_Iex │ │ │ ├─Debug_IlmImf │ │ │ ├─Debug_IlmThread │ │ │ ├─Debug_Imath │ │ │ ├─Release_Half │ │ │ ├─Release_Iex │ │ │ ├─Release_IlmImf │ │ │ ├─Release_IlmThread │ │ │ ├─Release_Imath │ │ │ ├─Shipping_Half │ │ │ ├─Shipping_Iex │ │ │ ├─Shipping_IlmImf │ │ │ ├─Shipping_IlmThread │ │ │ └─Shipping_Imath │ │ └─Package │ │ ├─ILMBase │ │ │ ├─config │ │ │ ├─config.windows │ │ │ ├─Half │ │ │ ├─HalfTest │ │ │ ├─Iex │ │ │ ├─IexTest │ │ │ ├─IlmThread │ │ │ ├─Imath │ │ │ ├─ImathTest │ │ │ ├─m4 │ │ │ └─vc │ │ │ ├─createDLL │ │ │ ├─vc7 │ │ │ │ └─IlmBase │ │ │ │ ├─createDLL │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─debug │ │ │ │ ├─Half │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─HalfTest │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─Iex │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─IexTest │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─IlmThread │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─Imath │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ ├─ImathTest │ │ │ │ │ ├─Debug │ │ │ │ │ └─Release │ │ │ │ └─release │ │ │ └─vc8 │ │ │ └─IlmBase │ │ │ ├─createDLL │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─debug │ │ │ ├─Half │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─HalfTest │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─Iex │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─IexTest │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─IlmThread │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─Imath │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─ImathTest │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ └─release │ │ └─OpenEXR │ │ ├─config │ │ ├─config.windows │ │ ├─doc │ │ ├─exrenvmap │ │ ├─exrheader │ │ ├─exrmakepreview │ │ ├─exrmaketiled │ │ ├─exrstdattr │ │ ├─IlmImf │ │ ├─IlmImfExamples │ │ ├─IlmImfFuzzTest │ │ ├─IlmImfTest │ │ ├─m4 │ │ └─vc │ │ ├─vc7 │ │ │ └─OpenEXR │ │ │ ├─debug │ │ │ ├─exrenvmap │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─exrheader │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─exrmakepreview │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─exrmaketiled │ │ │ │ └─Debug │ │ │ ├─exrstdattr │ │ │ │ └─Debug │ │ │ ├─IlmImf │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ ├─IlmImfExamples │ │ │ │ ├─CVS │ │ │ │ ├─Debug │ │ │ │ │ └─CVS │ │ │ │ └─Release │ │ │ │ └─CVS │ │ │ ├─IlmImfTest │ │ │ │ ├─Debug │ │ │ │ └─Release │ │ │ └─release │ │ └─vc8 │ │ └─OpenEXR │ │ ├─debug │ │ ├─exrenvmap │ │ │ ├─Debug │ │ │ └─Release │ │ ├─exrheader │ │ │ ├─Debug │ │ │ └─Release │ │ ├─exrmakepreview │ │ │ ├─Debug │ │ │ └─Release │ │ ├─exrmaketiled │ │ │ └─Debug │ │ ├─exrstdattr │ │ │ └─Debug │ │ ├─IlmImf │ │ │ ├─Debug │ │ │ └─Release │ │ ├─IlmImfExamples │ │ │ ├─CVS │ │ │ ├─Debug │ │ │ │ └─CVS │ │ │ └─Release │ │ │ └─CVS │ │ ├─IlmImfTest │ │ │ ├─Debug │ │ │ └─Release │ │ └─release │ ├─Python │ │ ├─Grammar │ │ ├─Include │ │ ├─Lib │ │ │ ├─bsddb │ │ │ │ └─test │ │ │ ├─compiler │ │ │ ├─ctypes │ │ │ │ ├─macholib │ │ │ │ └─test │ │ │ ├─curses │ │ │ ├─distutils │ │ │ │ ├─command │ │ │ │ └─tests │ │ │ ├─email │ │ │ │ ├─mime │ │ │ │ └─test │ │ │ │ └─data │ │ │ ├─encodings │ │ │ ├─hotshot │ │ │ ├─idlelib │ │ │ │ └─Icons │ │ │ ├─lib-tk │ │ │ ├─logging │ │ │ ├─msilib │ │ │ ├─site-packages │ │ │ ├─sqlite3 │ │ │ │ └─test │ │ │ ├─wsgiref │ │ │ └─xml │ │ │ ├─dom │ │ │ ├─etree │ │ │ ├─parsers │ │ │ └─sax │ │ ├─Linux │ │ │ ├─bin │ │ │ ├─include │ │ │ │ └─python2.5 │ │ │ │ ├─core │ │ │ │ ├─module │ │ │ │ ├─pickling │ │ │ │ └─platf │ │ │ ├─lib │ │ │ │ └─python2.5 │ │ │ │ ├─bsddb │ │ │ │ │ └─test │ │ │ │ ├─compiler │ │ │ │ ├─config │ │ │ │ ├─ctypes │ │ │ │ │ ├─macholib │ │ │ │ │ └─test │ │ │ │ ├─curses │ │ │ │ ├─db-packages │ │ │ │ │ ├─twisted │ │ │ │ │ │ ├─application │ │ │ │ │ │ ├─conch │ │ │ │ │ │ │ ├─client │ │ │ │ │ │ │ ├─insults │ │ │ │ │ │ │ ├─openssh_compat │ │ │ │ │ │ │ ├─scripts │ │ │ │ │ │ │ ├─ssh │ │ │ │ │ │ │ ├─test │ │ │ │ │ │ │ └─ui │ │ │ │ │ │ ├─cred │ │ │ │ │ │ ├─enterprise │ │ │ │ │ │ ├─internet │ │ │ │ │ │ │ ├─cfsupport │ │ │ │ │ │ │ └─iocpreactor │ │ │ │ │ │ ├─lore │ │ │ │ │ │ │ ├─scripts │ │ │ │ │ │ │ └─test │ │ │ │ │ │ ├─mail │ │ │ │ │ │ │ ├─scripts │ │ │ │ │ │ │ └─test │ │ │ │ │ │ ├─manhole │ │ │ │ │ │ │ └─ui │ │ │ │ │ │ ├─names │ │ │ │ │ │ │ └─test │ │ │ │ │ │ ├─news │ │ │ │ │ │ │ └─test │ │ │ │ │ │ ├─persisted │ │ │ │ │ │ │ └─journal │ │ │ │ │ │ ├─plugins │ │ │ │ │ │ ├─protocols │ │ │ │ │ │ │ ├─gps │ │ │ │ │ │ │ └─mice │ │ │ │ │ │ ├─python │ │ │ │ │ │ │ └─zsh │ │ │ │ │ │ ├─runner │ │ │ │ │ │ ├─scripts │ │ │ │ │ │ ├─spread │ │ │ │ │ │ │ └─ui │ │ │ │ │ │ ├─tap │ │ │ │ │ │ ├─test │ │ │ │ │ │ ├─trial │ │ │ │ │ │ │ └─test │ │ │ │ │ │ ├─web │ │ │ │ │ │ │ ├─test │ │ │ │ │ │ │ └─woven │ │ │ │ │ │ └─words │ │ │ │ │ │ ├─im │ │ │ │ │ │ ├─protocols │ │ │ │ │ │ │ └─jabber │ │ │ │ │ │ ├─scripts │ │ │ │ │ │ ├─test │ │ │ │ │ │ └─xish │ │ │ │ │ └─zope │ │ │ │ │ └─interface │ │ │ │ │ ├─common │ │ │ │ │ └─tests │ │ │ │ ├─distutils │ │ │ │ │ ├─command │ │ │ │ │ └─tests │ │ │ │ ├─email │ │ │ │ │ ├─mime │ │ │ │ │ └─test │ │ │ │ │ └─data │ │ │ │ ├─encodings │ │ │ │ ├─hotshot │ │ │ │ ├─idlelib │ │ │ │ │ └─Icons │ │ │ │ ├─lib-dynload │ │ │ │ ├─lib-tk │ │ │ │ ├─logging │ │ │ │ ├─msilib │ │ │ │ ├─site-packages │ │ │ │ │ ├─wx-2.8-msw-unicode │ │ │ │ │ │ ├─docs │ │ │ │ │ │ │ └─licence │ │ │ │ │ │ ├─wx │ │ │ │ │ │ │ ├─build │ │ │ │ │ │ │ ├─lib │ │ │ │ │ │ │ │ ├─analogclock │ │ │ │ │ │ │ │ │ └─lib_setup │ │ │ │ │ │ │ │ ├─art │ │ │ │ │ │ │ │ ├─colourchooser │ │ │ │ │ │ │ │ ├─editor │ │ │ │ │ │ │ │ ├─floatcanvas │ │ │ │ │ │ │ │ │ └─Utilities │ │ │ │ │ │ │ │ ├─masked │ │ │ │ │ │ │ │ ├─mixins │ │ │ │ │ │ │ │ └─ogl │ │ │ │ │ │ │ ├─loca
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值