unity实现模型颜色渐变
来源:互联网 发布:软件著作权代办加急 编辑:程序博客网 时间:2024/05/16 10:32
最近看到视频有演示汽车换漆,随后自己利用shader与获取模型顶点颜色,实现了换漆效果,本人能力有限,希望多多提出不足,多多向大神学习。
1、shader是自己找的一个,本人不懂shader的编写,但是这个确实是可以用的。
Shader "ChangeShader" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}}SubShader {Tags { "RenderType"="Opaque" }Cull OffPass{CGPROGRAM#pragma vertex vert#pragma fragment fragstruct data {float4 vertex : POSITION;fixed4 color: COLOR;};data vert (data v) {v.vertex = mul(UNITY_MATRIX_MVP, v.vertex);return v;}fixed4 frag(data f) : COLOR {return f.color;}ENDCG}} FallBack "Diffuse"}
在近期的研究下,ChangeShader用于一个物体对象后只能是白色,不能调节颜色,于是纠结了,如果想再一个很华丽的shader里面想实现汽车换漆过度的效果显然这个ChangeShader是不可以满足的,那么我就分享一下自己琢磨的修改shader的方式,可能不是正确的,但是实验证明可以。
例如一个shader是这样的,里面有pass{。。。},那么把
Pass{CGPROGRAM#pragma vertex vert#pragma fragment fragstruct data {float4 vertex : POSITION;fixed4 color: COLOR;};data vert (data v) {v.vertex = mul(UNITY_MATRIX_MVP, v.vertex);return v;}fixed4 frag(data f) : COLOR {return f.color;}ENDCG}加到它的后面就可以了,具体原理不详,望高手指点。so cool!
demo下载:http://download.csdn.net/my,F1与F2键。
using UnityEngine;using System.Collections;public class test : MonoBehaviour { public enum AXIS { axis_X, axis_Y, axis_Z } public AXIS stateAxis = AXIS.axis_X;// Use this for initialization private Mesh mMesh = null; private Vector3[] vertices = null; private Color[] colorList = null; public float num = 0; private float startValue = 0; private bool isChangeColor = false; private Color _color = Color.white; private Color startColor = Color.white; public GameObject targetObj = null;void Start () { Init();}// Update is called once per framevoid Update () { if (Input.GetKeyDown(KeyCode.F1) && !isChangeColor) { _color = Color.yellow; isChangeColor = true; } if (Input.GetKeyDown(KeyCode.F2) && !isChangeColor) { _color = Color.red; isChangeColor = true; } if (isChangeColor) { SetChangeModeColor(_color); }} void Init() { if (null == targetObj) targetObj = gameObject; mMesh = targetObj.GetComponent<MeshFilter>().mesh; if (null == mMesh) { Debug.LogError(targetObj.name + "_MeshFilter is null"); return; } vertices = mMesh.vertices; colorList = new Color[vertices.Length]; //SetChangeModeColor(Color.red); num = -gameObject.renderer.bounds.extents.z; startValue = num; } void SetChangeModeColor(Color targetColor) { if (startColor == targetColor) { isChangeColor = false; return; } if (num > -startValue) { isChangeColor = false; startColor = targetColor; num = startValue; } for (int index = 0; index < vertices.Length; index++) { if (stateAxis == AXIS.axis_X) colorList[index] = Color.Lerp(startColor, targetColor, vertices[index].x + num); if (stateAxis == AXIS.axis_Y) colorList[index] = Color.Lerp(startColor, targetColor, vertices[index].y + num); if (stateAxis == AXIS.axis_Z) colorList[index] = Color.Lerp(startColor, targetColor, vertices[index].z + num); } num += (Time.deltaTime*1); mMesh.colors = colorList; }}
希望学习到更多。
demo地址下载
http://download.csdn.net/detail/fanglrui/6941347
0 0
- unity实现模型颜色渐变
- 【iOS】用RGB颜色模型实现彩虹渐变
- Unity制作倒计时颜色渐变
- 实现 颜色渐变
- 背景实现颜色渐变
- CAGradientLayer_实现颜色渐变
- CAGradientLayer实现颜色渐变
- 实现颜色渐变
- android实现颜色渐变
- iOS实现颜色渐变
- iOS 实现颜色渐变
- ios 实现颜色渐变(渐变色)
- 实现透明度渐变和颜色渐变
- Unity Text文本颜色渐变效果
- Unity实现ui渐变效果
- 窗体颜色渐变效果实现
- 用CSS实现颜色渐变
- CSS3实现背景颜色渐变
- struts1上传文件(限定txt类型)
- 趋势科技年度巨献 《2020》反黑大片
- C#摄像头编程
- C++——派生类的构造函数实例
- ZOJ 2478 Encoding
- unity实现模型颜色渐变
- JavaMail 发送邮件
- 14章 异常处理
- 天天爱消除刷分脚本(终于打败大毛了。。)
- 读取Properties文件
- POJ 2524 Ubiquitous Religions 并查集
- Mysql中文乱码问题完美解决方案
- 解决BlazeDS基于Streaming通道推送消息时,IE11+Flex无法收到推送消息问题
- c#读写XML文件