图像处理

真实感渲染之Tone Mapping

Rendering in Computer Graphic水太深,慢慢学习ING… 好的效果是最有说服力的: 以下内容转载自网络,Just search it: Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。人的眼睛也是相同的原理,这就是为什么当我们从一个明亮的环境突然到一个黑暗的环境时,可以从什么都看不见到慢慢可以适应周围的亮度,所不同的是人眼是通过瞳孔来调节亮度域的。 而这个问题同样存在在计算机图形上,为了让图像更真实的显示在显示器上,同样需要Tone Mapping来辅助。 整个Tone Mapping的过程就是首先要根据当前的场景推算出场景的平均亮度,再根据这个平均亮度选取一个合适的亮度域,再将整个场景映射到这个亮度域得到正确的结果。其中最重要的几个参数: Middle grey:整个场景的平均灰度,关系到场景所应处在亮度域。 Key:场景的Key将决定整个场景的亮度倾向,倾向偏亮亦或是偏暗。 首先我们需要做的是计算出整个场景的平均亮度,有很多种计算平均亮度的方法,目前常用的的是使用log-average亮度来作为场景的平均亮度,通过下面的公式可以计算得到: 其中Lw(x,y)是像素点x,y的亮度,N是场景内的像素数,δ是一个很小的数用来应对像素点纯黑的情况。 上面的公式用来映射亮度域,α即是前面所讲的Key值,用来控制场景的亮度倾向,一般来说,会使用几个特定的值,0.18是一个适中的Key,0.36或者0.72相对偏亮,0.09甚至0.045则是偏暗。完成映射的场景为了满足计算机能显示的范围还要将亮度范围再映射到[0,1]区间,可以通过下面的公式简单的得到[0,1]区间的亮度。 不过这样得到的结果并不总是令人满意的,所以一般扩展为如下面的公式,公式中的参数Lwhite用来控制场景中的曝光,凡是亮度超过Lwhite的像素都会被置为纯白。如果Lwhite的值非常大,则这个参数在公式中将不起任何作用,如果非常小则场景将变为几乎全白。Ld即为我们所要的映射后的x,y像素点的亮度值。 Tone Mapping一般作为HDR算法中的一部分存在,在使用中会灵活很多,但基本的原理都是相同的。

柔和材质SoftShader (Maya节点)

看料理鼠王的动作预览时,感觉他们的画面很柔和,没有死黑,暗部细节很自然,不像环境光那样平,而且光源很统一,没有错乱的明暗交界线,下午,实现了一下,3delight的shaderdl出了点问题不能编译rsl了,于是继续用Maya节点搞定… 原理 原理很简单,简单说下吧,说多了有被众神笑话的危险。 普通的Lambert是根据Shader表面法线和光线的点积计算亮度,结果小于0时截取到0, C=clamp(0,1,(L dot N)) 所谓的SoftShader就是以能显示更多的细节为目的,以失去写实度为代价,稍微改进了下,将点积的结果[-1,1]转换到了[0,1],这样原本小于0被截取的细节重新归一化后就成为了0~0.5之间的值,而原本0~1的亮部压缩到了0.5~1. C=(L dot N)*.5+.5 实现 以下是Maya的实现节点网络: 说明 主要路线为灯光方向向量和法线向量点乘,输入到ramp的v坐标,从而调节ramp的亮度分布可以任意调节shader的颜色。 黄色区域使用相机的矩阵把camera space的法线转化为world space。 蓝色区域为取得灯光的阴影,调节亮度后输入到ramp的color gain来形成阴影。 里面一个locator,受灯光旋转约束,用来取得方向向量。 对比 左为默认lambert,暗部死黑 中为普通lambert,调亮ambient,虽然暗部变亮,但毫无细节 右为软软的SoftShader,很好的利用了0~1的范围 加Bump后更明显: 同样是一盏灯,只有右图的暗部能看到细节。 测试 上图开启阴影,Maya Software渲染,高抗锯齿,时间七八秒,场景只有1平行光,但效果不错,有点全局光的味道。

图像LUT

