Unity3D开发之更改材质的渲染模式
2018-01-18 09:50
253 查看
在工业可视化的项目中,需要用到对某个部件的特写,如果直接隐藏其他的模型会感觉突兀,所以我们会使用设置其他模型为半透明模式。Unity5.0版本出现的新版标准材质可以让我们直接在面板上更改渲染模式。不过代码来更改渲染模式确实很麻烦,要改的参数很多。
public enum RenderingMode
{
Opaque,
Cutout,
Fade,
Transparent
}
//设置材质的渲染模式
private void setMaterialRenderingMode(Material material, RenderingMode renderingMode)
{
switch (renderingMode)
{
case RenderingMode.Opaque:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;
break;
case RenderingMode.Cutout:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.EnableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 2450;
break;
case RenderingMode.Fade:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.EnableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
//material.SetFloat("" _Mode & quot;", 2);
break;
case RenderingMode.Transparent:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
break;
}
}效果如下图:
在需要更改渲染模式时直接输入相应的参数即可。
public enum RenderingMode
{
Opaque,
Cutout,
Fade,
Transparent
}
//设置材质的渲染模式
private void setMaterialRenderingMode(Material material, RenderingMode renderingMode)
{
switch (renderingMode)
{
case RenderingMode.Opaque:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;
break;
case RenderingMode.Cutout:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.EnableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 2450;
break;
case RenderingMode.Fade:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.EnableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
//material.SetFloat("" _Mode & quot;", 2);
break;
case RenderingMode.Transparent:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
break;
}
}效果如下图:
在需要更改渲染模式时直接输入相应的参数即可。
相关文章推荐
- 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式
- unity3D学习笔记之六 Material(材质)的几种RenderingMode(渲染模式)
- 从零开始Unity3D游戏开发【4 材质球和渲染纹理】
- 自动生成材质Material(Unity3D开发之十九)
- Android OpenGL ES 简明开发教程七:材质渲染
- Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)
- 基于Unity3D的并行渲染模型的开发教程(三):Network View
- Unity3d开发(十二)使用Menu.SetCheck更改菜单勾选状态
- 游戏开发设计模式之子类沙盒模式(unity3d 示例实现)
- 详解Unity3D Shader开发之渲染管线
- Unity3d在runtime中改变material渲染模式
- 游戏开发设计模式之子类沙盒模式(unity3d 示例实现)
- Android OpenGL ES 简明开发教程七:材质渲染
- Android OpenGL ES 简明开发教程 07 <材质渲染>
- 基于Unity3D的并行渲染模型的开发教程(五):Leap Motion
- 详解Unity3D Shader开发之渲染管线
- 使用VirtualView渲染的前端UI组件开发模式
- Android OpenGL ES 简明开发教程七:材质渲染
- ios开发日记-1 设置UIImage的渲染模式:UIImage.renderingMode
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)