2017-03-06 20:23:00 weixin_34254823 阅读数 29
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2706 人正在学习 去看看 杨石兴

在《Real Time Rendering, third edition》一书中,作者把描边算法分成了5种类型。
1、基于观察角度与表面法线的轮廓渲染。缺点很明显。
2、过程式几何轮廓渲染。即先渲染背面,通过顶点压平等手段,渲染轮廓线,之后渲染正面。优点:快速有效,适合大多数模型,缺点:不合适和立方体之类的平整模型。
3、基于图像处理的轮廓线渲染。通过边缘监测来判断轮廓。
4、基于轮廓检测的轮廓线渲染。同时监测相邻的2个面法线值得正负是否相反。
5、以上方法结合。
除此之外还有:
6、沿法线方向放大模型(vs)并用描边色渲染(ps)正常渲染模型
7、直接模糊模板

 

其中2、4、6在材质编辑器中是做不到,接下来本人将会分享剩下几种方法的代码。方法2在材质编辑器里无法实现因为TwoSideSign无法用于世界位移(通过摄像机向量与法向量点乘判断的方式也被不行)

其实是可以做到的,不过比较蛋疼,那就是复制一个模型,设Mask为0,同时沿着法线方向放大。从而得到放大的模板。具体做法不再复述,如果不会做,可以留言问我。

 

 

4.15版本的项目设置中多了这个,应该可以解决边缘抖动的问题,所以推荐使用4.15版本

然后Epic的程序员竟然忘记给Custom Stencil加这个功能,这就导致了我的部分效果会出现抖动的问题,我能说MDZZ么?

 

首先是方法3。边缘检测有以下几种检测算子(摘自UntiyShader入门精要),不过查了网上的资料,感觉还是Sobel比较好,所以别的2种不搞了。

当然还有别的,在此就不深入了。

虚幻4案例里就是用这个方法以及检测算子Prewitt(www.tomlooman.com里的案例),通过边缘检测深度的方式来。以下是我转化的HLSL代码:

//input SceneTexSize
//input UV
//input NotUse
//input OutLineSize
//input MaxZ
//input Alpha
//input OutLineColor
float Depth=0;
float2 Sampler[]={float2(-1,-1),float2(-1,0),float2(-1,1),
                    float2(0,-1),float2(0,1),
                    float2(1,-1),float2(1,0),float2(1,1)};
                    
for(int i=0;i<8 ;i++)
{
    Depth+=SceneTextureLookup(UV+Sampler[i]*SceneTexSize*OutLineSize,13,false).x;
}
//Normalize Depth to 0.0-1.0 Range,规整化
Depth=MaxZ/(clamp(Depth,0,MaxZ)+MaxZ);
//自定义深度物体的遮罩
float Mask=MaxZ/(SceneTextureLookup(UV,13,false).x+MaxZ);
//减去自定义深度物体部分,也就是得到轮廓,0.2是因子,可以设置变量来 调节
Depth+=-MaxZ/(SceneTextureLookup(UV,13,false).x+MaxZ)+0.2;


//深度部分到此为止,以下物体透视部分
//被物体遮挡了
float Check=SceneTextureLookup(UV,13,false).x-SceneTextureLookup(UV,1,false).x;
float KeepOut=floor(Mask*2);
if(Check>0)
{
    Check=clamp(KeepOut,0,1);
}else
{
    Check=0;
}
KeepOut*=Alpha*Check;
Depth=clamp(-Depth+KeepOut,0,1);

return lerp(SceneTextureLookup(UV,14,false),OutLineColor,Depth);

这段代码还包含了透视效果,如果只需要描边可以自己编辑。感觉和传统边缘检测不一样。

官方的风格化渲染用的是Roberts检测算子,以下是对应HLSL代码(因为Sphere
Mask不是HLSL中的原生函数,所以去掉了,而且感觉不太好理解,就没有深入),略有修改:

//input SceneTexSize
//input UV
//input NotUse
//input OutLineSize
//input OutLineColor
//input PostProcessBlendWeight
float4 Depth=0;
float2 Sampler[]={float2(-1,0),float2(0,-1),
                  float2(0,1),float2(1,0)};
                    
