【U3D/Shader】07.透明效果

自我介绍广东双非一本的大三小白,计科专业,想在制作毕设前夯实基础,毕设做出一款属于自己的游戏!透明效果实现透明效果,就要控制透明通道unity中会有两种方法实现透明效果透明度测试透明度混合unity里面,倘若场景中包含很多模型时,我们需要考虑他们的渲染顺序来得到正确的排序效果,这就需要深度缓冲(z-buffer):根据深度缓存中的值来判断该片元距离摄像机的距离倘若A挡住B,我们先渲染A,在渲染B时因为深度测试的时候会判断出B离摄像机更远,就不会写入到颜色缓冲中了但是!要实现透明
摘要由CSDN通过智能技术生成

自我介绍

广东双非一本的大三小白,计科专业,想在制作毕设前夯实基础,毕设做出一款属于自己的游戏!

透明效果

实现透明效果,就要控制透明通道

unity中会有两种方法实现透明效果

  1. 透明度测试
  2. 透明度混合

unity里面,倘若场景中包含很多模型时,我们需要考虑他们的渲染顺序来得到正确的排序效果,这就需要

  • 深度缓冲(z-buffer):根据深度缓存中的值来判断该片元距离摄像机的距离
  • 倘若A挡住B,我们先渲染A,在渲染B时因为深度测试的时候会判断出B离摄像机更远,就不会写入到颜色缓冲中了

但是!

要实现透明度混合时,我们一定要关闭深度写入

  • 透明度测试(简单粗暴):只要一个片元的透明度不满足条件(小于某个阈值),那么该片元将会被舍弃,而不会对颜色缓冲产生任何影响
  • 透明度混合:实现真正的半透明效果,关闭深度写入,不能关闭深度测试
    • 当使用透明度混合渲染时,先比较它的深度值与当前深度缓冲中的深度值,如果该深度值距离摄像机更远,就不进行混合操作(反之则混合),这意味着当一个不透明物体出现在一个透明物体前面,先渲染不透明物体,它仍然可以正常的遮挡住透明物体

unity shader的渲染顺序

解决渲染顺序的问题,unity提出了 渲染队列 这一解决方案

我们可以用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列,索引号越小表示越早被渲染


透明度测试

主要是提供一个新的float变量与主纹理的透明通道值(r)进行比较 来控制需要过滤掉的片元是否显示

Shader "Unlit/016"
{
   
     Properties
	{
   
		_MainTex("MainTex", 2D) = "white" {
   }
		_Diffuse("Diffuse", Color) = (1,1,1,1)
		_Cutoff("Alpha Cutoff", Range(0,1)) = 0.5	//决定我们调用clip进行透明度测试时使用的判断条件
	}

	SubShader
	{
   
		//透明度测试使用的渲染队列是 AlphaTest
		//"IgnoreProjector"="True" 意味着 这个shader不会受投影器(Projectors)影响
		Tags {
    "Queue"="AlphaTest" "IgnoreProjector"="True" }
		LOD 100

		Pass
		{
   
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"
			#include "Lighting.cginc"

			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed4 _Diffuse;
			float _Cutoff;

			struct v2f
			{
   
				float4 vertex : SV_POSITION;
				fixed3 worldNormal: TEXCOORD0;
				float3 worldPos: TEXCOORD1;
				float2 uv : TEXCOORD2;
			};

			v2f vert (appdata_base v)
			{
   
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.worldNormal = UnityObjectToWorldNormal(v.normal);</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值