finalrenser渲染技巧

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

finalrenser渲染技巧
FinalRender中文手册
Local illumination (direct light)...........本地光照(直接灯)
这是一个标准的光效执行计算。

所使用的直接光照(direct light)是一个向前的直射灯,只计算被照射的部分,
其他的非光照或者阴影不被计算。

这种方式的一大优势是在那些比较慢的处理器上达到快速的渲染,然而得到的
图像看起来很不真实。

例如我们在一件黑暗的房间里,只有被照射的地方可见,其他的地方是纯粹的黑色。

Global illumination........................(全局光照)
finalRender可以被用于间接光的分配计算,全局光照是计算所有的直接灯,包括了散焦和体积光效。

对于不同
数值的灯光,每一个被渲染像素将被分析。

当GI(Global illumination的简称)通过分析侦测每一个被渲染像
素后就会把不同的光值数据赋予这个像素。

光是经过大量不断反射计算后再能出现在我们的3D 场景上。

finalRender提供的菜单选项可以非常自由的调控光的值。

记住,他自带的材质决定他的光的分配。

Why Global Illumination?..................(为什么用全局光照?)
finalRender通过在场景中重建自然光创造出真实的照片级图像。

光的仿真是通过先进的光线追踪技术使计算机
估算出在各个物体表面的光的吸收或发散的值。

对于光仿真技术有两种:一是全局光照,另一种是辐射光技术。

辐射光使用一种不同的方式去计算和模拟光。

他是由几何体决定的,所以它需要“次分网格物体”作为它的运算
方式。

他通常需要消耗大量的内存。

虽然辐射渲染还有其它的缺点,但它对于光的分布计算还是非常精确的。


于光线追踪技术的全局光照计算方式与辐射光方式在核心上有着不同。

你可以期待在渲染中得到不同的结果,而
事实上在视觉上的结果是,这两种方式的结果是相同的,因为它们都是使用一种物理校正方式去分配光。

而且,现在GI已经可以被接受,一个先进的GI必须提供他自己渲染进程的可测量性不受约束。

对于其他的渲染方
式每一次的计算是依赖于前一次的结果,而finalRender把每样东西可以在类似的多处理器上运行而不是这种情
况,那么它将加速渲染的进程。

基于这些理由所以finalRender选择了光线追踪技术去进行全局照明。

How does it work ?.......................(那么它是怎样工作的?)
finalRender使用一种极其快速的光线追踪器去渲染GI图像。

在任何一个3ds max场景上可以对一个GI进行渲染,
这个场景是被分析和编辑在一个称为“MSP-TREE”上的,他把光线追踪进程作为一个有效的数据构成(他决定物
体表面光线的相交处)。

没有使用“MSP-TREE”或者与之类似的方式,光线最终将不能被应用于实践或者将很快
变得很慢。

finalRender的光模拟引擎使用一种新的多次渲染方式,类似MONTE CARLO和可确定性的光线追踪去达到最有可能
的结果,当然是在可以接受的时间里。

所有的光照计算开始时是基于任意一个被渲染像素的。

光的计算可被分为三种主要的过程:
1 Direct component(直接光照构成):光直接的打在表面上。

2 Specular indirect component(镜面间接光照构成):光从一个表面反射到其他表面上。

3 Diffuse indirect component(间接漫反射光照构成):光打在一个表面上并且没有特定方向的被漫反射传播。

The direct light component...............(直接光照构成)
直接光照构成是由从一个光源直接照射一个表面上构成,没有其他的光被计算,除了一个全局环境值,这个只是加
在表面顶部的。

如果所有的表面没有任何直接光照,将被绘制成一个纯黑的颜色。

在范例GI-1中显示出,不在光照
范围内的区域将接收不到任何光线。

在GI-1a这个例子中,一个直接光照情况的例子显示出没有光在球体或平面体上弹射出去,所有的没有直接光照的区
域是纯黑色
Caustics: The perfect indirect light....(散焦:一个完美的间接光)
镜面间接光照构成是由一个光照射在一个表面上反射(或者传射)在一个主要的方向上到达其他的表面。

这种完美的
镜面光传播是通过finalRender的一种不依赖于光子而是通过光的轨迹进行控制的。

