《Unity着色器和屏幕特效》——导读_weixin_33811539的博客-程序员秘密

技术标签: c#  操作系统  游戏  


screenshot

前  言

Unity提供了一系列工具来帮助开发者创建和运行游戏项目。Unity 5用全新的标准着色器替换了大部分旧版着色器,为我们带来了功能上的重大升级。新着色器通过简单设置便可模拟真实物体表面上的很多物理特性。

本书将探索这一系列新着色器为我们带来的全新选择,以及学习它们如何与光照和特效相互作用,产生高质量的游戏画面。

为了实现当今游戏画面中的真实感,人们走过了一条漫长的道路。在过去相当长的时间里,实时光照所带来的额外运算量为游戏研发制造了很多困扰。有时候,实现真实感的重担直接落在了纹理美术设计师的肩上。他们不得不将许多静态的表面效果直接烘焙到游戏角色和材质的纹理当中。

这种静态烘焙的方法有时在一些动态的游戏角色身上难以达到理想效果——特别是当一个角色移动到较阴暗或者较明亮的空间中时,静态烘焙难以实现良好的亮度等级变化,使得游戏画面显得粗糙而不真实。

计算机图形理论的进化,特别是显卡设备的升级换代,使很多基于实时光照的技术能够更加高效地运作。同时这也使人们对现代游戏报以更高的期望——我们希望在充满动态光照的场景中看到更逼真的物体表面。

在本书中,读者将通过一个典型的科幻题材恐怖游戏来学习这些新的着色器和光照理论。基于此,我们将能够探索各式各样的光照和物体表面效果。

本书主要内容

在本书的不同章节中,我们将学习Unity 5中的所有主要着色器和效果。在每一章中我们会研究一个不同的场景文件。

第1章介绍基本概念,并通过为恐怖科幻游戏中的场景设置材质属性,展示Unity标准着色器的能力和局限性。

第2章继续设计飞船维修场景——通过创建自定义着色器优化游戏场景的外观。我们将从无到有创建自定义着色器,然后基于它,为头盔的透明外观和星球的大气创建更加复杂的效果。

第3章深入学习场景光照和自发光表面的关系,并在飞船驾驶舱场景中为一个星球模型实现全息影像效果。

第4章研究通过不同的技术在着色器中实现动画。在展示更复杂的基于自定义着色器的顶点动画之前,我们将演示如何通过滚动UV坐标和在C#中遍历纹理数组的方法来显示动画的全息影像。

第5章介绍在星球表面上所应用的各种透明效果,并且为多种材质指定现有的以及特殊创建的着色器。

第6章重点展示在Unity 5的标准着色器中,高光工作流和金属工作流的不同之处。

第7章展示在一个室内场景中为角色创建统一的皮肤和毛发着色器。本章中的第一个着色器为一些特殊的半透明材质(例如,宇航员的皮肤)实现次表面散射效果。紧接着我们将继续创建使用“基于物理渲染”方法的毛发和眼睛着色器。

第8章讲述如何创建实现烟雾、蒸汽和火焰的着色器。与前面章节类似,我们将不会满足于Unity的默认着色器,而是要为恐怖科幻游戏创建更高级别的电影效果。本章的场景将是飞船的走廊。

第9章研究如何在安卓和iOS等移动设备平台上测试自定义着色器。
阅读准备

完成本书中的各个章节需要读者具备基本的3D图形概念。此外还需要:
在计算机中安装Unity 5(macOS或者Windows均可)。免费个人版即可满足本书所有章节中的实例程序。该版本可以从Unity官方网站下载。

虽然书中所含代码均会被清晰地讲解,但是具备Unity脚本和C#基础知识会对理解本书内容有益。

读者人群

本书面向具有一定Unity和C#基础知识并希望为下一代游戏开发着色器和效果的中等水平的游戏开发者。我们假设读者对游戏开发和游戏美术设计的基础背景知识有一定了解。

本书约定

在本书中,不同类型的内容使用多种不同的字体风格。这里列举一些示例并阐述它们的含义。

目  录