for(int i=0;i<4 ;i++)
{
    Depth+=SceneTextureLookup(UV,1,false)-SceneTextureLookup(UV+Sampler[i]*SceneTexSize*OutLineSize,1,false);
}
Depth=clamp((1-clamp(Depth/-300,0,1))*2,0,1);

Depth=(1-Depth).x*lerp(clamp(1-SceneTextureLookup(UV,1,false).x/6000,0.25,1),clamp(1-SceneTextureLookup(UV,1,false).x/90000,0,1),PostProcessBlendWeight);
return lerp(SceneTextureLookup(UV,14,false),OutLineColor,Depth);

不过需要注意的是最后的轮廓往往是半透明的,所以需要在倒数第二行增加:

if(Depth>OutLineDepth)
{
Depth=1;
}

通过判断深度的方式强行让Depth=1,从而实现让轮廓变实。(OutLineDepth为自己设置的变量)

Sobel检测算子HLSL代码,基于亮度检测:

//input SceneTexSize
//input UV
//input NotUse
//input OutLineSize
//input MaxZ
//input OutLineColor
float3 w=float3(0.2125,0.7154,0.0721);
float2 Sampler[]={float2(-1,-1),float2(-2,0),float2(-1,1),
                    float2(0,-2),float2(0,0),float2(0,2),
                    float2(1,-1),float2(2,0),float2(1,1)};
float2 UVOffset[]={float2(-1,-1),float2(0,-1),float2(1,-1),
                   float2(-1,0),float2(0,0),float2(1,0),
                   float2(-1,1),float2(0,1),float2(1,1),};
float2 Edge=0;
for(int i=0;i<9 ;i++)
{
    Edge+=Sampler[i]*dot(SceneTextureLookup(UV+UVOffset[i]*SceneTexSize*OutLineSize,14,false).xyz,w);
}
//最后的length可以改成1-abs(Edge.x)-abs(Edge.y),这样可以减少运算量
return lerp(
SceneTextureLookup(UV,14,false),OutLineColor,length(Edge));

方法5法线与深度相配合的边缘检测:因为用SceneTextureLookup(UV,8,false);会有Bug,所以暂时空着,直接用节点写。

方法7代码(模糊用的是之前写的代码,我懒得改了,这个模糊其实有点问题):

int UVOfferset[]={-3,-2,-1,0,1,2,3};
float Weights[]=
{
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,
    1,1,1,1,1,1,1
};
float3 OutColor={0.0,0.0,0.0};
for(int i=0;i<=7;i++)
{
        for(int j=0;j<=7;j++)
        {
            OutColor+=Weights[i*7+j]*SceneTextureLookup(UV+float2(UVOfferset[j]*SceneTexSize.x*OutLineSize,UVOfferset[i]*SceneTexSize.y*OutLineSize),24,false);
        }
}  
float Alpha=(float4(OutColor,1.0f)/49-SceneTextureLookup(UV,24,false)).x;
Alpha=smoothstep(0,Max,Alpha);

return lerp(SceneTextureLookup(UV,14,false).xyz,OutLineColor,Alpha);

官方论坛上还有几个案例:
https://forums.unrealengine.com/showthread.php?127151-Custom-Stencil-Radial-Silhouette-Post-Process-Materiel-(HLSL)-(PC)-(Full-code)-(4-13)&highlight=SceneTextureLookup
这个本质上还是用的是Sobel检测算子,不过读了他的HLSL本人也有些许启发,比如做上面的边缘虚化效果可以使用多次边缘检测。这样比直接用均值模糊效果好。

转载于:https://www.cnblogs.com/blueroses/p/6511751.html

2015-03-15 10:06:28 smart_graphics 阅读数 1178
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2706 人正在学习 去看看 杨石兴

引自:http://www.sketchupbbs.com/thread-31083-1-1.html

缘起

