Unity3D ----- 代码控制shader的自发光参数(摄像机黑白特效下)
2016-03-09 13:32
537 查看
这两天研究了下shader的一些属性,做了个黑白特效摄像机下投影的cube的demo。
1.设置摄像机
首先摄像机上特效可以通过导入unity自带的特效包Grayscale脚本挂载到摄像机上来实现,也可自己写脚本设置。
导入的路径:Assets—Import Package — Effects。
我没有导包,自己写的:
2.摄像机Shader
自己写就需要自己写个shader,这个shader就是设置颜色为黑白灰色
代码:
3.设置cube的材质shader
给cube附一个材质,自己编写shader,主要通过改变“Emission”属性的参数值来调节自发光的颜色。
cube的shader代码如下:
1.设置摄像机
首先摄像机上特效可以通过导入unity自带的特效包Grayscale脚本挂载到摄像机上来实现,也可自己写脚本设置。
导入的路径:Assets—Import Package — Effects。
我没有导包,自己写的:
// 编辑模式下运行 [ExecuteInEditMode] public class CameraEffect : MonoBehaviour { #region Variables public Shader curShader; [Range(-1.0f,1.0f)] public float grayScaleAmount = 1.0f; private Material curMaterial; #endregion #region Properties public Material material { get { if (curMaterial == null) { curMaterial = new Material(curShader); curMaterial.hideFlags = HideFlags.HideAndDontSave; } return curMaterial; } } #endregion void Start () { if (SystemInfo.supportsImageEffects == false) { enabled = false; return; } if (curShader != null && curShader.isSupported == false) { enabled = false; } } void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture) { if (curShader != null) { material.SetFloat("_LuminosityAmount", grayScaleAmount); Graphics.Blit(sourceTexture, destTexture, material); } else { Graphics.Blit(sourceTexture, destTexture); } } // 便于回收 void OnDisable () { if (curMaterial != null) { DestroyImmediate(curMaterial); } } }
2.摄像机Shader
自己写就需要自己写个shader,这个shader就是设置颜色为黑白灰色
代码:
Shader "Custom/ShaderCamera" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0 } SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; fixed _LuminosityAmount; fixed4 frag(v2f_img i) : COLOR { fixed4 renderTex = tex2D(_MainTex, i.uv); float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b; fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount); return finalColor; } ENDCG } } FallBack "Diffuse" }
3.设置cube的材质shader
给cube附一个材质,自己编写shader,主要通过改变“Emission”属性的参数值来调节自发光的颜色。
cube的shader代码如下:
相关文章推荐
- Unity3D ----- 动态设置UGUI中Text的大小和位置
- unity 编辑器工具扩展
- 【Unity】关于项目中画线设定
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- 关于unity常见的面试题
- 【Unity】修改MainMaps 下的offset 的值
- unity 中的 数学函数库(完善中)
- 【Unity】 旧版动画 在某一帧增添事件
- Unity3D脚本中文字符乱码的解决方案
- unity 3D 5.3.3官方最新版 完整包下载,包含所有补丁包
- unity3d利用pano2VR实现全景视图效果
- unity3d学习笔记(十一)-NGUI结合Shader制作小map
- unity3d 在UGUI中制作自适应调整大小的滚动布局控件
- unity3d进程通信利用WM_COPYDATE和HOOK
- Unity3D外包(u3d外包)—就找北京动点软件(我们长年承接U3D外包、Maya、3DMax项目外包)
- iTween基础之Punch(摇晃)
- iTween基础之Shake(摆动)
- Unity3D 5 官方教程:粒子系统 How-Tos
- 关于Unity读取XML的简单学习
- 【Unity优化(转)】Unity+NGUI性能优化方法总结(我项目组的做法)