显示 查找表(Look-Up-Table)简称为LUT,LUT LUT 本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。 LUT(Look-Up Table)实际上就是一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。很多PC系列卡具有8/10/12/16甚到32位的LUT,具体在LUT里进行什么样的变换是由软件来定义的。 LUT:Local User Terminal 本地用户终端(通信用语) 自从桌面出版走到计算机上,显示器成为印前流程中重要的设备之一。从扫描、数码摄影、相片修改、排版等工序中,也可找到显示器的存在。但往往很多同业却忽略了显示器的一环,但求有影像,不理会画面的颜色是否正确。知否一个颜色准确(或比较准确)的显示器可用作SoftProofing(需另加印刷的ICCProfile),帮助员工提高产品的色彩质素,也可替公司节省成本。幸好近年色彩管理渐渐流行,显示器调校也开始被正视。

让你变成ps高手

1.复制图层,混合模式为滤色, 2.涂层2蒙板反向擦出眼睛 3.盖印(alt+ctrl+shift+E) 4.通道混合气,选中单色,红色+54,绿色+54,蓝色+32 6.混合模式-正叠 7.对盖印层调整,图像-调整-暗影/高光-暗影:50,50,144 高光:0,50,30 中间调:20,0 0.01,0.01 8.再次盖印 9.用图章擦去右腮的阳光 10.用减淡工具-范围为高光,强度50%,擦出眼球反光,只擦眼黑, 11.再次盖印,滤镜-其他-高反差,参数80 12.改高反差那一层模式为柔光,加强对比, 13.用自己喜欢的方法锐化 14.长时间少色相饱和的红色,或别的微调试试 1、选择素材图。 2、创建新画布,背景填充黑色,并将人物素材拖到画布中,使用橡皮擦工具将脸部之外的部分擦除。 3、创建新透明画布(20 x 20px),将前景色设为白色,使用1px的铅笔工具对画布左侧和下侧描边。 4、编辑 >> 变换 >> 变形,按下图调整网格层节点。 5、将图层不透明度设为20%。双击网格层打开图层样式窗口,选择外发光,混合模式为“颜色减淡”,不透明度100%,颜色为白色,扩展0,大小5。 6、创建新图层,使用钢笔工具沿网格选出若干方块,并用黑色填充。 7、按住Ctrl 键并点击上述黑色方块层获得选区,选择人像层,剪切并粘贴(粘贴后的图层命名为“碎片”),并通过自由变换(Ctrl + T)将其缩小一点后移动到如下位置。 8、选择碎片层,按住 Alt 键,并同时点击键盘向右方向键(点9次),得到类似立体效果。此时看到图层面板中出现10个碎片层,将除了顶层外的其他碎片层合并,并将合并后的图层命名为“侧边”。双击侧边层,打开图层样式窗口,选择渐变叠加,将不透明度设为80%,角度180,使用#000000 到 #D58761渐变,其他属性取默认值。 9、利用画笔工具为侧边添加一些纹理效果。 10、重复执行步骤 6-步骤 9,得到如下效果。 11、将所有的黑色方块层合并,双击打开图层样式窗口,选择斜面与浮雕,样式为“内斜面”,深度“75%”,大小5px,软化0px,角度0,高度50。高光模式为“滤色”,高光颜色#DCA57E,不透明度100%。 阴影模式“正片叠底”,阴影颜色#000000,不透明度75%。 12、在碎片层下方创建新图层,使用烟雾笔刷添加烟雾效果。选择碎片层,使用黑色柔角笔刷描绘画布右侧,得到如下渐隐效果。 13、在人物层上方创建新图层,再次使用钢笔工具随意选出若干方块,并用黑色填充。将图层混合模式设为“柔光”。 14、操作与步骤 13相同,只是填充颜色换成白色。 15、选择人物层,滤镜 >> 模糊 >> 表面模糊,半径5px,阀值15。在所有图层上方创建调整图层,图层 >> 创建调整图层 >> 色阶,属性设为10,1.25,244。 16、为了得到酷酷的感觉,可以在胳膊上添加条形码纹身。 1.新建灰色涂层,用曲线调整亮度,152,124 2.抠出眼睛和嘴,做个强调, 3.降低整体饱和度,饱和度-56 4.用颜色叠加给整体颜色倾向, 5.隐藏色相和颜色叠加两层,,打开通道面板,复制R通道, 6.新建图层粘贴,并用滤色模式调整透明度 1.复制图层,新建通道混合调整图层,灰色通道,红色+64%,绿色+2%,蓝色+10%,单色 2.新建纯色混合图层,选择575046颜色,混合模式为颜色, 3.新建曲线调整图层,①-输入68,输出32,②-输入114,输出68,③-输入208,输出197, 4.新建一纯色图层,选择443B25颜色,混合模式为颜色,按住Alt单击蒙板, 5.Ctrl+D恢复默认的背景颜色,Ctrl+Delete给蒙版填充黑色的背景色, 6.改变画面,中高光与暗部过渡部分的色调,以丰富画面的色彩,用画笔在蒙板 插出需要上色的部分,300像素,不透明度10%,流量100% 7.

