![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
unity内置着色器源码剖析
小橙子0
一只游戏开发狗
展开
-
(十)unity自带的着色器源码剖析之——————AutoLight.cginc文件(包含一些阴影和光照相关计算的函数)
AutoLight.cginc文件包含了一系列用来进行照明和阴影计算的函数,本篇重点讲述此文件中关于聚光灯和有向平行光的计算原理。一、DIRECTIONAL宏的定义如下:#ifndef AUTOLIGHT_INCLUDED#define AUTOLIGHT_INCLUDED#include "HLSLSupport.cginc"#include "UnityShadowLibrary.cginc"// If none of the keywords are defined, assu原创 2020-06-02 20:20:38 · 2582 阅读 · 1 评论 -
(九)unity自带的着色器源码剖析之——————UnityShadowLibrary.cginc文件分析(实时阴影和烘焙阴影、阴影淡化、阴影渗漏处理、PCF阴影过滤解决实时阴影锯齿)
一、阴影与全局照明系统的关系Unity3D引擎可以根据宏SHADOWS_SCREEN和LIGHTMAP_ON是否启用决定是否在全局照明系统下对阴影进行混合处理。如果这两个宏同时启用,则HANDLE_SHADOWS_BLENDING_IN_GI定义为1,即宣告在全局照明下也对阴影进行处理。宏SHADOWS_SCREEN本质上是一个着色器多样体,表示是否在屏幕空间中处理阴影计算,如下所示:#...原创 2020-05-18 12:28:09 · 3950 阅读 · 4 评论 -
(八)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:下篇(unity3D中的球谐光照和SH球谐函数、unity实时阴影抗锯齿解决方案)
一、探针基于球谐函数的全局光照球谐光照是基于预计算辐射度传输理论实现的一种实时渲染技术。预计算辐射度传输技术能够重现在区域面光源照射下的全局照明效果。这种技术通过在运行前对场景中光线的相互作用进行预计算,计算每个场景中每个物体表面点的光照信息,然后用球谐函数对这些预计算的光照信息数据进行编码,在运行时读取数据进行解码,重现光照效果。球谐光照使用新的光照方程来代替传统的光照方程,并将这些新方...原创 2020-04-23 20:21:31 · 2057 阅读 · 0 评论 -
(七)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:中篇(光照探针和反射探针)
一、光照探针照明的细节1.1 光照探针照明概述使用光照贴图可以大幅度提升场景渲染的真实程度,但缺点是光照贴图无法作用在非静态的物体上,所以看上去运动的物体和场景就显得恨不协调。为了解决这个问题,使用光照探针(probe lighting)技术模拟使用光照贴图的效果。光照探针大致原理:在某一光照探针的所在位置点上对光照信息进行采样,然后从该光照探针相邻的其他光照探针的位置上对光照信息进行采...原创 2020-04-23 20:04:15 · 1768 阅读 · 0 评论 -
(六)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:上篇(全局照明GI和局部照明)
一、全局照明和局部照明全局照明(global illumination,GI)是用于向三维场景中添加更为逼真的光照效果的一组算法总称。全局算法不仅考虑光源发出的光与被照亮物体之间的关系,即直接照明(direct illumination),还考虑光线从某一物体的表面传递到另一个物体的表面时的关系,即间接照明(indirect illmination)。而局部照明(local illuminat...原创 2020-04-23 19:50:54 · 1622 阅读 · 0 评论 -
(五)unity自带的着色器源码剖析之——————前向渲染和延迟渲染
一、前向渲染概述传统的渲染方式下所做的光照计算流程称为前向渲染原创 2020-04-02 13:15:09 · 1276 阅读 · 0 评论 -
(四)unity自带的着色器源码剖析之——————Unity3D 多例化技术(GUI Instancing)
一、多例化技术概述假设需要绘制有很多模型的场景,而大部分模型使用的是同一个模型,即使用同一组顶点数据在渲染时会给它们指定不同的世界坐标,绘制在不同位置上。比如草,可能由几个三角形构成,渲染一株草没有渲染压力,但是成千上万株就会调用相应次数绘制调用(draw call)就会极大影响性能。1.1 不使用GPU多例化技术绘制多个相同模型如果这样绘制同一模型大量实例(instance),很快就...原创 2020-02-25 16:35:31 · 3701 阅读 · 0 评论 -
(三)unity自带的着色器源码剖析之——————UnityCG.cginc文件(下篇:法线贴图及编解码操作函数、线性化深度值函数、计算屏幕坐标工具函数、阴影处理相关函数、雾相关函数等)
八、法线贴图及其编解码操作的函数法线贴图存储的信息是对模型顶点法线的扰动方向向量,利用此扰动方向向量,在光照计算时对顶点原有的法线进行扰动,从而使法线方向排列有序的平滑表面产生法线方向杂乱无序从而导致表面凹凸不平的效果。要在Unity3D中导入和使用法线贴图,要设置为Normal map类型,是因为在不同平台上,Unity3D可以利用该平台硬件加速的纹理格式对导入的法线贴图进行压缩,同时也...原创 2020-02-01 18:02:51 · 2522 阅读 · 1 评论 -
(二)unity自带的着色器源码剖析之——————UnityCG.cginc文件(上篇:数学常数、颜色空间常数和函数、顶点布局格式结构体、进行空间变换的函数、HDR级光照贴图编解码相关函数等)
一、数学常数unity3D内置着色器定义了一系列的数学常数,如下:从第3行开始,第13行结束:#ifndef UNITY_CG_INCLUDED#define UNITY_CG_INCLUDED#define UNITY_PI 3.14159265359f //圆周率#define UNITY_TWO_PI 6.28318530...原创 2020-01-31 13:25:53 · 1786 阅读 · 0 评论 -
(一)unity自带的着色器源码剖析之——————UnityShaderVariables.cginc文件
unityShaderVariables.cginc文件中包含大量的工具宏和函数,如变换操作用的矩阵、与摄像机相关的函数、与光照和阴影相关的函数,以及与雾效果相关的函数等。下面依次分析这些工具函数和宏。一、进行变换操作用的矩阵1.1 判断 USING_DIRECTIONAL_LIGHT宏是否定义并分析与立体渲染相关的宏代码段如下,从第3行开始,14行结束:#ifndef U...原创 2020-01-06 15:44:09 · 2455 阅读 · 1 评论