有时数码阿叔在论坛上看到有些朋友们提出在把DWG格式的2D图形导入SketchUp以后,在建立模型阶段出现了一些问题,归纳起来这些问题大致包括下面这些状况:
封面的问题:在进行描边封面的过程中某些地方总是封不了面、在意外的位置封了面、封面时总有些面粘来粘去或出现不该有的重叠面、无法分离内部的面等等。
模型大小的问题:明明建立的模型很简单,也还没贴材质,但是SKP文件变得非常大,感觉有点拖不动模型,影响到操作性。
圆弧问题:原先连接在圆和弧上的线端点现在抓不到或抓到的位置不对,以致封不了面。

对于上述这些现象,说起来导入的DWG图形本身要负很大的责任,这个DWG图形是在SketchUp里三维模型的定位基准,再怎麽说在导入SketchUp之前也要先把DWG图形整理得正确和清爽才行。否则屁股上有屎,如果不弄干净,带过去后患无穷。
关于在把DWG格式的2D图形导入SketchUp之前如何清理图形内容的问题,由于原始的DWG图形可能很单纯也可能比较复杂,数码阿叔抽空写了这篇比较完整的清理图形过程。

从DWG导入SKP的准备工作

虽然SketchUp本身具备完整的建模功能,可以从无到有的完成整个三维模型。但由于SketchUp使用的座标系统不是AutoCAD的那种WCS绝对座标系统,在AutoCAD里使用WCS座标系统是根据绝对座标值明确而直接的给图形里的各个"图元" (Entity)定位。SketchUp所使用的是相对座标系统,所有的操作几乎都是根据前一点的相对距离或角度进行定位,对于习惯于操作AutoCAD的使用者在初期概念设计阶段或对既有图形放样会造成一定的不习惯。同时SketchUp对于图层定义不像AutoCAD那麽严谨,在AutoCAD中每个图元都隶属于某个单一的图层,新画上一条线,一定会落在"当前图层" (Current layer)上,不同图层上的图元间不会相互干扰。SketchUp对图层的定义则松散得多,图层主要的用途常用在视景管理上,即使也可以设置当前图层,但是许多新图元产生时(例如推拉)跟当前图层也没有必然的关系。对于比较复杂的建筑图,在基底平面上放样的时候,SketchUp只要感应到能够围合的区域又会自动产生封面粘来粘去,在这个阶段的确难以提升工作效率。

该使用哪一种或哪几种设计软件完成设计工作,选择权完全在于设计师自身,不在软件发展商,设计师没有必要忠心耿耿的死抱着某一个软件跟它同生共死。别相信软件发展商所说的『我们的软件是XX设计唯一的解决方案(solution)』那种鬼话,世界上没有完美的软件,不论SketchUp、AutoCAD或其他软件都各有其优势也各有其不足。对于设计师来说不论什麽软件都只是个设计工具,只要能提高设计的效率和品质,我们完全可以自由的把各种软件组织在一起交互运用各取所长。因此在整个设计的进程中,有许多建筑师和设计师会把从AutoCAD或其他CAD应用软件所建立的二维图形导入SketchUp用作建立三维设计模型的底图。

对于我们准备导入SketchUp的DWG图形,究其来源,可以区分为下面几种类型:
第一种类型:取得的建筑资料本身就是原先已经完成的设计图电子文件(DWG格式的图形档)。这些图形可能是自己制作的,也可能是外来的。由于制图习惯和作业水平的差异,这些图形也并不是专为导入SketchUp所绘制,因此绝大多数躲不掉得先做许多清理工作。
第二种类型:利用AutoCAD进行设计初期的场地配置规划、建筑物量体分割放样的概念平面作业,把由此产生的二维DWG图形导入SketchUp,进行从概念设计到细部设计的三维模型化设计作业。
第三种类型:把AutoCAD做为SketchUp的前置工具,为了SketchUp建模的需要,利用AutoCAD制作全场地或部份建筑物的二维图形,导入SketchUp用做构建三维模型的底图。

对于上述第二和第三种类型产生的DWG图形并不用太担心,因为这两种类型本身有很明确的目标,就是为了要用于SketchUp建立三维模型使用,制图者在细节上相对的会比较小心和仔细,事实上在导入SketchUp之前需要做清理准备的工作也比较单纯。

