【Unity3D】LOD Group 多细节层次(CrossFade淡出淡入效果)

news2025/1/8 4:47:42

新建一个空物体挂载LOD Group脚本 LOD0(球体) LOD1(立方体) LOD2(单面板Quad)

可发现我勾选了Cross Fade并没有渐隐效果,是因为Shader是不透明的,不支持。

经过如下修改后支持Cross Fade 淡出淡入效果(注意3个物体的材质是不一样的,Shader一样)

Fade Transition Width 越小越慢渐变,越大越快开始渐变。
案例的LOD0、1、2的值分别是0.05、0.1、0.3 

使用如下着色器支持透明化且支持Cross Fade模式:即LOD0和LOD1之间 以及 LOD1与LOD2的淡出淡入。

LOD核心代码部分:

LOD_FADE_CROSSFADE变体是由LOG Group选择Cross Fade模式自动设置的。
unity_LODFade.x是传入的渐变透明度,当是负数时说明是淡入物体的透明度值,需要+1操作,负数时是从-1变化到0,+1后就是从0变化到1。
当是正数时,说明是淡出物体的透明度值,直接拿来使用。
unity_LODFade.y是LOD Level
具体参数数值可以打开FrameDebugger调试器看,在淡出淡入时会同时渲染2个LOD物体的。

#pragma multi_compile _ LOD_FADE_CROSSFADE

... ...

float lodFadeAlpha = 1;
#if LOD_FADE_CROSSFADE
	lodFadeAlpha = unity_LODFade.x;
	if(lodFadeAlpha < 0)
		lodFadeAlpha = 1 + lodFadeAlpha;
#endif
return fixed4(ambient + diffuse * atten, lodFadeAlpha * col.a * _Alpha);
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
 
Shader "MilkShader/Nine/AlphaBlendShadow"
{
	Properties
	{
		_MainTex ("MainTexture", 2D) = "while"{}
		_Diffuse ("Diffuse", Color) = (1,1,1,1)		
		_Alpha ("Alpha", Range(0,1))  = 1
	}
	SubShader
	{
		Tags { "RenderType"="Transparent" "IgnoreProjector" = "True" "Queue"="Transparent" }
		//LOD 100
		
		Pass
		{
			Tags
			{
				"LightMode" = "ForwardBase"
			}
			Blend SrcAlpha OneMinusSrcAlpha			
			ZWrite Off
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#pragma multi_compile_fwdbase
			#pragma multi_compile _ LOD_FADE_CROSSFADE
			
			#include "UnityCG.cginc"
			#include "Lighting.cginc"
			#include "AutoLight.cginc"
 
			struct appdata
			{
				float4 vertex : POSITION;			
				float3 normal : NORMAL;
				float2 uv : TEXCOORD0;
			};
 
			struct v2f
			{			
				float2 uv : TEXCOORD0;
				float4 pos : SV_POSITION;
				float3 worldNormal : TEXCOORD1;
				float3 worldPos : TEXCOORD2;			
				SHADOW_COORDS(3)
			};
 
			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed4 _Diffuse;
			fixed _Alpha;
			
			v2f vert (appdata v)
			{
				v2f o;
				o.uv = TRANSFORM_TEX(v.uv, _MainTex);
				o.pos = UnityObjectToClipPos(v.vertex);				
				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				TRANSFER_SHADOW(o)
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{				
				fixed4 col = tex2D(_MainTex, i.uv);
				fixed3 albeto = col.rgb * _Diffuse.rgb;
				fixed3 worldNormal = normalize(i.worldNormal);
				fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
				fixed3 diffuse = _LightColor0.rgb * albeto * saturate(dot(worldNormal,worldLightDir));
				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albeto;
				UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);
				float lodFadeAlpha = 1;
				#if LOD_FADE_CROSSFADE				
					lodFadeAlpha = unity_LODFade.x;
					if(lodFadeAlpha < 0)
						lodFadeAlpha = 1 + lodFadeAlpha;
				#endif
				return fixed4(ambient + diffuse * atten, lodFadeAlpha * col.a * _Alpha);
			}
			ENDCG
		}
	}
	//正常使用的是如下,不会生成阴影!
	FallBack "Transparent/VertexLit"
 
	//开启阴影投射(因为VertexLit中有"LightMode" = "ShadowCaster"的Pass生成阴影图
	//FallBack "VertexLit"
}

Speed Tree效果 待研究,是一种Mesh混合处理... 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2025年最新】OpenWrt 更换国内源的指南(图形界面版)

在上一篇文章中我们讲解了如何使用命令行更换国内源&#xff0c;如果你没有终端工具&#xff0c;或者不喜欢命令行&#xff0c;那么图形界面方式将会是更简单有效的方式。 命令行版本&#xff1a;【2025年最新】OpenWrt 更换国内源的指南(命令行)-CSDN博客 为什么选择通过图形…

Jdk动态代理源码缓存优化比较(JDK17比JDK8)

目录 JDK 8的缓存实现 JDK 17的缓存实现 优化比较 总结实际应用影响 JDK 8的缓存实现 // JDK 8 private static final WeakCache<ClassLoader, Class<?>[], Class<?>> proxyClassCache new WeakCache<>(new KeyFactory(), new ProxyClassFact…

移动电商的崛起与革新:以开源AI智能名片2+1链动模式S2B2C商城小程序为例的深度剖析

摘要&#xff1a;本文旨在探讨移动电商的崛起背景、特点及其对传统电商模式的革新影响&#xff0c;并以开源AI智能名片21链动模式S2B2C商城小程序为具体案例&#xff0c;深入分析其在移动电商领域的创新实践。随着移动互联网技术的飞速发展&#xff0c;移动电商已成为电商行业的…

