u3d_Shader_effects笔记3 half diffuse 和 ramp texture

1.前面的心情

每次写博客,先写心情也好,就当是小日记了吧。现在已经懒到不想动笔和纸来写日记了。近两天公司的活较少,晚上直接回来了,没有留公司。在公司看代码,不做工,就困...

哎,小辉哥家的老房子后天要拆了,时间过的真快啊,想起小时候去他家玩,鞭炮,烟花,和大辉哥一起,我们三个,快乐的吹牛快乐的小人书电视;哎时光不再,timefly...如今他孩子都多大了...

2.参考内容:

老样子,书和妹子的博客

3.主要实现:

主要是rampTexture的数据加载。

使用rampTexture:

得到结果:

4.代码

我主要关注rampTexture的读取,光照数据直接忽略掉。即surf里,传入lightingBasicDiffuse接口之前,直接使用(1,1,1,1)

Shader "Custom/NewShader" {
	Properties {
	  _RampTex("Ramp Texutre",2D)="white"{}
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf BasicDiffuse
		sampler2D _RampTex;

		struct Input {
		 float2 uv_MainTex;  
		};
		  
		void surf (Input IN, inout SurfaceOutput o) {
			float4 c;
			c = float4(1,1,1,1);//直接置1
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}

		inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)
		{
			float difLight = max(0,dot(s.Normal,lightDir));
			float3 rampColor = tex2D(_RampTex,float2(difLight,difLight)).rgb;//**纹理采样**
			float4 col;
			col.rgb = (rampColor);//**直接上texture数据**
			col.a = s.Alpha;
			return col;
		}

		ENDCG
	} 
	FallBack "Diffuse"
} 

5.我学到什么

(1).简单数学曲线的分析,以及绘制:

例子中halfLambert:dot后的数据A,A*0.5+0.5的曲线:https://developer.valvesoftware.com/wiki/Half_Lambert

(2)u3d纹理模式的分析:

现象,和lightDir为0的顶点显示为棕色:

首先设置了Directional Light

a.如上图问题;当设置Repeat,并用线性插值会出现这种问题;不管是二次还是三次线性插值。   

float difLight = max(0.001,dot(s.Normal,lightDir));颜色逐渐趋近红色

原因:边缘插值,可能边缘数据0左侧为空数据,导致了和red中和的数据为0,哎,也是猜测的,但应该如此

当纹理寻址模式为Clamp,直接使用边缘数据,则不会出现这种问题。

改变自己
原文地址:https://www.cnblogs.com/sun-shadow/p/4896502.html