ASE入门2MatCap和NDotV采样
什么是Matcap?Matcap实际上是Material Capture的缩写,即材质捕捉。实际上,这是一种离线渲染方案。类似光照烘焙,将光照或者其它更复杂环境下的渲染数据存储到一张2D贴图上, 再从这张2D贴图进行采样进行实时渲染。
Matcap是一种在观察空间下使用单位法线采样单位球的离线渲染算法。
为什么是观察空间?因为观察空间下,相机变化就可以看到不同的渲染结果。
为什么使用法线去采样?法线是描述表面朝向的向量,与渲染结果强相关,法线跟物体的曲率强相关等,因此这种算法经常用于雕刻上。
Matcap的特点总结如下:
使用观察空间下的法线向量采样2D贴图,作为光照和反射结果。
在缺乏光照烘焙的环境下,可以一定程度上替代或者模拟光图。
但是,Matcap代表的2D贴图不局限于光照信息,也可以理解为某种环境下的最终渲染结果。
由于是离线方案,因此计算非常廉价,很适合低端机器或者特定场合下使用。
个人理解:一般情况下,一个模型的法线向量描述模型表面的朝向关系,在世界空间下,是不变的,但是我们把它转换到观察空间下之后,这个模型的表面信息会随着摄像机变化,我们再在世界空间下观察模型, ...
ASE入门1人物扫光
ASE快捷键ASE不支持Ctrl + Z撤销,点击Editor右上角的蓝色感叹号图标,就能显示帮助面板。
在编辑器左侧,默认情况下可以看到Material Properties,列出了所有暴露的Shader 属性,可以调节各个属性上下位置。
ASE中,一维数据一根线,二位数据二根线……
基本数据节点1 :按住1键点击舞台,快速新建float节点。
2 :按住2键点击舞台,快速新建vector2节点。
3 :按住3键点击舞台,快速新建vector3节点。
4 :按住4键点击舞台,快速新建vector4节点。
5 :按住5键点击舞台,快速新建color节点。
T :按住T键点击舞台,快速新建贴图节点。
U : 按住U键点击舞台,快速新建贴图UV坐标节点。
数学节点A S M D :按住这些键点击舞台,快速新建加、减、乘、除节点。
L :按住L键点击舞台,快速新建Lerp节点。
O :按住T键点击舞台,快速新建One Minus节点。
E :按住T键点击舞台,快速新建Power节点。
。:按住点号键点击舞台,快速新建Dot节点。
函数节点V :按住V键点击舞台,快速新建Append节点,这个 ...
Shader代码入门基础
本课程全是用Built-in渲染管线
最基本的Shader代码默认的Unlit Shader再简化
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899Shader "CS02/MiniShader" //Shader的真正名字 可以是路径式的格式{ /*材质球参数及UI面板 https://docs.unity3d.com/cn/current/Manual/SL-Properties.html https://docs.unity3d.com/cn/current/ScriptReference/MaterialPropertyDrawer.html https://zhuanlan.zhihu.com/p/93194054 */ ...
渲染管线概述
暂略,等待补充,可见Shader入门精要笔记
新手引导UI系统
新手引导模块为了完全解耦,需要自己的UI系统。
首先在Pathes里面声明好用作Guide的UI的路径。
1234private const string TUTORIAL_UI_FOLDER = PREFAB_UI_FOLDER + "Tutorial/";public const string PREFAB_GUIDE_WELCOME = TUTORIAL_UI_FOLDER + "WelcomeView";public const string PREFAB_GUIDE_HAND = TUTORIAL_UI_FOLDER + "Hand";public const string PREFAB_GUIDE_HIGHLIGHT = TUTORIAL_UI_FOLDER + "HighLight";//这个Prefab是个空物体,Rect是Stretch模式
这里的UI使用Resources的API进行加载,根据实际情况进行替换。
GuideUIMgr在Guide——Framework——文件夹内新建Gu ...
新手引导设计规范
首先,把每个UI界面需要的新手引导UI先做出来,比如会显示各种提示的新手引导UI。把它们的Prefab放在Resources——Prefab——UI——Tutorial文件夹下面。在下一节中,我们定义好了这些UI的路径。
然后,每个UI界面对应的Guide类只有一个,Guide脚本放在Guide——Business——Guides文件夹下。
Guide——Business——Groups文件夹内根据不同的UI界面新建不同的文件夹,如StartView文件夹,SelectHero文件夹,在这些子文件夹内再新建各界面对应的Group脚本。
Guide——Business——Behaviours文件夹内根据不同的UI界面新建不同的文件夹,如StartView文件夹,SelectHero文件夹,在这些子文件夹内再新建各界面对应的Behaviour脚本。
示例——开始界面开始界面,我们只引导玩家点击一下“开始游戏”的按钮。
StartViewGuide在Guide——Business——Guides文件夹下新建StartViewGuide
StartViewGroup在Guide——Busine ...
UI挖孔高亮工具
我们在UGUI事件系统 中介绍过一种UI挖孔方法,是通过直接修改Image的Shader实现的,而且透射遮挡UI也是通过一种使用EventSystem直接向下传递的方法。
在这个教程中,使用另外一种挖孔方法,就是直接修改UI的Mesh,因为UI的Mesh是遮挡Raycast的关键,而Mesh中的挖孔是不会遮挡Raycast的,而且我们还可以通过MonoBehaviour继承ICanvasRaycastFilter接口来让已经挖孔的UIMesh依然全面遮挡Raycast。
HighlightTool我们首先自定义一个挖孔Mesh的UIImage组件,在Guide——Tools文件夹中新建HighlightTool文件,这个文件继承UGUI的一个基础类,也就是Graphic类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 ...
ID赋值工具
为了方便存档,每种新手引导的Group和Guide都要赋值一个唯一的ID,这部分我们用自定义的工具来实现。
首先先在Guide——Business文件夹内分别新建Groups、Guides、Behaviours三个文件夹,这里面分别放置新手引导业务逻辑的各个脚本。
然后再在Guide内新建Tools文件夹和Tools——Editor文件夹,在其中新建GuideGenerateIDTool
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596using UnityEditor;using UnityEngine;using System.IO;using System.Text.RegularExpressions;using System.Collections.Generic ...
和UI模块的交互
使用UIMgr打开一个窗口时,抛出事件,从而让GuideMgr知道自己是否需要开始进行引导。
在UIMgr中添加API
12345678910111213141516171819202122232425262728293031323334353637383940414243private Action<string> _showAction;private Action<string> _hideAction;public void AddShowListener(Action<string> listener){ _showAction += listener;}public void RemoveShowListener(Action<string> listener){ if (_showAction != null) _showAction -= listener;}public void AddHideListener(Action<string> ...
基础框架
IGuideBehaviour在Scripts文件夹中新建Guide——Frame文件夹,新建IGuideBehavior文件
OnEnter方法初始化引导行为,OnExit方法退出行为。
12345678910111213141516171819202122232425262728293031using System;/// <summary>/// 引导行为接口/// </summary>public interface IGuideBehaviour : IGuide{}public abstract class GuideBehaviourBase : IGuideBehaviour{ private Action _callBack; public virtual void OnEnter(Action callBack) { _callBack = callBack; OnEnterLogic(); } public virtual void ...