经常会产生相当困扰的是上述第一种类型,由于这些图形制图的目标是为了印出传统的图纸,并不是专为SketchUp建模所准备的,只要在列印出来的图纸能看,有些地方可能就会便宜行事。根据经验为了要导入SketchUp常常得花很大的功夫去做整理准备的先期工作,然而为了能在SketchUp里节省大量放样的时间,花费这些时间还是很值得的。

对于该怎麽着手把DWG图形清理干净,我不想把它弄成检查表这类的东西,由于DWG图形的来源各有不同,需要清理的内容也各有不同。数码阿叔根据最不利的第一种类型的外来图型可能遇到的状况,把完整的清理图形工作列成十三个循序进行的步骤。虽然并非对于所有的DWG图形都用得到每一个清理步骤,使用者可以依循着这些顺序检查图形。

检查并清理图形的建议步骤:

[步骤一]检查图形中当前的座标系统是否为WCS "世界座标系统"。

看看AutoCAD屏幕视窗左下角显现的当前图形座标系统图标,如果不是WCS,就得把AutoCAD的座标系统从"使用者定义座标系统" (UCS)改回到"世界座标系统" (WCS)。

[步骤二] 开启全部图层(Layer)

进入"图层管理器" (Layer Manager),把所有关闭(Off)、冷冻(Frozen)和锁定(Locked)状态的图层全部打开,成为可操作的"图层" (Layer)。
这麽做的目的是把目前因为被隐藏而看不到的图元都显现出来,并且处于可操作状态以利于清理图面。

[步骤三] 执行Zoom Extent命令,把图形的可见范围放大到包含全部图元的范围。

这是一个预先检查的步骤,看看Zoom Extent以后,准备要载入SketchUp的图形是不是刚刚好充满了整个视窗。如果不是,表示图形中还有不需要带过去的图元。在整个清理图元的过程中可以重复在各个步骤里使用Zoom Extent命令,检验主要模型范围外还有没有什麽东西。

[步骤四]删除图形中不需要带进SketchUp的"图元" (Entity)。

①清除图形中游离的"点" (Point)
执行Pdmode命令把"点"(Point)的显示模式改为"3"。原先AutoCAD对于点的显示模式既设的为"0",在图形上就是一个没有大小的亮点,如果这个点刚好落在线段上就看不见它存在。把点的显示模式改为3,AutoCAD会以一个相对尺度的"X"符号显现点的位置。
由于在SketchUp视窗里很不容易找到一个单独点的位置,这种点图元绝大多数在SketchUp里用不到,把它们删除掉。执行Zoom Extent命令把图形显示范围放大到显现全部图形,检查画面边缘部位是否还有游离的点。
删除完了以后可以再度使用Pdmode命令把"点"(Point)的显示模式改回到"0"。

②删除图形中不需要带进SketchUp的"图元"
检查一下凡是跟在SketchUp里建模无关的线段、辅助线、座标轴线、文字、数字、符号标记、尺寸标注、门窗、设备、家具、植栽、纹理(hatch)以及图框等等都把它们一一删除掉。
执行Zoom Extent命令,把图形的可见范围放大到包含全部图元的范围。这个动作很重要,有的时候在制图过程因为操作失误,刚从键盘打进去的字不见了或者复制的图元不见了,通常我们不会很在意,顶多重做一次。可是AutoCAD不这麽想,它会很好心的把这些图元放在远远的天边。当你执行Zoom Extent命令以后,假如发现显示器上原先充满屏幕的图形一下子缩成一小块,那麽赶快在对角或对面边缘处仔细找一找,看看有没有一小段线、一个点或者一个字藏在那里,如果真的有那麽赶快把它删除掉吧。

[步骤五]处理"图块" (Block)

关于DWG图形里面的"图块" (Block)是否应该先炸开(Explode)以后再导入SketchUp,众说纷纭。有人认为保留图块对于以后在SketchUp里封面比较容易,因此动辄建议一定要保留图块。数码阿叔则认为此事不可一概而论,必须看图块本身的内容而定,只能选择性为之。
我们经常从一些外来的DWG图形文件中发现,嵌附在里面的图块乱七八糟的什麽都有,甚至于还会有整张平面图在里面,AutoCAD很好心,凡是用过的图块它都会保留在这个图形的数据库里,如果不做清理而让这些图块跟着DWG图形一股脑儿的带进SketchUp里面,就有可能发生前面所说的,很简单的小模型还没贴材质的时候SKP就膨胀到几十兆。SketchUp会接受这些图块,但是在SketchUp里却不可能用上这些2D图块,何苦为难自己呢?
假如图块里包含有不共面的图元(entity),导入SketchUp以后势必增加封面工作的困扰。并且应用那个让Z值归零的AutoLISP程式FLATTEN.lsp也无法对图块(Block)做压平的工作,因此数码阿叔还是建议把图形里的图块炸开(Explode)。

