Unity shader入门精要学习笔记-初级篇(unityshader简单制作/unity基础光照/基础纹理/透明效果)

本文是Unity Shader的初级篇学习笔记,涵盖了Unity Shader的基础制作,包括顶点/片元着色器的基本结构和通信,Unity提供的内置文件、变量和语义。同时,详细介绍了Unity的基础光照模型,如BRDF、标准光照模型和环境光自发光。此外,还讲解了基础纹理的使用,如单张纹理、凹凸映射和渐变纹理。最后,探讨了Unity Shader实现透明效果的技巧,如渲染顺序、透明度测试和混合命令。
摘要由CSDN通过智能技术生成

目录

一、unityshader简单制作

1.顶点/片元着色器

基本结构

顶点/片元着色器简单代码

结构体与模型数据

顶点着色器和片元着色器间的通信

属性使用

2.Unity提供的内置文件和变量

3.Unity提供的CG/HLSL语义

unity支持的语义

4.debug

5.渲染平台差异

二、unity基础光照

1.光照模型

1.BRDF光照模型

2.标准光照模型(经验模型)

3.计算:逐像素还是逐顶点

2.unity中的环境光和自发光

1.漫反射光照模型

2.高光反射光照模型

3.使用unity内置的函数

三、基础纹理

1.单张纹理

2.凹凸映射

3.渐变纹理

4.遮罩纹理

四、透明效果

1.Unity Shader的渲染顺序

2.透明度测试

3.透明度混合

4.开启深度写入的半透明效果

5.shaderlab的混合命令


一、unityshader简单制作

1.顶点/片元着色器

基本结构

shader ”MyShader“ {//命名

Properties{

        Name{"display name",PropertyType}=DefaultValue//属性名字:Name 显示名字:display name  类型:PropertyType  默认值:DefaultValue

}

SubShader{

        [Tags]//可选的标签,仅可在subshadeer中声明

        Tags{"TagName1"="Value1"  "TagName2"="Value2" }

        [RenderSetup]//可选的状态,Cull、ZTest、ZWrite、Blend

        Pass{

                [Name]

                Name "MyPassName"

                [Tags]//LightMode/RequireOptions

                [RenderSetup]

               CGPROGRAM

               #pragma vertex vert

               #pragma fragment frag

               ENDCG

        }

//UsePass 使用其他shader中的Pass,UsePass ”MyShader/MYPASSNAME“

//GrabPass负责抓取屏幕并将结果存储在一张纹理中

Fallback “name” / Fallback Off

}


顶点/片元着色器简单代码

        Pass{

               CGPROGRAM

               #pragma vertex vert//哪个告诉unity,哪个函数包含了顶点着色器的代码:vert

               #pragma fragment frag

              float4 vert(float4 v :POSITION):SV_POSITION{//把模型顶点坐标填充到输入参数v,SV_POSITION告诉unity顶点着色器的输出是裁剪空间中的顶点坐标

                            return mul (UNITY _MATRIX_MVP,v);//顶点坐标从模型空间转换到裁剪空间,模型观察投影矩阵

              }

              fixed4 frag():SV_Target{//没有输入,输出是 fixed4 类型变量使用SV_Target语义限定,将用户的输出颜色存储到一个渲染目标中

                           return fixed4 (1.0,1.0,1.0,1.0);//表示白色的变量

              }

               ENDCG

        }


结构体与模型数据

        Pass{

               CGPROGRAM

               #pragma vertex vert//哪个告诉unity,哪个函数包含了顶点着色器的代码:vert

               #pragma fragment frag

               struct a2v{

                              float4 vertex:POSITION;//POSITION告诉unity用模型空间的顶点坐标填充vertex

                              float3 normal:NORMAL;//NORMAL告诉unity用模型空间的法线方向填充normal

                              float4 texcoord:TEXCOORD0;//TEXCOORD0告诉unity用模型的第一套纹理坐标填充texcoord

               }

              float4 vert(a2v v):SV_POSITION{//SV_POSITION告诉unity顶点着色器的输出是裁剪空间中的顶点坐标

                            return mul (UNITY _MATRIX_MVP,v.vertex;//v.vertex来访问模型空间的顶点坐标

              }

              fixed4 frag():SV_Target{//没有输入,输出是 fixed4 类型变量使用SV_Target语义限定,将用户的输出颜色存储到一个渲染目标中

                           return fixed4 (1.0,1.0,1.0,1.0);//表示白色的变量

              }

               ENDCG

        }


顶点着色器和片元着色器间的通信

        Pass{

               CGPROGRAM

               #pragma vertex vert//哪个告诉unity,哪个函数包含了顶点着色器的代码:vert

               #pragma fragment frag

               struct a2v{

                              float4 vertex:POSITION;//POSITION告诉unity用模型空间的顶点坐标填充vertex

                              float3 normal:NORMAL;//NORMAL告诉unity用模型空间的法线方向填充normal

                              float4 texcoord:TEXCOORD0;//TEXCOORD0告诉unity用模型的第一套纹理坐标填充texcoord

               }

 

               struct v2f{

                              float4 pos:SV_POSITION;

                             fixed3 color:COLOR0;

               }

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值