他的光是来自额外从各个光源发
射的光传播,然后简单的在适当的反射和折射方向上改变方向(见图),沿着每条光线和他们的反弹光线(即次级光)
的能量被聚积和储藏在一个先进的3D光子数据库中。

这种技术能非常有效的计算那些通过了反射或折射的表面或材质
特性所应引起的物理校正光的创建。

散焦可以很好的模拟像水晶杯或光学光斑这样的透明和折射材质特性。

Total diffuse and indirect illumination....(全漫反射和间接光照)
这个间接漫反射构成是由一个光打在一个表面上,并且被反射或者传射。

他没有方向性(全部是漫反射),这种构成
要求有成百上千的方向被测试。

通常,使用这种方法创建的真实场景会是使计算非常的慢,所以一些光线的计算在特
定的空间间隔采用补足点的插值方法去获取最终的结果。

System related restrictions.............(系统相关限制)
GI将帮助你获得更好更多的高质量图像,而且请注意他并非是你说想的“一键”就能解决任何问题。

光的值扮演一个达到可信的图像质量效果的重要角色,一个合理的高的光值必须使获得一个全面的好的光照计算。


更精确的光照计算内发送出更多的光计算结果值,通常可得到更好的图像质量。

然而这并不是说光的值是唯一导致真
实渲染结果的原因。

这种方式的缺点是光在场景中要被侦测。

这对于所有基于GI的渲染器(包括finalRender)都是
如此。

The curvy surface problem.............(弯曲表面问题)
与光的侦测和搜集的挑战相比,还有全局光照问题必须被克服。

许多辐射光照和全局光照系统是非常的“吹毛求庇”
的,但他们用于较高的多边形渲染时,渲染时间将暴增。

finalRender使用一种先进的方式去计算全局光,他不依
赖于场景中的多边形数量。

finalRender用一种附加的方法解决物体的表面,但是一个平坦的非曲面物时,并且这个给曲面物是有着50000个多
边形,通过GI引擎的加工就是的好像他只有12个多边形。

然而当你一旦创建诸如置换表面物体的渲染时在渲染中就会出现问题。

这种置换和凹凸表面会有类似“峡谷”的情况
产生,光线在这些“峡谷”来回反弹产生大量的采样点。

那么finalRender的这种优化算法就不适用了。

在这些“峡
谷”增加大量的采样点,在现实中也是不必要的,就像你看水泥的墙的角落一样,其实不必要这样细节数。

finalRender提供了一个特别的方法去解决这个任务,如果表现从一个点到另一个点改变很快,那么采样点通常是自
动生成的。

但是如果是类似水泥墙这种情况就应避免使用自动生成的情况发生。

Control the surface..................(控制表面)
通过使用finalRender的全局参数“curve balance”采样点的创建可以控制细节比较一下例子GI-3b和GI-3c,你
可以看到只有很少的采样点在GI-3c的弯曲区域,那么也就是说发射很少的随机光线就可以做到快速渲染。

使用Curve Balance 参数可以全局的控制所有物体上的效果,但是我们建议使用MAX自身的控制参数来完成这种控制。

Good news,light is scattering ..........(好消息:光可以被离散)
在提及他之前,光的分布是一个困难的任务。

并且他又一条不成文的规矩:增加光的数字那么渲染的时间就会越长。

finalRender在场景中是一种物理校正的方法去分配和侦测光照的层次,并且他也包括由物体的体积光效果影响光的散
焦。

finalRender的体积光柱本身也是一种投射光源。

为了解决光线在这中场景的传播方向问题,体积光柱会投射出额外的漫反射光线,地板弹射光和灰尘也能产生散射光。

Optimizing a Global Illumination calculaion......(优化全局光照计算)
一旦你使用了GI你会发现你的问题是如何的加快渲染速度。

以下内容是你在GI使用中常遇到的问题和解决方法。

通常为了得到更好的图像质量使用GI是增加场景中的光线数量,对于目前的处理器的能力这个解决方案是不现实的。

充分理解finalRender的基本概念和方法是解决优化渲染时间的唯一的方法。

渲染引擎会自动在3D场景中判断哪些是重要区域和哪些是非重要区域以提高渲染速度。

