Unity 对象颜色梯形渐变Shader,可调节
来源:互联网 发布:mysql不支持emoji表情 编辑:程序博客网 时间:2024/06/15 19:49
1.代码如下(这个无外发光):
Shader "MyShader/LinearGradientsNoLight" { Properties { [HideInInspector] __dirty("", Int) = 1 _Soften("Soften", Range(0.1 , 10)) = 1.092425 _MainValue("MainValue", Range(-10 , 10)) = -0.0336646 _Brightness("Brightness", Range(0 , 1)) = 0.2873606 _GroundColor("GroundColor", Color) = (0.9448276,0,1,0) _UpperColor("UpperColor", Color) = (1,1,1,0) } SubShader { Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "IgnoreProjector" = "True" } Cull Back CGPROGRAM#include "UnityShaderVariables.cginc"#pragma target 3.0#pragma multi_compile_instancing#pragma surface surf Standard keepalpha addshadow fullforwardshadows struct Input { float3 worldPos; }; uniform float _MainValue; uniform float _Soften; uniform float _Brightness; UNITY_INSTANCING_CBUFFER_START(MyShaderTestShader) UNITY_DEFINE_INSTANCED_PROP(float4, _GroundColor) UNITY_DEFINE_INSTANCED_PROP(float4, _UpperColor) UNITY_INSTANCING_CBUFFER_END void surf(Input i , inout SurfaceOutputStandard o) { float4 _GroundColor_Instance = UNITY_ACCESS_INSTANCED_PROP(_GroundColor); float4 _UpperColor_Instance = UNITY_ACCESS_INSTANCED_PROP(_UpperColor); float3 ase_vertex3Pos = mul(unity_WorldToObject, float4(i.worldPos , 1)); float clampResult55 = clamp(saturate(((ase_vertex3Pos.y + _MainValue) / _Soften)) , _Brightness , 1.0); float4 lerpResult61 = lerp(_GroundColor_Instance , _UpperColor_Instance , clampResult55); o.Albedo = lerpResult61.rgb; o.Alpha = 1; } ENDCG } Fallback "Diffuse" CustomEditor "ASEMaterialInspector"}
2.代码如下(这个有轮廓外发光):
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "MyShader/LinearGradients"{ Properties { [HideInInspector] __dirty("", Int) = 1 _Emission("Emission", Range(0 , 10)) = 0 _EmissionColor("EmissionColor", Color) = (0,0,0,0) _Soften("Soften", Range(0.1 , 10)) = 1.092425 _MainValue("MainValue", Range(-10 , 10)) = -0.0336646 _Brightness("Brightness", Range(0 , 1)) = 0.2873606 _GroundColor("GroundColor", Color) = (0.9448276,0,1,0) _UpperColor("UpperColor", Color) = (1,1,1,0) _Normal("Normal", 2D) = "bump" {} [HideInInspector] _texcoord("", 2D) = "white" {} } SubShader { Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "IgnoreProjector" = "True" "IsEmissive" = "true" } Cull Back CGINCLUDE#include "UnityShaderVariables.cginc"#include "UnityPBSLighting.cginc"#include "Lighting.cginc"#pragma target 3.0#pragma multi_compile_instancing#ifdef UNITY_PASS_SHADOWCASTER#undef INTERNAL_DATA#undef WorldReflectionVector#undef WorldNormalVector#define INTERNAL_DATA half3 internalSurfaceTtoW0; half3 internalSurfaceTtoW1; half3 internalSurfaceTtoW2;#define WorldReflectionVector(data,normal) reflect (data.worldRefl, half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal)))#define WorldNormalVector(data,normal) fixed3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal))#endif struct Input { float2 uv_texcoord; float3 worldPos; float3 viewDir; INTERNAL_DATA }; uniform sampler2D _Normal; uniform float4 _Normal_ST; uniform float _MainValue; uniform float _Soften; uniform float _Brightness; uniform float _Emission; uniform float4 _EmissionColor; UNITY_INSTANCING_CBUFFER_START(MyTestShader) UNITY_DEFINE_INSTANCED_PROP(float4, _GroundColor) UNITY_DEFINE_INSTANCED_PROP(float4, _UpperColor) UNITY_INSTANCING_CBUFFER_END void surf(Input i , inout SurfaceOutputStandard o) { float2 uv_Normal = i.uv_texcoord * _Normal_ST.xy + _Normal_ST.zw; float3 tex2DNode76 = UnpackNormal(tex2D(_Normal, uv_Normal)); o.Normal = tex2DNode76; float4 _GroundColor_Instance = UNITY_ACCESS_INSTANCED_PROP(_GroundColor); float4 _UpperColor_Instance = UNITY_ACCESS_INSTANCED_PROP(_UpperColor); float3 ase_vertex3Pos = mul(unity_WorldToObject, float4(i.worldPos , 1)); float clampResult55 = clamp(saturate(((ase_vertex3Pos.y + _MainValue) / _Soften)) , _Brightness , 1.0); float4 lerpResult61 = lerp(_GroundColor_Instance , _UpperColor_Instance , clampResult55); o.Albedo = lerpResult61.rgb; float3 normalizeResult72 = normalize(i.viewDir); float dotResult70 = dot(tex2DNode76 , normalizeResult72); o.Emission = (pow((1.0 - saturate(dotResult70)) , _Emission) * _EmissionColor).rgb; o.Alpha = 1; } ENDCG CGPROGRAM#pragma surface surf Standard keepalpha fullforwardshadows ENDCG Pass { Name "ShadowCaster" Tags{ "LightMode" = "ShadowCaster" } ZWrite On CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma target 3.0#pragma multi_compile_shadowcaster#pragma multi_compile UNITY_PASS_SHADOWCASTER#pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2# include "HLSLSupport.cginc"#if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )#define CAN_SKIP_VPOS#endif#include "UnityCG.cginc"#include "Lighting.cginc"#include "UnityPBSLighting.cginc" sampler3D _DitherMaskLOD; struct v2f { V2F_SHADOW_CASTER; float3 worldPos : TEXCOORD6; float4 tSpace0 : TEXCOORD1; float4 tSpace1 : TEXCOORD2; float4 tSpace2 : TEXCOORD3; float4 texcoords01 : TEXCOORD4; UNITY_VERTEX_INPUT_INSTANCE_ID }; v2f vert(appdata_full v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_OUTPUT(v2f, o); UNITY_TRANSFER_INSTANCE_ID(v, o); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; half3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w; fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); o.texcoords01 = float4(v.texcoord.xy, v.texcoord1.xy); o.worldPos = worldPos; TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) return o; } fixed4 frag(v2f IN#if !defined( CAN_SKIP_VPOS ) , UNITY_VPOS_TYPE vpos : VPOS#endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(IN); Input surfIN; UNITY_INITIALIZE_OUTPUT(Input, surfIN); surfIN.uv_texcoord.xy = IN.texcoords01.xy; float3 worldPos = float3(IN.tSpace0.w, IN.tSpace1.w, IN.tSpace2.w); fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); surfIN.viewDir = IN.tSpace0.xyz * worldViewDir.x + IN.tSpace1.xyz * worldViewDir.y + IN.tSpace2.xyz * worldViewDir.z; surfIN.worldPos = worldPos; surfIN.internalSurfaceTtoW0 = IN.tSpace0.xyz; surfIN.internalSurfaceTtoW1 = IN.tSpace1.xyz; surfIN.internalSurfaceTtoW2 = IN.tSpace2.xyz; SurfaceOutputStandard o; UNITY_INITIALIZE_OUTPUT(SurfaceOutputStandard, o) surf(surfIN, o);#if defined( CAN_SKIP_VPOS ) float2 vpos = IN.pos;#endif SHADOW_CASTER_FRAGMENT(IN) } ENDCG } } Fallback "Diffuse" CustomEditor "ASEMaterialInspector"}
阅读全文
0 0
- Unity 对象颜色梯形渐变Shader,可调节
- unity实现模型颜色渐变
- Unity制作倒计时颜色渐变
- Unity Shader学习笔记:渐变纹理
- 【Unity Shader】用shader控制背景的倾斜渐变
- 【Unity Shader】用shader控制背景的倾斜渐变
- C# TrackBar 控件调节 窗体透明度及颜色渐变
- 颜色渲染器Shader对象
- Unity Text文本颜色渐变效果
- Unity Shader 学习笔记 (二) 简单颜色Shader
- Unity Shader入门精要笔记(十四):渐变纹理
- <Shader>模型颜色动态渐变,lerp的灵活使用
- 【Unity&NGUI】Label的颜色动态改变以及渐变颜色
- 【Unity Shader】1.Unity的基本Shader框架学习(颜色,光照,材质)
- unity shader学习笔记(六)——Unity中的基础纹理之渐变纹理
- Unity的基本Shader框架写法&颜色、光照与材质
- unity shader 固定管线实例(二) 光照 颜色和纹理
- unity shader 根据世界坐标,改变物体显示的颜色
- Android Hook PackageManager
- 《机器学习实战》----k-近邻算法
- ZM学习笔记——虚拟机VMware+centos6.5静态ip可上网配置
- omapl138-linux-IP
- UNIX高级环境编程-环境搭建
- Unity 对象颜色梯形渐变Shader,可调节
- javascript实现一个自制网页音乐播放器
- Squeeze-and-Excitation Networks论文翻译——中文版
- 求数列的和
- Android学习路线指南
- MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
- OpenGL从1.0开始--计算机动画
- 前端常见跨域解决方案汇总
- leetcode 61. Rotate List