【小松教你手游开发】【游戏渲染】游戏开发中基于图像的渲染技术总结

摘自 http://gad.qq.com/article/detail/38087#

公告板 Billboarding


我们将根据观察方向来确定多边形面朝方向的技术叫做公告板(Billboarding,也常译作布告板)。而随着观察角度的变化,公告板多边形的方向也会根据需求随之改变。与alpha纹理和动画技术相结合,可以用公告板技术表示很多许多不具有平滑实体表面的现象,比如烟,火,雾,爆炸效果,能量盾(Energy Shields),水蒸气痕迹,以及云朵等。如下文中贴图的,基于公告板渲染出的云朵。

图像处理 Image Processing

颜色校正 Color Correction

色调映射 Tone Mapping

镜头眩光 Lens Flare

镜头眩光(Lens flare)是由于眼睛的晶状体或者相机的透镜直接面对强光所产生的一种现象,由一圈光晕(halo)和纤毛状的光环(ciliary corona)组成

泛光 Bloom

泛光(Bloom)效果,是由于眼睛晶状体和其他部分的散光而产生,在光源附近出现的一种辉光。

景深 Depth of Field

景深(Depth of field,DOF),也叫焦点范围(focus range)或有效焦距范围(effective focus),是指场景中最近和最远的物体之间出现的可接受的清晰图像的距离。

运动模糊 Motion Blur

现实世界中,运动模糊(Motion Blur,或译为动态模糊),是因为相机或者摄影机的快门时间内物体的相对运动产生的。在快门打开到关上的过程中,感光材料因为受到的是物体反射光持续的照射成像。即在曝光的这个微小时间段内,对象依然在画面中移动,感光材料便会记录下这段时间内物体运动的轨迹,产生运动模糊。

如果需要的是摄像机移动时的运动感,可以使用诸如径向模糊(radial blur)之类的固定效果。

屏幕高斯模糊 Gaussian Blur

高斯模糊(Gaussian Blur),也叫高斯平滑,高斯滤波,其通常用它来减少图像噪声以及降低细节层次,常常也被用于对图像进行模糊。

基于MatCap实现适于移动平台的“次时代”车漆Shader

http://gad.qq.com/article/detail/25889

颜色校正 Color Correction


图27 左图是准备进行颜色校正的原图。右图是通过降低亮度,使用卷积纹理(Volume Texture),得到的夜间效果。


图29 原图和经过颜色校正的效果图

色调映射 Tone Mapping

计算机屏幕具有特定的亮度范围,而真实图像具有更巨大的亮度范围。色调映射(Tonemapping),也称为色调复制(tone reproduction),便是将宽范围的照明级别拟合到屏幕有限色域内的过程。色调映射与表示高动态范围的HDR和HDRI密切相关:

* HDR,是High-Dynamic Range(高动态范围)的缩写,可以理解为一个CG的概念,常出现在计算机图形学与电影、摄影领域中。
* HDRI是High-Dynamic Range Image的缩写,即HDR图像,高动态范围图像。
* 而实际过程中,HDR和HDRI两者经常会被混用,都当做高动态范围成像的概念使用,这也是被大众广泛接受的。

本质上来讲,色调映射要解决的问题是进行大幅度的对比度衰减将场景亮度变换到可以显示的范围,同时要保持图像细节与颜色等表现原始场景的重要信息。

图30 经过色调映射得到的高动态范围图像 @新西兰惠灵顿圣保罗教堂

原文地址:http://blog.51cto.com/13638120/2084978

时间: 2024-10-11 18:06:00

【小松教你手游开发】【游戏渲染】游戏开发中基于图像的渲染技术总结的相关文章

【小松教你手游开发】【unity实用技能】角色头部跟随镜头旋转

这个在端游上比较场景,在角色展示的时候,当摄像头在角色身边上下左右旋转时,角色头部跟随镜头旋转.如天涯明月刀等. 这个在手游上比较少见,不过实现也没什么区别. 首先一般情况下,找到模型的头部节点,直接用lookAt指向camera就可以了,不过一般需求不会这么简单. 比如说,超过头部扭动极限,头部需要插值回到原始点:当镜头从外部回到极限内,需要插值回来.这时候lookat就没法使用. 更有情况,头部本身坐标系不在世界坐标轴上, 可能旋转了90多或者输出的prefab就是歪的等等,这些情况都没办法

【小松教你手游开发】【unity实用技能】根据上一个GameObject坐标生成的tips界面

开发游戏,特别是mmo手游的时候经常需要开发的一个需求是,点击某个装备,在它附近的位置生成一个tips界面,介绍装备功能和各种信息. 像上面红色框框里的这个. 这个主要的问题是 根据点击的GameObject对应生成这个详情界面时,详情界面位置需要合理摆放(不能显示不到,不能遮挡等) 基本的思路是, 首先找到GameObject的position, 把手机屏幕大概分成四个象限,知道这个GameObject大概在这个屏幕的哪个象限(左上,左下,右上,右下) 根据象限来判断详情界面应该在GameOb

