Unity shader 写一个垃圾的 黄金shader
每当写了一个shader之后,不由然的有了一种愧疚的感觉,难道就这样的写完了,我觉得写unity shader这个过程应该是种享受,那种失败了又失败,那种灵感一次又一次的的隐现又消失,
rgba、xyzw…etc,如此般的一会儿在窗户外,一会儿在空气中,一会儿在透过窗户的光线中,甚至是通过静谧的空气中恩雅的音乐,我想写下它,留住它的美…..
这黄金shader到底有多垃圾
这个效果我看了,简直是惨不忍睹
1.首先怪gif只能上传2MB
2.其次是,这么光泽的是黄金吗?
3.为什么我一点感觉没有了.
4.整个世界都是TA们的流行音乐刺激着耳朵,我都不好意思再放恩雅的音乐,放舒曼的童年,放牛班的春天….整个心都碎了.
5.踩踩梧桐树掉下的种子…..一堆又一堆,像是踩着shader的感觉,可我的小伙伴们都惊呆了…
什么是黄金
1.生活才是一种追求,shader就是对生活的一种完善。
2.一块肥皂能让你干什么?
我毫不犹豫的在Blender中快速的创建了块肥皂,你看嘛!!!
导出为.FBX文件,不然呢?.obj也不错哦!
3.把效果实现的肥皂科技黑
先给它一个视线方向的漫反射
视线与法线相近的地方变得亮
4.把黑科技做成白银金属感
我们还是猜猜这种反射吧!
哇!有同学一定会知道Cubemap吧???
啊!这种感受,一闭眼就像看到水痕反射的天空。
于是我发现它太亮,-0.2是我的选择
col.rgb*viewDiff*Cubemap这又是一种选择,viewdiff是结合反射效果美的表现
5.这这,,这这,,,我到底干了什么?我把颜色变了,,,
你猜猜我做错了什么,居然这样啊!!!
我发现我原来用了它——>>
对!就是它啊,它就是1D纹理查询
shader 让我懂得了世界可以用另一种表达方式
1.写点伤心的效果,让shader变得无知
这可以增加代码量,让shader变得充实,而它无知,,为什么,,让它更加的骄傲,,更加的有地位。。。
2.它的颜色投射出它曾经是个黄铜
让你去改变它的内质的美,用rgb凸显一股铜钱味。
shader 出卖的不是代码的酷,而是它那种用代码悄悄地走进你生活之中
Shader "Custom/Gold" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_CubeTexure ("Cube map", CUBE) = "white" {}
_Specular ("_Specular", Range(0.0, 15.0)) = 0.0
_SpecularColor ("_Specular Color", Color) = (1.0, 1.0, 1.0, 1.0)
_FuckTexure ("Fuck Texure", Color) = (1.0, 1.0, 1.0, 1.0)
_TinColor ("_Tin Color", Color) = (1.0, 1.0, 1.0, 1.0)
_Spe2 ("_Spe2 Color", Range(0.0, 15.0)) =0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Pass{
Tags { "LightMode"="ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler1D _MainTex;
samplerCUBE _CubeTexure;
float4 _MainTex_ST;
float _Specular;
fixed4 _SpecularColor;
fixed4 _FuckTexure;
struct vertIN{
float4 vertex : POSITION;
float2 tex : TEXCOORD0;
fixed3 normal : NORMAL;
};
struct vertOUT{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed3 nDir : TEXCOORD1;
fixed3 vDir : TEXCOORD2;
fixed3 lDir : TEXCOORD3;
fixed3 rDir : TEXCOORD4;
fixed3 reDir : TEXCOORD5;
};
vertOUT vert(vertIN i){
vertOUT o;
o.pos = mul(UNITY_MATRIX_MVP,i.vertex);
o.uv = TRANSFORM_TEX(i.tex,_MainTex);
o.nDir = normalize(mul(_Object2World,i.normal));
o.vDir = normalize(WorldSpaceViewDir(i.vertex));
o.lDir = normalize(WorldSpaceLightDir(i.vertex));
fixed3 lDir = o.lDir;
fixed3 nDir = o.nDir;
o.rDir = normalize(reflect(-lDir,nDir));
o.reDir = normalize(reflect(o.vDir,nDir));
return o;
}
fixed4 frag(vertOUT ou):COLOR {
fixed diff = max(0,dot(ou.nDir,ou.lDir));
fixed viewDiff = max(0,dot(ou.nDir,ou.vDir));
fixed4 col = tex1D(_MainTex,viewDiff);
fixed rimDiff = pow(1 - viewDiff,12);
fixed speDiff = diff * pow(max(0,dot(ou.vDir,ou.rDir)),_Specular);
fixed3 Cubemap = texCUBE(_CubeTexure,ou.reDir).rgb - 0.2;
fixed3 c = col.rgb*viewDiff*Cubemap + col.a*speDiff*_SpecularColor ;
return fixed4(c,col.a);
}
ENDCG
}
Pass{
Tags { "LightMode" = "ForwardAdd" }
Blend One One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler1D _MainTex;
float4 _TinColor;
float _Spe2;
float4 _MainTex_ST;
float4 _LightColor0;
struct vertIN{
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
};
struct vertOUT{
float4 pos : SV_POSITION;
float3 nDir : TEXCOORD0;
float2 uv : TEXCOORD1;
float3 vDir : TEXCOORD2;
float3 lDir :TEXCOORD3;
};
vertOUT vert (vertIN i){
vertOUT o;
o.pos = mul(UNITY_MATRIX_MVP,i.vertex);
half3 vert = mul(_Object2World,i.vertex);
o.nDir = normalize(mul(_Object2World,float4(i.normal,0.0)).xyz);
o.uv = TRANSFORM_TEX(i.tex,_MainTex);
o.vDir = normalize(_WorldSpaceCameraPos - mul(_Object2World,i.vertex).xyz );
o.lDir = fixed4(
normalize(lerp(_WorldSpaceLightPos0,_WorldSpaceLightPos0.xyz - vert,_WorldSpaceLightPos0.w)),
lerp(1,1/length(_WorldSpaceLightPos0 - vert),_WorldSpaceLightPos0.w )
);
return o;
}
fixed4 frag(vertOUT ou):COLOR{
fixed3 rDir = normalize(reflect(-ou.lDir,ou.nDir));
half diff = saturate(dot(ou.lDir,ou.nDir));
half rDOTn = saturate(dot(rDir,ou.vDir));
fixed4 c = tex1D(_MainTex,ou.uv);
c.rgb = diff*_LightColor0 + diff*pow (rDOTn,_Spe2)*_LightColor0;
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
黄金要的是动态美,这黄铜哎!