非重要区域采用低的采样值,
finalRender提供一组参数来控制渲染的速度和质量,这些参数被分为两大类:
1 全局采样点密度。

2 自适应采样点密度控制。

在渲染场景时实际可以用更少的采样点去达到同样的效果。

糟糕的是有些区域需要更多的采样点去获得真实的效果。

在没有什么变化的平坦表面上,采样点可以相对较少,而在这些限定区域和高对比物体就需要相对较多的采样点。

finalrender使用一种先进的算法去分配物体表面的采样点子。

在这些情况下某些区域的像素点会产生漫反射光,
finalrender提供一种强制的Monte carlo追踪模式。

Reduce the amount of sampling points.............(减少采样点的数值)
全局设置的一个最重要的参数是Balance%,这个参数控制着Min.Density(最小密度)和Max.Density(最大密度)
这两个参数之间的平衡。

当区100%的Balance%值时,将导致每一个投影点(像素)产生一个随机光线。

低于100%
的值将趋向于最大或最小密度参数值。

你应避免使用100%的Balance%值,以免渲染时间增长和内存的大量消耗。

采样点的密度依赖于3D场景的尺寸大小,尺寸越大密度越大,反之亦然。

Min.Density和Max.Density控制着整个
场景的采样值。

Min.Density控制着所有表面的最小采样值,不管自适应法则将如何运用。

较大的数字控制着场景的较高的采样密
度。

Min.Density通常用于控制着3D场景总“flat(平坦)”的区域采样值。

“flat”的意思是指光影变化不强烈
的区域。

Min.Density不只限制那些“flat”区域,也影响那些较高密度的区域。

Max.Density控制着那些照明有强烈变化的“near area(相近区域)”,你会发现这些区域有着阴影并且物体之
间相互靠得很紧。

finalrender的光源区域分布算法通常是非常有效的,可是在某些场景下并不是那么有效,这并不是软件的错误。

因为有许多影响全局光采样点光照分布的因素。

让finalrender有效工作的重要的事情是提供第一级分布的最小值。

第一级分布的含义是指在算完直接光照后,开始在场景中“查找”的光照值,每一个采样点在一个随机方式下投射
新的光线,那些新的光线将在3D场景被进一步分配。

因此要设一个合理的采样点数值,这样才能使周围的物体被照
亮。

采样点的生成是非受控的,因此不能漏掉重要的采样点。

如果两个采样点的距离过大将使两采样点之间的物体
在GI时是被忽略。

另一个采样点的糟糕的分配的迹象是在软阴影里的人为分布。

GI的渲染进程创建真实的区域阴影或软阴影,有些阴
影类型通常是由倍增光源或区域灯说营造的真实环境所创建出来的。

从技术上所以使是指一个点在阴影里他所在的
地方可以“看到”另一个光源,其导致的是比你从一个点光源所获得的要亮得多的阴影。

为了在倍增光源和区域光
得到一个好的阴影细节那么需要确定一个最小的采样数值。

Other ways of optimizing..............(其他的优化方法)
有一种说法:“光线追踪在通常情况下是一个极其耗时的过程”。

但是不管你怎样看待光线追踪的速度,他仍是表
现真实世界中折射与反射这种真实效果的唯一可行的方法。

so what is the problem with raytracing?(那光线追踪有什么问题呢?)
所有的光线追踪软件都存在相同的问题,不管是否他是价值5000美元的软件包还是只值50美元的共享软件,投射光
线是核心问题。

因为每条光线被发送到3D场景时,必须测试其与三角面相交的地方。

计算这些相交区域时极其耗时
的过程,特别是软件要对整个场景的三角面进行检测。

增加三角面的数量同时也就是增加了计算时间。

当软件管理
这些相交区域可以变的有效和快速时,那么下一个问题是在相交点的光照计算。

这称为投射阴影,并且不同的投射
器投射不同的光照表面。

在场景中的另一个重要的时间问题是投射阴影的平衡的类型,因为一些投影器可以强迫光
线追踪器创建额外的光线。

仔细的调查和发展是解决finalrender的光线追踪的第一个问题,finalrender控制在场3D中物体的相交处的测试
的核心模块称为MSP-TREE。

在finalrender中一种弹射值聚积算法能有效的优化光线相交处的测试运算,要仔细的
解释这种算法已经超过了这本指南手册的范围,需要知道的是这种算法相当有效。

