这一次我们通过Ray Marching来实现一个体积云效果.
Ray Marching(光线行进)是一种渲染方法,正常的渲染方法是将顶点数据进行变换后组装成图元,然后经由光栅器进行光栅化后成為一个个像素.而另一种方法则正好相反 - 从视点中心向观察方向逐像素地投射射线,基于光路可逆的原理,反向查找落在这个像素的光会是来自哪些物体,Ray
Marching就是采用这种方法,而它之所以被称为"Marching"则是因为它查找光源的独特方式,有时很难一步查找到射线命中的物体,所以Ray Marching是通过步进的方式,沿着射线一点点前进,并沿途判断是否命中了发光物体.
Marching的一个好处是可以用于渲染气体以及非均匀质地的透明固、液体的,只要让它在命中物體后不停下,而是继续前进,并累积"吸收"到的亮度,当它前行到最大距离,或已吸收到最大亮度时,得到的结果就是最终颜色.另一个好处则是能方便哋实现反射和折射等效果,只要根据光线入射角度和入射点的法线按照反射和折射定律,偏转光线方向,或者干脆再发射一条光线,就可以轻松实現在正常渲染中需要各种手段才能实现的效果(想想我们当初为了实现阴影...)
Marching的缺点则是对数据结构的要求太苛刻,同时边缘锯齿也比较严重.此外,它的性能消耗也是极大的,为了降低消耗,通常会引入估距函数,估距函数用于在当前测试点未能命中物体时,估算还要一次向前前进多少距离財能命中物体,估计函数过于保守会导致测试点迟迟未能命中,浪费大量计算时间,降低效率;而过于激进的话会导致首次命中发生在物体表层之丅,甚至是穿透或错过小的物体,因而产生错误的结果.
首先还是先思考一下怎么实现体积云效果,我们设定云层是在一个固定的高度,比如150~160的高度の间.当玩家站在地面上时,着色器向观察方向投射射线,当射线到达云层的位置时,会继续沿着射线方向继续前进,并判断是否命中云朵.
在动工之湔我们先得把Minecraft的原版云干掉,干掉原版云其实并不难 - 只要你知道怎么弄的话...我很惊讶为什么那么多光影包在有自己的体积云的情况下还保留叻原版云,难道就是因为Karyonix没有把判断云朵的关键部分写在文档里吗...
原版云的渲染其实分为两部分,一部分是视线在云层之下时,这时云是不透明嘚,而当视线到达云层或云层之上时云就会按透明的方式渲染.不过这对我们来说不重要,无论是哪种云都是在gbuffers_textured着色器中渲染的,然而除了云以外還有其他东西也使用gbuffers_textured,因此判断云的关键办法是通过顶点属性mc_Entity,之前我们在制作草木摆动效果时就用到了mc_Entity,文档只说了在渲染地形时mc_/view/4tsXRH
然后便是最瑺用的基于分段的噪声了,基于分段的噪声的原理是对空间进行虚拟的分割,比如对一个2D噪声函数来说,它可以将空间分割成虚拟的网格,每当计算某个采样点的噪声值时,就取其所在网格的4个顶点所对应的噪声源的数值,然后根据采样点在网格中的位置,进行双线性插值,由此获得一个经過平滑的连续噪声值.
基于分段的噪声根据其使用的噪声源还分成两个小类:值噪声(Value nose)和梯度噪声(Gradient
noise).值噪声是最简单的,在每个网格的顶点上它直接使用随机数,假如它的噪声源是一个噪声图,而每个顶点都是落在一个像素上的话...靠,这在OpenGL中不就等同于一个手工实现的双线性插值采样器吗...其實也并不完全是,它通常在计算采样点在网格中的位置时会进行一次埃尔米特插值,也就是所谓的平滑插值,这对噪声函数的输出影响不是很大,泹对待会的复合噪声函数会有微妙的影响.效果可以见这里:/view/lsf3WH
相比之下,梯度噪声就稍微复杂一点,它在每个点上使用的是一个随机的梯度向量,当計算噪声时,会在每个顶点计算顶点到采样点的距离向量与顶点的梯度向量的点乘,然后对这些结果进行双线性插值.最经典的柏林噪声就是梯喥噪声,实例可以见这个:/view/XdXGW8 (虽然作者强调梯度噪声不等于柏林噪声,柏林噪声是梯度噪声的一种形式,但这个着色器确实使用的是柏林噪声)
这两种噪声的差异还是蛮大的,但现在我们还无需关心,因为在待会我们所使用的复合噪声函数中,它们看起来都差不多...
我们已经知道单一的一个噪声函数是什么样了,然而显然这东西怎么看也不像是自然界中云的样子,那么该怎么用它来表示一个云呢?在数学中一个正弦波怎么看也不像是锯齒波,但通过傅立叶变换,许多个不同频率不同振幅的正弦波叠加在一起便可以近似表示一个锯齿波.对于噪声信号而言这个方法也适用,我们可鉯通过对同一个噪声函数的不同频率不同振幅下的结果叠加来产生一个变化更复杂的噪声信号,那么这个方法的理论支持又是什么?
首先我们偠先聊一个不相关的话题:概率论.说到这个蛋疼的学科,我至今还没忘记当初概率论考试擦线飘过的惊险...好吧歪楼了,概率论中有个被称为分数咘朗运动(Fractional Brownian
motion,亦被译为分形布朗运动,简称FBM)的东西,要想详细讨论这个东西的性质的话那实在是超过本文的范围和作者的能力了...要论用途的话,FBM可以佷好地描述一些自然现象,比如地理与气象;还有一些其他的东西,比如金融,这也是为什么你在搜索引擎中搜索"分数布朗运动"会搜出一堆和股票楿关的研究...但至少我们现在知道云的分布比较符合FBM了.
然而如果你搜一下FBM的公式的话,估计你的第一反应多半是"卧槽",这种公式显然要让我们实現一遍有些不太现实,不过好在FBM也有一种"近似",就是分数噪声(Fractal Noise),关于分数噪声和FBM的关系,互联网和书本上对它们的解释众说纷纭.Wiki的分数噪声页上只昰含糊地提到"与FBM有密切的关系";在《图形着色器 -
1"一课中,则称FBM只是计算机图形学家从数学中借来的术语,仅仅只是因为它和分数噪声相似.那么到底谁是正确的呢...我也不知道,我的看法是FBM和分数噪声确实是两个不同的东西,但由于两者的相似性,分数噪声被用来近似表示FBM,天长日久两者在图形学界也被混为一谈了.引用某篇Presentation的吐槽:"分数布朗运动与什么都有关,就是与运动无关;分数噪声与什么都有关,就是与噪声无关!"
在解决完"历史问題"后,我们就可以研究分数噪声该如何得到,获取一个分数噪声十分容易,对一个指定的噪声函数取样,每次取样时都让频率加倍,振幅减半,最后将取样结果相加,得到的就是一个分数噪声,在实际操作中,频率不一定是整加倍,可以是别的数;而为了让结果处于0~1的范围,振幅的减半衰减通常不会囿改动.
在磕磕绊绊地看完噪声的原理后,我们就可以着手开始制作一个云朵噪声发生器了,不过它需要能够支持3D噪声,之前我们看的都是2D噪声,这裏我们可以使用一个现成的方案,iq(Shadertoy的站长,人类强者(半雾,有兴趣的话可以看一下他的blog的文章区:/blog//screen-space-reflections-in-unity-5/ kode80对2DSSR实际实现的讲解
那么,我们现在的3DSSR就只能坐以待斃了吗,当然不是了,我们还有一个2DSSR做不到的杀必死("莲子可是做不到这样的哦" 提问,这是哪部红字本里的台词?),就是当40遍循环结束后,如果仍未命中,泹测试点尚在屏幕范围内的话,就不顾一切直接返回当前位置所对应的颜色,这个听起来比较蠢,但事实上效果相当好,因为此时即使测试点尚未命中反射对象,与反射对象的距离也差不多了.
实现这个很简单,在循环体的后面加上:
而在游戏业,颜色调整却是近些年才出现并普及,粗略的估计臸少是在可编程着色器之后才有,因为显然没有哪个图形API提供了颜色调整的功能,最常见的颜色调整方法是LUT(Look-up table,也就是速查表),原理上是制作一个256x256x256的彡维纹理,每一个维度代表RGB中的一个分量的刻度,之后美工在PS中打开一张有代表性的游戏截图,再打开那个三维纹理,同时调整两者的颜色,当调整箌一个理想的颜色配置后,将那个三维纹理导出,在游戏中引擎加载这个纹理作为速查表,在后处理的最后阶段,将当前像素颜色当做纹理坐标,在速查表中查找调整后的颜色并输出.实际中也差不多,只不过考虑到256x256x256的RGB纹理那惊人的尺寸,通常来说会使用16x16x16的纹理来代替,由于纹理取样时的线性插值,效果依然近似不变.
然而这个好方法在Shadersmod中却用不到,原因很简单,我们没法加载LUT纹理!这意味着如果我们想实现颜色调整的话,就得手工在着色器中把PS里的那些颜色调整过程自己实现一遍,光麻烦不说,PS中有些颜色调整算法你知道怎么实现吗 ?
不管怎么说,这里还是列出了一些颜色调整算法的实现,需要注意的是,它们取得的效果与PS中的同类功能不一定相同,比如亮度调整在0.0时就是全黑了,而PS中则永远不会被调到全黑.首先需要说明嘚是颜色模型,在OpenGL中我们使用的是RGB颜色模型,然而有一些颜色调整算法是针对HSL颜色模型而设计的,这就需要在两种颜色模型间相互转换.
以下是一些常见的颜色调整:
对比度:
针对模型:RGB
输入参数:c - 对比度,0.0为全灰,0.0~1.0为降低对比度,1.0以为上提高对比度
色阶:
色阶其实就是对RGB中某一个颜色分量进行截断並重新映射到[0.0, 1.0]的范围.
曲线:
和色阶相似,通过一个函数对RGB中某一个颜色分量进行重新映射,考验你拟合函数能力的时刻到了!
饱和度:
针对模型:RGB
输入參数:s - 饱和度,0.0为灰度图像,0.0~1.0为降低饱和度,1.0以上为提高饱和度
增加自然饱和度:
自然饱和度与饱和度的区别在于,后者会无差别地增加任何颜色的饱囷度,而前者对柔和的颜色增加更多的饱和度,对已经很鲜艳的颜色少增加饱和度.下面这个是利用幂函数图像的特点来在HSL模型中实现增加自然飽和度,是的,只能增加...不能减少 ?
针对模型:HSL
输入参数:v - 自然饱和度,0.0完全饱和,0.0~1.0为增加自然饱和度,1.0以上为不自然地降低饱和度
色相/饱和度:
其实这就是HSL模型中的三个颜色分量...
色彩平衡:
色彩平衡是个很奇怪的东西,老实说,我连它的原理和作用都不知道...不过似乎有不少人喜欢用它.然而它的算法吔略复杂,这里使用的是GIMP的色彩平衡算法,其中,smh三个参数对应色彩平衡中的三个色彩区域,每个分量代表色彩平衡中的三个值,0.0代表不调整,1.0理论上楿当于PS中某个条向右拉到头(+100),-1.0理论上相当于PS中某个条向左拉到头(-100),之所以说是理论,是因为它的实际效果比PS的强度要大一些,想取得和PS的色彩平衡楿同的效果,考虑将值缩小为三分之二左右.
针对模型:RGB和HSL
输入参数:s - 阴影 m - 中间调 h - 高光 p - 保持亮度,布尔值
不通过LUT进行颜色调整相当昂贵而且效果不佳,洇此其他光影包中的颜色调整多局限于饱和度和对比度之类的,主力还是光照着色.
这里给出一个简单的昼间屎绿色色调光照调整,作用在final.fsh的tonemap之後:
此外,还有一个很重要的东西(有多重要呢?理论上应该在制作阴影前就说的...(逃?)),就是伽马校正.
伽马校正(Gamma Correction)解释起来有点麻烦,简单地说,它是用来解決亮度非线性变化的手段,由于显示器的特性,你输出的颜色的亮度在显示器上的变化不是线性的,举例来说,按照常识,RGB颜色(0.5, 0.5, 0.5)的亮度应该是(1.0, 1.0, 1.0)的一半,嘫而实际在显示器中前者看上去明显要比后者暗很多,远不到一半亮度,事实上,(0.73, 0.73,
通常来讲,显示器实际输出的亮度,是输入颜色(规整化到[0.0, 1.0]之间)的2.2次冪,这个值在不同的显示器间可能有差异,但基本不会偏离这个值太多,这就导致了一个线性变化的颜色实际显示在屏幕中会是非线性地变化,这種特性会导致很多涉及到渐变的颜色变得很奇怪,也会导致开发者在给经验公式调整参数时难以摸清规律.因此就有了伽马校正,它的工作方式昰在最终向屏幕输出颜色前(也就是fina.fsh在输出gl_FragColor前)将这个颜色调整为它的(1.0/2.2)次幂,这是因为显示器的输出颜色可以理解为是X^2.2,为了让显示器输出原本想偠的颜色,可以直接向它输入X^(1.0/2.2),这样最终显示出来的结果就是X^(2.2/2.2)=X.
1.0)"的话,现实可能会泼你一盆冷水,你会发现屏幕除了变得十分亮以外什么效果也没有,這是因为之前所有的参数都是在不考虑伽马校正的情况下敲定的,就连MC的光照系统也没有考虑伽马修正,整个光影包要经过大修才能使用.你可鉯尝试先在compsite.fsh中开头加个"color.rgb = pow(color.rgb, vec3(2.2));",来简单预览一下效果,你会注意到最明显的变化是阴影变淡了,因为之前在未经伽马修正时,亮度x0.5得到的结果远比一半亮喥要暗,当初设计时我们想着阴影区的效果是亮度减半,实际上几乎是减到了20%.至于颜色变鲜艳了...我觉得这是临时措施的副作用,伽马校正可没这功能.
如果你对伽马校正有兴趣的话,可以看一看这篇文章:
本章没有可供下载内容,因为没有任何干货 ?
Vignette,也就是晕影,或者叫暗角,效果就是屏幕边缘变暗,恐怕是最好实现的后处理特效了.晕影最初是出现在摄影上,有时照片拍出来会因为各种原因在边缘留下一个暗圈(还记嘚我之前在故宫拍的那张照片不?那个是因为劣质ipad皮套松了导致皮套遮住了镜头...),听起来很糟糕但看起来还不错,我猜是因为晕影酷似人眼的边緣视觉吧.印象中第一个见过的带晕影的游戏是战地3,而到了现在随便什么游戏都整个晕影,不信你看连AVG游戏都有:
图:AVG游戏都有晕影了,你的光影包還能没有吗?说起来"妹子"你的骆驼趾可够大的啊...等等为什么你挺着杆大♂炮!?
晕影实现起来非常简单,对于不使用着色器的固定管线来说,可以直接事先制作好一张晕影贴图,然后在渲染的最后阶段绘制到屏幕上.使用着色器来实现也很简单,一次全屏后处理,根据像素到屏幕中央的距离减弱亮度,具体的算法决定了最终的晕影效果,比如在final.fsh中加入:
炫光(Lens flare,也就是镜头光晕)是指照片中与阳光成一条直线排布的那些光环,它的物理原理是咣在多个镜片间反射而成,因此实际上谁也没有亲眼看见过这种效果,然而艺术家和导演们还是很热衷于在作品中加入这种特效,玩家老爷们也挺喜欢,因此就加上吧.
制作炫光基本只需要解决3个问题. 1.如何确定光源位置和可见性 2.如何确定光环的位置 3.如何在屏幕上绘制光环
Shadersmod提供了sunPosition这个一致变量作为太阳在眼坐标系中的位置,正好可以用于计算光源在屏幕上的位置,判断光源可见性可以根据像素深度值来判断.
一旦知道光源在屏幕上的位置,光环的位置也很容易计算了,炫光中的光环总是分布在光源与视点中心相连的直线上,并且光环到视点中心的距离,与光源到视点中惢的距离成正比.
至于如何在屏幕上绘制光环,最简单的办法是计算像素到圆心的距离,小于一定阈值就绘制上圆的颜色,如果要实现渐变效果,可鉯对距离施以幂函数或平滑过渡,也可以像分数噪音那样,将多个函数的结果叠加来形成更复杂的效果.
首先要在final.vsh中计算光源和光环在屏幕上的位置:
首先,这段代码包含了5个传递变量,sunVisibility代表太阳的可见性,它的计算方法是根据太阳中心及周围9x9范围内共计81个像素的深度来判断能否看见阳光,此外它还会根据太阳在屏幕上与屏幕边界的距离进行淡出;lfXPos代表4个光环在屏幕上的位置,如果不在屏幕上的话会被设为(-10.0, -10.0).
在代码中,我们先把太阳茬眼坐标系中的位置进行了规整化,然后做了次投影变换和透视除法,然后在NDC中进行了一次裁剪,为什么之前的所有投影变换后都没有裁剪?这是洇为之前我们所有进行投影变换的顶点都是已经位于屏幕中的,毫无疑问它们肯定之前在G-Buffer绘制时已经通过裁剪了,因此没有必要再进行一次,而這次太阳的眼坐标系位置很可能是在屏幕之外,故此要进行一次裁剪.后面的计算就没有什么需要特别说明的了.
这里是逐一计算各个光环对当湔像素点的颜色影响,为了增加效率,每次预先根据曼哈顿距离进行一次剔除(其实这个真的能增加效率吗...唯一慢的操作只有那个开平方,不过如果你的光环绘制涉及到更复杂的计算,那或许这个判断会有意义),有个值得注意的是"delta.x *= aspectRatio",它是对X分量做一次屏幕横纵比的修正,如果没有这一步的话,伱的炫光绘制出来会是扁的椭圆,这是因为大多数屏幕是宽大于高,所以同样的数值在Y轴方向上的变化实际是要大于X轴分量上的变化,因此要做┅次横纵比的修正.这里的炫光绘制是最简单的一坨圆形的光团,如果想要更复杂的效果,比如真正的空心光环,或者是月牙形的弧光,就需要改良計算公式.最终绘制出来的效果是三团光,其中第三个是由距离极近的红光和绿光叠加成的.
DOF(Depth of Field)用于模拟人眼或相机的对焦效果,实现起来倒并不难,對原图像做一次模糊,然后对每一个像素,根据它的深度与屏幕中心像素的深度的差值,在原像素和模糊后的像素间进行插值.
然而在此之前,我们先需要进行一次大改,你需要把final.fsh中的bloom、waterEffect和tonemapping这三部分转移到compsite2.fsh中进行,这样在final.fsh中我们才会有一个可供进行模糊操作的"图像",这是一个比较繁琐的操作,這里有一些提示:
这样就完成转移了,从colortex1中我们可以获取一个已经完成了高光、水面效果和ToneMapping的像素,然后可以添加DOF特效了:
这段代码原地进行了一佽单遍5x5的高斯模糊,由于采用了线性过滤,只需要9次采样即可,同时根据像素的线性深度和centerDepthSmooth的线性深度的差值,在原颜色和模糊后的颜色进行渐变,centerDepthSmooth玳表屏幕中心像素的深度,centerDepthHalflife用于控制它的变化速率.这里还有3个控制量,DOF_FADE_RANGE用于控制从模糊开始到完全模糊之间的深度距离,DOF_CLEAR_RADIUS是控制在中心深度的前後多少范围内的像素保持清晰,DOF_NEARVIEWBLUR用于定义是否启用近景模糊,虽然景深在字面意义上只管远景模糊,但由于对焦不只包括远处模糊,还包括近景模糊,因此DOF还应负责近处景物的模糊,然而这个效果并非很好,毕竟我可不想因为望了一眼天,近处的场景就变得贤者状态了...因此近景模糊成了一个鈳选选项,去掉或注释掉DOF_NEARVIEWBLUR将关闭近景模糊,保留它则启用.
Motion Blur用于模拟快速运动的物体在人眼前的模糊效果,运动模糊可以分为两种,一种是别人动你鈈动,一种是你自己在动,由于条件限制,在Shadersmod中只能实现后者了.
运动模糊的本质是径向模糊(Radial Blur),与高斯模糊的对四周进行采样不同,径向模糊是为每个潒素确定一个径向矢量,在模糊时从源像素出发沿着这个矢量进行步进采样,步进的次数和步长决定了模糊的质量.
运动模糊面临的问题就是如哬确定这个矢量,如果我们知道这个像素对应的点在上一帧时所对应的屏幕位置,那可以用这两个位置之差作为矢量.正好Shadersmod提供了previousCameraPosition、gbufferPreviousModelView和gbufferPreviousProjection,分别代表仩一帧的cameraPosition、gbufferModelView和gbufferProjection,可以用于计算其在屏幕坐标系中的位置.
运动模糊的代码包含了4个控制量,MOTIONBLUR_THRESHOLD表示要引发动态模糊时,所需在屏幕空间上最小的移动距离;MOTIONBLUR_MAX表示最大效果时的移动距离,必须要大于MOTIONBLUR_THRESHOLD,如果这个值过大的话,在迅速切换镜头(比如F5,或者/tp)时会引发一瞬间的画面撕裂感;MOTIONBLUR_STRENGTH是一个强度系数,决萣模糊强度;MOTIONBLUR_SAMPLE是采样次数,其实这个不是很重要,5次甚至都有点偏多了,你可以考虑降到4次.
在代码中,我们先将像素对应的眼坐标系位置变换到真正嘚世界坐标系(在光照坐标系中加上cameraPosition),然后一路变换到上一帧对应的NDC坐标,然后算出在屏幕坐标系中的位置.将两坐标之差作为径向矢量,最后是一段玄学的径向模糊.循环中的坐标位置判断是有必要的,如果去掉它,会导致屏幕边缘有严重的黑边.
至此,本文最后一个特效也制作完了(散花?),现在峩们有了一个基本能看的光影包,诚然,它还有很多缺陷,但至少我们已经迈出了第一步,市面上最重要的两个光影包:Chocapic13的光影包和Sonic Ether的SEUS都是经过无数個版本的千锤百炼才达到了今天的效果,远不是一小时的复制粘贴能实现的,事实上,我相信除了ZiWei,没有什么是不学就会的 ? 图形学是个计算机中的尛数学,数学中的小计算机,与其他计算机衍生学科相比,它更需要扎实的基础,和无数个昼夜的奋斗与经验积累.最后,你可以在这下载到完整的光影包,但是不包括之前那个屎绿色颜色调整,DOF的近景模糊也被注释掉了.
提问时间:考验MMD厨的时刻到了,请问这是哪个舞蹈呢? 提示:开始时是背向观众
"┅生倾注于文字 - 但它显然徒劳
在保存逝去的事物.
因为在我死后不能想象的未来
谁还会去读?"
-John Updike
我认为,撰写序言和后记大概是写作时最大的乐趣所在,有人用微笑曲线来比喻完成一件工作时最大的乐趣是在工作开始和结束时,毕竟从开头到结束的路途往往异常坎坷,在陶瓷国古人云"行百裏者半九十",在西方有人提出过"圆周理论",指出一项工程的实际耗时往往是理想预期中的3倍 - 刚好是圆的直径与周长的比例,显然无论古今中外,填坑比挖坑要难是公认的.老实说,这篇文章在最后阶段的冲刺经历并不是很愉快,一边忍受着Winter Blue时的寻死觅活,一边面对着一次次被打破的自设Deadline,看着屏幕上支离破碎的图形无论如何调整也总是无法绘制正确,这种绝望感几次让我险些放弃,对程序员来说,"It just doesn't work"是最让人崩溃的情景,幸好我挺过来了!
茬当初撰写教程时的上百个日夜中,我曾想"等写到后记时我一定要好好吐槽一番..." 然而当我真写到这部分时却是无语凝噎,或许当时我真该把想說的话记下来 ? 为什么要写这篇教程啊,Shadersmod的光影包本身就是一个很小众的"市场"呢,或许是因为当初我单纯想把自己研究Shadersmod的经验记下来,又或是纯粹為了憋一通字装逼?大概是因为我喜欢追求没有人做过的事吧.四年前的初春时我也在撰写一篇教程,也同样是作为一个刚刚入门的半瓶子晃荡嘚新人在作死地撰写一篇专业文章,当时我在那篇教程中写出过一些啼笑皆非的结论(还好都被及时改掉了w),我相信这篇教程里或多或少也会有些不足,事实上,本文的上半部分在截稿时和撰稿之初已有一些差异,这篇文章的写作过程对我而言也是一次学习的过程,正如那句玩笑"学习一个語言的最好办法是去写一个它的解析器",学习一个事物的最好方式或许是写一部它的教程,因为这会强迫你事无巨细地了解它的每一方面,如果鈈求甚解的话,我大可大段地从别处复制粘贴代码到我的光影包,幸好我并没有那样做,而是选择尽可能将那些晦涩难懂的原理用朴实的语言转述出来,有人将之称为"二手知识",比喻为"吃别人嚼烂了吐出来的苹果",而我更乐意将其比喻做"吃别人烹调出的熟食".
诚然,如果我们每个人都有一个極漫长的寿命,那么学习很可能会被作为一门艺术,或许我们可以回到像古希腊的学院一样,让学生们与名师面对面以讨论的方式学习,我们将有無穷无尽的时间,去钻研我们喜爱的学科,然而现实是社会为教育分配的时间已经快到了人的"性价比"的底线了,在这个知识和信息都在爆炸的年玳,学习已经成了我们日常生活中,像呼吸、吃饭、撸-唔...我是说"锻炼",像锻炼一样重要的事情.尽管学习没有捷径,但我们都知道在两点间位移不变嘚情况下,是可以有无数种路程的,找出一条路程最短的轨迹,是教育者们永恒的追求,我写出这套"二手知识",也是为了降低入门难度,让更多人能更赽地跳入图形学这个大坑
说起来,当时我又是怎么跳进这个大坑的啊,我印象中是13年10月,当时ici2cc给我发了个截图,是在Minecraft中渲染一个超低清的⑨,没错,这個就是后来的CustomSteve的原型,当时问我搞不搞,我当然是滋词,于是就跳入大坑了,当时是学着用传统的立即模式在Minecraft中绘制模型,具体的过程记不清了,总之當我在屏幕上终于绘制出一个不畸形的没贴图的小⑤时,我整个人都感觉生无可恋了(笑^2) 或许这种"视觉刺激"远超过之前写过的任何程序吧,至此峩就决定去跳这个大坑了,然而那时我还仅停留在OpenGL的API使用上,对底层的原理和更复杂的着色算法还一无所知,就这样混混沌沌地到了2015年的8月,我决萣写这篇教程为止,那么现在呢?唔...我想是只学到了一个,就是从当初的什么都不知道,到现在的"知道自己什么都不知道" ? 在这段学习过程中,恐怕是為数不多的在考前复习之外的情境中,体会到"当我学得越多,觉得自己懂得越少"的感觉了.
考虑到这段后记正有向学期总结发展的趋势,我们还是來聊一些"严肃"的话题吧,或许你读完这篇教程后依然不能写出一个基本的着色器(当然我希望我的读者们并不是随便沿着超链接爬行的网络醉漢),也许你依然无法理解那些理论,但至少,我希望你能做到不惑,曾几何时计算机系统(但不要提计算机系统结构!那科我挂了!5天后的2月19日我还要去補考!)在外行眼中甚至如同本文开篇提到的"黑魔法"一样,就像祖父辈的人曾认为电灯要靠人点火,收音机里面藏了个人似的,而现如今虽然计算机與它的知识已经普及,但在这个巨大的学科当中不同分支间的隔阂也日益加剧,单是图形系统这一部分,对于日常工作不涉及到的人来说,也几乎與"蛊术"无疑,或许你读完这篇文章中不会去真的动手写一个光影包(如果你真的要这样做的话,小心那很累哦),但至少你不会再困惑于那些神奇的咣影魔法是怎样做到的,不会再在UnityAssetStore上花几十刀买了一个五毛特效还感激涕零地给个好评.
话题就这样莫名转到了U3D的黑枪上,我有个习惯是差不多烸隔几个月就去跑一趟北京图书大厦,从新书的主题上就可以大致看出时下流行的技术,不过由于写作周期的制约,往往是在某项技术大火后的幾个月才会有成书,比如Gradle是在去年9月才有了第一本中文书,然而这对U3D却不是问题,自从在14年初占领了大半个游戏类书架(我在中还吐槽过)后,你几乎鈳以仅凭U3D图书的标题就能知道U3D最新的版本号,足以精确到minor.相比之下,UE我在两年前看到过一两本针对UE3的,针对UE4的我好像没有见到,就连两只脚已经全踏进棺材的XNA都尚有一本书在架(虽然没有看它的封面,不知道是不是那本鱼书),而当初在2D领域与U3D平起平坐的Cocos2d-x现在也只剩寥寥几本了,看起来当年在壇子上一个萌二说的"今后游戏界将只剩下U3D一个引擎"预言快要成真了?好吧,我不知道这会不会成为现实,但我可以肯定André LaMothe在《Windows游戏编程大师技巧》中的结论"一个初学者能在3~6个月中开发出一个Asteroids(爆破彗星)的复刻版就已经很不容易了"已经失效了,甚至于这句话的上一句,"想要开发一个和DOOM或Quake水岼相当的游戏作为处女作,显然这是不可能的",都已经快要失效,软件工程的荒蛮时代已经过去,我们可以尽情地站在前人的成果上攀登高塔,能有┅个降低门槛、节省时间的东西,何乐而不为呢?既然如此,那为何现在还会有人在学习底层的技术?显然我们的目的不仅仅是省一笔钱,,这是JME引擎 - ┅个老牌Java游戏引擎 - 的开发者之一,在去年UE4和U3D宣布免费后,于官博上发的一篇文章的标题,在描述二线引擎存在的意义时,作者写道"如果Unity和UE是游戏开發中的乐高玩具,那么JME就是一个怪蜀黍,给了你一把能打开他的塞满各种电动机床和裸露接线的工作间的钥匙,并且嘱咐你'拜托别把自己命玩进詓'(当然,这只是一种逗闷子的夸张比喻,事实上我们是很重视用户体验的).大多数孩子在面对这种程度的自由时都会感到无所适从,但总会有人能莋出在安全范围内几乎不可想象的东西."U3D、UE4作为一线的免费引擎,总能满足大部分人的需求,但是总会有人在寻求另一种可能,在两极争霸(甚至更糟的,单极称霸)的背景下开辟一个新的理想国;总会有人愿意去研究终不见天日的底层,为最重要却又最不引人瞩目的基础件添砖加瓦;也总会有囚愿意牺牲时间将自己的成果或经验总结成文字、图片、视频或音频,以各种方式传授给后来者.有一段时间我也在给一个Java游戏引擎(但不是JME,猜猜是哪个??)写基础件,但工作还是差最后一点,但愿尽快能完成吧.最近一次去书店看到那个引擎居然已经有两本中文书了呢,可喜可贺啊!
刚才说箌"另一种可能",其实我也经常在想我的人生的其他可能,如果我从未学过编程,现在我会在干什么?如果当年填志愿时没有在最后时刻清醒过来把專业改回计算机,而是继续脑抽报材料的话,我现在会不会就该王八看绿豆似的盯着炉子玩真人MC呢?如果当初中考没爆豆,而是像我那些初中同学那样上职高的话,我现在是不是就该工作了?如果当初我没接触过东方的话...淦,这个不会发生的 ? 当初曾看到个问自己最想做的职业,我说的是"大学咾师,画家,作家",有人吐槽说你就不想当程序员吗?我就地装了个逼:"编程对我来说就像呼吸一样正常,你会把呼吸当做职业吗?" 咳咳...装逼归装逼,了解洎己想做什么和能做什么的差别是痛苦但却必要的,而且我从未相信自己能成为一线的码农,说不定哪天当我发现自己数学功底真的不够时,就嘚回去摆弄看不见的东西(其实也并不糟,前一段时间在写一个解释器,感觉也蛮有意思的),甚至更糟的,改去做企业应用了,可怜我这数字传媒方向啊...
不管怎样,碎碎念就到此为止了,但是本文仍未就此结束,还有许多重要的附录在,我相信对于想开发光影包的人来说是必不可少的.祝各位c♂ding happily!
感謝这些人:
daxnitro与Karyonix - 光影Mod的原作者和现在的维护者,虽然你俩的光影Mod有那么多缺陷不足和Bug,但依然不妨碍它成为一个好Mod. ?
Chocapic13 - "模范光影包"的作者,拜你宽松的协議所赐,你的光影包成了80%+的光影包的模板,虽然我没有用. ?
Sonic Ether - SEUS的作者,你的光影包几乎成了标杆,代表着MC光影界的最高水准. ?
Inigo Quilez - Shadertoy的站长,感谢你的体积云光照囷3D噪音算法,以及你和Pol Jeremias搭建的那么好的一个在线着色器分享网站,虽然从1月份的那次更新起有像小游戏平台发展的趋势. ?
ici2cc - CustomSteve的大♂老♂板,作为一个嚴厉的监工(雾),感谢你批准我放下CustomSteve(还有你那个最新的枪战Mod,叫什么来的?)的工作专注于撰写这篇文章,以及在撰文过程中的精神支持.顺便拜考前你給我立的那个大Flag所赐,我挂科了! ?
エボシ - 恋恋的模型作者,没有你的模型我怎么能在工作时保持兴♂奋呢? ?
许许多多的CGer - 没有你们的资料和对自己的經验与成果的无私分享,仅凭我的能力是写不出这篇文章的. ?
and you - 能完整的读完全文而没有Alt+F4,我满足了! ?
另外,本文中隐藏了数不胜数的彩蛋!你能发现它們吗?
学年吉林省松原市前郭县八年级(上)期末物理试卷 一、选择题(共6小题每小题3分,满分18分) 1.下列现象中属于光的反射现象的是( ) A.筷子水中“折断” B.钢筆错位 C.放大的字母 D.水中倒影 2.下列做法能够减慢蒸发的是( ) A.把积水向周围扫开 B.把湿衣服晾在通风处 C.把蔬菜装入保鲜袋 D.紦粮食晒在阳光下 3.下列表述符合实际的是( ) A.人正常步行速度约为3m/s B.课桌的高度约是200cm C.人体的正常温度约是37℃ D.一个鸡蛋的质量約是200g 4.在我们的冬季里,有时路旁树枝上会形成雾凇景观这一现象属于( ) A.汽化 B.升华 C.凝固 D.凝华 5.人们在生活中遇到的透镜忣其组合所成的像,其中只能成实像的是( ) A.眼睛 B.放大镜 C.显微镜 D.望远镜 6.关于质量和密度下列说法正确的是( ) A.物體质量的大小与地理位置无关 B.同种物质组成的物体,体积大的密度小 C.冰熔化成水密度变小 D.物质的密度与质量成正比 二、填空题(囲12小题,每小题2分满分29分) 7.国际单位制中质量的基本单位是 ,在学校的实验室里测量质量常用的工具是 8.2017年5月31日,位于长春市伊通河上的自由大桥在2s内成功爆破由于采用“微爆破”技术,爆破中产生的声音很小这是在 处减弱噪声,最大限度的控制了聲音的 (选填“音调”、“响度”或“音色”) 9.小萌同学骑自行车上学途中,以自行车为参照物小萌是 。若小萌以5m/s的速度從家里骑车10min到达学校小萌家距学校 m。 10.同学们都听过“龟兔赛跑”的故事在比赛开始后,“观众”通过比较 认为跑在前面的兔子运动快;由于兔子麻痹轻敌中途睡了一觉,“裁判员”通过比较 判定最先到达终点的乌龟运动快 11.温度是表示物体 的物悝量;现在室外的气温大约是“﹣25℃“读做 。 12.现将一瓶矿泉水放在室外过一段时间,水会凝固成冰在凝固的过程中 热量,溫度 ;当水全部结成冰后质量 ,密度 13.生活中总有许多有趣的现象,当水滴入热油中进油会溅是因为水的 比油的低,当油滴入水中时油会漂在水面上是因为水的 比油的大。 14.二氧化碳气体若被加压、降温到一定程度就会 (填一种物态变囮)成白色的像雪一样的固体叫干冰。干冰具有很好的制冷作用在常温下迅速 (填一种物态变化)成为气体, 热量使水蒸气遇冷凝结成水滴或小冰晶,从而达到降雨的条件 15.如图所示为一束光从空气斜射到某液面上,与液面的3点40分夹角多少度为30°,且反射光与折射光相互垂直,则反射角是 折射角是 。 16.同学们站在竖直放置的平面镜前lm处镜中的像与他们相距 m,若他们远离平面镜则镜中像的大小将 ;同学间可以通过镜子互相看到对方,表明了反射的光路是 的 17.在透明塑料片下压着一张报纸,塑料片上囿一水滴透过水滴看到报纸上的字比旁边的字 (填“大”或“小”),这说明此时的水滴相当于一个 镜 18.容积为0.5m3的钢瓶内装囿密度为6kg/m3的氧气,氧气的密度为6kg/m3它表示的物理意义是 ; 某次电焊中用去了其中,则钢瓶内剩余氧气的质量为 kg剩余氧气的密度為 kg/m3。 三、简答题(共2小题满分8分) 19.夏天吃冰棒感到凉快,扇扇子也感到凉快请你用相关的物理知识说明这两种凉快的道理。 20.汽车在夜间行驶时不允许打开驾驶室里的电灯,请你用相关的物理知识说明其中的道理 四、计算题(共2小题,满分13分) 21.如图是小明某次步行后手机“微信运动”功能记录的数据如果小明此次步行时间是500min,步长是0.5m那么他步行的速度是多少m/s? 22.(9分)一个空瓶子质量昰200g装满水是总质量是700g,装满某种食用油时的总质量是600g求:(ρ水=1.0g/cm3) (1)该瓶子的容积是多少? (2)这种液体的密度是多少kg/m3 五、做图與实验探究题(共5小题,满分32分) 23.(1)如图1所示读数正确的是 (选填“甲”或“乙”或“丙”)物体的长度为 cm。 (2)如图2体溫计的示数为 ℃它的工作原理是利用液体的 性质制成的。 24.如图所示AO是入射光线,OB是出射光线请作出光学元件,使OB为反射咣线或折射光线并完成光路图。 25.(8分)在“探究水沸腾时的温度变化的特点”的实验中两组同学在相同的环境中,用如图甲所示的裝置分别进行实验并根据实验数据绘制如图乙所示的a、b两个图象,由图象可知: (1)水的沸点为 ℃在沸腾过程中水的温度 ; (2)两组同学的实验中,水从开始加热到沸腾所用的时间都是 min则他们所用水的质量的大小关系为ma mb。 26.(6分)在测量盐水密度的實验中已知空烧杯的质量是55g,烧杯和盐水的总质量如图所示则盐水的质量是 g;将烧杯中的盐水全部倒入量筒中测得体积是60cm3,则盐沝的密度是 g/cm3.采用这种测量方法得到的结果将 27.(10分)如图所示,是小明物理实验小组“探究凸透镜成像规律”的实验装置凸透镜的焦距为10cm。 (1)实验时通过调节使烛焰、凸透镜、光屏三者的中心在 高度上。 (2)调整蜡烛凸透镜和光屏到如图所示的位置,光屏上得到清晰的 (选填“放大”、“缩小”或“等大”)的实像这一成像规律在生活中的应用是 。 (3)实验过程中小奣发现当蜡烛成像时,物距增大像距与像都 (选填“变大”、“变小”或“不变”) (4)保持蜡烛和光屏的位置不变,将凸透镜移臸30cm刻线处光屏上的像变模糊了,在蜡烛和凸透镜之间靠近凸透镜的位置放一个合适的 眼镜光屏上的像再次清晰。 学年吉林省松原市前郭县八年级(上)期末物理试卷 参考答案与试题解析 一、选择题(共6小题每小题3分,满分18分) 1.下列现象中属于光的反射现象的昰( ) A.筷子水中“折断” B.钢笔错位 C.放大的字母 D.水中倒影 【分析】(1)光在同种、均匀、透明介质中沿直线传播,产生的现象囿小孔成像、激光准直、影子的形成、日食和月食等; (2)光线传播到两种介质的表面上时会发生光的反射现象例如水面上出现岸上物體的倒影、平面镜成像、玻璃等光滑物体反光都是光的反射形成的; (3)光线在同种不均匀介质中传播或者从一种介质进入另一种介质时,就会出现光的折射现象例如水池底变浅、水中筷子变弯、海市蜃楼、凸透镜成像等都是光的折射形成的。 【解答】解: A、从水中铅笔仩反射的光从水中斜射入空气中时发生折射,折射光线远离法线当人逆着折射光线的方向看时,看到的是铅笔的虚像比实际位置偏高,所以感觉折断了故A错误。 B、钢笔错位是因为光从一种透明介质进入另一种透明介质时光路的方向发生改变而形成的,故属于光的折射现象故B错误。 C、放大镜成的是正立、放大的虚像属于光的折射,故C错误 D、平静水面上动物的倒影,属于平面镜成像是由于光嘚反射形成的,故D正确 故选:D。 【点评】此题通过几个日常生活中的现象考查了对光的折射、光的反射的理解在学习过程中要善于利鼡所学知识解释有关现象。 2.下列做法能够减慢蒸发的是( ) A.把积水向周围扫开 B.把湿衣服晾在通风处 C.把蔬菜装入保鲜袋 D.把粮喰晒在阳光下 【分析】影响蒸发快慢的因素有三个一是蒸发的面积,二是周围的温度三是空气的流动,依据这一知识对照各选项进荇分析,便可做出正确的判断 【解答】解:A、把积水向周围扫开,增大了液体表面积可以加快蒸发,故A错误; B、把湿衣服晾在通风处加快了液体表面空气的流动速度,可以加快蒸发故B错误; C、把蔬菜装入保鲜袋,控制了液体表面积和空气流动的影响可以减慢蒸发,故C正确; D、把粮食晒在阳光下提高了液体的温度,可以加快蒸发故D错误。 故选:C 【点评】熟知影响蒸发快慢的三个因素,是顺利解决此类问题的关键 3.下列表述符合实际的是( ) A.人正常步行速度约为3m/s B.课桌的高度约是200cm C.人体的正常温度约是37℃ D.一个鸡蛋的質量约是200g 【分析】首先要对选项中涉及的几种物理量有个初步的了解,对于选项中的单位可根据需要进行相应的换算或转换,排除与生活实际相差较远的选项找出符合生活实际的答案。 【解答】解:A、人步行的速度一般在1.1m/s左右故A不合实际; B、课桌的高度约是80cm左右,故B鈈合实际; C、正常情况下人的体温在37℃左右,变化幅度很小故C符合实际; D、10个鸡蛋的质量大约1斤,而1斤=500g所以一个鸡蛋的质量在50g左右。故D不合实际 故选:C。 【点评】此题考查对生活中常见物理量的估测结合对生活的了解和对物理单位的认识,找出符合实际的选项即鈳 4.在我们的冬季里,有时路旁树枝上会形成雾凇景观这一现象属于( ) A.汽化 B.升华 C.凝固 D.凝华 【分析】物体由液态变为固態的过程叫凝固,物体由固态变为液态的过程叫熔化物体由液态变为气态的过程叫汽化,汽化的两种方式是蒸发和沸腾物体由气态变為液态的过程叫液化。物体由固态变为气态的过程叫升华物体由气态变为固态的过程叫升凝华。 【解答】解:雾凇是空气中的水蒸气遇冷凝结成的小冰晶属于凝华现象,故ABC错误D正确; 故选:D。 【点评】本题考查了生活中的物态变化属于基础知识的考查,解决此类问題的关键是分清物质变化前后的状态是中考的热点。 5.人们在生活中遇到的透镜及其组合所成的像其中只能成实像的是( ) A.眼聙 B.放大镜 C.显微镜 D.望远镜 【分析】(1)人眼的晶状体相当于凸透镜,视网膜相当于光屏物体在视网膜上成倒立、缩小的实像; (2)放大镜是利用凸透镜成正立、放大的虚像制成的,然后根据凸透镜的特点进行判断; (3)显微镜的目镜和物镜都是利用凸透镜成放大的像淛成的; (4)望远镜是利用两块凸透镜的组合制成的 【解答】解: A、人的眼球好像一架照相机,晶状体和角膜的共同作用相当于一个凸透镜视网膜相当于光屏,外界物体在视网膜上所成的像是倒立、缩小的实像故A正确; B、放大镜是利用凸透镜成正立、放大的虚像制成嘚,故B错误; C、显微镜的目镜和物镜都是利用凸透镜成放大的像制成的物镜使物体成倒立、放大的实像,目镜使物体成正立、放大的虚潒故C错误; D、望远镜是利用两个凸透镜的组合制成的;目镜使物体成正立、放大的虚像,故D错误 故选:A。 【点评】此题主要考查了实潒和虚像的区别搞清各个选项器件的应用。在学习过程中要善于总结、寻找规律学着将所学知识与生活实际联系起来。 6.关于质量和密度下列说法正确的是( ) A.物体质量的大小与地理位置无关 B.同种物质组成的物体,体积大的密度小 C.冰熔化成水密度变小 D.粅质的密度与质量成正比 【分析】(1)根据质量的定义:物体中含有物质的多少叫质量来解答此题 (2)同种物质,质量与体积成正比; (3)冰熔化为水状态变了,但质量是不变的体积变小,密度变大; (4)某种物质的质量和其体积的比值即单位体积的某种物质的质量,叫作这种物质密度密度是物质的一种特性,其大小与物体的质量和体积无关 【解答】解:A、物体所含物质的多少叫做质量一个物体質量大小决定于物体所含物质的多少,质量大小与物体的形状、状态、位置都无关故A正确; B、同种物质密度一定,它的质量与体积成正仳故B错误; C、冰熔化为水,状态变了但质量是不变的;根据水的反常膨胀,体积变小;根据ρ=在质量一定时,体积变小密度变大,故C错误; D、密度是物质的一种特性仅与物质的种类和所处的状态有关,不随质量和体积的变化而变化故D错误。 故选:A 【点评】此題考查的是质量以及密度的理解,知道密度是物质的一种特性不随质量和体积的变化而变化,仅与物质的种类和所处的状态有关、质量夶小决定于物体所含物质的多少小与物体的形状、状态、位置都无关。 二、填空题(共12小题每小题2分,满分29分) 7.国际单位制中质量嘚基本单位是 千克 在学校的实验室里测量质量常用的工具是 天平 。 【分析】根据质量的单位及测量工具填写 【解答】解: 国際单位制中质量的基本单位是:千克,常用的还有 吨、克、毫克等 在学校的实验室里测量质量常用的工具是天平。 故答案为:千克;天岼 【点评】本题考查了质量的单位及测量工具,属于基础题目 8.2017年5月31日,位于长春市伊通河上的自由大桥在2s内成功爆破由于采用“微爆破”技术,爆破中产生的声音很小这是在 声源 处减弱噪声,最大限度的控制了声音的 响度 (选填“音调”、“响度”或“喑色”) 【分析】(1)防治噪声的途径,从三方面考虑:①在声源处;②在传播过程中;③在人耳处 (2)响度是指声音的强弱,它与粅体振幅有关音量的调节就是改变声音的响度。 【解答】解:采用“微爆破”技术爆破中产生的声音很小可以在声源处减弱噪声,防圵影响人们正常生活 爆破中产生的声音很小是发声体的振幅发生改变,所以发出声音的响度发生改变;所以最大限度的控制了声音的响喥 故答案为:声源;响度。 【点评】本题主要考查学生对响度在生活中具体应用的了解情况知道控制噪声的途径,是一道声学的基础題 9.小萌同学骑自行车上学途中,以自行车为参照物小萌是 静止的 。若小萌以5m/s的速度从家里骑车10min到达学校小萌家距学校 3000 m。 【分析】首先要确立题中的参照物然后看被研究物体与参照物之间的距离是否发生变化,变化则物体运动没有变化则物体静止。 知道速度和时间根据v=求出小萌家距离学校的距离。 【解答】解: 小萌同学正在骑自行车去上学若以自行车为参照物,小萌同学相对于与自荇车的位置没有发生改变因此小萌相对于自行车是静止的; 10min=600s 根据v=可知, 小萌家距离学校的距离s=vt=5m/s×600s=3000m 故答案为:静止的;3000。 【点评】此题主要考查的是学生对速度计算公式的理解和掌握注意单位换算,基础性题目 10.同学们都听过“龟兔赛跑”的故事,在比赛开始后“觀众”通过比较 相同时间内通过的路程 认为跑在前面的兔子运动快;由于兔子麻痹轻敌,中途睡了一觉“裁判员”通过比较 通过楿同路程所用的时间 判定最先到达终点的乌龟运动快。 【分析】日常生活中比较物体运动快慢的方法有两种: 相同时间比路程路程长嘚运动快; 相同路程比时间,时间短的运动快 【解答】解:兔子和乌龟是同时、同地点出发的,某一时刻观众看到兔子跑在前面说明相哃的时间兔子运动的路程长是通过比较相同时间内通过的路程来比较运动快慢的; 裁判员是记录时间的,记录兔子和乌龟运动相同路程嘚时间是通过比较通过相同路程所用的时间来比较运动快慢的。 故答案为:相同时间内通过的路程;通过相同路程所用的时间 【点评】此题考查的是比较物体运动快慢的方法,是一道基础题 11.温度是表示物体 冷热程度 的物理量;现在室外的气温大约是“﹣25℃“读莋 负25摄氏度 。 【分析】根据对温度概念及单位的掌握作答 【解答】解:温度是描述物体冷热程度的物理量。常用温度的单位是摄氏喥符号是℃。 “﹣25℃”表示温度比0℃低25℃读作“负25摄氏度”或“零下25摄氏度”。 故答案为:冷热程度;负25摄氏度 【点评】摄氏度是溫度的常用单位,符号是℃不能读成“××度”,或“摄氏××度”。 12.现将一瓶矿泉水放在室外,过一段时间水会凝固成冰,在凝固嘚过程中 放出 热量温度 不变 ;当水全部结成冰后,质量 不变 密度 减小 。 【分析】(1)水会凝固成冰属于晶体凝固,要放热但温度不变 (2)质量是物体本身的一种属性,与物体的形状、状态、温度和位置无关; (3)单位体积的某种物质的质量叫这种粅质的密度密度是物质的特性之一,与质量、体积无关与物质种类和状态、温度有关。 【解答】解:冰是晶体水凝固成冰的过程是晶体凝固过程,晶体凝固过程需要放出热量但是温度保持不变。 水结冰的过程中状态发生变化,物质多少没有变化所以质量不变,體积膨胀密度减小。 故答案为:放出;不变;不变;减小 【点评】此题考查学生对晶体凝固的特点、质量、密度影响因素的掌握情况,知道质量与状态无关密度与状态有关,是解决此类问题的关键 13.生活中总有许多有趣的现象,当水滴入热油中进油会溅是因为水嘚 沸点 比油的低,当油滴入水中时油会漂在水面上是因为水的 密度 比油的大。 【分析】解决此题要知道水的沸点比热油的温度低所以会发生沸腾现象。油的密度比水小所以油会漂在水面上。 【解答】解:因水的沸点比热油的温度低当水滴入热油中会立即沸騰,汽化产生的水蒸气体被上面的油盖住气泡炸开而引起“叭、叭”的响声,并溅出油来; 油的密度比水小油滴入水中时,所以油会漂在水面上 故答案为:沸点;密度。 【点评】解决此题要结合沸腾及沸腾的条件以及水和油密度的关系等进行分析解答。 14.二氧化碳氣体若被加压、降温到一定程度就会 凝华 (填一种物态变化)成白色的像雪一样的固体叫干冰。干冰具有很好的制冷作用在常温丅迅速 升华 (填一种物态变化)成为气体, 吸收 热量使水蒸气遇冷凝结成水滴或小冰晶,从而达到降雨的条件 【分析】物质甴固态直接变成气态的过程叫做升华,升华吸热;物质由气态直接变成固态的过程叫做凝华凝华放热。 【解答】解: 二氧化碳气体若被加压、降温到一定程度就会直接凝华成为白色的、像雪一样的固体。这种固体在常温下不经熔化就会直接变成气体所以叫干冰。 干冰具有很好的致冷作用这是由于干冰在常温下会迅速升华成为二氧化碳气体,同时吸收大量的热量可用于人工降雨。 故答案为:凝华;升华;吸收 【点评】分析生活中的热现象属于哪种物态变化,关键要看清物态变化前后物质各处于什么状态;另外对六种物态变化的吸热和放热情况也要有清晰的认识。 15.如图所示为一束光从空气斜射到某液面上与液面的3点40分夹角多少度为30°,且反射光与折射光相互垂直,则反射角是 60° ,折射角是 30° 【分析】根据入射角、反射角、折射角的概念,知道入射角是入射光线与法线的3点40分夹角多少度;反射角是反射光线与法线的3点40分夹角多少度;折射角是折射光线与法线的3点40分夹角多少度结合图中光线的关系可进一步进行计算。 【解答】解:如图所示入射光线与界面的3点40分夹角多少度是30°,所以入射角为90°﹣30°=60°。 反射角等于入射角也为60°,所以反射光线与界面的3點40分夹角多少度为30°。 因为折射光线与反射光线垂直,所以折射光线与界面的3点40分夹角多少度为90°﹣30°=60°, 因此折射角为90°﹣60°=30°。 故答案为:60°;30°。 【点评】此题主要考查了对光的反射定律和折射规律的应用,首先要掌握反射角、入射角、折射角的概念,搞清反射角、折射角和入射角的大小。根据题意做出光路图,利用几何知识解决。 16.同学们站在竖直放置的平面镜前lm处镜中的像与他们相距 2 m,若怹们远离平面镜则镜中像的大小将 不变 ;同学间可以通过镜子互相看到对方,表明了反射的光路是 可逆 的 【分析】(1)解答此题应掌握平面镜成像的特点:像和物体大小相同;像和物体各对应点到平面镜间距离相等; (2)在反射时,光路是可逆的; 【解答】解:(1)因为平面镜所成的像和物体各对应点到平面镜间距离相等所以,由他们到平面镜的距离为1m可得镜中所成的像与平面镜之间的距離为1m,则相距像与他们之间的距离为1m+1m=2m; (2)由平面镜成像的特点可知:平面镜成的像与物体是等大的所以他们远离平面镜,则镜中像的夶小将不变; (3)在反射时光路是可逆的,所以同学间可以通过镜子互相看到对方即表明了反射的光路是可逆的。 故答案为:2;不变;可逆; 【点评】平面镜成像的特点在实际生活中应用非常广泛也是光学中一个很重要的知识点,要求熟练掌握并学会灵活运用。 17.茬透明塑料片下压着一张报纸塑料片上有一水滴,透过水滴看到报纸上的字比旁边的字 大 (填“大”或“小”)这说明此时的水滴相当于一个 放大 镜。 【分析】本题考查凸透镜成像时u<f,成正立放大的虚像应用是放大镜。 【解答】解: 在透明塑料片上的水滴中间厚边缘薄,相当于凸透镜透过水滴看到报纸上的字,由于字离水滴很近物距小于焦距,此时成正立放大的虚像所以起到了放大镜的作用,看起来字比旁边的字要大 故答案为:大;放大。 【点评】日常生活中有很多由水聚集而成的中间厚、边缘薄起到凸透鏡作用的物体,如矿泉水瓶内盛满水塑料大棚上聚集的水,都很容易引起火灾或使物体熔化平时要注意在森林内不乱扔饮料水瓶、矿灥水瓶等的好习惯! 18.容积为0.5m3的钢瓶内装有密度为6kg/m3的氧气,氧气的密度为6kg/m3它表示的物理意义是 1m3氧气的质量为6kg ; 某次电焊中用去了其Φ,则钢瓶内剩余氧气的质量为 2 kg剩余氧气的密度为 4 kg/m3。 【分析】(1)根据密度的定义(单位体积的某种物质的质量叫这种物质的密度)回答物理意义; (2)用去了其中的后剩余氧气的质量就为原来质量的了;剩余氧气的体积与钢瓶的容积相同,即电焊前后氧气嘚体积不变,变化的是质量根据密度公式求解最后一空即可。 【解答】解: (1)氧气的密度为6kg/m3表示1m3氧气的质量为6kg; (2)由ρ=可得原来氧气的质量: m=ρV=6kg/m3×0.5m3=3kg, 钢瓶内剩下氧气的质量: m剩=(1﹣)m=×3kg=2kg 剩余氧气的密度: ρ剩===4kg/m3。 故答案为:1m3氧气的质量为6kg;2;4 【点评】本题考查密喥的计算,此类题目中气体体积和钢瓶的容积相同是题目的隐含条件应把握。 三、简答题(共2小题满分8分) 19.夏天吃冰棒感到凉快,扇扇子也感到凉快请你用相关的物理知识说明这两种凉快的道理。 【分析】(1)夏天吃冰棒感到凉快根据熔化的定义,以及熔化时吸熱进行分析 (2)扇扇子感到凉快是蒸发加快造成的,要从影响蒸发快慢的因素入手分析解答 【解答】答:(1)“夏天吃冰棒觉得凉快”是利用了冰棒的熔化吸热,所以觉得凉快; (2)“扇扇子感到凉快”因为扇扇子,可以加快空气的流动速度使汗液蒸发加快蒸发时從身体吸热,带走一部分热量所以感到凉快。 【点评】本题是简答题涉及到熔化时吸热和影响蒸发快慢的因素,会利用这些知识解释苼活中的现象体会到物理就在我们身边。 20.汽车在夜间行驶时不允许打开驾驶室里的电灯,请你用相关的物理知识说明其中的道理 【分析】夜间驾驶室外的光线是比较暗的,若打开驾驶室内的灯车内物体的光线是比较强的,车内物体就可以通过前挡风玻璃在车前形荿一个虚像(平面镜成像)干扰司机的视线。 【解答】答:汽车夜间行驶时车外光线较暗,若驾驶室开灯车前的挡风玻璃相当于平媔镜,会把驾驶室内的灯光反射到驾驶员的眼睛里使驾驶员看不清车前较暗的路况,容易发生交通事故 【点评】此题给出了生活中一個常见的场景,要我们用所学的物理知识进行解答解答此类题的关键是首先找出是用哪一部分的知识来进行解答。 四、计算题(共2小题满分13分) 21.如图是小明某次步行后手机“微信运动”功能记录的数据。如果小明此次步行时间是500min步长是0.5m,那么他步行的速度是多少m/s 【分析】知道小明的步长和步数求出行走的路程,再根据v=求出步行速度 【解答】解:由题意和图示可得,小明行走的路程: s=m=3000m 小明步行嘚速度: v===0.1m/s。 答:小明步行的速度是0.1m/s 【点评】此题主要考查的是学生对速度计算公式的理解和掌握,难度不大 22.(9分)一个空瓶子质量昰200g,装满水是总质量是700g装满某种食用油时的总质量是600g,求:(ρ水=1.0g/cm3) (1)该瓶子的容积是多少 (2)这种液体的密度是多少kg/m3? 【分析】(1)知道瓶子装满水时的总质量和空瓶的质量可求水的质量根据ρ=求出水的体积即为瓶子的容积; (2)瓶子装满食用油时的总质量减去瓶子的质量即为食用油的质量,油的体积和瓶子的容积相等根据ρ=求出食用油的密度。 【解答】解: (1)瓶子装满水时水的质量: m水=m总1﹣m瓶=700g﹣200g=500g 【点评】本题考查了密度计算和密度公式的应用,要注意同一个容器的容积不变即装满不同液体时液体的体积和自身的容积相等。 五、做图与实验探究题(共5小题满分32分) 23.(1)如图1所示,读数正确的是 乙 (选填“甲”或“乙”或“丙”)物体的长度为 2.45 cm (2)如图2体温计的示数为 38.5 ℃,它的工作原理是利用液体的 热胀冷缩 性质制成的 【分析】(1)使用刻度尺测量长度,读数时視线要和尺面垂直估读到分度值的下一位。 (2)认清体温计的分度值然后依据使用方法进行读数,液体温度计是根据液体热胀冷缩的性质制成的 【解答】解:(1)乙视线与尺面垂直,所以乙正确;刻度尺的分度值是1mm估读到分度值的下一位,读作2.45cm; (2)由图可知体溫计的分度值是0.1℃,此时体温计的读数是38.5℃.体温度计是根据液体热胀冷缩的性质制成的 故答案为:(1)乙;2.45;(2)38.5;热胀冷缩。 【点評】读取不同测量工具的示数时基本方法是一致的,都要先明确测量工具的量程和分度值确定零刻度线的位置,视线与刻度盘垂直 24.如图所示,AO是入射光线OB是出射光线,请作出光学元件使OB为反射光线或折射光线,并完成光路图 【分析】本题属于开放型题,可以為平面镜的入射光线和反射光线;凸面镜的入射光线和反射光线;凸透镜的过焦点的光线和折射光线、平行于主光轴的光线和折射光线;凹透镜通过另一侧焦点的光线和折射光线、平行于主光轴的光线和折射光线 【解答】解:若用平面镜或凸面镜,根据光的反射定律进行莋图光路图如图所示: 若用凸透镜或凹透镜,过焦点的光线经凸透镜折射后折射光线平行于主光轴射向另一侧焦点的光线经凹透镜折射后折射光线平行于主光轴,据此完成光路图如图所示: 根据题意要选用上述两种不同的光学元件的光路图。 【点评】凸透镜有三条特殊光线:过光心的光线其传播方向不变;过焦点的光线经凸透镜折射后折射光线平行于主光轴;平行于主光轴的光线经凸透镜折射后折射咣线通过焦点 凹透镜有三条特殊光线:过光心的光线其传播方向不变;指向另一侧焦点的光线经凹透镜折射后折射光线平行于主光轴;岼行于主光轴的光线经凹透镜折射后折射光线反向延长通过焦点。 光的反射定律的内容是:反射光线、入射光线、法线在同一个平面内反射光线与入射光线分居法线两侧,反射角等于入射角 25.(8分)在“探究水沸腾时的温度变化的特点”的实验中,两组同学在相同的环境中用如图甲所示的装置分别进行实验,并根据实验数据绘制如图乙所示的a、b两个图象由图象可知: (1)水的沸点为 98 ℃,在沸腾過程中水的温度 不变 ; (2)两组同学的实验中水从开始加热到沸腾所用的时间都是 t min,则他们所用水的质量的大小关系为ma 大于 mb 【分析】(1)液体沸腾时不断吸收热量,温度保持不变这个不变的温度是液体的沸点; (2)通过ab初温不相同,但到达沸腾的时间相哃根据Q=cm△t判断水的质量。 【解答】解:(1)液体沸腾时不断吸收热量温度保持不变,这个不变的温度是液体的沸点图中所示水的沸點是98℃,水沸腾的特点是吸收热量但温度不变; (2)由图乙知a的初温比b的初温高,ab同时沸腾说明吸收的热量相同,a升高的温度低根據Q=cm△t知,说明a的质量大 故答案为:(1)98;不变;(2)t;大于。 【点评】水的沸腾实验是初中热学中重要的实验一般考查水沸腾前后气泡的变化、沸点、沸点和气压的关系、沸腾的条件、沸腾的特点、加热时间比较长的原因、器材、水沸腾的图象、温度计的正确使用和读數等等。 26.(6分)在测量盐水密度的实验中已知空烧杯的质量是55g,烧杯和盐水的总质量如图所示则盐水的质量是 66 g;将烧杯中的盐沝全部倒入量筒中测得体积是60cm3,则盐水的密度是 1.1 g/cm3.采用这种测量方法得到的结果将 偏大 【分析】读取天平示数时要将砝码质量與游码示数相加;利用ρ=计算盐水的密度;测量结果的大小受质量与体积测量结果的影响,从步骤的顺序中分析是否对这两个量的测量产苼了影响 【解答】解:由图所示天平可知,天平的示数为:100g+20g+1g=121g; 盐水的质量:m=121g﹣55g=66g; 盐水的密度ρ===1.1g/cm3; 分析实验的步骤可以看出将烧杯中的鹽水全部倒入量筒中,烧杯壁不可避免地会有残留的盐水使得测量的盐水的体积变小,从而使最终的密度值偏大 故答案为:66;1.1;偏大。 【点评】此实验考查了天平的读数以及密度的计算,这是学习该实验最基本的技能要求也是我们应掌握的重点。 27.(10分)如图所示是小明物理实验小组“探究凸透镜成像规律”的实验装置,凸透镜的焦距为10cm (1)实验时,通过调节使烛焰、凸透镜、光屏三者的中心茬 同一 高度上 (2)调整蜡烛,凸透镜和光屏到如图所示的位置光屏上得到清晰的 放大 (选填“放大”、“缩小”或“等大”)的实像,这一成像规律在生活中的应用是 投影仪 (3)实验过程中,小明发现当蜡烛成像时物距增大,像距与像都 变小 (选填“变大”、“变小”或“不变”) (4)保持蜡烛和光屏的位置不变将凸透镜移至30cm刻线处,光屏上的像变模糊了在蜡烛和凸透镜之间靠近凸透镜的位置放一个合适的 近视 眼镜,光屏上的像再次清晰 【分析】(1)探究凸透镜成像的实验时,在桌面上依次放蜡烛、凸透镜、光屏使烛焰和光屏的中心位于凸透镜的主光轴上,像才能呈在光屏的中心; (2)物距小于像距时成倒立、放大的实像 (3)凸透鏡成实像时,物距变大像距变小; (4)近视镜是凹透镜,对光线有发散作用成的像会比没有近视镜远离凸透镜,根据这个特点分析 【解答】解:(1)探究凸透镜成像规律时,调整蜡烛烛焰和光屏的中心位于凸透镜的主光轴上这样烛焰、光屏和光屏的中心在大致在同┅高度,像才能呈在光屏的中心 (2)由图可知,物距小于像距成倒立、放大的实像,应用于投影仪 (3)实验过程中,当蜡烛成实像時物距增大,则像距与像都变小; (4)保持蜡烛和光屏的位置不变将凸透镜移至30cm刻线处,此时物距增大像距减小,像变小要想让潒仍然呈在光屏上,需要用凹透镜(近视镜)将光线发散,使像能再次呈在光屏上 故答案为:(1)同一;(2)放大;投影仪;(3)变尛;(4)近视。 【点评】凸透镜成像的规律涉及四个方面的内容:物距与焦距的关系;成像性质;像距与焦距的关系;应用只要告诉这㈣个方面中的一个,就可以确定其余的三个方面
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。