【小松教你手游开发】【unity系统模块开发】热更

现在的手游项目如果没个热更新迭代根本跟不上, 特别是像我们项目做mmo的更是需要经常改动代码. 而现在的项目一般会选择用lua的方式实现热更新 不过我们项目由于历史原因没有使用,用的是另外一种方案 在项目里的所有GameObject都不挂脚本(NGUI脚本就通过代码的方式挂上),自己写的脚本都不继承Mono并打成dll,然后通过一个启动脚本去打开这些dll. 不过这样就有个问题,ios不能热更... 不管怎么样,先来讲讲这种方案要怎么做. 首先有两部分,一部分是打包,一部分是解包. 而包又分为资

【小松教你手游开发】【unity实用技能】u3d 层次问题总结

首先的首先,NGUI区分前后层次关系是用Depth值.已经跟z轴值无关 首先因为我自己用的是NGUI,所以我的u3d层次问题也就是NGUI的层次问题 先确定UI渲染顺序,Camera>UIPanel>Depth(UIWidget) 这里的意思是,首先确定前后关系的是不同大块之间的Camera的Depth值,根据Depth大小排列,这个决定了每个大块之前的前后关系. 接着根据UIPanel的Depth前后排序,这个是用于每个大块内可能有多个UIPanel分割成多个小块,每个小块间的前后关系. 最

【小松教你手游开发】【系统模块开发】做一个3d旋转菜单

在unity做一个3d旋转菜单,像乱斗西游2的这种: 暂时有两种方法可以实现: 一.当做是2d界面,通过定义几个固定点的坐标.大小.透明度,还有每个点的panel depth大小,把数据存储下来,在手机滑动的过程中计算滑动划过的距离和这个panel大小的比值,乘以两个点之间的距离,获得坐标点移动的距离,通过改变x轴改变位置,同理改变大小和透明度. 这个方法我自己做2d游戏的时候实现过,做起来比较简单,没有什么可拓展性可言,并且会有很多限制,比如拖动过程中很难转变方向.要自己实现运动中的弹性(这里

【小松教你手游开发】【系统模块开发】unity 数据储存到本地为二进制文件(聊天记录本地储存)

unity游戏开发中有很多需要把数据储存到本地,官方有好几个方式可以使用,下面简单介绍一下. 一.Stream::Write,Stream::WriteLine 这个方法是打开数据流就开始写字符串,可以指定长度写,也可以一行一行的写.具体参考http://blog.csdn.net/dingxiaowei2013/article/details/19084859和雨松大神的http://www.xuanyusong.com/archives/1069 这种方法最简单,一行一行的写,一行一行的读,

【小松教你手游开发】【unity实用技能】给每个GameObject的打开关闭加上一个渐变

在游戏开发中,经常会因为直接将GameObject,setActive的方式打开关闭,这种方式效果太过生硬而给它加上一个Tween 可能是AlphaTween或者ScaleTween. 再加上一个PlayTween来做控制. 这样子需要在每个GameObject上加上这几个Component不说,还很不好用 所以结合之前用的一个拓展函数的方法,想到一个非常非常方便的方法 (之前的拓展函数文章:http://blog.csdn.net/chrisfxs/article/details/512218

【小松教你手游开发】【unity系统模块开发】Unity Assetbundle打包笔记

*最近项目更新了Unity5.5.2,顺便更新了项目的ui打包,也更新一下这边的笔记 首先打包分为两部分,一部分是打包成Assetbundle包,一部分是从Assetbundle包解包出来成为可用的资源. 首先说第一部分 打包 所有资源都可以打包,甚至不是资源(一些数据)也可以打包,只要你需要. 打包出来的东西都可以直接用,一个字体,一个Texture,一个Prefab,一个场景,都是一打出来成Assetbundle包就可以直接用,但是为什么大家还是要各自开发自己的打包流程呢? 最重要的原因就是

【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围

在做游戏开发中经常会需要到计算扇形的视野或者是受击范围的时候. 其实这个分为两部分, 第一部分是在扇形距离范围内(也就是不考虑角度,其实是圆形范围内) 第二部分是扇形角度范围内 第一部分很简单,Vector3.Distance(a, b);计算距离 下面讲讲第二部分,扇形角度范围内. 计算怪物是否在你的视野范围内其实可以这么看 Avatar的正方向向量与Avatar到Enemy之间向量的夹角大小是否小于于视线大小的一半. 这样就能判断是否在视线范围内. 所以现在的问题就是这么计算这个夹角 计算的