十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
移动工具,可以对PHOTOSHOP里的图层进行移动图层。
创新互联专注于网站设计制作、成都做网站、网页设计、网站制作、网站开发。公司秉持“客户至上,用心服务”的宗旨,从客户的利益和观点出发,让客户在网络营销中找到自己的驻足之地。尊重和关怀每一位客户,用严谨的态度对待客户,用专业的服务创造价值,成为客户值得信赖的朋友,为客户解除后顾之忧。
矩形选择工具,可以对图像选一个矩形的选择范围,一般对规则的选择用多。
椭圆选择工具,可以对图像选一个矩形的选择范围,一般对规则的选择用多。
单行选择工具,可以对图像在水平方向选择一行像素,一般对比较细微的选择用。
单列选择工具,可以对图像在垂直方向选择一列像素,一般对比较细微的选择用。
裁切工具,可以对图像进行剪裁,前裁选择后一般出现八个节点框,用户用鼠标对着节点进行缩放,用鼠标对着框外可以对选择框进行旋转,用鼠标对着选择框双击或打回车键即可以结束裁切。
套索工具,可任意按住鼠标不放并拖动进行选择一个不规则的选择范围,一般对于一些马虎的选择可用。
多边形套索工具,可用鼠标在图像上某点定一点,然后进行多线选中要选择的范围,没有圆弧的图像勾边可以用这个工具,但不能勾出弧线,所勾出的选择区域都是由多条线组成的
磁性套索工具,这个工具似乎有磁力一样,不须按鼠标左键而直接移动鼠标,在工具头处会出现自动跟踪的线,这条线总是走向颜色与颜色边界处,边界越明显磁力越强,将首尾连接后可完成选择,一般用于颜色与颜色差别比较大的图像选择。
魔棒工具,用鼠标对图像中某颜色单击一下对图像颜色进行选择,选择的颜色范围要求是相同的颜色,其相同程度可对魔棒工具双击,在屏幕右上角上容差值处调整容差度,数值越大,表示魔棒所选择的颜色差别大,反之,颜色差别小。
喷枪工具,主要用来对图像上色,上色的压力可由右上角的选项调整压力,上色的大小可由右边的画笔处选择自已所须的笔头大小,上色的颜色可由右边的色板或颜色处选择所须的颜色。
画笔工具,同喷枪工具基本上一样,也是用来对图像进行上色,只不过笔头的蒙边比喷枪稍少一些。
橡皮图章工具,主要用来对图像的修复用多,亦可以理解为局部复制。先按住Alt键,再用鼠标在图像中需要复制或要修复取样点处单击一左键,再在右边的画笔处选取一个合适的笔头,就可以在图像中修复图像。
图案图章工具,它也是用来复制图像,但与橡皮图章有些不同,它前提要求先用矩形选择一范围,再在"编辑"菜单中点取"定义图案"命令,然后再选合适的笔头,再在图像中进和行复制图案。
历史记录画笔工具,主要作用是对图像进行恢复图像最近保存或打开图像的原来的面貌,如果对打开的图像操作后没有保存,使用这工具,可以恢复这幅图原打开的面貌;如果对图像保存后再继续操作,则使用这工具则会恢复保存后的面貌。
橡皮擦工具,主要用来擦除不必要的像素,如果对背景层进行擦除,则背景色是什么色擦出来的是什么色;如果对背景层以上的图层进行擦除,则会将这层颜色擦除,会显示出下一层的颜色。擦除笔头的大小可以在右边的画笔中选择一个合适的笔头。
铅笔工具,主要是模拟平时画画所用的铅笔一样,选用这工具后,在图像内按住鼠标左键不放并拖动,即可以进行画线,它与喷枪、画笔不同之处是所画出的线条没有蒙边。笔头可以在右边的画笔中选取。
模糊工具,主要是对图像进行局部加模糊,按住鼠标左键不断拖动即可操作,一般用于颜色与颜色之间比较生硬的地方加以柔和,也用于颜色与颜色过渡比较生硬的地方。
锐化工具,与模糊工具相反,它是对图像进行清晰化,它清晰是在作用的范围内全部像素清晰化,如果作用太厉害,图像中每一种组成颜色都显示出来,所以会出现花花绿绿的颜色。作用了模糊工具后,再作用锐化工具,图像不能复原,因为模糊后颜色的组成已经改变。
涂抹工具,可以将颜色抹开,好像是一幅图像的颜料未干而用手去抹使颜色走位一样,一般用在颜色与颜色之间边界生硬或颜色与颜色之间缄接不好可以使用这个工具,将过渡过颜色柔和化,有时也会用在修复图像的操作中。涂抹的大小可以在右边画笔处选择一个合适的笔头。
减淡工具,也可以称为加亮工具,主要是对图像进行加光处理以达到对图像的颜色进行减淡,其减淡的范围可以在右边的画笔选取笔头大小。
加深工具,与减淡工具相反,也可称为减暗工具,主要是对图像进行变暗以达到对图像的颜色加深,其减淡的范围可以在右边的画笔选取笔头大小。
海绵工具,它可以对图像的颜色进行加色或进行减色,可以在右上角的选项中选择加色还是减色。实际上也可以是加强颜色对比度或减少颜色的对比度。其加色或是减色的强烈程度可以在右上角的选项中选择压力,其作用范围可以在右边的画笔中选择合适的笔头。
钢笔路径工具,亦称为勾边工具,主要是色画出一路径,首先注意的是落笔必须在像素据齿下方,即在像素据齿下方单击一下定点,移动鼠标到另一落点处单击一下鼠标左键,如果要勾出一条弧线,则落点时就要按住鼠标左键不放,再拖动鼠标则可以勾出一条弧线。每定一点都会出现一个节点加以控制以方便以后修改,而用鼠标拖出一条弧线后,节点两边都会出现一控制柄,还可按住Ctrl键对各控制柄进行调整弧度,按住Alt键则可以消除节点后面的控制柄,避免影响后面的勾边工作。
磁性钢笔工具,它与磁性套索工具有些相似,所画的路径也会有磁性一样,自动会偏向颜色与颜色的边界,其磁性的吸力可以在右上角的"频率"调整,数值越大,吸力也越大。
自由钢笔工具,与套索工具相似,可以在图像中按住鼠标左键不放直接拖动可以在鼠标轨迹下勾画出一条路径。
增加锚点工具,可以在一条已勾完的路径中增加一个节点以方便修改,用鼠标在路径的节点与节点之间对着路径单击一下即可。
减少锚点工具,可以在一条已勾完的路径中减少一个节点,用鼠标在路径上的某一节点上单击一下即可。
直接选择工具,此工具可以选择某一节点进行拖动修改,或用鼠标对住路径按住鼠标不放而拖动也可。
转换点工具,此工具主要是将圆弧的节点转换为尖锐,即圆弧转直线。
量度工具,主要对图像进行量长度、角度进行量度,在图像中某点处单击一下鼠标左键,并按住鼠标左键不放,拖动到另一点形成一条直线,松开左键,则在右上角的选项上会显示出该直线的长度和角度。
直线渐变工具,主要是对图像进行渐变填充,双击渐变工具,在右上角上会出现渐变的类型,并单击右边的三角形下拉菜单列出各种渐变类型,在图像中需要渐变的方向按住鼠标拖动到另一处放开鼠标。如果想图像局部渐变,则要先选择一个选择范围再渐变。
径向渐变工具,其操作和直线渐变工具基本相同。
角度渐变工具,其操作和直线渐变工具基本相同。
对称渐变工具,其操作和直线渐变工具基本相同。
菱形渐变工具,其操作和直线渐变工具基本相同。
油漆桶工具,其主要作用于用来填充颜色,其填充的颜色和魔棒工具相似,它只是将前景色填充一种颜色,其填充的程度由右上角的选项的"容差"值决定,其值越大,填充的范围越大。
吸管工具,主要用来吸取图像中某一种颜色,并将其变为前景色,一般用于要用到相同的颜色时候,在色板上又难以达到相同的可能,宜用该工具。用鼠标对着该颜色单击一下即可吸取。
颜色取样器工具,该工具主要用于将图像的颜色组成进行对比,它只可以取出四个样点,每一个样点的颜色组成如RGB或CMYK等都在右上角的选项栏上显示出来,一般对于印刷有用多。
抓手工具,主要用来翻动图像,但前提条件是当图像未能在PHOTOSHOP文件窗口中全部显出来时用,一般用于勾边操作。当选为其他工具时,按住空格键不放,鼠标会自动转换成抓手工具。
缩放工具,主要用来放大图像,当出现"+"号对图像单击一下,可以放大图像,或者按下鼠标不放拖出一个矩形框,则可以局部放大图像,按住Alt键不放,则鼠标会变为""号,单击一下可以缩小图像。用快速方式,Ctrl+"+"则为放大,Ctrl+"-"则为缩小。
正常:画图工具使用前景颜色完全替代原图像的像素颜色。
溶解:每个被混合的点被随机地选取底色或填充色。
正片叠底:新加入的颜色与原图像颜色合成为比原来的二种颜色更深的第三种颜色。
屏幕:新加入的颜色与原图像颜色合成为比原来更浅的颜色。
叠加:加强原图像的高亮区和阴影区,同时将前景色叠加到原图像上。
柔光:根据前景色的灰度值来对原图像进行处理。前景色50%加光、50%遮光。因此,原图像是纯白或纯黑,则只会更暗或更亮。
强光:根据前景色的灰度值来对原图像进行处理。50%浅色叠加处理,50%暗色相乘处理。
颜色减淡:用前景色加亮原图像颜色。
颜色加深:用前景色变暗原图像颜色。
变暗:原图像中比前景色更暗的像素颜色变为前景色。
变亮:原图像中比前景色更亮的像素颜色变为前景色。
差值:比较前景色与原图像颜色的亮度值,二者差值为该方式应用结果。
排除:与12的差值相似,只是效果会更柔和些。
背后:仅作用于透明图层的透明部分相当于在一张透明纸的背面作图。
色相:将前景色调于原图像中而不改变其亮度和饱和度。
饱和度:将前景色的饱和度用于原图像中而不改变其亮度和色调。
颜色:仅将前景色的饱和度用于原图像而不改变其亮度。
亮度:仅将前景色的亮度用于原图像而不改变其色调和饱和度。
动态转向模式。
动态转向模式是奥迪所使用的转向系统技术称呼,原理上是运用了叠加的原理,使用的结构却与宝马和丰田的系统有着很大区别,其核心部件是一套以谐波齿轮传动机构为核心的电控系统。
奥迪的动态转向系统,就是在驾驶者即使没有掌握上述的高级技巧时,可以主动地作出这些高级动作,在不知不觉间稳定了行车状态。
这一讲是紧接着上一讲的内容,开始讨论如何通过数值方法来完成对弹性体形变的模拟,另外,顺带提一句,这部分内容跟游戏开发中的物理引擎具有较高关联。
上一讲降到,我们的弹性势能可以表示为:
值得澄清的是,这里是省略了高阶项之后的弹性势能,即这个公式是在线性形变的情况下成立的,如果要考虑更为复杂的形变,后面还要加上更多的高阶项。
下面来介绍,我们在计算机中要如何计算出弹性体形变之后产生的internal force,大致思路是先计算出形变梯度矩阵(Deformation Gradient),之后根据这个矩阵算出Green Strain Tensor,之后再算出势能表达式,最后对势能求导,就得到了对应的conservative force。
首先来看下,我们要如何计算形变梯度矩阵,这里先考虑3D软体的情况,2D软体的情况如布料等在后面再考虑。
首先,要想在计算机中进行模拟,就需要将3D软体离散化,2D表面离散化是通过将之拆解成三角形来完成,而3D Volume的离散则是将之拆分成一个个的四面体。
形变发生后,单个四面体就会从material space映射到deformed space,即四面体本身发生了形变,如下图所示:
紧接着给出两个假设:
由于四面体足够小,因此 满足微分中的一个极小的局部变化的要求,可以采用泰勒展开:
在线性形变的情况下,我们可以省略高阶项,我们可以得到:
上述公式中的 我们是知道的(最开始的时候, ,所以自然是知道的,之后,经过一个timestep迭代,最新的位置经过后续的计算,自然也是知道的),而形变前的数据 我们也知道,因此就可以计算出F,另外,我们前面也说过,F是一个与位置有关的变量,要精确考虑的话,四面体上的每一点对应的F都应该是不同的,不过这里我们可以假设:
在上述假设下,我们可以有更多的等式:
将前面的三组公式放在一起,我们就得到了下面的矩阵乘法形式,从而推导出F:
简化一下:
跟 都是一个3x3的矩阵,根据上面公式可以推导出:
这里是其中一个四面体的F,其他四面体也会有对应的F,根据F我们就可以计算Green Strain Tensor,这也是每个四面体一份的:
以及势能 ,对势能进行求导(具体来说,consititutive model有公式的话,可以手动推导其弹性力的表达式),我们就能得到internal force(弹性力):
这里,势能是物体共有的一个参数,是一个标量,而 则是物体上所有四面体的顶点组成的一个向量 ,那么经过求导后得到的弹性力也自然是一个n维的向量,每一维代表的是每个顶点的受力。
上面是内部的力,外面来自于重力或者碰撞的力,我们用外力 表示。
其中的质量m是一个很大的vector,在上面的公式下,我们就可以用之前说过的implicit euler或者explicit euler完成时间步长积分,从而算出更新的位置向量。
上面这种用离散的四面体来模拟软体的弹性形变的方法叫做Finite Element Method(FEM),这种方法可以通过不断提高分辨率(缩小四面体的尺寸)来保证准确性,不过同时也会导致计算复杂度增加,所以游戏或者很多电影特效模拟不是用的这种方法,而是基于优化的方法,Optimization-Based Methods,这种方法可以实现快速模拟。
先来回顾一下隐式欧拉方法,速度跟位置向量的演变可以用下面公式来表达:
这里的两个向量都是包含了多个四面体的相关数据的,是一个3xn的矩阵。
前面说过隐式欧拉最终会变成一个高维方程,很难求解,这里考虑将之转换成一个优化问题。
首先,internal force是势能的导数给出如下:
根据上面的公式,我们有:
这边希望构造出一个函数 ,并且使得这个函数的极值:
达成的条件跟前面的公式相一致,也就是说,希望这个函数的极值对应的解 就正好是上面一个等式的解,而这个函数可以给出为(比较容易推导?):
其中
从而我们可以知道:
前面说到,这个函数提出的目的是为了求得前面implicit timestep等式的等价解,这里的一个疑惑就是,同样是解方程,前面implicit方程不好解,这里的方程同样也不好解,那么这种变化的意义在哪里呢?
这里的作用在于公式中的后面部分 ,这个部分表示的是系统的势能,前面说过弹性形变的势能公式 是通过一系列的物理推导得出的,是精确解,这种求解起来会比较麻烦,但是在游戏中,我们可以使用非精确解,只要保证模拟的结果看起来真实就好,这样一来,我们就能够选择一些能够让这个求解过程变得容易的公式代入这里的势能项中,从而达到简化问题的目的。
那么这个势能公式要怎么来设计呢?我们知道,弹性形变导致的势能总体来说,可以分成两种,分别是体积变化导致的形变(如从体积为1变成体积为2),或者是扭曲导致的形变,如一个cube变成平行六面体等。
前者势能可以表示为:
det是矩阵的行列式,这个公式的意义在于,当没有形变的时候,矩阵就是单位矩阵,这个势能的结果就是0
后者势能可以表示为:
tr(trace)是矩阵的迹,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称矩阵A的迹(也就等于所有特征值的和)。同样,当没有形变时,这个F就是单位矩阵,所以迹就是3,那么势能依然为0。
总结可以看出,我们需要的势能公式其实就是一个约束条件,这个约束条件或者说约束函数在无形变的时候输出为0,在有形变的时候输出的是一个正值(或者说在无形变的时候取得极小值0),比如其形式为:
在这个条件下,我们就可以定义势能为:
上式中的A是一个对角阵,C(q)是一个向量,对于其中的每个元素:
这里希望有:
这里的i用来指示四面体的序号,这里翻译一下,就是说我们希望每个四面体的形变梯度矩阵的行列式为1,也就是说每个四面体都是体积不变的。
下面来介绍一下Position-based Dynamics方法,回到前面的公式:
这里,我们将势能用脉冲函数(实际上是脉冲函数取反,不过为了描述方便,这里用脉冲函数来表示)来表示:
其中脉冲函数:
之所以这样设计,就是为了满足前面说过的,我们希望函数J取得最小值,那么就需要保证 ,这里的i依然是四面体的序号。
继续下去,Position-based Dynamics方法会采用Gauss-Siedel Iteration(假设1)进行求解,即对于后面的众多四面体而言,我们会先只考虑一个四面体作用下的求解,并将结果代入原公式之后考虑第二个四面体作用下的求解,循环往复。如果只考虑单个四面体作用,原公式就变成了:
再定义:
公式就变成:
将公式转换一下,我们想要求解J的最小值,就等价于在条件:
下求解
的最小值。
之后,再假设 足够小(假设2),那么前面的条件就可以做泰勒展开为:
而这个就可以用上一讲的拉格朗日乘子来求解,也就是说,在上面条件下的最小值求解就变成了:
而Gauss-siedel Iteration的问题是,需要进行多次迭代才能收敛,从而导致计算比较慢,性能较差,这也是Position-based Dynamics(PBD)的缺点,如果Iteration数目不够就会导致一些模拟效果质量较低,比如布料会看起来像弹簧一样生硬。
我们来回顾下之前的内容:
那么很自然的问题就是,是否有一种方法是居于两者之间的,一方面我们不需要求解一个十分复杂的方程,而是只需要求解一个简单的方程,且这个方程可以通过少数的迭代就能输出结果的。
这个方法就是物理界常用的Projective Dynamics,实际上这种方法跟PBD是处于同一框架下得,不同的是PBD这里的internel energy函数是一个脉冲函数之和,而Projective Dynamics方法的internal energy函数则是:
这个式子中一共引入了两个新的符号,一个是变量p,这个变量代表的是某个粒子(如前面的四面体)的一个目标状态(比如,我们可以选择四面体不发生形变时的状态为一个目标状态,当然我们也可以选择其他状态作为目标状态,具体如何选,后面再说),而d则是表达p跟q差异性的函数,可以是一个非常简单的函数,比如就取两者的距离作为函数。
整个函数是什么意思呢,我们这里来举个例子说明一下,假如我们选择某个函数(simple distance measure)作为上面的函数d:
这里的F跟前面一样,还是deformation gradient, 是一个没有形变,但是经过一个旋转的状态,两者都是3x3的矩阵,其中 可以通过一个叫做Shape Matching的算法求得。
另外一项 是一个脉冲函数,这个脉冲函数的取值受到约束条件c的影响,当 的时候,取值为0,否则取值为无穷大,而由于这个函数的存在,要想使得整体的internal energy最小,就必须得满足这里的约束条件,从而使得脉冲函数取值为0。
在这个例子中,我们选取了p为经过某个旋转 后的状态,而在这个状态下,可以满足上面的脉冲函数结果为0,那么最终的internal energy的计算就变成了一个非常简单的矩阵的线性计算。
这里,我们还可以选择其他的p,比如:
这里的 也是一个deformation gradient,表示的是最接近于当前形变状态的deformation gradient,但是在这个gradient的作用下,形变后的四面体的体积跟原始四面体保持一致(这种对于动物形体的模拟比较有用,比如肚子在受击之后体积保持不变), 的计算同样可以通过脉冲函数求得,比如只需要找到体积不变的形变的约束条件,就能得到对应的deformation gradient。
在这种internal energy的作用下,最优解的求解就变成了如下的函数形式:
可以看到,p只出现在后两项,q则只出现在前两项,从而我们可以通过有限的迭代来求解这个最优化问题。
而由于脉冲函数的存在,p的求解只需要保证脉冲函数为0即可,因此整个问题可以快速变成q变量下的最优解,这个过程叫做local projection,即找到限制条件c(constraint)来保证脉冲函数为0,从而将问题从两个变量降维成一个变量。
在求得p之后,就可以来求解q以获得整个函数的最优解:
而由于上面的函数实际上都是q的一个二次函数,而其导数则是q的一次函数,从而只需要将导数等于0,就能得到最终的解,这一步叫做global solve。
前面说过,projective Dynamics是一个迭代的过程,上面展示的local projection跟global solve就是这个过程中的仅有两个步骤,这两个步骤需要循环往复的去执行(因为p是local projection的,也就是一个局部解,这个解并不一定就对应着最优解,而是需要不断调整q来逼近最优解)。
这个方法的迭代数目比PBD会少很多,目前UE、Houndini等软件使用的是X-PBD方案,是在PBD方案上的一种更新方案,但是其迭代次数依然比Projective Dynamics方法要多,之所以不用Projective Dynamics方法,是因为线性系统的求解在维数很大(比如q是一个很大的向量)的时候会存在比较大的困难。