[步骤六]处理线型(Linetype),确认线型均为连续线型。

我们把CAD图形导入SketchUp的目的是为了建模,原先在AutoCAD图形里如果使用了虚线、点线等等这些不连续的线段,到了SketchUp里就变得完全无用。因此得先把这些不连续的线型更改为连续(Continue)线型。
具体的操作方法:使用Chprop > linetype命令把那些不连续的线型改变成连续的线型。

[步骤七]检查图形单位(Unit)和精确度(Precision)。

检查DWG图形的图形单位是否跟日后在SketchUp里面建模使用的图形单位相同,如果两者不相同的话,在这里先对DWG图形的图形单位作调整,例如把DWG上英制(不是没有可能)改为十进位公制,比较合乎我们的使用习惯。其实并不是一定得弄成毫米对毫米,像数码阿叔自己的习惯就是在DWG里使用毫米(mm)而在SKP里使用米(m)为单位,导入时单位转换并没有任何不便或误差。
有一件容易被使用者忽略的就是DWG图形中所设置的长度与角度精确度问题,许多人使用附加在AutoCAD上的所谓建筑专业软件制图,这些软件为了尺寸标注和制图的便利,多半会自动设置毫米(mm)单位并且把长度与角度的精确度(Precision,指小数位数)设置为个位(不显示小数点后面的尾数),使用Distance命令量测两点距离时显现的距离为不带小数的整数值。对于二维图纸固然很方便,但是对于准备要导入SketchUp建立模型而言,就很容易造成认知上的误差,不利于日后做模型的比例缩放和旋转方位。例如说在精确度默认为个位数的15长度值,真正的长度可能为15.0535…或15.3953…,所以说15和15.0000可能是不同的长度。
因此我们在DWG里先把图形单位里长度与角度的精确度设置成0.000,目的是确认场地和建筑物的正确尺度,做为日后在SketchUp里建模时比例缩放和旋转方位的有效参考。

[步骤八]处理图元的高程(Elevation),使得全部图元都落在X-Y平面上。

为了方便在SketchUp里建模,先检查一下图形里所有的图元是否都在Z=0的高程位置。如果因为原先制图时不小心或者其他软件自动产生图形时弄出一些不在X-Y平面上的图元(其Z值不等于0),导入SketchUp以后由于这些线不共平面,直接会造成在SketchUp里这个部分无法封面。因此在AutoCAD里事先把它们的Z值归零都放在X-Y平面上,对于后续在SketchUp里建模封面工作有很大的帮助。

具体的做法是运用一个AutoLISP程式FLATTEN.lsp一次性的把图形中所有图元的Z值归零。这个FLATTEN.lsp程式完全是英文介面,数码阿叔已经把程式的操作方法和原始码放在博客日志里。另外我们SketchUpBBS论坛里有个汉化介面的FLT.lsp,需要使用的话可以自行搜索下载。
FLATTEN.lsp载入AutoCAD里必须在WCS座标系统下执行,把几乎"所有"图元的Z值归零,目的是使所有图元都落在X-Y平面上,成为名副其实的二维图形。但是FLATTEN无法处理图块(Block)里的图元,如果图块里有些图元的Z值不为0,执行FLATTEN是无法将其归零的。因此在[步骤五]里我建议把图形里的图块炸开,使得FLATTEN能顺利的把这些图元的Z值归零。

[步骤九]处理曲线、园、弧与交叉线