【计算机网络】课程 实验三 跨交换机实现 VLAN 间路由

实验 3 跨交换机实现 VLAN 间路由 一、实验目的 1&#xff0e;理解跨交换机之间VLAN的特点。 2&#xff0e;掌握如何在交换机上划分基于端口的VLAN&#xff0c;给VLAN内添加端口。 3&#xff0e;利用三层交换机跨交换机实现 VLAN 间路由。 二、实验分析与设计 【背景描述…

计算机网络——数据链路层-介质访问控制

一、介质访问控制方法 在局域网中, 介质访问控制(medium access control)简称MAC&#xff0c;也就是信道访问控制方法&#xff0c;可以 简单的把它理解为如何控制网络节点何时发送数据、如何传输数据以及怎样在介质上接收数据&#xff0c; 是解决当局域网中共用信道的使用产生竞…

121.【C语言】数据结构之快速排序(未优化的Hoare排序存在的问题)以及时间复杂度的分析

目录 1.未优化的Hoare排序存在的问题 测试代码 "量身定制"的测试代码1 运行结果 "量身定制"的测试代码2 运行结果 "量身定制"的测试代码3 运行结果 分析代码1、2和3栈溢出的原因 排有序数组的分析 分析测试代码1:给一个升序数组,要求排…

【操作系统不挂科】操作系统期末考试卷<2>(单选题&简答题&计算与分析题&程序分析题&应用题)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 操作系统不挂科 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本章为系列题库&#xff0c;其他章节看下面传送门其他博客 【操作系统不挂科】&#xff1c;操作系统概论&#xff08;1&#xff09;&#xff1e…

解密人工智能:如何改变我们的工作与生活

引言&#xff1a;AI崛起背后的思考 在过去的几十年里&#xff0c;人工智能&#xff08;AI&#xff09;从科幻小说中的神秘存在&#xff0c;逐渐走进了我们的日常生活。无论是智能手机的语音助手&#xff0c;还是推荐心仪商品的电商平台&#xff0c;AI技术已悄然融入工作与生活的…

LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互大模型,通常基于云计算架构,无需在本地部署复杂的模型和硬件,…

Chapter 1 Understanding Large Language Models

文章目录 Understanding Large Language ModelsWhat is an LLM?Applications of LLMSStages of building and using LLMsUsing LLMS for different tasksA closer look at the GPT architectureBuilding a large language modelSummary Understanding Large Language Models …

游戏社交趋势下,游戏语音再升级!

如今&#xff0c;游戏已成为我们社交生活的一个重要娱乐方式&#xff0c;春节临近&#xff0c;与亲朋好友一起畅玩“开黑”无疑是节假日的一大乐趣。在游戏社交互动中&#xff0c;“游戏语音”不可或缺。在传统游戏语音领域&#xff0c;多人在线游戏如 MOBA、FPS 和 MMORPG 的实…

CTFshow—远程命令执行

29-35 Web29 代码利用正则匹配过滤了flag&#xff0c;后面加了/i所以不区分大小写。 可以利用通配符绕过 匹配任何字符串&#xff0f;文本&#xff0c;包括空字符串&#xff1b;*代表任意字符&#xff08;0个或多个&#xff09; ls file * ? 匹配任何一个字符&#xff08;不…

Elasticsearch 入门教程

掌握Elasticsearch&#xff1a;从入门到入门 一、ES 背景1.1 ElasticSearch 的背景1.2 ElasticSearch 的应用场景 二、ES 简介2.1 ElasticSearch 简介2.2 ElasticSearch 的定义与特点2.3 ElasticSearch 与传统数据库的区别2.4 ElasticSearch 的优势和劣势 三、ES 的核心概念3.1…

【Vue学习】Vue 组件实例的生命周期(四个阶段,八个钩子)

一、为什么要理解生命周期&#xff1f; 理解生命周期就像是知道了一部电影的剧情走向&#xff0c;能让你在适当的时机做出反应。Vue 生命周期的钩子让你可以在不同的阶段插入你的逻辑&#xff0c;像是提前准备、后期清理或者在数据更新时做点事情。这种“精确控制”的能力会让你…

【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作

文章目录 Section 6&#xff1a;Transforming and Substituting TextS06L21 Inserting, Changing, Replacing, and Joining1 定位到行首非空字符&#xff0c;并启用插入模式2 在紧挨光标的下一个字符位置启动插入模式3 定位到一行末尾&#xff0c;并启用插入模式4 定位到光标的…

vip与haproxy构建nginx高可用集群传递客户端真实ip

问题 系统使用了vip与haproxy实现高可用以及对nginx进行负载均衡&#xff0c;但是发现在上游的应用服务无法拿到客户端的请求ip地址&#xff0c;拿到的是主haproxy机器的ip&#xff0c;以下是nginx与haproxy的缩减配置&#xff1a; location ~* ^/(xx|xx) {proxy_pass http:/…

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html&#xff09;显示图片界面 总结 前言 最近&#xff0c;老板让写一个程序把yolov5检测模型部署到web端&#xff0c;在网页直接进行目标检测。经过1个星期的努力&#xff0c;终于实…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

【Linux】RPMSG通讯协议介绍

RPMSG协议通讯协议介绍 RPMSG&#xff0c;全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中&#xff0c;已经内置了RPMSG。 Linux RPMSG基于共享内存&#xff0c;利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android&#xff0c;都可…

【51单片机-零基础chapter1】

安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…