入学新生
发表于 2020-3-2 20:42:01
老哥,你这也说是学美术的,授人鱼不如授之渔,你可以分享下连线图,或者说下原理呀,上来就是一份代码教做人,我们美术看不动代码呀
春天的白云
发表于 2020-3-2 19:28:15
老哥,你这也说是学美术的,授人鱼不如授之渔,你可以分享下连线图,或者说下原理呀,上来就是一份代码教做人,我们美术看不动代码呀
可达可达
发表于 2020-3-2 13:41:58
楼主现在收入怎么样呢?是Ta还是纯特效?
acoolmusic
发表于 2020-3-2 11:29:48
中年危机感
Fire8889
发表于 2020-3-1 15:20:23
马克,收藏!
zsz98781
发表于 2020-3-1 12:27:53
判断运算符_shader:开关
制作开关时候会以以下方式产生节点。
第一种:
_Enable_MainTex("[允许主贴图]Enable_MainTex------------------------------>", Float) = 1
uniform float _Enable_MainTex;
finalColor = (( _Enable_MainTex )?( ( ( _MainTexTint * tex2D( _MainTex, uv_MainTex ) ) + _BaseTex_Gain ) ):( float4(1,1,1,1) ));//enable_mainTex
第2种:
_WuAlpha ("黑白流光图无Alpha时勾选", Float ) = 0
uniform fixed _WuAlpha;
(lerp( _LiuGuang_var.a, _LiuGuang_var.r, _WuAlpha )//这个wualpha也是一种开关。
第3种:
还有种预处理方式。#pragma multi_compile
_EnableHeightLight("Enable HeightLight", Float) = 0 //1
#pragma multi_compile _DUMMY _HEIGHT_LIGHT_ON
#if _HEIGHT_LIGHT_ON
i.normalWorld = normalize(i.normalWorld);
float4 rootPos = mul(unity_ObjectToWorld, float4(0, 0, 0, 1));
float3 node_A = i.posWorld.g- (rootPos.g - _Offset);
float3 node_B = i.normalWorld.g * 0.5;
float3 node_C = node_A + node_B;
color = saturate(color * lerp(_HeightColor.rgb, float3(1, 1, 1), clamp(node_C, 0, 1)) * _HeightLightCompensation);
#endif
特别强调的是,multi_compile及shader_feature都是定义keyword的功能,会产生超过256个的报错
zsz98781
发表于 2020-3-1 12:27:20
shader:平移旋转和缩放uv
//pannerUV
float2 pannerUV = (i.uv0+(_Time*_speed)*float2(0,0.2)); // panner
float4 my_MainTexture = tex2D(_MainTexture,TRANSFORM_TEX(pannerUV, _MainTexture));
float3 Finalcolor = my_MainTexture.rgb;
return fixed4(Finalcolor,1);
图片
图片
以上shaderfoge,ase编辑器的rotator都是封包了的,你双击也没卵用,打不开节点, 下面给出源码function。
图片
//rotateUV
float my_cos = cos(1.0*(_Time*_speed));
float my_sin = sin(1.0*(_Time*_speed));
float2 My_RotateCenter= float2(0.5,0.5);
float2 rotateUV = (mul(i.uv0-My_RotateCenter,float2x2( my_cos, -my_sin, my_sin, my_cos))+My_RotateCenter); // rotate
float4 my_MainTexture = tex2D(_MainTexture,TRANSFORM_TEX(rotateUV, _MainTexture));
float3 finalColor = my_MainTexture.rgb;
return fixed4(finalColor,1);
图片
图片
以上shaderfoge,ase编辑器的rotator都是封包了的,你双击也没卵用,打不开节点, 下面给出源码function。
图片
//ScaleUV
float My_ScaleCenter = 1.0;// Actor
float2 ScaleUV = lerp(i.uv0,float2(My_ScaleCenter ,My_ScaleCenter ),fmod((_Time*_speed),1.0)); // scale
float4 my_MainTexture = tex2D(_MainTexture,TRANSFORM_TEX(ScaleUV, _MainTexture));
float3 finalColor = my_MainTexture.rgb;
return fixed4(finalColor,1);
缩放源码连接图
图片
图片
//扭曲效果
fixed2 uv = i.uv - fixed2(0.5,0.5);
float angle = _Speed * 0.1745/(length(uv) + 0.1);//加0.1是放置length(uv)为0
float angle2 = angle * _Time.y;
uv = float2(uv.x*cos(angle2)-uv.y*sin(angle2),uv.y*cos(angle2)+uv.x*sin(angle2));
uv+=fixed2(0.5,0.5);
fixed4 c = tex2D(_MainTex,uv);
return c;
扭曲源码连接图:
zsz98781
发表于 2020-3-1 12:26:23
unity3d 自身接受阴影 代码
接受阴影不一定要法线,和灯光,shader内置有灯光系统。但是需要有以下条件:
Shader "zsz/AcceptShadow" {
Properties {
_mainColor("mainColor", Color) = (0.5, 0.5, 0.5, 1)
}
SubShader {
Tags { "RenderType"="Opaque" "Queue"="Geometry"}//接受阴影要Geometry,而不能是transparency
Pass {
Tags {"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase//接受阴影
#include "Lighting.cginc"//接受阴影
#include "AutoLight.cginc"//接受阴影
float4 _mainColor;
struct a2v {
float4 vertex : POSITION;//接受阴影要顶点位置
};
struct v2f {
float4 pos : SV_POSITION;//接受阴影要传递pos,SHADOW_COORDS(2)里用到
float3 worldPos : TEXCOORD4;//接受阴影,ATTENUATION用到
//定义阴影
SHADOW_COORDS(2)
};
v2f vert(a2v v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);//接受阴影
TRANSFER_SHADOW(o);//计算阴影
return o;
}
fixed4 frag(v2f i) : SV_Target {
UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);//接受阴影
return fixed4(_mainColor.rgb * atten, 1);
}
ENDCG
}
}
FallBack "Diffuse"//接受阴影要有这个
}
zsz98781
发表于 2020-3-1 12:05:08
授人鱼不如授之渔。不直接给shader拉。不然一堆学两个月的毕业生抢饭碗,然后boss说搞设计的每天有一千个投简历的,你这40岁的技术陈旧该回家种田了,你知道这个设计圈生态很可悲的,我认识的6个40左右的游戏设计师,有原画,特效。动作,一身技术工作窘迫。只告诉大家,除了k动作外,多看源shader。然后综合。。。
zsz98781
发表于 2020-3-1 12:00:58
小小小周 发表于 2020-2-29 15:20
听你说话真累
技术男说话就这样啦!平时对电脑多,不怎么和人聊天。