AutoCAD里的图元使用的是向量格式,所谓向量格式指的是以属性描述图元的记录方式,听起来似乎很玄,关于线、圆、弧的叙述式,举个例子说,线(line)包括起点和终点座标(x, y, z)、以及线的向量。弧包含了起点和终点座标(x, y, z)、弧的园心座标(x, y, z)。园就更简单了只包含园心座标和半径。但是不会纪录在图形里有哪些图元跟它交叉,例如两条任意交叉的线段,只有AutoCAD的Osnap抓点功能能以交叉点(intersection)模式算出这二个图元同时通过(X-Y平面)某个座标点位置因而显示出抓点靶框来。如果我们关闭了Osnap抓点功能,那就别想精确的从这个交叉位置再做出什麽来。

啰啰嗦嗦的讲这些交叉线做什麽,为的是两条交叉线段导入SketchUp以后还是两条独立的交叉线段,导入时SketchUp也不会对交叉位置做任何标记和认知那里有个交叉点,描边封面的过程中通过SketchUp的snap抓点功能感应到那里有个交叉位置显现一个绿点,必须等到你在绿点处按下滑鼠让描边的边线在那里建立一个端点,当SketchUp感应到附近能由端点连接线段形成能闭合区域以后,就会自动产生封面的动作。由此可以推想,在导入的底图上如果存在着许多交叉线,封面过程中出现意外的封面范围或重叠面也就不足为奇了。在整理DWG图形的时候该不该处理图形里的交叉线,把它们打断成为端点连接。不好说,使用者自己拿主意吧!

圆和弧是另一个问题,前面说过DWG图形是向量格式,如果以圆周或弧段上的某处为起点画一条线,这条线同样跟圆或弧不发生关系,只能说那个线端点跟园周某处有相同的座标值(为了方便说明我们称它为端点A)。导入SketchUp以后问题就来了,我们得知道SketchUp里的线是没有曲线的,看到的不论圆、弧、曲线都是由相互连接的直线段组成,我们称为"段落" (segment),导入时SketchUp会默认的给每个圆和弧设置24个段落,意即原先DWG里的圆变成由24段直线连在一起(有点类似AutoCAD的多重线)。这时问题就来了,原先落在圆周上的直线端点A因为圆周和弧的改变必然会脱离原先在圆周和弧上的位置,要不变成了交叉要不就成了完全脱离状态。由于必须要把视景连续放得很大才能看清楚这种接触点的差异,通常在描边封面时只会感觉这个位置明明点了下去却老是封不了面,就是圆弧曲线被SketchUp段落化所造成的后果。该怎麽办?在SketchUp里说起来无解,只能像绣花那样一点一滴慢工细活的去修补或重新连线。但是知道会有这种后果,在AutoCAD里倒是可以未雨绸缪去避免它,其一是尽量别把线的端点放在圆周或弧段上,其二是别画什麽切线之类的,真有需要的话到了SketchUp里面再补画这些线。

第三个问题是比较伤感情的,也多发生在前述第一种类型的外来图形文件中,按照制图规定平面图上柱子、剪力墙是要涂黑的,目的是好跟砌块能有所区别,因此DWG图形里柱子和剪力墙得弄成不透明,正规的方法是先画出墙柱断面轮廓线,再应用Solid或Pline命令把轮廓线内涂满。但是我曾经不止一次在把出自一些设计单位的平面图上墙柱涂满的部份删除以后,讶然发现柱子没有了、剪力墙也不见了,经仔细检查以后发现原来这些被Pline多重线涂满的部份底下根本没有画出墙柱的轮廓线。尤有甚者,被涂满遮蔽住的下面原本该跟墙柱衔接的墙线长长短短乱七八糟。金絮其外败絮其中,看得令人摇头,仿佛又回到上个世纪拿着铅笔人力制图的年代,我们有些设计师对专业的轻忽态度和对制图的不到位着实该好好检讨。当然我们不能一根竹竿打翻一船人,还是有许多设计单位的图形画得中规中矩。我在这里提出来的目的是要告诉大家在把DWG图形导入SketchUp之前的准备阶段中,一定要考虑到可能会遇上这种现象。如果运气不好真的撞上了,那麽趁早把那些该有的墙柱轮廓线、没接在一起的墙线、投影线都一一修整清楚。

[步骤十]整理并精简"图层" (Layer)。

