发布网友 发布时间:2022-05-07 19:18
共3个回答
懂视网 时间:2022-05-15 19:16
接着前面的移动端效果的研究,这次来看看picker
选择器的实现原理
移动端效果之Swiper
代码看这里:github
<!-- 说明: 1. 类 picker-3d 是为了提供3d视角,如果不需要可以去掉 2. 类 picker-slot-absolute 在3d视角中需要加上,因为下面相对定位的 picker-items 是要相对父容器进行 transform的,如果不加,就会造成位移不正确 3. DOM中所有的style样式都是在初始化的时候加上的--><p class="picker picker-3d"> <p class="picker-items"> <p class="picker-slot picker-slot-absolute" style="flex:1;"> <p class="picker-slot-wrapper" id="wrapper" style="height: 108px;"> <p class="picker-item picker-selected" style="height:36px;line-height: 36px">1981</p> <!-- ... --> <p class="picker-item" style="height:36px;line-height: 36px">1999</p> </p> </p> </p> <p class="picker-center-highlight" style="height:36px;margin-top:-18px;"></p></p>
由于饿了么源码中的picker
是采用v-for
指令生成的DOM
,因此我这里只是简单的用javascript
来模拟一下DOM
的生成。
var el = document.querySelector('#wrapper'); var animationFrameId = null; var currentValue; var itemHeight = 36; var visibleItemCount = 3; var valueIndex = 0; var rotateEffect = true; var datas = ['1981', '1982', '1983', '...', '1999'];// 如果支持3d视角,则给<p class="picker"></p>加上类"picker-3d"// <p class="picker-slot" style="flex:1;">加上类"picker-slot-absolute"if (rotateEffect) { var picker = document.querySelector('.picker'); var pickerSlot = document.querySelector('.picker-slot'); picker.classList.add('picker-3d'); pickerSlot.classList.add('picker-slot-absolute');}// 限定容器高度el.style.height = `${visibleItemCount * itemHeight}px`;// 生成DOMvar html = '';datas.forEach(function(data, index) { html += `<p class="picker-item" style="height:36px;line-height:36px;">${data}</p>`;});el.innerHTML = html;// 激活当前itemvar pickerItems = document.querySelectorAll('.picker-item');pickerItems[valueIndex].classList.add('picker-selected');
总体上来说,picker
的事件也包括滑动开始、滑动中、滑动结束。因为毕竟是移动端,滑动不可避免。这次,源码中的对滑动事件进行了封装,兼容了PC
端以及排除了拖动和选择造成的影响,具体看一下分析。`
/** * draggable.js * 只是起到一定的兼容性 * 实质和直接调用 el.addEventListener('touchstart', startFn); 并没有多大差别 */// 滑动开始// touchstart 和 mousedown 可见对PC端的兼容// onselectstart/ondragstart 直接return 可见排除了拖动和选择element.addEventListener(supportTouch ? 'touchstart' : 'mousedown', function(event) { if (isDragging) return; document.onselectstart = function() { return false; }; document.ondragstart = function() { return false; }; // ...});// 滑动结束var endFn = function(event) { // 注销事件 if (!supportTouch) { document.removeEventListener('mousemove', moveFn); document.removeEventListener('mouseup', endFn); } document.onselectstart = null; document.ondragstart = null; isDragging = false; if (options.end) { options.end(supportTouch ? event.changedTouches[0] || event.touches[0] : event); }}
要是DOM
跟随自己在手机屏幕上的滑动而滑动,方法大同小异,无非就是在开始滑动记录开始位置,滑动中实时计算位移,滑动结束之后将DOM
滑动应该滑动的位置。这点可以参看前面一篇文章移动端效果之Swiper,这篇文章中有着相同的方法。这里重点讲一下其中的区别
// 滑动开始的执行事件方法start: function(event) { dragState = { range: getDragRange(), // ... startTranslateTop: translateUtil.getElementTranslate(el).top };}
这其中有两个方法,第一个getDragRange
和第二个getElementTranslate(el)
.
第一个函数的作用是获取picker
能够滑动的最小和最大的位移,这将会在滑动结束事件中用到。关于如何计算,这里简单提一下,向下滑动,最大不能超过最中间的item
的最上方,这也就是为什么itemHeight * Math.floor(visibleItemCount / 2)
,而向上滑动,最大不能超过中间item
的最下方,-itemHeight * (valuesLength - Math.ceil(visibleItemCount / 2))
,细细想一下就好了。
第二个函数的作用是获取当前picker
的transform
值,作为下一次滑动计算的依据。其实感觉这样挺费事,因为在touchend
中最后肯定会计算translate
值,我们只需要每次保存最后滑动的移动值就好了,而不要每次都要在DOM
中取。
/** * translateUtil * 对浏览器对前缀支持的一些判断 * 检测浏览器对3d属性的支持情况 * 获取当前的translate值/清空picker的translate值/移动picker * 对于浏览器的检测方面,这也算是一个比较好的工具类 */var docStyle = document.documentElement.style;var engine;var translate3d = false;// 浏览器判断if (window.opera && Object.prototype.toString.call(opera) === '[object Opera]') { engine = 'presto';} else if ('MozAppearance' in docStyle) { engine = 'gecko';} else if ('WebkitAppearance' in docStyle) { engine = 'webkit';} else if (typeof navigator.cpuClass === 'string') { engine = 'trident';}// css前缀var cssPrefix = { trident: '-ms-', // IE gecko: '-moz-', // FireFox webkit: '-webkit-', // Chrome/Safari/etc... presto: '-o-' // Opera}[engine];// style前缀var vendorPrefix = { trident: 'ms', gecko: 'Moz', webkit: 'Webkit', presto: 'O'}[engine];var helpElem = document.createElement('p');var perspectiveProperty = vendorPrefix + 'Perspective';var transformProperty = vendorPrefix + 'Transform';var transformStyleName = cssPrefix + 'transform';var transitionProperty = vendorPrefix + 'Transition';var transitionStyleName = cssPrefix + 'transition';var transitionEndProperty = vendorPrefix.toLowerCase() + 'TransitionEnd';if (helpElem.style[perspectiveProperty] !== undefined) { translate3d = true;}// 讲一下这个正则// s*(-?d+(.d+?)?)px 这是一个单元,匹配这样的 -23.15px, 剩下的应该就好理解了var regexp = /translate(s*(-?d+(.d+?)?)px,s*(-?d+(.d+?)?)px)s*translateZ(0px)/ig;
接下来看看滑动中
drag: function(event) { // 加上 dragging 类是为了清除过渡效果,在swiper中也有同样的应用 el.classList.add('dragging'); dragState.left = event.pageX; dragState.top = event.pageY; var deltaY = dragState.top - dragState.startTop; // 计算当前的滑动位移 var translate = dragState.startTranslateTop + deltaY; // 滑动元素 translateUtil.translateElement(el, null, translate); velocityTranslate = translate - prevTranslate || translate; prevTranslate = translate; if (rotateEffect) { updateRotate(prevTranslate, pickerItems); }}
看到以上的代码中有一个velocityTranslate
,这个值有神马作用,最开始我也不清楚,后面发现在滑动结束之后用到了,才明白了它代表了一个速率的位移值。什么是速率?就好比你快速滑动的时候,总希望它能够惯性滑动一下,这个值乘以一个惯性值就可以得出一个惯性位移。看end
中的代码。
end: function() { // 添加过渡 el.classList.remove('dragging'); // 惯性值 var momentumRatio = 7; var currentTranslate = translateUtil.getElementTranslate(el).top; var duration = new Date() - dragState.start; var momentumTranslate; if (duration < 300) { momentumTranslate = currentTranslate + velocityTranslate * momentumRatio; } // 加上惯性速率之后的位移值 console.log('momentumTranslate', momentumTranslate); dragRange = dragState.range; setTimeout(function() { var translate; if (momentumTranslate) { translate = Math.round(momentumTranslate / itemHeight) * itemHeight; } else { translate = Math.round(currentTranslate / itemHeight) * itemHeight; } // 取得最终的位移值, // 必须为itemHeight的倍数 // 在范围的最大值和最小值中取 translate = Math.max(Math.min(translate, dragRange[1]), dragRange[0]); translateUtil.translateElement(el, null, translate); // 计算得出当前位移下应该对应的实际值 currentValue = translate2Value(translate); // 3d效果 if (rotateEffect) { planUpdateRotate(); } }, 10); dragState = {};}
这就是整个picker
的实现流程,撇开3d
效果就可以使用了。下面看一下如何实现的3D
效果。在doOnValuesChange
中有一个最开始的初始化。
[].forEach.call(items, function(item, index) { translateUtil.translateElement(item, null, itemHeight * index);});
给每一个item
设置了根据索引来的位移值,此时的每一个item
的定位都必须是absolute
的,这样位移下来才是紧挨着的,不然可能中间都会有一个itemHeight
的空格。
3D
效果中最关键的一点就是如何进行翻转角度的计算。在源码中定义了一个常量对象:
var VISIBEL_ITEMS_ANGLE_MAP = { 3: -45, 5: -20, 7: -15};
可以看到,当只有3个可见元素的时候,高亮部分相对于X
轴平行,而上一个item
就必须绕X
轴顺时针旋转45度,反之下一个item
绕X
轴逆时针旋转45度。另外在其中有一段代码特别绕,根据我的理解是这样的:
// 当前item相对于顶部原本应该有的位移值var itemOffsetTop = index * itemHeight; // 滑动过程中,相对于最开始的位置滑动的位移值var translateOffset = dragRange[1] - currentTranslate;// 当应该有的位移值和滑动的位移值相等的时候,也就说明了当前的`item`被选中// 也就是说此时当前的角度为0var itemOffset = itemOffsetTop - translateOffset;var percentage = itemOffset / itemHeight;var angle = angleUnit * percentage;if (angle > 180) angle = 180;if (angle < -180) angle = -180;rotateElement(item, angle);
如果觉得太绕,其实也没有必要按照他的这种做法来,我们只要想办法确定每一个item
相对于当前选中的item
是处于上一个还是下一个,就可以根据此来计算角度。
关于饿了么中的picker
组件就看了这么多,整体来说跟swiper
中的滑动十分相似,其中的关键点在于最后的计算位移值来根据位移值滑动到正确的位置,至于怎么计算值,其实每个人的实现方式可能都是大同小异的,也没要必要一定要按照源码来,可以适当加入自己的理解,这样或许写起代码来更加得心应手。这里只是个人的一点理解,希望能够给自己也给大家提供一点帮助。
热心网友 时间:2022-05-15 16:24
浓度太小了热心网友 时间:2022-05-15 17:42
3ds mas常用参数:编辑网格修改器 Edit Mesh 修改器一:主要用于编辑三维网格物体。 特点是占用资源少,适用于游戏、效果图的制作二:Edit Mesh的结构1 Vertex 点层级2 Edge:物体边层级3 Face:三角面层级4 Polygon: 多边形、四边形面层级5 Elemnet: 元素层级、就是所有连续的表明Editmesh常用命令三:MeshSmooth网格光滑修改器我们在建模过程中,经常会把Edit Mesh和MeshSmooth 一起适用,绘制沙发、靠垫等光滑物体。MeshSmooth修改器的相关参数Iterations: 光滑等级,(1~5)Weight:权重值,可以再具体条件物体的光滑效果、例如是让物体更加光滑或者是更加的尖锐。Crease:硬度数值: 可以让我们决定物体的那些边参与光滑操作。 数值为1的时候、被选择上的边就没有光滑效果。二维物体(Shapes)1:Line的画法。a。点击可以画出直线b。拖动鼠标可以绘制出曲线C:按退格按钮可以重画上一个节点d:按Shift按钮可以画出正交线e:按住键盘I按钮时,可以进行视图的延伸f:按“〔”和“ 〕”按钮可以对视图进行缩放2:线的结构(次物体):Vertex:节点层级Segment:线段层级,线段就是两点间的连线Spline:样条线层级,代表整条连续的线3:点的类型:conner:拐角点Smooth:光滑点、是自动进行斜率计算Bezier:贝兹曲线,可以手动条件曲线的斜率。Bezier conner 贝兹拐角。4。线的可渲染性Renderalbe,二维物体的渲染开关Thickness:线的厚度Sides:线的截面精度Diplay Render Mesh:打开后能观察到线的实际大小5:画线时的常用工具Refine 加点命令Fillet:倒圆角Chamfer:倒斜角工具Outline:复制样条线工具(在Spline层级)Attach:激活命令,把外部的二维物体结合进来。Boolean:步尔运算(之前必须把相关的线条Attach激活进来)1:先选择一条样条线,2:确定运算关系(相加、相减和交集)3:按Boolaen按钮,然后再拾取目标曲线Trim:减切工具,可以对相交的曲线进行修剪Weld(点层级工具):可以对一定距离内的点进行焊接6:插入视图背景(Alt+B)match bimap 视图匹配,可以保持图片的比例不变Lock Zoom/Pan 可以确保缩放视图时图片可以一同缩放DisPlay Backgound:显示背景开关7:导入外部文件(Import)8:单位修改:Customize用户菜单中选择Units SetupSystem Unit系统单位。Display Unit Scale显示单位Bevel 倒角修改器功能:进行3次拉伸,每次拉伸可以对物体进行缩放。以此给物*作倒角主要参数: Height:拉伸的高度。Outline:缩放效果Linear sides: 斜面倒角Curved sides: 圆倒角Segments:精度。参数越高,物体越光滑Smooth Across Levels:对每层的拉伸的交界处进行光滑Keep lines From Crossning:打开时可以纠正倒角的错误Bevel Profile : 轮廓倒角修改器功能: 可以自由的编辑物体的倒角面主要参数:Pick Profile: 拾取轮廓边(轮廓边必须为二维物体)注意:轮廓边可以是封闭的或开放的二维物体。当我们来到Profile Gizmo层级时可以对倒角的范围框进行各种的移动、旋转和缩放修改。Loft 放样操作:放样操作好比一种高级的拉伸:放样必须具备路径(Path)和截面(shape)缺一不可,路径只能有唯一的一条;而截面可以有无数条。放样的基本操作:1:绘制出路径和截面2:选择截面图形,在复合建模中(Compoud Object)打开Loft操作 再选择Get Path按钮,来拾取路径或者是:选择路径图形,在复合建模中(Compoud Object)打开Loft操作 再选择Get Shape按钮,来拾取截面3:多截面放样:方法 a:先按标准方法进行放样b:在参数栏中改变Path的数值,也就是改变截取截面的位置。再拾取新的截面。4: 放样的修改:A:对放样的截面(Shape)和路径(Path)进行修改放样主要分为Shape和Path层级在Shape层级中,我们可以选择上截面,对其进行各种的变换操作。甚至是删除。而Path层级中修改的是路径的各种参数,例如路径的长度,斜率等等B:对放样物体的变形操作:Scale:缩放操作。其操作和编辑二维物体很想像。可以任意的加点编辑操作。5:放样的重要参数:Cap Start:对顶端封盖Cap End: 对底端封盖Shape Step:截面精度,越高截面越光滑Path Step:路径精度Linear Interpolation:线性差补、取消路径的光滑效果Transform Degrade:显示降级操作,取消该功能可以让放样的修改更为直观三维建模(Geometry)一。标准几何体(Standard Primitives)Box:立方体Cone:圆锥Sphere:球体Geospohere:地理球Cylinder:圆柱体Tube:水管物体Torus:圆环Pyramid:五面体Teapot:茶壶Plane:平面相关的常用参数:Length 长 Width宽 High:高Radius圆柱或者是圆锥的半径 Sides边数、决定模型截面的精度。Smooth平滑,让模型以平滑状态显示Segments段数,组成物体的细分程度,这个参数在实际中非常重要断数约多的物体越光滑Fillet倒角参数二。常用扩展体1)Headra(多面体)分为8、16、32面体另外附带两种星形(可以制作流星锤)2)Chamfer Box(倒角立方体)基本和box的参数一样,但是还可以给box制作倒角效果,是一个非常常用的工具。如下图所示的沙发于桌子都是由chamferbox拼凑而成三。 Boolean三维物体的步尔运算1.概念:尔运算是首先由19世纪英国科学家Boolean(步尔)使用的一种对象合成逻辑计算方式,这种逻辑运算方 式可以使对象之间进行Union(并集)、Intersect(交集)、和Subs traction(差集)计算后合成在一起。2.进行布尔运算时的要求(1)要求参与运算的物体必须具有绝对完整的表面、没有洞、重叠面或未被合并的节点。(2)保持法线方向的一致,不要轻易翻转物体表面的法线,否则会产生不可预知的结果(3)要求物体表面元素没有重叠现象,也就是说在物体的表面或内部没有因使用次物体级中的编辑,修改命令而留下 多余或线段(4)如果操作物体没有相交,布尔运算什么也不会做最好是在表面复杂程度相近的模型之间进行布尔操作,如果一个物体很复杂(由很多点线面组成),而另一个物体很简单)如一个没有进行任何段设置的盒子),对它们进行布尔运算,运算结果将会花费很长时间3.布尔运算的相关参数:【.布尔运算的相关参数】Pick Boolean(拾取布尔物体“B”):布尔运算必须同时具备A物体与B物体。Copy(复制):布尔运算后不破坏原来的物体Move(移除):布尔运算后原物体被删除。Instance(关联):布尔运算后,布尔运算物体与原来物体成关联关系Reference(参考):布尔运算后,布尔运算物体与原来物体成参考关关系Operands(运算物体):列出所有的运算物体,供编辑操作时选择使用Extract Operand(提取运算物体):它可以将当前指定的运算物体重新提取到场景中,作为一个新的物体Display/Update】Result:只显示最后结果Operands:显示出所有的运算物体Results + Hidden Ops:显示隐藏物体和最后结果。注意:步尔运算只有对单个对象计算时才是可靠的,在对下一个对象进行计算之前先要退出步尔运算的窗口然后再对该对象进行步尔运算的操作。材质编辑一。材质的指定:1:直接拖动法2:按“Assign Material to Selection”工具二。材质的保存1,选择好材质以后,按“Put to library”按钮2:进入材质库,按save保存当前材质三:材质的基本参数:Diffuse:漫反射颜色,物体的主要色彩。Ambient:环境色,物体受到外部环境影响时所发出的色彩,一般情况下没有任何效果。Specular:高光色,物体全反射的色彩Specular Level: 高光强度。 一般金属,陶瓷等比较坚硬和光滑的物体有比较的高光。而墙体、布料、陶土等材质的高光就比较弱、甚至是没有高光。Glossiness:反光面积、也就是高光点的大小。Soften:高光的柔和度。不是很常用的一个参数。Self-Illumination:自发光参数。让物体产生荧光的效果。但是一般情况下不可以进行照明。Opacticy:不透明度、100为完全不透明,0为完全透明。制作玻璃等透明物体可以把参数调为(10~30)四:主要的Shader(明暗生成器)Blinn 布林材质: 最常用的shader之一,可以制作陶瓷、陶土、布料、玻璃、塑料等效果Metal:金属, 制作金属专用的sahderAnisotropic: 各相异性材质, 可以通过Anisotropy和Orientation两个产生,使高光变窄和改变角度、可以产生梭型的高光Multi-Layer:多重高光,和Anisotropic非常类似,可以产生两层的高光。产生更凌乱的高光效果Translucent Shader,半透明效果。可以用于蜡烛、珠宝等材质的制作。程序贴图说明:Gradient 渐变 (通过三个色块决定渐变的颜色也可在相应的通道中实现贴图的渐变,Gradient type :line 线性Radial辐射方式 Nosie 噪波效果,可以模拟火焰。Amount 噪波强度 size噪波尺寸)Output 一般做反光板材质类型一.Multi/Sub-object *子材质可以让材质拥有多个子材质组成相关参数:Set Number 设定材质的数量Add 增加一个子材质Delete删除当前选择的材质另外除了材质本身以外我们还需要对物体进行材质ID号的指定。二。Double Sided 双面型材质功能:给同一个表面的正反方向分别赋予材质。主要参数:Translucency:透明属性,让物体表面有半透明的效果Facing Material 正面材质。Back Material:背面材质。三:Raytrace 光线追踪材质类型功能:制作半透明材质、金属和玻璃材质,特点是光线追踪速度快。和标准材质不同的地方:Transparency:透明度,黑色表示不透明。白色则刚好相反。物体变为透明后就自动带有折射效果。Reflect: 反射,黑色代表没有任何反射效果。Advanced Transparency(高级透明)Color染色、End决定色彩的浓密程度、 Fog:让透明物体有一种雾状透明的效果。灯光Target/Free Spot:目标/自由聚光灯Target/Free Direct: 目标/自由平行光Omni:泛光灯Skylight:天光一般参数(General ) 1)on:灯光开关2)Type:灯光类型3)Targeted:勾选时灯光有目标点。4)Shadows On:阴影开关(可以通过右键菜单快速选择)5)Use Global Setting:使用全局设置6)Exclude:排除,允许物体不受到灯光的照射影响Intensity/Color/Attenuation灯光的强度、色彩、以及照明的距离:Multiplier(倍增器):对灯光的照射强度控制,标准为1,如果设置为2 则光强增加一倍,如果为负数,将会产生吸光效果。灯光衰减(Attenuation ) (1) Near Attenuation近距衰减:由于它的衰减方式违反了自然的定律,因此我们在效果图的制作中不会经常用到此衰减(2) Far Attenuation 远距衰减,我们可以通过调整Start和End两个数值来控制灯光的衰减范围(3) Decay(真实的衰减计算)Inverse反向,会产生剧烈的衰减Inverse Squire反向平方:是按照真实的灯光衰减方式进行衰减计算的,衰减最为强烈却最真实。Start可以控制灯光从何处开始衰减Spotlight/Parameters 聚光灯/平行光Show Cone:在灯光为非选择的状态下仍显示灯光的照明范围Overshoot:照亮全局,远距范围外的场景也会被照亮Hotspot:(聚光区)在这个区域内有聚光灯的最强照明度从这个区域外开始,灯照强度逐渐衰减。Falloff(衰减区)在此区以外的对象将不会受到光照。注意:一般Hotspot和Falloff参数差值越大,光斑边缘越模糊。2.shadows Params 阴影参数color:可以改变阴影的颜色。Dens:调节阴影的浓度Map:为阴影指定贴图。Light Affects Shadows Color:阴影色显示为灯光色与阴影固有色的混合效果 。Atmosphere shadows On:设置大气是否对阴影产生影响。(例如做燃烧火焰的时,需要打开此按钮)Opacity(不透明度)Color Amount:调节大气颜色与阴影颜色混合程度的百分比Bias:对阴影效果进行偏移Size:降低此值会使阴影更加模糊,数值越高阴影越清晰Sample Range:采样数值,此值越高阴影的品质就越高,但渲染越慢Advanced Effects 高级效果Contrast:调节物体高光区与过渡区之间的表面对比度,值为0时是正常效果,对有些特殊效果如空间中刺目的反光,需要增大对比度。Soften Diff.Edge(柔化过渡边界)柔化过渡区阴影表面之间的边缘,避免产生清晰明暗分界。Diffuse:勾选时,灯光可以产生漫反射。Specula:勾选时,灯光可以产生高光效果。Ambient Only:勾选时,灯光仅以环境照明的方式影响物体表面颜色,近似给模型表面均匀的涂色。通过此参数,可以灵活地为物体指定不同的环境光照明影响Projector(投影图像):打开此项,可以通过其下的Map(贴图)按钮选择一张图像作为投影图贴图通道和程序贴图贴图的内部参数:View Image: 贴图的剪切按钮Filtering:贴图的过滤方式,采用Summed Area方式可以最大程度上对图片进行优化Blur:贴图的模糊参数Blur Offest 模糊偏移、产生更大的贴图模糊效果。常用的贴图通道:一。Diffuse Color:纹理通道(过渡色通道),用于表现物体纹理的通道、属于色彩通道。二。Bump:凹凸通道:属于强度通道,图片被放入此通道后,可以用来控制物体的凹凸效果,黑色可以让物体产生凹陷效果;白色可以让物体有隆起样子。常用的杂点程序贴图: 杂点程序贴图一般由几种色彩构成。可以用于纹理通道和凹凸通道。可以表现各种纹理的效果。1.Noise 噪波程序贴图:主要参数: size:尺寸,控制色块的大小High和low可以控制两种色彩的分布Levels:用于控制贴图的精度。Noise type:噪波种类Regular规则噪波Fractal分型噪波,更加凌乱的效果Turbulence端流噪波2.Cellular:细胞贴图主要参数: Iterations 图片的精度、细节度Spread:延伸,可以控制色彩的分布Roughness:图片的粗糙程度。3.Dent: 凹陷贴图。 用于表现强烈凹凸的贴图,主要参数: Strength:凹陷的强度,实际是调节黑白两色的对比度Iterations:贴图的精度、和细节度。4。Smoke 烟雾贴图相关参数: Exponnent,可以控制两种色彩的分布。size:烟雾的大小 三:Reflection(反射通道)常用的相关贴图1:Raytrace光线追踪贴图。产生真实的反射、反射周围的物 主要参数:Enable Raytracing:光线追踪的开关Enable Atmospherics:对大气环境,例如雾效进行反射Enable Self Reflect\Refract 对自己产生反射和折射BackGround 背景设置Use Enironment Settings:只反射周围环境None:通道,可以这里添加贴图,给物体增加一个虚拟的反射环境 Attenuation反射的衰减Falloff Type:衰减类型off 关闭衰减Linear:以匀速进行衰减Inverse Square 反向平房,比较真实的衰减方式,但衰减的速度非常快Exponential:对数方式衰减衰减时可以调节End数值控制衰减的程度。另外可以在rendering菜单的rendersetting里面调节反射效果(真反射)。 调节反射反弹次数(Maximum Depth)打开反射抗锯齿(Global Ray Antialiaser)2。Flat Mirror 平面镜假反射的一种 ,特点是速度快。相关参数:Blur 对反射进行模糊Use Bump map对凹凸效果也进行反射四:Reraction折射通道通常用于制作玻璃和水等透明物体。可以添加上Raytrace光线追踪贴图就可以参数折射效果。另外一般可以配合Extended Parameters里面的Filter(过滤)、Subtracteve(减淡)、和Additive(加亮)参数进行调节。Index of Refraction(折射率)Index of Refraction:折射率真空:1.0空气:1.0003水:1.333玻璃:1.5到1.7钻石:2.419五:Opacity不透明通道用于控制物体的透明、属于强度通道。也就是说只能通过图片的灰度来控制物体的透明效果。黑色……全透明。纯白……不透明效果。Path Constraint路径约束控制器相关参数Add Path:用于获取运动路径的工具。Follow:让摄像机产生跟随效果,摄像机在运动中角度随路径改变而改变Along Path沿路径的百分比Constant Velocity 可以让物体产生匀速的运动Bank:摄像机在运动是可以产生倾斜Bank Amount:倾斜的幅度Smoothness:拐弯时角度变化的速度Allow Upside当对象沿垂直路径运动时,可以头部向下颠倒,如同游乐园中的过山车的运动。Constant Velocity:匀速运动Loop:循环Relative(相对)被约束对象会保持在原先的位置,与路径曲线保持一个相对偏移距离进行路径约束运动Axis:轴向,可以调整摄像机的朝向。Flip:反转摄像机的方向光能传递光能传递的制作流程1: 设置好灯光,一般采用光度学灯光。选取合适的光域网文件2:打开光能传递: 快捷键:9, 寻找选择光能传递(Radiosity)光能传递的主要参数:Start:开始光能传递计算,一般对场景物体有所改动以后,都要重新计算一 次。在测试过程中,只要计算精度达到1以上就可以了。stop:停止计算Reset All 重新开始计算Reset: 只对灯光物体进行重新计算Intial Quality:对物体的细分质量。越高效果越好。Refine Iterations(All Objects) 提高所有物体的细分等级。越高效果 越好。注:如果我们在最终使用Regather(光线再聚集)算法,以上的两个参数的大小就无关中要了。Filtering: 过滤,可以适当的消除黑斑Setup: 可以从这里进而Environment(环境)面版。 进入后,我们通常都要打开曝光控制。方法在Exposure Control中选择Logarithmic Exposure Control然后再可以调节图片的Brightness(亮度)、Contrast对比度等等。一般场景都要打开Affect Indirect Only选项,这样图片会更加清晰。如果场景有日光可以使用Exterior Daylight选项。3:在调节好灯光和曝光效果后可以进行最终的输出。在Rendering Parameters中打开Regather Indirect(再聚集)64~180Rays Per Sample :采样值,参数越高,效果越好打开Adaptive Sampling,可以提高选渲染速度4、计算反射反弹:1-prefercnce setting2-advanced lighting/material editor物体不受阴影:在物体属性不勾选receive shadows开阳光,勾选environment /exposure control/logarithmic exposure control-----勾选exterior daylight.一。光能传递~再聚集算法再聚集的相关参数:Regather InDirect Illumination:再聚集的开关通常我先要对物体进行细分、细分度大于一就可以了。Rays Per Sample:光线采样数量、越大效果越好、时间越长Filter Radius:(过滤半径)、可以减少黑斑,但也会增加渲染时间Clamp Values:用于防止亮斑、控制整个场景的总体亮度。Adaptive Sampling 适配采样技术、可以提高我们的渲染效率,但会相应降低渲染效果。打开次功能后,可能需要适当再增加渲染质量Initial Sample Spacing:对场景中相对“简单、平坦”的地方进行低精度的采样Subdivide Down to 对精度、和细节比较丰富的地方采样相对较高的采样精度。Show Samples:显示红色的采样点,让我们可以了解场景中的采样分布。二。图像的优化措施1。在曝光控制中提高图片的对比度2.在渲染控制中选择相对优秀的Mitchell_Netravali过滤方式,进行抗锯齿3.在Photoshop中使用各种工具或虑镜对图像进行锐化处理,可以提高图片的清晰度。简表面的修改器一。MultiRes 多重优化修改器作用:在减少表面数量的同时可以有效的保护物体外形。缺点在于优化后的max文件会比较庞大相关参数:Generate:计算按钮。优化之前必须先进行计算。Ver Percent: 点的数量比例。 可以调节物体的段数二。Optimize 优化修改器作用也是精简表面,虽然精简的效果不如MultiRes。但是不会导致文件变得过大主要参数就是Face Thresh;参数越大精简得越厉害视图加速方法1:在每个视图按D按钮,取消4个视图同时刷新。2: 隐藏暂时不调节的物体,充分利用快捷键、独立工具(Alt+Q等)3:添加各种优化修改器减少表面数量,或者适当的删除物体的历史记录(就是所谓的塌陷)。4:不必把材质中的图片全部显示在视图中。使用Views中的Deactivate all map命令,取消显示贴图。5:使用OpenGL显卡方式进行加速。6:按O(欧)键,可以打开显示降级操作,当我们旋转视图时就会自动降低显示质 量,加快显示速度。3dsmax效果图输出设置:图片的大小(150分辨率):A5,210×148mm: 1240×875A4,297×210mm: 1750×1240A3,420×297mm: 2480×1750A2:594×420mm: 3500×2480A1:894×594mm: 4960×3500A0:1189×841mm:7000×4960输出的过滤方式:Mitchelj-Netavali文件输出格式:Jpg格式-有损压缩、图像文件小但效果不高TGA和Tif格式无压缩、图像质量高、文件相对较大。输出应打开选项:shadow阴影 mappin 贴图 auto reflet/refrace 自动折射anti-aliusin filter 选mitchell-netravali