Unity Shader 光照模式
2016-06-08 22:30
381 查看
Shader "Custom/Deferred_Forward_Vertex" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Blend One One //.1 pass{ Tags{ "LightMode"="Vertex"} Blend One Zero CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct vertOut{ float4 pos:SV_POSITION; float4 color:COLOR; }; vertOut vert(appdata_base v) { vertOut o; o.pos=mul(UNITY_MATRIX_MVP,v.vertex); o.color=float4(0,0,1,1); return o; } float4 frag(vertOut i):COLOR { return i.color; } ENDCG }//end pass //.2 pass{ Tags{ "LightMode"="ForwardBase"} Blend One One CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct vertOut{ float4 pos:SV_POSITION; float4 color:COLOR; }; vertOut vert(appdata_base v) { vertOut o; o.pos=mul(UNITY_MATRIX_MVP,v.vertex); o.color=float4(0,1,0,1); return o; } float4 frag(vertOut i):COLOR { return i.color; } ENDCG }//end pass //.3 CGPROGRAM #pragma surface surf MyDeferred half4 LightingMyDeferred_PrePass (SurfaceOutput s, half4 light) { half4 c; c.rgb = s.Albedo; c.a = s.Alpha; return c; } struct Input { float2 uv_MainTex; }; sampler2D _MainTex; void surf (Input IN, inout SurfaceOutput o) { o.Albedo=float3(1,0,0); } ENDCG } FallBack "Diffuse" }
定义三种光照模式,根据相机的Render Mode选择对应的光照模式看看输出 什么颜色
相机的Render Mode=Vertex时 ,只有"LightMode"="Vertex" 的pass块才执行,没有这个块其他的不执行
相机的Render Mode=Forward时 ,只有"LightMode"="ForwardBase" 的pass块优先执行,没有这个块执行 "LightMode"="Vertex" 的pass块,两者都没有其他的不执行
相机的Render Mode=Deferred时 ,只有"LightMode"="MyDeferred" 的pass块优先执行,没有这个块执行"LightMode"="ForwardBase" 的pass块,没有执行"LightMode"="Vertex"的pass块。
相关文章推荐
- unity点选构建Mesh并保存OBJ
- Unity Shader修改Shader属性
- Unity3D 更新文件下载器
- Unity3D LuaBundleLoader(基于cslua)
- 【Unity】判断物体是否会被渲染
- Unity3d OverlapCircle和CircleCast的区别
- 【Unity】一些不错的unity插件
- 【Unity】加深对Camera的理解
- Unity 脚本与工程分离
- Unity3D 调用Android与IOS的剪贴板
- 【Unity】批量处理Unity中的图片资源
- Unity3D在windows10下小问题解决
- 字符串保存在XML文件中时转义字符
- 深入浅出聊Unity3D优化:从Draw Calls到GC
- unity3d的四元数 Quaternion
- 【Unity】 C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
- Unity里用Animator控制3dmax里制作的动画
- 深入浅出聊优化:从Draw Calls到GC
- 关于UnityEngine.UI.Button.ButtonClickedEvent事件列表
- Unity中协程的运行