一: 光照烘焙:

1.静态光照烘焙: 静态物体 烘焙 lightMap

所以需要对lightMap 采样

// 采样烘焙LightMap光照
float3 SampleLightMap(float2 lightMapUV)
{#if defined(LIGHTMAP_ON)return SampleSingleLightmap(TEXTURE2D_ARGS(unity_Lightmap,samplerunity_Lightmap),lightMapUV,float4(1.0,1.0,0.0,0.0),#if defined(UNITY_LIGHTMAP_FULL_HDR) false,#elsetrue,#endiffloat4(LIGHTMAP_HDR_MULTIPLIER,LIGHTMAP_HDR_EXPONENT,0.0,0.0));#elsereturn 0.0;#endif
}

2.动态物体烘焙: LightProbe
适用于灯光过渡区
所以需要对 LightProbe 采样


// 采样LightProbe球谐函数
float3 SampleLightProbe(Surface surfaceWS)
{#if defined(LIGHTMAP_ON)return 0.0;#elseif(unity_ProbeVolumeParams.x){return SampleProbeVolumeSH4(TEXTURE3D_ARGS(unity_ProbeVolumeSH,samplerunity_ProbeVolumeSH),surfaceWS.position,surfaceWS.normal,unity_ProbeVolumeWorldToObject,unity_ProbeVolumeParams.y,unity_ProbeVolumeParams.z,unity_ProbeVolumeMin.xyz,unity_ProbeVolumeSizeInv.xyz);}else{float4 coefficients[7];coefficients[0] = unity_SHAr;coefficients[1] = unity_SHAg;coefficients[2] = unity_SHAb;coefficients[3] = unity_SHBr;coefficients[4] = unity_SHBg;coefficients[5] = unity_SHBb;coefficients[6] = unity_SHC;return max(0.0,SampleSH9(coefficients,surfaceWS.normal));}#endif}

3.漫反射出的间接光烘焙:
漫反射出的间接光照的烘焙!!!!(这个间接光是带有颜色的!!!!)
烘焙通过LightMode = Meta 的pass执行烘焙,当没有此pass的时候,unity默认是白色
在meta的Fragment 中的返回值,就是烘焙到贴图中效果
因此: 想要修改lightMap的效果,自定义MetaPass, 修改frag的返回值即可
例如: 红色的cube 漫反射到地面 是带有红色, 不用此通道 则被unity默认为白色

二.自发光烘焙:
同样是在MetaPass 中处理
自发光烘焙: 必须是静态


#ifndef CUSTOM_META_PASS_INCLUDE
#define CUSTOM_META_PASS_INCLUDE#include "../ShaderLibrary/Surface.hlsl"
#include "../ShaderLibrary/Shadows.hlsl"
#include "../ShaderLibrary/Light.hlsl"
#include "../ShaderLibrary/BRDF.hlsl"struct Attributes
{float3 positionOS : POSITION;float2 baseUV : TEXCOORD0;float2 lightMapUV : TEXCOORD1;
};struct Varings
{float4 positionCS : SV_POSITION;//  只是从vertex中 往 fragment中传递的参数, 除了命名体现的含义, 不需要GPU特定的命名// VAR_BASE_UV 只是标记接受的定义, 不需要GPU 的特别关注,所以后面的 VAR_LIGHT_MAP_UV;等也只是一个float2 baseUV : VAR_BASE_UV;
};bool4 unity_MetaFragmentControl;float unity_OneOverOutputBoost;
float unity_MaxOutputValue;Varings MetaPassVertex(Attributes input)
{Varings output;input.positionOS.xy = input.lightMapUV * unity_LightmapST.xy + unity_LightmapST.zw;input.positionOS.z = input.positionOS.z > 0.0 ? FLT_MIN : 0.0;output.positionCS = TransformWorldToHClip(input.positionOS);output.baseUV = TransformBaseUV(input.baseUV);  return output;
}float4 MetaPassFragment(Varings input):SV_TARGET
{float4 base = GetBase(input.baseUV);Surface surface;ZERO_INITIALIZE(Surface,surface);surface.color = base.rgb;surface.metallic = GetMetallic(input.baseUV);surface.smoothness = GetSmoothness(input.baseUV);BRDF brdf = GetBRDF(surface);float4 meta = 0.0;if(unity_MetaFragmentControl.x){// 烘焙的 弹射后的间接光 的颜色设置meta = float4(brdf.diffuse,1.0);// brdf 的粗糙度降低一半的高光,也当作是间接反射的一部分meta.rgb += brdf.specular * brdf.roughness * 0.5;meta.rgb = min(PositivePow(meta.rgb,unity_OneOverOutputBoost),unity_MaxOutputValue);}else if (unity_MetaFragmentControl.y){// 决定烘焙自发光的效果meta = float4(GetEmission(input.baseUV),1.0);}return meta;
}
#endif

在shaderGUI中 添加并且在 OnGUI调用BakedEmission():

    void BakedEmission(){EditorGUI.BeginChangeCheck();editor.LightmapEmissionProperty();if (EditorGUI.EndChangeCheck()){foreach (Material m in editor.targets){m.globalIlluminationFlags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack;}}}

(四)多盏灯光:
因为shadowMask 图 只有4个通道, 每个通道存储一盏灯的数据,所以 最多存储四盏灯的数据。。
在采样shadowMask 的时候 对应灯光相应的通道的数据就是阴影遮罩数据 shadowMask

(五)lightMap和场景分离: 一个prefab 可以在不同的场景中加载使用,并且使用自带的lightMap

原理就是:(烘焙信息和烘焙物体的联系: 在物体的meshRender中: index 和 ScaleOffset) MeshRender.lightmapIndex 和 MeshRender.lightmapScaleOffset , 设置为你保存的此烘焙物体的lightmap信息, 重新赋值给它的Mesh。

lightMap使用进阶:
场景和物体的lightMap分离
场景和物体的 lightMap分离

自定义光照烘焙和采样相关推荐

  1. (转)Unity 5.6 光照烘焙系统介绍

    Unity 5.6 光照烘焙系统介绍 一. 基本概念 1. 直接光照.间接光照 直接光照:光源直接照射到物体上,并反射到眼中的光照. 间接光照:光源先照射到其它物体上,并经过一次或多次弹射,最终抵达到 ...

  2. Unity引擎光照烘焙

    光照烘焙 一.先将系统中的光源去掉,会发现场景还是亮的.将天空环境光去掉(Windows-> Rendering->Lighting) 将Environment Lighting, Env ...

  3. 虚幻引擎图文笔记:调整网格的光照贴图分辨率(Light Map Res)改善光照烘焙质量

    通过调整网格的光照贴图分辨率(Light Map Res)改善光照烘焙质量 问题描述 下图所示的场景非常简单,光源是一个标记为Static的点光源(Point Light),经过烘焙之后,不难看出光斑 ...

  4. 【Cocos Creator 3.x】如何进行光照烘焙(使用光照贴图)

    前言 这是一篇基础教程篇,在于帮助使用者快速理解并使用 Cocos Creator 3.x 引擎提供的 光照贴图 功能. 光照贴图 Cocos Creator 引擎的官方文档是这么描述的: 当我们进行 ...

  5. Unity灯光、烘焙小结(二)sikiedu光照烘焙教程

    ****************sikiedu光照烘焙教程*************** https://www.bilibili.com/video/av56087784?p=1 1.Ctr+shi ...

  6. 【Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

  7. 【Unity3D Shader编程】之七 静谧之秋篇 表面着色器的写法 二 —— 自定义光照模式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  8. Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

  9. 【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

最新文章

  1. 【Python-ML】自适应线性神经网络(Adaline)
  2. 学习率对神经网络迭代次数和准确率的影响以及近似数学表达式
  3. 前端通过spark-md5.js计算本地文件md5
  4. vba转换为vbs的方法_vba代码改成vbs,该怎么解决(4)
  5. PyQt5笔记(01) -- 创建空白窗体
  6. 人工智能AI常见的经典K-means聚类算法原理和工作过程
  7. 浙大 PAT b1040
  8. azure云数据库_如何将MySQL表迁移到Microsoft Azure SQL数据库
  9. 23、jQuery九类选择器/jQuery常用Method-API/jQuery常用Event-API
  10. 拓端tecdat|matlab使用样条插值重采样估计INR数据研究
  11. RSA攻击手法及相应例题解析
  12. python QQ聊天机器人,qqbot 使用简介
  13. 《重构》一书总结(二)
  14. Python Pexpect库的简单使用
  15. 工业级加固固态硬盘产品性能-领存2.5 寸 R-SATA SSD介绍
  16. stormzhang:对于 996,说下我的观点
  17. 爬虫速成(二):数据获取
  18. USACO Farmer_John收苹果 (dp)
  19. 树莓派魔镜MagicMirror —— 7 安装MagicMirror
  20. 机房收费系统文档总结(反思篇)

热门文章

  1. 算法笔记(一)【区分二叉查找树和堆】
  2. 记第一次实习面试经历(字节跳动)
  3. 亚马逊平台:华人卖家“很牛”!
  4. 利用pyecharts显示微信好友性别比例
  5. 〖Python接口自动化测试实战篇①〗- 自动化测试基础扫盲及项目的生命周期详述
  6. 达克效应 邓宁·克鲁格心理效应
  7. Windows 10下配置高通hexagon sdk环境
  8. 生物神经网络与人工神经网络
  9. 精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”
  10. 安装Python包,网络不可达解决方法