室外地形技术概览

1.高度图 1.高度图代表了地形网格上每个顶点的高度值。 2.地形实时生成,所以会有一张高度图。 3.高度图级别:一个字节0-255级别,两个字节0-65535级别。为了节省资源,不同场景采用不同的级别。 4.地形网格顶点的法线可以通过周边顶点采样计算,也可以采用斜坡算法(即采用相邻四个顶点的高度及算法的k值计算当前顶点法线。K值需要手工调整,以达到较好的明暗效果。) 5.大家注意到了,高度图只纪录Z值,这样的地形是不能调整xy值做出象山这样的地形。不过目前我也没看到可以支持调整xy值的网游或编辑器。 2. 地形瓷砖 单位编辑块。一个大的地形是由无数个瓷砖组成的。高度图及材质最终都是应用到地形瓷砖上。因为硬件的限制,单个提交的地形Patch顶点数不能超过65535。我们的设计是一个Patch=33*33个顶点,顶点距为1米,当然顶点距也可以是2米但地形就不细腻了。 3.地形材质 1.纹理混合 一般做法采用多张贴图+1张混合贴图,用混合贴图的rgba四个通道依次混合。这是目前网游比较通用的做法。魔兽是最多5张(4张地形纹理(a为高光通道)+1张混合纹理(使用rgb通道,a通道用于标示阴影)。 地形也可以支持高光,只要在纹理Alpha通道上加入高光信息再混合即可。只是对美术要求比较高。像魔兽世界里的藤条路、石头路等都是使用高光之后才逼真了许多。 建议不要使用NormalMap,因为地形会占大部分的显示区域,对PS的压力太大渲染效率会明显降低。 2.美术制作地形贴图时,必须是无缝的。 3.地形自阴影 4.地形静态物体阴影。 5.不仅仅是对应图形上的“材质”概念,还包含地形其他属性。如每层Surface对应的声音属性、自动出现的植被,角色在该地形上行走时是否留下脚印等。 通过上面地形材质需实现的效果可知,固定管线是满足不了需求的,需要自己编写多个相对于的PS/VS。 第1、3、4点找时间做专题介绍。 4. 地形LOD 简单的说LOD在需要的时候使用较多的多边形,而在不需要的时候使用较少的多边形。 ROAM:实时最优适配网格算法。 VDPM:基于观察点的渐进网格。 Geomipmap:将地形分成N块,然后每块都有几个不同的lod级别的顶点索引,渲染时根据距离进行lod选择。要注意避免产生裂缝。 我们目前实现的就是GeoMipMap+游戏编程精粹2《使用联锁分片简化地形》算法,这也是Fracry采用的算法。顶点索引预先计算好,运行时根据地形Patch离相交的距离调整LOD,但相邻Patch之间的LOD级别相差不会超过1。 地形Patch最好采用三角形带,不要用三角形列表。这样会有个明显的好处就是降低了索引缓冲所占用的内存,速度上也会有所提升。 5. 地表装饰物 这是个很大的话题,等有了更深入的了解实现再来探讨。 6. 参考资料: 1.Focus.On.3D.Terrain.Programming 这是做地形必看的一本书,基本上覆盖了室外地形相关技术。 2.游戏编程精粹2《使用联锁分片简化地形》 3.魔兽世界地形Shader。用MyWarCraftStudio打开WOW的misc.mpq包,shader / pixel / 目录下以”terrain”打头的bls文件就是地形渲染使用的shader,带有”_s”后缀的是带高光的渲染,否则就是不带高光的。 4.http://www.cognigraph.com/ROAM_homepage/ 5.Farcry SandBox 6.战地1942编辑器