Rendering Mode 渲染模式 Standard Shader系列5

本文档介绍了Unity Standard Shader的渲染模式,包括不透明、Cutout、透明和Fade四种模式,详细解释了每种模式的特点和适用场景,如Cutout模式适合创建有硬边透明效果的物体,而Fade模式则用于实现物体淡入淡出的动画效果。

Rendering Mode 渲染模式

本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>)
仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处。
文章中涉及到的操作都是基于Unity2018.3版本
参考链接:https://docs.unity3d.com/Manual/StandardShaderMaterialParameterRenderingMode.html

在这里插入图片描述
A Standard Shader material with default parameters and no values or textures assigned. The Rendering Mode parameter is highlighted.
突出显示渲染模式参数。

The first Material Parameter in the Standard Shader is Rendering Mode. This allows you to choose whether the object uses transparency, and if so, which type of blending mode to use.
标准着色器中的第一个材质参数是渲染模式。这允许您选择对象是否使用透明度,如果是,使用哪种类型的混合模式。

  • Opaque - Is the default, and suitable for normal solid o
### 如何在 Unity 中更改材质球的渲染模式 在 Unity 中,可以通过编程方式来修改材质球的 `Rendering Mode` 属性。这通常涉及到访问并调整材质对象的相关设置。 对于 Standard Shader 材质而言,在脚本中可以利用特定的方法实现这一功能。下面是一个具体的例子: #### 修改 Material 的 Rendering Mode 方法 定义一个函数用于设定材质的渲染模式,此操作会直接影响到该材质所应用的对象外观表现形式[^2]。 ```csharp using UnityEngine; public static class MaterialExtensions { public enum RenderingMode { Opaque, Cutout, Fade, Transparent } /// <summary> /// 设置材质的渲染模式. /// </summary> /// <param name="material">要修改的材质.</param> /// <param name="mode">目标渲染模式.</param> public static void SetMaterialRenderingMode(this Material material, RenderingMode mode) { switch (mode) { case RenderingMode.Opaque: material.SetInt("_Mode", 0); material.SetOverrideTag("RenderType", ""); break; case RenderingMode.Cutout: material.SetInt("_Mode", 1); material.SetOverrideTag("RenderType", "TransparentCutout"); break; case RenderingMode.Fade: material.SetInt("_Mode", 2); material.SetOverrideTag("RenderType", "Fade"); break; case RenderingMode.Transparent: material.SetInt("_Mode", 3); material.SetOverrideTag("RenderType", "Transparent"); break; } material.DisableKeyword("_SPECULARHIGHLIGHTS_OFF"); material.DisableKeyword("_GLOSSYREFLECTIONS_OFF"); bool shouldEnableSpecular = mode != RenderingModeOpaque && mode != RenderingModeCutout; string specularState = shouldEnableSpecular ? "" : "_SPECULARHIGHLIGHTS_OFF"; material.EnableKeyword(specularState); string reflectionsState = shouldEnableSpecular ? "" : "_GLOSSYREFLECTIONS_OFF"; material.EnableKeyword(reflectionsState); } } ``` 这段代码展示了如何创建一个扩展方法 `SetMaterialRenderingMode` ,它接受一个枚举参数指定新的渲染模式,并据此更新 `_Mode` 和其他相关属性以适应不同的透明度效果需求。 #### 应用实例 当希望在一个场景启动时就改变多个网格渲染器下的材质颜色及其渲染模式为例: ```csharp void Start() { MeshRenderer[] meshes = GetComponentsInChildren<MeshRenderer>(); foreach (var renderer in meshes) { var mat = renderer.material; mat.color = new Color(1, 0, 0, 0.5f); // 更改颜色为半透明红色 // 调用自定义静态类中的方法来更改编译模式 mat.SetMaterialRenderingMode(MaterialExtensions.RenderingMode.Transparent)[^3]; } } ``` 上述代码片段会在游戏开始运行的时候遍历所有的子物体上的 `MeshRenderer` 组件,然后逐一将其对应的材质的颜色设为带有 alpha 值(即部分透明)的红色,并且将这些材质切换成透明 (`Transparent`) 渲染模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值