[第1章 掌握标准着色器
1.1 创建程序项目 ](https://yq.aliyun.com/articles/109428/)
1.2 导入项目文件
1.3 加载飞船维修场景并在场景中漫游
1.3.1 为宇航员创建材质
1.3.2 为宇航员的装备创建材质
1.3.3 为飞船创建材质
1.3.4 为星球创建材质
1.3.5 设置天空盒
1.3.6 调节场景光照并添加效果
1.4 总结
[第2章 创建自定义着色器
2.1 打开程序项目 ](https://yq.aliyun.com/articles/109474/)
2.1.1 打开场景
2.1.2 创建第一个自定义着色器
2.2 进阶的透明效果
2.2.1 创建自定义透明着色器
2.2.2 编辑透明着色器
2.3 进阶的星球大气效果
2.3.1 创建自定义大气着色器
2.3.2 应用大气着色器
2.3.3 编辑大气着色器
2.4 总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33811539/article/details/90535855

智能推荐

android 6.0蓝牙服务开启,Android 6.0蓝牙应用开发权限与UUID_weixin_39797264的博客-程序员秘密

在Android 6.0系统中,蓝牙应用需要获得如下权限后才能正常与其他蓝牙设备通信:[text][/text]我找到了部分UUID,有效性还没测试。UUID[text]ServiceDiscoveryServerServiceClassID_UUID = '{00001000-0000-1000-8000-00805F9B34FB}'BrowseGroupDescriptorServiceCla...

python mysql binlog_利用Python my-replication读取mysql的binlog_weixin_39994806的博客-程序员秘密

一、准备Python 2.7;Python 3.4 or Python 3.5 or Python 3.6;MySQL 5.5 or MySQL 5.6 or MySQL 5.7;二、Mysql 配置1. Mysql 开启 binlog查看 Mysql 是否开启 binlog show variables like 'log_bin' 如果 Value 为 OFF 则为未启日志文件。找到 my,c...

什么是窗口句柄,进程ID,线程ID,进程句柄?_cmd窗口的句柄是什么意思_「已注销」的博客-程序员秘密

什么是窗口句柄(handle)?就是一个整数,标识某一具体对象在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个易语言窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。实际上许多Windows API函数把句柄作为它的第一个参数,...

php超小免杀大马_2019年最新免杀PHP大马(过D盾,过安全狗)_Monsterchen Xu的博客-程序员秘密

前言这份大马是一个朋友传给我让检测后门的,监听了一下没什么问题,感到惊艳的是这个大马的页面真特别让人舒服。功能挺全,常用的功能基本都有,不常用的包括cc攻击也都有,整体使用起来感觉比较流畅且低调,不像市面上那些后门满天飞的大马。这个大马是调用的服务器文件,所以有需要可以自己查看源码下载文件放在自己服务器,不懂源码的也没必要修改什么,直接把附件里的大马上传目标服务器就好了,一般情况下只要鹦鹉博客不倒...

关于 element 中 Form 表单的自定义邮箱和手机号验证!_element form表单校验 手机号邮箱 可不填_查水表小泰迪的博客-程序员秘密

1. 通过 :rules 来绑定验证规则的对象! 通过 prop 绑定具体验证的是哪个属性!2. 这里是自定义验证 邮箱规则和 验证手机号规则!邮箱正则:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/手机号正则:/^(0|86|17951)?(13[0-9]|15[0123456789]|17[678]|18[0-9]|14[57])[0-9]{8}$/3. requeired 表示 是否必填 messa...

python按行或列读取csv文件的方式_python 按列读取csv_Cuzur的博客-程序员秘密

方式一:生成字典形式使用DictReader逐行读取csv文件 返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的列标题# 逐行读取csv文件with open(filename,'r',encoding="utf-8") as csvfile: reader = csv.DictReader(csvfile) for row in reader...

随便推点

HTML+JS实现页面跳转_你的大数据学长的博客-程序员秘密

HTML+JS实现页面跳转代码关键代码解释结果展示代码话不多说,先上代码,该代码极其简单,可在我的GitHub中下载,链接在此<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>页面跳转</title> &lt...

HDU-7112 计算几何_呃呃...的博客-程序员秘密

题目大意:已知一个凸包的前提下,每次查询给出一个三角形,求平面内可以和三角形内的点构成射线穿过凸包但构成线段不穿过凸包的点的面积。解题思路:(因为官方思路更加清晰,所以这里借用官方的思路)AC代码:#include <bits/stdc++.h>#define ft first#define sd second#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)#define seteps(N) fi

Windows 2008 R2配置IIS ASP_win2008的iis没有属性选项_tanzongbiao的博客-程序员秘密

1、计算机--管理--角色--添加角色--下一步--Web 服务器(IIS)--下一步--下一步--勾选ASP--添加所需的角色服务--下一步--安装--关闭2、选中Default Web Site--ASP右键--基本设置--连接为--特定用户--设置--administrator及密码--确定--测试设置--关闭--确定3、双击ASP--启用父路径--True--调试属性--将错误...

c++ 找出数组元素中的最大数和次大数_番茄超级蛋的博客-程序员秘密

2.在min_1一直为最小的时候,加个else 作为判断数据是否为次小。1.找到比min_1小的数时候,min_2 继承min_1的数。

DB4O学习(七)--继承关联_weixin_30614587的博客-程序员秘密

1.继承保存// C# & JAVAEmployee e1 = new Employee("Michael", "1234", "michael", 101, "10/5/1975");Manager m1 = new Manager("Sue", "9876", "sue", 102, "3/8/1982");CasualEmployee c1 = new CasualEmp...

关于Go语言中的函数方法_小生凡一的博客-程序员秘密

关于Go语言中的函数方法方法是什么函数和方法的区别Go中的“多态”方法是什么func (recv receiver_type) methodName(parameter_list) (return_value_list) { … }在 Go 语言中,结构体就像是类的一种简化形式,那么面向对象程序员可能会问:类的方法在哪里呢?在 Go 中有一个概念,它和方法有着同样的名字,并且大体上意思相同:Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数

推荐文章

热门文章

相关标签