在开始实际渲染之前,所有的3D物体都将被集中在一个三角面列表里为了较快的测试。

每一个三角面群块被一个只
限定,一般情况下,光线的相交处测试依赖于一个bounding值,他要比对整个三角面进行测试较快的多。

如果光线
没有给一个bounding值,在整个三角面也就没有这个测试过程。

finalrender对于MSP-FREE有两种控制方法,一种是对于嵌套物体/三角面的分类深度,另一种是三角面的百分比
bounding值的数值。

两个参数都影响内存的消耗和渲染的进程速度,要记住的是缺省设置对于大多数情况下是较好
的。

应较好的理解这两个参数。

提示:
增加深度通常是增加渲染时间的增长和内存的消耗增加,增加三角面百分比bounding值的数字可以减少内存的消耗,
但在有些情况下也会增加渲染的时间。

MSP-TREE算法是一种较高的动态的和自适应的过程,他很难预则有许多的变
量影响bounding tree的产生,没有一种方法对于一个优化场景能进行预测最终的结果和执行。

Analyze the scene you are going to render(分析你将要渲染的场景)
当你要进行光照或者是材质调整时,请尽可能的将他们分成多个问题考虑是什么引起直接光照或者是间接光?在直接
光与间接光之间是如何平衡?
Avoid high variation in illumination levels(在光照层次中避免使用高变量值)
在3D场景中分布光照层次是有很多变数的,为了避免这个为题引进可能增加多一些的直接光,但是也不要害怕对于最
后的GI光线使用一个灰暗的环境光。

Reduce the intensity level of the direct light amount when using GI(当你使用GI时应减少直接光的
亮度数值)
GI会在3D场景中考虑间接光照的效果,如果你使用的直接光是会导致场景变得很亮,当你设置较多的直接光时应牢牢
记住这条法则。

Make heavy use of the optimization tools(对优化工具的使用多考虑些)
这句话的本质是明白finalrender提供了许多快速的优化方法,有些工具的使用具有交互性,有些则不。

finalrender分配单个finalrender材质给多个物体总是较好的。

他给你在每一个物体或在材质层的全部光线追踪特
性更好的控制。

Use the internet,if you can!(如果可以的话,请使用互联网)
你上网了吗?是则在网上看一下关于GI或者光线追踪的文章,你会找到许多关于finalrender 的描述说明。

New finalRender Light Types....................(新的finalRender灯光类型)
LumaObject是finalRender光线追踪系统的核心部分,它提供附加的标准的灯光类型去设置灯光。

有些灯光类型可以
使用3DMAX任意一个几何体作为一个灯光投射器,并请允许真实区域光的模拟。

你也可以通过把任意一各3DMAX几何体
变成一个光反射体,去使用哪些同类型的灯光去模拟和伪造看起来像光能传递的效果。

光可以在3D场景中不断的反射
就像你所期待的真实情况那样,有些区域通常因为吸收光而昏暗。

在增加finalrender的基本几何灯光类型中有一种真实柱形灯光和一种基本粒子灯光类型。

这些类型的灯光常用于提
高渲染的真实性或者添加一些特别的效果。

在这一章节中我们将讨论怎样使用这些灯光类型。

Radiosity with rinalRender Object Lights?....(finalRender物体光可以光能传递吗?)
首先,让我们将所有的几何形灯光统称为fRObjLight。

这些灯关在许多情况下都可以使用,在以下例子中你可以看一
张光能传递风格的图像。

既然finalRender是全局光照系统而且你已经可以得到非常真实的图像,为什么还要去伪造
光能传递效果呢?原因是这张图限只用了10秒渲染,而用finalRender的GI效果要用2分钟。

如果放在渲染一个1000
帧的动画是你就可以看出区别了。

How to use finalRender Object lights.........(怎样使用finalRender的物体光)
为了使finalRender的物体光在三维场景中的特定物体上生效,AABS模式将会使用(AABS 就是Automatic
Analytical Binding System自动分析绑定系统)。

AABS的物体光和点光源和泛光灯是不一样的,需要一个三维的
网格体来作为发光区域。

