图形学入门---实现漫反射

时间:2022-07-12 16:32:05

1、diffuse漫反射包含两个部分:一部分是环境光照,一部分是漫反射

2、

图形学入门---实现漫反射

3、将小球着为蓝色

Shader "Custom/s_diffuse" {
	

	SubShader{
		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"

		struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			o.color = fixed4(0,0,1,1);
			
			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
			ENDCG
	}
	}

}



图形学入门---实现漫反射

4、两个向量的点积的结果决定光的强度,这两个向量都必须是规范化的,光向量必须是从顶点指向光源的方向

Shader "Custom/s_diffuse" {


	SubShader{
		pass {
		CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"

			struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			//o.color = fixed4(0,0,1,1);

			float3 N = normalize(v.normal);
			//世界空间中光源的位置
			float3 L = normalize(_WorldSpaceLightPos0);
			//saturate将点积的值限定在0到1之间
			float ndotl = saturate(dot(L,N));
			//_LightCColor0:光源颜色
			o.color = _LightColor0*ndotl;

			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
			ENDCG
	}
	}

}


图形学入门---实现漫反射

5、添加上环境光照

图形学入门---实现漫反射

6、window-->lighting-->Source:Color-->Ambient Color:设置环境光的颜色,可以看到环境光对颜色的影响

图形学入门---实现漫反射

7、支持顶点光照


Shader "Custom/s_diffuse" {


	SubShader{
		pass {

		//支持顶点光照
		tags{"LightMode" = "ForwardBase"}

		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
		#include "lighting.cginc"

			struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			//o.color = fixed4(0,0,1,1);

			float3 N = normalize(v.normal);
			//世界空间中光源的位置
			float3 L = normalize(_WorldSpaceLightPos0);
			//saturate将点积的值限定在0到1之间
			float ndotl = saturate(dot(N, L));
			//_LightCColor0:光源颜色
			o.color = _LightColor0*ndotl;

			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			//环境光照
			return IN.color+UNITY_LIGHTMODEL_AMBIENT;
		}
			ENDCG
	}
	}

}


图形学入门---实现漫反射