Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

本文介绍如何在Unity中使用Surface Shader实现一个从上到下渐变色的球体效果。通过定义Shader属性如光滑度、金属度及颜色等,并利用顶点位置信息计算渐变比例,最终实现球体表面的颜色渐变。该Shader还考虑了阴影和光照的影响。
Unity 一个面片的最大顶点数为65524,所以大于这个数,请拆分成多个面片
1.获取汽车x轴的最大值和最小值[-2.5,2.5]+R

surfaceShader 语法

surf :surface shader的方法名
vert :使用顶点程序方法名

surface shader 方法不能有返回值


源代码:
Shader "Sbin/SurfaceShader" {
	Properties {
		_Glossiness ("Smoothness", Range(0,1)) = 0.5
		_Metallic ("Metallic", Range(0,1)) = 0.0

		_UpColor("UpColor",color) = (1,0,0,1)
		_DownColor("DownColor",color) = (0,1,0,1)
		_Center("Center",range(-0.7,0.7)) = 0
		_R("R",range(0,0.5)) = 0.2
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Standard vertex:vert fullforwardshadows
		//说明:pragma surface method1 Standard vertex:method2	fullforwardshadows
		
		#pragma target 3.0

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
			float x:TEXCOORD0;
		};

		half _Glossiness;
		half _Metallic;

		float4 _UpColor;
		float4 _DownColor;
		float _Center; 
		float _R; 

		void vert(inout appdata_full v,out Input o){
			o.uv_MainTex = v.texcoord.xy;
			o.x = v.vertex.x;
		}

		void surf (Input IN, inout SurfaceOutputStandard o) {
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Metallic = _Metallic;
			o.Smoothness = _Glossiness;
			o.Alpha = c.a;

			float d = IN.x - _Center;//融合带
			float s = abs(d);
			d = d/s;//正负值分别描述上半部分和下半部分,取值1和-1

			float f = s/_R;	//范围>1:表示上下部分;范围<1:表示融合带
			f = saturate(f);
			d *= f;//表示全部[-1,1];范围>1:表示上部分;范围<1:表示融合带;范围<-1:表示下部分
				
			d = d/2+0.5;//将范围控制到[0,1],因为颜色值返回就是[0,1]
			o.Albedo += lerp(_UpColor,_DownColor,d);
		}
		ENDCG
	}
	FallBack "Diffuse"
}

效果:

详细概述:        从2018年开始虚拟现实、增强现实、混合现实(VR/AR/MR)技术已经被国家正式列入重点发展产业目录。由中国通信工业协会协同地方政府主办,国内各大企业与高校积极参与的《世界VR产业大会暨第某届中国国际通信电子产业博览会》每年都会大约10月中旬在南昌市举办,所以未来的数年将是虚拟现实技术大发展的时期。              本教学视频课程从企业真实虚拟现实项目中提取核心技术要点,总结必须开发功能要素,全面而细致的讲解虚拟现实之汽车模拟仿真项目中需要开发的各个功能模块、开发要点等。 本作从项目环境搭建、汽车零部件素材导入、汽车零部件模拟拆卸、主摄像机旋转与缩进控制、部件灵活运转算法、部件颜色喷汽车模拟导航、多摄像机镜头处理、项目整体音频音量控制、项目UI设计等方面,给出详细的解决方案。              本课程的细致学习将有助于虚拟现实企业高薪就业与优秀VR项目的高水平研发之目的。 一、热更新系列(技术含量:中高):A:《lua热更新技术中篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架()》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架()》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架()》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程()》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程()》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS() 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979 
对整threeJS体系进行全面剖析。整理出全面的教学大纲,涵盖内容面非常广。此教学版本为threeJS107版本。关于版本不建议大家使用低于90的版本学习。以下是课程目录1-ThreeJS概览(基本图形简介,什么是点线面如何绘制点线面,什么是材质,什么是几何体,什么是相机,什么是渲染器,什么是场景)2-相机和渲染器(详解相机类型,渲染器如何使用,针对不同场景怎么用,怎么调效果,怎么渲染,怎么输出画布,如何解决透明问题等等)3-创建平面几何(常见的几何体如何使用,如何使用简单的几何体绘制出自定义自己想要的几何体,关于几何体的性能剖析,如何解决性能,几何体的渲染原理)4-图形算法常见库(求直线的斜率  计算线段与圆的交点 计算线段的长度 判断折线是否在多边形内 等等)5-sprite精灵(怎么让一个图标永远朝向屏幕,精灵的属性,精灵材质原理等,广告提示框必用)6-骨骼游戏动画(什么是模型动画,常见游戏案例,如何让人头进行各种攻击动作)7-3d模型加载(常见模型格式,如何渲染不同格式,不同格式的特点,什么格式性能优越,模型渲染异常,贴图不显示等问题详解)8-高阶动态纹理(你所不知道的纹理用法,我说你不知道,你肯定不知道)9-漫游轨迹以及其动画路径(怎么绘制贝塞尔曲线,如何使用曲线上的路径,跟随路径移动的原理,相机如何运动,物体如何运动)10-着色器(什么是着色器。初识着色器基础,着色器材质怎么用,怎么使用着色器库)11-常见渲染以及透明度问题12-对象拾取以及拖拽(3d世界里面如何拖拽物体,拖拽的原理,mousemove mouseon等的事件效果)13-世界坐标以及组的问题(什么是相对坐标,什么是世界坐标,什么是当前坐标,怎么转化父子坐标系,组的优化,为什么用组,组的优势)14-指定对象旋转中心(什么是物体的几何体中心,如何改变中心,如何绕轴转动)15-对象渲染(多个场景一键切,切的优势,针对大项目的用法)16-拓展了解系列(不定期不断更新案例,各种酷炫效果bloom,halo等,以及各种3d图表,粒子案例等,不断构建你的3d实践能力)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Potter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值