UnityShader无光照时模拟阴影效果

最近有一个动态创建模型的项目,使用代码读取数据源从而创建出模型,真的是折腾的欲仙欲死,不过最近还终于折腾出来了,但是表现还不是太好,在项目中由于所有的模型都是代码动态创建的,没有纹理也没有分配UV,所以最终出的模型没有层次感,使用光照消耗太大,所以就有了shader的需求,我的做法是借助菲涅尔反射的方法。

效果图:

默认材质(无光)
默认材质(无光)
菲涅尔阴影

源码:

Shader "SepShader/S_VertsFresnel"
{
	Properties
	{
		_defaultCol("_defaultCol", Color) = (1,1,1,1)
		//_fresnelCol("_fresnelCol", Color) = (0,0,0,1)
	}

		SubShader
	{
		Tags{ "RenderType"="Opaque" "Queue" = "Geometry+1" }
		LOD 100

		Pass
		{
			//tags{ "lightmode=" = "forward" }
			Cull Back //剔除后面
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex1 : POSITION;
				float3 normal : NORMAL;
			};

			struct v2f
			{
				float4 vertex : SV_POSITION;
				fixed3 color : COLOR;
			};
			
			fixed3 _defaultCol;
			//float4 _fresnelCol;

			v2f vert(appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex1);
				//将法线转到世界坐标
				fixed3 worldN = normalize(mul(v.normal, (float3x3)unity_WorldToObject));
				fixed3 worldV = normalize(WorldSpaceViewDir(v.vertex1));
				o.color = _defaultCol * saturate(dot(worldN, worldV));
				return o;
			}

			fixed4 frag(v2f i) : SV_Target
			{
				return fixed4(i.color,1.0);
			}

			ENDCG
		}
	}
}

注:该shader仅适合特殊需要的项目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值