把图形从AutoCAD导入SketchUp时,图层会跟着导入变成为SketchUp的图层。如果在DWG图形里图层用得很多,导入后让SketchUp凭空多了一大堆图层,对于后续在SketchUp里建立模型并没有什麽好处。由于SketchUp对图层定义非常松散,不像AutoCAD会严格的在现行图层(Current layer)上工作,建模过程中很难保持图层的齐一性,通常我们会在建模到了一个段落以后调整模型中各个构件的所属图层,为的是可以用图层做为这些模型构件的可视性开关,利于场景操控。因此把一大堆图层从AutoCAD带进SketchUp并没有实质性的必要性,通常会全选图形以后,运用Chprop > layer命令把整个图形都改变到某个单一图层上,或者干脆放在"0"图层(Layer 0,浮动图层)上面。剩下这些多余的图层则清理掉(见步骤十二)。

[步骤十一]调整北向方位和座标原点。

在AutoCAD的制图作业中为了制图方便和效率,通常会把矩形建筑物的长短向放在平行XY轴方向,使得真正的地理北向可能并不在平行Y轴的方向。如果就这样导入SketchUp,SketchUp会以初始绿轴对齐DWG的Y轴方向,致使模型的北向相对于真正的地理北向发生偏差,连带使得阴影方位角跟着产生误差,虽然在SketchUp里可以重设北向角度,但是输入方位角度分秒并不那麽方便,因此在AutoCAD里就把北向方位校正才是正确的做法。
具体的操作方法不难:选取整个图形,根据地理北向与Y轴间的角度差把图形"旋转" (Rotate)到跟Y轴平行北向的方位。(意即Y轴对齐北向)

另外得注意的就是"座标原点" (Origin)的问题,AutoCAD的WCS是绝对座标系统,图形的每一个图元都从座标原点(0, 0, 0)起算来计算其相对位置。如果图形距离座标原点很远,等到导入SketchUp以后,SketchUp会把DWG的座标原点对应到SketchUp的"初始座标原点" (建立一个新的skp模型档的时候,最初红绿蓝轴的交叉点),结果会使得在视景中看不到导入的图形,必须执行SU的Zoom Extent把视景扩大到包含整个模型才看得到导入的模型。因此在这个阶段最好的方式便是在AutoCAD中把图形的左下角"移动" (Move)到座标原点上,就能有效的避免导入后找不到模型的现象。
具体的作法:选取整个图形,启动Move命令,以图形的左下角做为起始点,从键盘输入"0, 0, 0"做为第二点,这麽做可以把图形搬到座标原点处,利于导入SketchUp以后的处理。

[步骤十二]清理图形数据库(Purge All)。

这是最重要的步骤,为图形瘦身减肥。AutoCAD的DWG图形里有一个看不见的"数据库" (data base),数据库里嵌装着全部图形信息,包含了在这个图形里"曾经使用过"(used)的图块、线形、纹理、文字、图层、尺寸类型…等等,所谓"曾经使用过"的意思是即使我们现在的图形中已经把这些东西给删除掉了,可是这些东西还是留存在数据库里,占了相当大的内存量。有的时候明明图形很简单,导入SketchUp以后Skp模型陡然变得很大,不用说就是在导入时把一些"幽灵"夹带了进去。因此我们必须在这里把图形数据库清理一番,去芜存菁。
具体的操作方法:执行AutoCAD的"清除全部" (Purge All)命令,会跳出一个对话框视窗,上面列出所有可以进行清除的项目列表,凡是列出的项目前端有个加号(+)的项目表示这个项目里包含了曾经使用过而现在不再用到的东西(可以清除的项目),按清除按钮执行清理数据库(data base)的工作。需要注意的是,有些不再参考到的图块被清除了以后,原先图块所属或包含的图层、字型、线型、纹理…等等才会浮现出来等待下一次清理,因此这个"清除全部" (Purge All)命令应该重复执行三到四次,等到各项目前端的加号都消失了为止,这时图形数据库也被精简到最小的状态。

[步骤十三]保存DWG文件。

对这一个步骤不必多做解释了。使用"另存为"(Save as)命令吧,保存成一个干净的新图形文件。
没有更多推荐了,返回首页