4.8 阴影

阴影的实现方式有很多种,消耗和效果各异。

4.8.1 贴图阴影

贴图的方式最简单,做法是制作一张阴影纹理,放到物体脚下(下图),跟随物体一起运动。

贴图阴影渲染非常简单,只需要两个三角面,适用于低端机型。如果地面是起伏不平的,贴图会被地面遮挡,可以将阴影贴图用贴花技术紧贴地面。但贴花依然有可能跟其它动态物体发生异常遮挡。

4.8.2 Projector(投射阴影)

Projector技术是预先指定光源位置和截头体(Frustum),然后算出物体在其它物体的投影。(下图)

它可以将物体投影到任意平面上,但跟贴图阴影一样不能表达被投影物体的轮廓。适用于中等画质效果。

4.8.3 Shadow Map(阴影图)

阴影图技术是将物体放入灯光空间(上图)渲染,得到灯光空间的深度图(也称阴影图),然后在正常渲染时只要让某个片元在灯光空间的深度与阴影图做比较,就可判断出该片元是否处在阴影之中(下图)。

Shadow Map技术可以渲染物体在任意平面的投影,渲染的效果最接近真实世界(下图),但性能消耗会高很多,它会增加Draw Calls,增加显存占用。通常适用于高端机型或重要角色。

4.8.4 阴影的分级策略

ShadowMap效果最好,但最耗性能,而贴图方式刚好相反。这就要根据项目具体情况做出分级策略,针对不同画质不同重要程度的物体采用不同的阴影渲染方式。下表是游戏Z的分级策略。

游戏开发54课 阴影相关推荐

  1. 游戏开发43课 移动游戏性能优化2

    2. 资源优化 病从口入,资源好比是入口,它们若出现问题,会引发一连串性能问题.相反,资源若是优化得好,后面所有章节的性能都可受益.这也是把资源优化的章节提到最前的原因. 2.1 纹理优化 纹理优化的 ...

  2. JavaFX战旗类游戏开发 第二课 游戏地图绘制

    在上一节课中,我们对即将要完成的战旗Demo有了一个大概的了解,本节课当中,我们将会学习绘制游戏地图. 自从在JavaFX 2.2中增加了Canvas相关的功能,我们就可以使用Canvas来实现游戏绘 ...

  3. JavaFX战旗类游戏开发 第一课 概述

    用JavaFX开发的地图编辑器已经可以正式使用了.也写了JavaFX读取地图的库,准备抽空实现U3D的地图读取,然后再进行游戏开发. 虽然在我的JavaFX游戏开发库内已经实现了TMX地图的读取,但是 ...

  4. 游戏开发第一课:数字华容道

    项目准备 任意版本的VS 或者 VC++ 安装easyx图形库 项目演示 项目目标 使用C语言开发自定义"控件" 游戏引擎的开发和设计 算法在游戏开发中的设计 项目实现 创建项目 ...

  5. C语言游戏开发第一课:数字华容道

    项目背景 1. 手游改写而成. 2. 游戏引擎开发的技术价值 小龙的游戏引擎开发之路:从游戏引擎的设计到京东搜索引擎开发工程师 项目准备 任意版本的VS 或者 VC++ 安装easyx图形库 项目演示 ...

  6. 游戏开发43课 移动游戏性能优化1

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然.要完全读懂这 ...

  7. 游戏开发30课 cocoscreator骨骼贴图布局设置

    骨骼贴图布局设置 要确保 骨骼动画 也能够完全正确地参与 动态 Instancing,需要用户手动指定每张骨骼贴图的数据分配方式. 比如一个场景中要绘制大量相同的人物角色,每个角色可能在走/跳/攻击. ...

  8. 游戏开发21课 cocoscreator bundle

    本篇文章主要向大家介绍 Cocos Creator 之 AssetBundle 使用方案分享,包括配置.构建.加载.释放 AB 包这些实用性很强的内容,同时也有对 AB 包的优先级及资源引用关系的讨论 ...

  9. 游戏开发15课 微信小游戏自审报告

    微信小游戏个人提交的时候需要写下自审报告 然后打印签名 后拍照上传以下是模板有兴趣的可以看看 自审报告 本⼈根据<网络游戏管理暂行办法>对我开发的小游戏产品<xxxx>进行自行 ...

最新文章

  1. 生成器、迭代器的区别?
  2. Mysql报错Forcing close of thread 139 user: 'root'
  3. SPL spl_autoload_register 初体验 (转)
  4. jieba分词(python使用篇)(一)
  5. java Design Patterns
  6. opencv 报错:Error: Assertion failed (data) in cv::Mat::at, file ... mat.inl.hpp, line 897(访问了不存在矩阵的像素)
  7. Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
  8. powershell 运行策略
  9. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
  10. 王道机试指南读后总结-1
  11. USB及手机平板设备插拔响应解决方案
  12. hashmap扩容_面试官问:HashMap在并发情况下为什么造成死循环?一脸懵
  13. wordpress中如何正确书写robots.txt
  14. OpenOffice实现word文档在线预览
  15. 进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超详细
  16. Windows 无法使用内置管理员账户打开IE
  17. HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字)
  18. Automader 使用教程 - 01 你好,左右抽
  19. 用python模拟球赛
  20. 数一数Google的软件和服务

热门文章

  1. 游戏设计参考:魔兽世界WOW角色的基本属性及其作用
  2. 更改MYSQL 单字段存储最大空间
  3. 社区动力DISCUZ资料库
  4. 河内塔递归_使用递归的河内塔问题的C程序
  5. vue——前置路由守卫
  6. 面向对象:类与对象的近一步研究
  7. 初三计算机考试2021,2021年初三信息技术教学计划
  8. 原来qq下载也有类似迅雷的功能了
  9. 随机产生10以内的加减乘除法,输入结果;退出时统计答题总数,正确个数和正确率
  10. 双12软件促销,Melodyne,Fabfilter,NUGEN Audio,SLATE DIGITAL,Prime Studio,McDSP