首页 技术 正文
技术 2022年11月11日
0 收藏 600 点赞 3,388 浏览 2272 个字

很多Shader中都会定义RenderType这个类型,但是一直搞不明白到底是干嘛的,官方文档是这样结解释的:Rendering with Replaced Shaders

Rendering with Replaced Shaders

shader通过camera中 Camera.RenderWithShader 和 Camera.SetReplacementShader实现替换功能,这两个方法都接受两个参数:Shader和replacementTag ,根据情况:

  • replacementTag 为空,场景中所有物体都会使用replacement shader进行渲染
  • replacementTag 不为空,如果物体不存在tag则不进行渲染。
  • replacementTag 不为空,如果物体shgader中存在、与之placement shader中相同的tag’,则使用placement shader中对应subshader进行渲染,否则不渲染。

RenderType类型

  1. Opaque: most of the shaders (Normal, Self Illuminated, Reflective, terrain shaders).
  2. Transparent: most semitransparent shaders (Transparent, Particle, Font, terrain additive pass shaders).
  3. TransparentCutout: masked transparency shaders (Transparent Cutout, two pass vegetation shaders).
  4. Background: Skybox shaders.
  5. Overlay: GUITexture, Halo, Flare shaders.
  6. TreeOpaque: terrain engine tree bark.
  7. TreeTransparentCutout: terrain engine tree leaves.
  8. TreeBillboard: terrain engine billboarded trees.
  9. Grass: terrain engine grass.
  10. GrassBillboard: terrain engine billboarded grass.

测试

  1. 随便写个两个shader,建立对应的材质:
Shader "Unlit/BlueShader"
{
Properties
{
_Color("Color",Color) = (0,0,0,1)
}
SubShader
{
Tags { "RenderType"="transparent" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {float4 vertex : POSITION;};struct v2f{
float4 vertex : SV_POSITION;
};fixed4 _Color ;v2f vert (appdata v){
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);return o;
}fixed4 frag (v2f i) : SV_Target{
fixed4 col = _Color;return col;
}
ENDCG
}
}
}
  1. 另一个shader与之相似,修改名字为"RedShader", 同时修改RenderType为"transparent":
Shader "Unlit/RedShader"
{
Properties
{
_Color("Color",Color) = (0,0,0,1)
}
SubShader
{
Tags { "RenderType"="transparent" }
pass
{}
}
}
  1. 建议一个Replacement shader,和rendshader相似,并将输出颜色修改为固定黄色。之修改下名字:
Shader "Unlit/ReplacementShader"
{
Properties
{
_Color("Color",Color) = (0,0,0,1)
}
SubShader
{
Tags { "RenderType"="transparent" }
pass
{
...
//输出为黄色,如果替换了输出为黄色
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = fixed4(1,1,0,0);
return col;
}
...
}
}
}
  1. 写一个相机上的脚本,在启动时替换shader
public class ReplaceMent : MonoBehaviour {public Shader rpShader;
// Use this for initialization
void Start ()
{
//全部替换渲染
//GetComponent<Camera> ().SetReplacementShader(rpShader,"");
//RenderType="rpShader中RenderType"的sunshader进行渲染,
GetComponent<Camera> ().SetReplacementShader(rpShader,"RenderType");
}
}

执行前

执行后

如果在SetReplacementShader函数中tag为空,则输出为全黄色。

结论

  1. 不知道啥时候可以用到

引用

  1. unity 替换渲染 ( Rendering with Replaced Shaders )
  2. 官方文档
  3. 浅析Unity shader中RenderType的作用及_CameraDepthNormalsTexture
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898