Unity shader with lightmap
2017-01-11 09:04
239 查看
小记一下用法与问题,时更
surface shader就不用操心了,自带lightmap计算
主要是vertex fragment shader部分
Unity5 bake light map有三种情况:
1.Non-directional
2.directional
3.directional specular
Non-directional
这种计算最为简单,消耗也最少,
注意不会烘焙上normal map的信息,只是模型顶点法线计算得的diffuse结果
首先需要声明lightmap变量
重复声明异常(unity 5.4),在UnityCG.cginc已经声明过了,就不用再声明
需要在appdata中用一个新的坐标变量来计算lightmap的uv,否则开始可能正确,但是博主在把模型generate lightmap uv后再烘焙,uv全部都是错的了。
然后vertex部分的struct声明(名字随意)
vertex shader生成计算lightmap uv
在fragment shader中获取lightmap数据的方法,得到的是三元向量,如果未烘焙默认值为0:
判断是否烘焙,这样就可以分为两种算法,没有lightmap就实时算,有lightmap就用
烘焙lightmap后,shader获取的阴影自阴影信息为1,光照方向为0(与光的Baking模式设置有关,realtime(有)/mixed(有)/baked(无))
directional specular
这种会产生两种lightmap,一种是带normal map的diffuse信息也就是普通的light map,一种是direction map也就是光照方向,我们可以使用烘焙的光照方向来计算specular及其他
应该是这样可以得到direction map,但是博主试过会报错
UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd,unity_Lightmap,1);
---wolf96 2017/1/11
surface shader就不用操心了,自带lightmap计算
主要是vertex fragment shader部分
Unity5 bake light map有三种情况:
1.Non-directional
2.directional
3.directional specular
Non-directional
这种计算最为简单,消耗也最少,注意不会烘焙上normal map的信息,只是模型顶点法线计算得的diffuse结果
首先需要声明lightmap变量
sampler2D unity_Lightmap; float4 unity_LightmapST;
重复声明异常(unity 5.4),在UnityCG.cginc已经声明过了,就不用再声明
需要在appdata中用一个新的坐标变量来计算lightmap的uv,否则开始可能正确,但是博主在把模型generate lightmap uv后再烘焙,uv全部都是错的了。
structappdata { float4vertex : POSITION; float4tangent : TANGENT; float3normal : NORMAL; float2texcoord : TEXCOORD0; float2texcoord2 : TEXCOORD1; fixed4color : COLOR; };
然后vertex部分的struct声明(名字随意)
float2 uv_lightmap : TEXCOORD1;
vertex shader生成计算lightmap uv
o.uv_lightmap =v.texcoord2.xy *unity_LightmapST.xy + unity_LightmapST.zw;
在fragment shader中获取lightmap数据的方法,得到的是三元向量,如果未烘焙默认值为0:
DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))
判断是否烘焙,这样就可以分为两种算法,没有lightmap就实时算,有lightmap就用
#ifdefLIGHTMAP_ON DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))。。。。lightmap相关计算 #endif
烘焙lightmap后,shader获取的阴影自阴影信息为1,光照方向为0(与光的Baking模式设置有关,realtime(有)/mixed(有)/baked(无))
directional specular
这种会产生两种lightmap,一种是带normal map的diffuse信息也就是普通的light map,一种是direction map也就是光照方向,我们可以使用烘焙的光照方向来计算specular及其他应该是这样可以得到direction map,但是博主试过会报错
UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd,unity_Lightmap,1);
---wolf96 2017/1/11
相关文章推荐
- Unity5 shader with lightmap
- unity, 替换shader渲染(Rendering with Replaced Shaders)
- unity, 替换shader渲染(Rendering with Replaced Shaders)
- 在shader调用unity内置lightmap和Light Probes
- 关于Unity 5.x Lightmap Shader 编译过慢的分析
- Unity lightmap shader
- unity, 替换shader渲染(Rendering with Replaced Shaders)
- UnityShader实例07:在shader调用unity内置lightmap和light Probes
- 基础差不得不学啊(unity shader中的矩阵学习一)
- Unity里vertexShader里压扁模型来实现比较low的阴影
- UnityShader入门精要学习笔记(十九):卷积与边缘检测
- 窥探Unity5渲染内部之解析UnityShaderVariables.cginc
- Unity shader学习之阴影,衰减统一处理
- Hololens官方教程精简版 - 01. Getting started with Unity
- Unity Shader学习5 —— Cg语言的基础
- unity shader 双面显示下stecil用法
- unity 2d利用shader 做闪光特效
- Unity shader造冰女
- Unity&Shader基础篇-绘制网格+圆盘
- [UnityShader]渲染队列、ZWrite和ZTest