CryEngine3中光照的美术提示

概述

在传统的二维美术资源中(如精灵与背景绘制),美术人员可以对最后的效果有很直接的控制。结果是可以交互的调整效果而不用管将来资源被应用到关卡中的什么地方它都是一样的。资源内容是独立于周围的照明条件。如今,观察者看到的是被渲染引擎中的光照模型影响的效果,美术人员只能通过灯光、材质、纹理创建间接控制最终的观察效果。在动态模拟的需求下是很难实现最终需求的效果的。这就是为了要了解引擎中的技术特性才能帮助美术人员获得技术外的更好的效果。

Normal Maps

理想情况下,不需要在GPU下通过BumpMap的去实现NormalMap。即使是最小的细节也可以通过几何建模获得。然而,目前性能,显存和细节的三角形数仍然是一个大问题。NormalMap不用修改表面。他们只会影响Shading.使光照和阴影动态的结合。NormalMap可以存储为不同功能层次(如10厘米..0.1毫米),但它会工作的更好在细节比3D模型更小的时候。NormalMaps可以像其他纹理一样做MipMap操作,如果色彩平均的话不正确的表面细节可以被忽略。例如一个NormalMap的像素点和临近的上一个点和下一个点在下一个层级的MipMap中合并成一个平滑的像素点。好的美术人员可以通过避免高频率细节来减少这种效果。使用一些例如Noise或纹理的细节度的细节也可以帮助隐藏压缩但来的影响获得高质量的压缩效果。NormalMap的效果在高光或反射下的影响下是最明显的。任何一些小的不同都会被放大。

细节不好的NormalMap(左边),好的灰度高度图(中间),最终的结果的NormalMap(右边)

UnWrapping与MipMap

当展开一个模型,只适用UV mapping来解决对MipMap方面是不够的。Unwrapping应该也要对低层的Mips有好的效果,下面的例子显示了一个在小Mips时由于错误的Normal导致的黑色边缘痕迹。简单的解决办法是件建立一个更平均的背景色,这对切线空间下的NormalMap是很容易的。最正确的解决办法是在Unwraping时给定一些纹理元素边界使边界边缘扩大(PolyBump下SRF到TIF的转换)或者至少在Photoshop下修复此问题。在这个例子的图片的第一层Mip是好的,但第二层Mip已经有了一个错误的阴影纹理元素。

切线空间

下面的纹理对于测试一个网格的切线空间是否是好的是非常有帮助的(资源和Shader代码是否有效),他们可以在Shaders/EngineAssets/Production下被找到。

UV.dds(上)与它被作为DiffuseMap被应用到Mesh上(下)

下面的纹理有助于揭示那里被应用了镜像,并显示了纹理空间的极限旋转。

TangentReference_ddn.dds(上)和它作为BumpMap被应用到Mesh上(下)

这个切线参考空间下的NormalMap的数据代表了一个被45度角截断的金字塔形状。并且有一个与他同类型的更小的金字塔形状在它上边。这个纹理可以被分配给纹理的BumpMap贴图通道。随着Tiling(使用DiffuseMap下的 Tiling)的使用它很容易检查到问题。

切线参考空间可以被用来检测是否NormalMap被贴到所有的面上,此测试的意义是通过降低场景整体照明(例如通过time of day下的设置选择晚上)并且将一个点光源法制到几何体的附近,金字塔体的所有面是否连贯。

良好的Unwrapping应尽量减少纹理的剪切,剪切意味着UV矢量之间的夹角不是90度。然而即使最好的美术设置也不能完全避免接缝问题,因此建议是替换隐藏的接缝或者模型不重的区域。这点可以由美术人员在Unwarpping的时候去控制。

从高模物体提取NormalMap

这些信息对你的接缝问题会有帮助

纹理镜像带来接缝(左边)纹理镜像没有接缝(右边)

检查一下你的高模物体:看看是否有同样的问题

你是否知从一面去计算了NormalMap?合并两边时是否没有使用同样的平滑

检查你的低模物体:

你是否为低模物体同样计算了Normap?是否在合并两边时没有使用同样的平滑,你的低模物体是否与高模物体是否真正的对应。例如:如果他们稍有偏差可能会造成一个接缝。

