shader学习

本文详细解释了着色器(shader)的概念,它是GPU执行的程序,用于实现3D图形效果。通过理解GPU的渲染流程,文章介绍了如何使用Unity的Shader语言创建简单的光照效果,展示了Shader在游戏开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问:shader是什么?

答:shader中文名叫着色器,是一段能够针对3D对象进行操作、并被GPU所执行的程序。通过这些程序,程序员就能获得绝大部分想要的3D图形效果

总结:通过GPU和电脑沟通怎么画的一种语言。

GPU的渲染流程

==>>计算机中的三维模型

计算机中的三维模型本质上是一组数据,包括空间中顶点的位置、法线方向、顶点颜色等等

GPU就是通过包括三维模型在内的一系列数据进行计算,将结果提交给显示器显示的设备

备数据就是美术做的事情,告诉GPU如何计算就是Shader程序员做的事情

                                                                                   

drawcall:CPU把数据给GPU的阶段,时间比较长。解决:尽量多地共用相同的shader。

Shader "MyShader/SimpleDiffuse"
{
	Properties{//在面板显示的特性
		_Diffuse("DiffuseColor",Color) = (1,1,1,1)
	}

		SubShader{//可以有多个SubShaser,只执行第一个可用的
			Pass{//多个Pass都执行
				Tags{"LightMode" = "ForwardBase"}
				CGPROGRAM
				#pragma vertex vert	//顶点着色器
				#pragma fragment frag //片段着色器

				#include "Lighting.cginc"

				fixed4 _Diffuse;//float 32bit, half 16bit,fixed 11bit:color [0,1]
				
				//a-应用 v-视图 f-片段 
				struct a2v {
					float4 vertex:POSITION;//POSITION:语义: GPU在哪里去存取数据
					float3 normal:NORMAL;
				};

				struct v2f {
					float4 Pos:SV_POSITION;//SV_POSITION(POSITION) SV_TARGET(COLOR)
					fixed3 color : COLOR;
				};

				v2f vert(a2v v) {
					v2f o;
					o.Pos = UnityObjectToClipPos(v.vertex);//从模型空间变化到裁剪空间

					float3 nDir = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
					//顶点法线从模型空间变换到世界空间

					float3 lDir = normalize(_WorldSpaceLightPos0.xyz);//用于平行光

					fixed3 diffuse = _LightColor0*_Diffuse*saturate(dot(nDir, lDir));
					//数值保证在0~1之间

					fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
					
					o.color = ambient + diffuse;//ambient指的环境光 颜色相加

					return o;
				}
				
				fixed4 frag(v2f IN) :SV_TARGET{
					return fixed4(IN.color,1.0);
				}

			ENDCG
		}
	}
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kerven_HKW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值