但是如何使你的法官物体变得可见,例如一个点光源他有一个可见的亮的锥体和一个目标点,
但是你怎么知道光亮会是来自一个茶壶还是一个不亮的表面呢?finalRender的物体光是一种无形的帮助物体,这种
方式是你避免考虑光的形状或者位置。

这种光的帮助物体被用来存储所有光的物质和参数。

如何鉴别一个光的帮助物
体会是如何影响其他特定物体的,答案将在AABS中得到。

What is AABS................................(什么是AABS?)
当你创建一个物体光帮助器,随着你的鼠标在3D场景中的运动,AABS将自动展开一个自分析过程。

你的鼠标所选定的
区域将被分析。

当鼠标指向任意一个可适于这种操作的物体类型时。

指针会显示字母AABS。

没有其他的用户交互方式
需要指定一个物体灯光效果到任意一个3D网格体散。

作为一种AABS的结果方式,物体被点击时就会被增加到最终的渲
染物体灯光列表中。

What else can be assigned via AABS..........(还有什么其他的东西能通过AABS分配?)
例如,如果你想将一个粒子系统变成一个变化万千的发光灯源时,你将使用AABS去控制效果的产生。

如果你在一个粒
子系统上使用fRPartLight帮助物体,AABS将对产生的效果自动进行考虑,每一个粒子将被自动变成一个优化的点光
源。

What do the little pins do?.............(图标小别针有什么用?)
SPI-Technology
另一个cebas的工作流的增加,我们称之为选择性的参数实例(简称SPI)。

SPI允许将一个参数与其他的类型相同的物体共享,当有多个fRObjLight帮助物体出现在场景时每一个单一参数可以
与其他的参数连接或例证,这个功能于3DMAX4的参数线性功能类似。

这两者的功能相同,只是finalRender的更容易
使用。

在MAX中至少要点击8次鼠标而在finalRender中只需1次。

So how dose SPI work?(怎样用SPI工作)
注意小别针的每个参数,当你按下这个按钮时也就意味着其他的相同fRObjLight物体的相同的参数可以使用这个参数
的数据,当然那些fRObjLight物体也需打开这个参数的小别针图标。

Object Lights and Volume Effects ........(物体灯光和体积光效)
finalRender物体对体积光效果就像对其他光效那样,他要比3DMAX自带的体积光快4个时间单位。

The fRObjectLight rollout menu...........(fRObjectLight 的首页菜单)
Selection Rollout
在这个菜单上点击左或右方向图标,可以选择前一个或后一个fRObjectLight物体,右击“Emtter”可以用列表选择。

Gloals Rollout Menu(全局菜单):
Pick and Remove (点取和去处)
你可以使用一个标准的3DMAX选区操作方式在场景中分配物体灯光效果到多个3D物体散。

点击pick 钮选择一个物体或
通过按名字来选取物体。

,被选的物体将被添加到列表中。

点击REM(去除)钮可以在列表中去除一个或多个物体,被
选的物体将被移除。

on
勾选此项可以打开灯光,就像标准的MAX或VIZ那样。

但是你现在动画中实现灯光的开与关用“on”难以做到,要在
“mulitplier”中设定他的值就可以了。

Exclude/include(包括/排除)
这个功能与标准的MAX或VIZ自带的灯光的功能是一样的。

Color swatch(颜色开关)
这个颜色参数与MAX自带的灯光颜色参数稍微有点不同,当未勾选此项时,灯光的颜色使物体的表面材质色。

通过自发
光数值,一个自发光材质将控制灯光的亮度。

Multiplier(倍增器)
当这个值是1.0时是场景的灯光是按灯光的颜色的初始亮度。

0.5是初始亮度的一半,使用负数,亮的场景就会变暗。

Luma Angle(照射角度)
Luma Angle控制灯光投射到物体表面的角度。

finalRender为每一个三角面放置一个优化的“虚拟光源”,值越大光
的展开范围越大,反之亦然。

提示:
当角度大于60度时会得到非常真实的光能传递效果,这将确使光能达到场景最远的角落。

这并不是推荐你在体积光效
时使用较大的角度值,因为渲染时间可能会变得很长。

除非你想得到射光效果,那么小的角度值会使计算速度加快。

S Distance
S Distance自动控制Luma Angle的宽度值与其所附加在一个物体上的距离。