权值的调整

为了控制最终像素的颜色,你需要考虑在渲染管线中什么位置去影响它。这里可能有许多可能去调整一个场景并且这个调整可能影响其他场景。如(观察方向,Time of Day,眼睛的适应层级)。这不同与一个制作电影时在最后的图像上去检查。比方说,我们想改变一些灰色的混凝土颜色,因为它发黄了一些。通过材质调整可以很快的将黄色减少,但是这个材质可能会被应用到其他地方或者某些人需要调整灯光源来获得更灰的效果。一个好的美术人员首先会去检查纹理,这个想法是否纹理有不被灯光影响的东西。此外还建议所有纹理都有近似的亮度,以便于一个纹理在切换材质时不需要调整。另外一方面,纹理的压缩质量最好有亮度纹理与暗色材质之间的更精确的中间色计算作为结果(就是说压缩纹理最好要保留中间色)。亮度通过tone Mapper(只在HDR中使用)和眼睛适应度(当前的HDR参数,并且可以被调整)来影响。然而这些应该小心,只有程序员才能理解这些调整所带来的影响。最后在后处理过程(如 color grading)还可以再此调整。为了获得最好的调整应关掉后处理效果,然后把调整材质分别在夜晚,白天,雾效环境等不同灯光条件下进行。

自然户外的光照

在一个共同的日光条件下一班创建一个明亮的泛黄的太阳光颜色,明亮的蓝色天空色(=ambient)和一个有角度的太阳光方向用来得到比较好的阴影。当使用Time of day功能时,建议不要把太阳设置在最高的位置,这可以通过在Terrain Lighting的对话框里(北极,赤道,南极)设置一些特殊角度来避免。通过一些旋转来设置也是件好事,这样阴影不会与世界的方向一致,会使一些建筑看起来更好,认为这些建筑在真实情况下往往与世界方向也是不一致的。

来自月球阴影

一天中时间的变化特征,太阳的位置和其他属性的动态改变都依赖于一天的时间。在晚上月亮可能是唯一的主光源,当太阳降到地平线以下,影子系统会自动的使用月亮的位置。这个系统自动的由一个状态褪变成其他状态,如果观察者特别的关注,他可能会注意到短暂的阴影缺失。这是因为我们想避免太阳和月亮同时计算阴影淡出。这个过程是很短的,几乎观察不到,可以通过游戏设计来隐藏这个过度。

全局光照

间接光照是灯光照射到一些物体后并且反弹,并且被反射表面着色,然后影响纹理或材质的颜色。越黑的表面越少反射光线。一个好的表面有明亮的米黄色。血色的效果是被认为表现最鲜明色彩的最好颜色。高复杂度的纹理应该被避免,因为他很难让人眼觉察到它的全局照明的变化。

输出设备颜色

不同的现实设备(CRT显示器,液晶,电视,投影仪,…)会有不同的输入方式但是采用同样的输入信号。他们的锐度、分辨率(缩放质量)、延迟、颜色、色彩范围是不同的。更多的区别在使用的连接、电缆、显卡(X360,PS3游戏机,PC)和驱动程序设置。此外观察的环境(窗户的光线反射、白天和晚上)都会影响颜色。

为了限制这些问题最好的是提供一个固定的房间光照条件下定义安装程序(没有窗户,一盏开关的灯)。每种类型的显示器都能够迅速的查询相同的环境。设置不应该被改变,并且要经常的对设置进行验证。

有一个良好的做法,随着TVs的发展,如果有重要的内容深色的颜色应该被避免。因为某些黑暗颜色的现实看起来都是一样的,例如大多数液晶的裁剪值小于12/255,差的一些液晶显示器这个值更是在24/255,通过为图像添加精细度(例如加入噪点)和desaturating操作,尽管图像认为是黑暗的,但可能获得更好的能见度。

重要的特性

许多功能可以被调整以便对结果不产生影响(例如黑暗的光线,黑暗的环境色)。通常一个差的性能始终是一个大问题,并且一些昂贵的功能使用上应该有个良好的度。相反,这样的功能应该被关闭,因为可以为其他功能节省下一些资源。如果一个产品的可扩展性和统一表现被认为是一个问题,可能要是场景在已有的一些特殊设置中去关闭一些功能效果。如果功能被调到下降到去隐藏一些物体,可能会带来更多的问题去解决。这样可能会带来延迟更多的时间会被浪费。

