Unity SurfaceShader详解
声明:文章主要是总结手游开发的经验,只涉及到了前向渲染、未涉及延迟渲染。
Unity的Surface Shader本质上就是VS/PS。只不过Unity经过精心设计,将shader划分为了几个关键部分,然后再通过若干个可选参数来进行配置。
Surface Shader中(前向渲染)需要我们写的函数有VertexFunction、SurfaceFunction、GIFunction、LightningFunction和ColorFunction。其中使用最多的SurfaceFunction。其他函数根据需要来使用。除了这些函数,各种可选参数也相当重要。
与自定义函数搭配使用的还有两个自定义数据结构:Input和Output。Input需要自己写,最主要功能是传递UV。Output可以使用Unity预定义的数据类型(SurfaceOutput、SurfaceOutputStandard和SurfaceOutputStandardSpecular),也可以自定义,自定义最少需要有4个成员变量:Albedo、Normal、Emission和Alpha,缺少一个都会报错。
各函数的作用如下表:
函数名 | 作用 |
---|---|
VertexFunction | 填充Input和顶点变形 |
SurfaceFunction | 填充Output |
GIFunction | 填充UnityGI,即计算光照信息(主要是间接光照) |
LightningFunction | 根据Output和光照信息进行光照计算 |
ColorFunction | 颜色处理,如雾的计算 |
Unity SurfaceShader详解的更多相关文章
- Unity Jobsystem 详解实体组件系统ECS
原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...
- Unity 灯光系统详解
Unity 灯光系统详解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- Unity Coroutine详解(二)
• 介绍• Part 1. 同步等待• Part 2. 异步协程• Part 3. 同步协程• Part 4. 并行协程 1.介绍 ...
- Unity Coroutine详解(一)
Unity 中协程是个非常强大的功能,其作用主要是用于游戏中的延时调用或者执行一连串的有时间间隔的事件流程,例如剧情对话等.简单总结了几点协程相关的知识点,旨在加深记忆,同时为初学者解惑. 1.协程. ...
- Unity灯光详解
Lights will bring personality and flavor to your game. You use lights to illuminate the scenes and o ...
- Unity坐标系详解
1. World Space(世界坐标系): 我们在场景中添加的物体(如:Cube),他们都是以世界坐标显示在场景中.transform.position 获取的便是这个 坐标数值. 2. Scene ...
- 【Unity编程】Unity中关于四元数的API详解
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...
- [翻译]Unity中的AssetBundle详解(三)
构建AssetBundles 在AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数.让我们更深入地了解我们 ...
- 「翻译」Unity中的AssetBundle详解(二)
为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...
随机推荐
- 小心Powershell的位数
我们都知道64位的 Windows 中有两个Powershell,32位的 Windows Powershell(x86)和64位的 Windows Powershell.(当然,32位的Window ...
- python3 实现删除数组中相同的元素
# #把数组中相同的元素去除 # #第一种方式: def del_repeatnum(s=[1,1,1,2,2,3,3,4]): s1=[] for i in s: print(i) if i not ...
- 彩票历史记录分析工具 -- 通过实例学习wpf开发
前言 虽然本人对彩票不感兴趣,仍然有不少人对此情有独钟.他们花大量时间精力去分析彩票的历史记录,企图发现规律,为下一次投注做指导,希望“赢的“”概率增大.不管研究历史记录是否有意义,我用软件实现了对彩 ...
- Kafka学习笔记4--Kafka消费者的客户端(PHP)开发
一.准备工作 虽然 Kafka 是用 Java/Scala 语言编写的,但这不妨碍它对多语言的支持.可以在 Kafka 官网的 CLIENTS 查看 Kafka 支持的语言,其中包括 C/C++.Py ...
- asp.net保留两位小数
1.System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();provi ...
- 深度探索c++对象模型阅读笔记图
- 001JZ2440开发板熟悉与使用
- 10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...
- Excel获取当前日期和时间
在Excel中获取当前时间 1.第一种在空的单元格内输入函数“NOW()”回车即可获取当前时间如图 2.第二种选中空单元格“按住CTRL+:”回车即可获取当前时间 3.第一种在空的单元格内输入函数“t ...
- JS中的splice方法
JS中的splice方法 定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组(集合). 语法 arrayObject.splice(ind ...