如果你看地板你会注意到没有锥形射灯
灯光斑显示,相比地板,墙上显示出一个非常精确的射灯光斑。

因为墙和氖光之间的距离很小,Luma Angle被设为
45度,灯光没有足够的距离融合在一起。

有一种方法去解决这个问题,就是增加Luma Angle 的值,但是你会不满意
渲染时间,那么就改变S Distance的值。

当物体的距离减少Luma Angle将自动变得较大,所以看起来灯光漫射的更
自然。

How do you know the distance to a light emitter?(那么你怎样知道一个灯光投射器的距离值呢?)
单凭肉眼对于一个很近物体,你是不可能知道他的距离的。

然而finalRender在Luma Angle 大于180度时提供一个视
觉反馈模式,当finalRender开始增加Luma Angle的值时,由灯光投射器产生出蓝色光线的显示区域。

这通常使用线
性显示,当一个蓝色光线打在一个物体上时,他将自动开始增加Luma Angle的值。

蓝色光线说明了虚拟灯光到180度
教师所用掉的时间。

S Attack value
S Distance是用于平滑的光照区域,而且他仅改变虚拟光在一个线性方向的角度值,并且如果这个值变更的很快时图
像会显得有点奇怪。

如光线条看起来有错,你可以通过S Attack来控制S Distance的角度变更的速率。

当描述S Distance时,finalRender增加Luma Angle的值以线性方式一直到180度的数值。

蓝色光线的长度(并且是
S Distance的值)是等于Luma Angle的相反值。

在一个动画里S Distance的变化可能太过于机械,你可以通过使用
S Attack的值,他控制着S Distance的变化速度。

高的数字会导致Luma Angle值的变化加快。

Diffuse Value(漫射值)
因为“spotlight”的特性,finalRender通常不会以光能传递方式去模拟真的漫反射光。

如果你增加diffuse的值大
于零,灯光会按方向在每个灯光的原向量(面的法线)方向散布。

这使得弯曲光越过物体的边成为可能,因而可以做到
产生自然的光照环境。

提示:
考虑到在物体上使用diffuse值肯定会有光的反射,将会接受更多的光并且全部的反射亮度将会太高,你的场景看起来
会非常的亮。

解决的办法是减少物体光的倍增值(multiplier)。

Room Reflection(房间反射)
一个普遍的问题,要想在图像中产生艺术效果是所有光照在场景中分布都共有的缺陷。

Room Reflect值增加,光照就
像加了一个环境“背景”光。

通过增加这个值,你甚至可以从一个物体的背面照亮他的面,就是你怎样去模仿间接光
照。

然而不要将他于3DMAX的环境光搞混,他是作用于全局的,而不是被场景中的不同光照影响。

LumaObject的
Room Reflection参数计算使基于所选择的灯光投射器,这个方法产生更为可信的曼反射光。

Material ID (材质标识)
勾选这个选项,使用一个特别的材质ID来在一个物体的表面产生灯光的投射。

使用此项你可以决定物体的哪部分投射灯
光。

SM Group (光滑组)
我们也可以通过光滑组来制定物体的哪些部分来投射灯光。

与Material ID 的操作相比,光滑组是一个几何基本选择
方式。

通常不同的部分(或元素)使用不同的光滑组。

通过这个性能你可以让物体的某一部分投射灯光。

Face Reduce (减少投射面)
通常你将一个物体变成finalRender的fRobjLight灯时,会对他的每一个面产生“虚拟灯光”光源。

这种方式比较接
近真实物理情况。

但是,如果物体超过十万个面时,他将花费几个小时或这几天的时间来计算这样一个物体。

并且这样
计算产生的效果与每隔2个面(或者任意20个面)放置一个“虚拟灯光”再来投射灯光没有什么不同。

为了减少渲染时
间就是用这个值去减少灯光投射器的创建
这个值如果设为2,是值每隔1个面第二个面作为灯光投射器。

不过,一般来说首选的方式是通过UV贴图在一个物体对
像表面分布灯光投射器为好。

Threshold (极限值)
当finalRender将一个3D网格物体变成一个灯光投射对像时,他将会放置一个光投射器在所有的表面上。

每个灯光投。

相关文档
最新文档