作者:无花无酒
出处:http://www.cnblogs.com/WanaX/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

转载于:https://www.cnblogs.com/wanax/archive/2009/12/15/1624540.html

[翻译]CryEngine3中光照的美术提示相关推荐

  1. [翻译]CryEngine3中裁剪剔除解释

    CryEngine3中裁剪剔除解释 概述 在3D渲染方面早期的裁剪主要是描述了各类物体(Objects ,drawcalls,Triangles和 Pixels)被剔除,不会显示到最终图像的.在渲染管 ...

  2. [翻译]CryEngine3中的Water Shader

    Water Shader Water Shader用来创建海洋 1.       主要属性 1). 没有必要为Water Shaders设置Diffuse和Specular Maps,但需要一张Bum ...

  3. 你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ?

    你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ? 长沙戴维营教育将为你解开这个巨大的谜团大BUG! http://www.ubuntucollege.cn/course/29/ ...

  4. pstools中如何绕过协议提示

    pstools中如何绕过协议提示框 在命令提示符下加入 /accepteula 即可绕过要接受那个讨厌的同意协议框. 例如:psexec /accepteula 执行完毕后即可像过去一样正常在cmd模 ...

  5. c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法

    c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法 时间:2017-05-09 12:32:06阅读:234评论 ...

  6. SQLSERVER中如何忽略索引提示

    原文:SQLSERVER中如何忽略索引提示 SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 SELECT id,name f ...

  7. c语言启动程序句柄无效,电脑中玩英雄联盟提示“句柄无效”是怎么回事

    电脑中玩英雄联盟提示"句柄无效"是怎么回事?一位用户反馈自己在玩英雄联盟游戏时,突然遇到警告音提示,将游戏进行最小化后,看到桌面上不停的出现提示"句柄无效",感 ...

  8. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146

    场景 在Eclipse中安装ERMaster时提示: No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v201807 ...

  9. Ubuntu设置中修改密码,提示长度太短或太简单【终极解决办法】

    Ubuntu设置中修改密码,提示长度太短或太简单[终极解决办法] 需要root权限才能解决: 方法1: (1)sudo su 切换到root用户 (2)再 passwd <用户名> 方法2 ...

最新文章

  1. 加入新e时代建站网后,我可以做什么
  2. python os 获取当前路径的绝对路径的上层目录_os 模块常用函数
  3. 如何让LINUX程序运行在多CPU?
  4. linux中的定时,linux中的定时任务
  5. 为什么总说做产品经理的门槛低?
  6. 【Python】sort 和 sorted 的用法区别
  7. adnroid开发环境的搭建
  8. Android Kotlin 协程async
  9. POJ - 3258 River Hopscotch(二分水题)
  10. python数据科学指南是什么_Python数据科学实践 | Spyder入门
  11. 【代码模板】不存在的NOIP2016
  12. ZeroMQ API(一) 总序
  13. 给大家介绍一款相亲交友小程序
  14. wincc如何实现web发布,及具体方法
  15. css实现边框阴影效果的方法(含兼容)
  16. as常用固定搭配_常用的有以下固定搭配
  17. OpenGL基础渲染
  18. 实战iOS应用从32位升级到64位
  19. Android 轻松连接 Usb Device —— UsbConnector
  20. 学前教育计算机课程内容,学前教育专业《计算机基础教学大纲》

热门文章

  1. 能够快速赚到钱的,一般就三类人
  2. 年轻人创业可以选择的3个方向
  3. 1000个网络摄像头如何组网?
  4. 算法--帕斯卡三角(杨辉三角)JS写法
  5. 运算符重载为类的成员函数
  6. php debug 打印变量_PHP_Debug显示所有变量
  7. xposed 主动调用方法_操作方法:主动容量管理
  8. azure云数据库_Azure SQL数据库地理复制
  9. sql server 开源_开源工具SQL Server安全注意事项
  10. python 自动化测试