Unity_TA美术向(庄懂)课程学习笔记


视频教程请看B站UP: 庄懂-BoyanTata

📚主旨

美术向TA基础能力培养,使大家可以用技术手段去表达美术诉求。

📚主要内容

📍.Unity 引擎基础;
📍.ShaderForge连连看;
📍.ShaderLab图形编程;
📍.渲染相关的C#脚本;

📚学习路径

根据某一个🍱技术专题进行🍳技术演示,我们再通过学习模仿🍛完成老师布置的作业。

📚HalfLambert卡通着色

在这里插入图片描述

💡实现思路

📍.先实现Lambert(兰伯特)光照模型:法线与光反方向的点乘即夹角cos值(-1~1)

float hLambert = dot(lDirWS,nDirWS) * 0.5 +0.5;

在这里插入图片描述
在这里插入图片描述
📍.然后把兰伯特转换(Lambert)成半兰伯特(HalfLambert):(-1~1) =>(0~1)
在这里插入图片描述

在这里插入图片描述
📍.最后用半兰伯特组装成一个uv坐标采样贴图就大功告成啦🍭

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

💡连连看

在这里插入图片描述

🍖.加个屏幕坐标UV点阵

💡效果

在这里插入图片描述

💡连连看

在这里插入图片描述

📚最最最简的shader

Shader "ZYF/Homework/Helloworld"
{
   
    Properties
    {
   
    }
    SubShader
    {
   
        Tags {
   
            "RenderType"="Opaque"
        }
        Pass {
   
            Name "FORWARD"
            Tags {
   
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma target 3.0

            struct VertexInput {
   
                float4 vertex : POSITION;
            };
            struct VertexOutput {
   
                float4 pos : SV_POSITION;
            };

            VertexOutput vert (VertexInput v)
            {
   
                VertexOutput o = (VertexOutput)0;
                o.pos = UnityObjectToClipPos( v.vertex );
                return o;
            }

            fixed4 frag (VertexOutput i) : COLOR
            {
   
               
                return fixed4(1,0,0,1);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

📚 Shader技巧

💡面板参数声明格式

类型 格式
数值 _Name(“标签名”,Float) = 0
范围 _Name(“标签名”,range(0,1)) = 0
位置、向量 _Name(“标签名”,Vector) = (0,0,0,0)
颜色 _Name(“标签名”,Color) = (1.0,1.0,1.0,1.0)
2D纹理 _Name(“标签名”,2D) = “White”{}
3D纹理 _Name(“标签名”,3D) = “White”{}
2D纹理 _Name(“标签名”,Cube) = “_Skybox”{}

💡 参数属性

属性 用途 范围 示例
[HideInInspector] 在面板上隐藏该参数 任何参数 [HideInInspector] _FakeLightDir(“假光方向”,Vector)=(0,0,0,0)
[NoScaleOffset] 禁用纹理的TilingOffset面板;不需要做TilingOffset的纹理,比如大部分角色纹理,防止美术误设置 纹理参数 [NoScaleOffset] _MainTex(“主贴图”,2D)=“White”{}
Normal 标记该纹理参数为法线贴图,以激活自检测功能 2D纹理参数 [Normal] _NormalTex(“法线贴图”,2D)=“bump”{}
[HDR] 用于设置高动态范围颜色值,如:灯光颜色、自发光颜色等 颜色参数 [HDR] _EmitCol(“自发光颜色”,Color) =(1.0,1.0,1.0,1.0,1.0)
[Gamma] 用于颜色参数的色彩空间的转换;一般用于色彩空间为Linear的项目 颜色参数 [Gamma] _EmitCol(“自发光颜色”,Color) = (1.0,1.0,1.0,1.0)
[PowerSlider(2)] 对范围参数做Power处理后再传入Shader;纠正部分参数调节手感; 范围参数 [PowerSlider(2)] _SpecPow(“高光次幂”,Range(1.90))=30
Header(xxx标签)] 标签,用于排版 单独使用 [Header(Texture)]
Space(10)] 空行,用于排版 单独使用 [Space(10)]
其它:[Toggle]、[Enum]、[Keyword]

💡 参数类型

💡 原则上优先使用精度最低的数据类型。
💡 世界空间位置和UV坐标:float
💡 向量、HDR颜色使用half;视情况升到float
💡 LDR颜色、简单乘子可使用fixed

不同平台对数据类型的支持情况不同,一般会自动转换,极少数情况下自动转换会带来问题。
部分平台上数据类型精度转换消耗也不小,fixed也要慎用。

类型 位数 范围 精度
fixed 11 –2.0~2.0 1/256
half 16 -60000~60000 3位小数
float 32 -3.4e38~3.4e38 6,7位小数
Int 32 较少使用 _
bool 布尔型较少使用 _ _
矩阵:float2x2,float3x3,float4x4 _ _ _
sampler2D 2D纹理 _ _
sampler3D 3D纹理 _ _
samplerCUBE Cube纹理 _ _

💡 可访问的顶点Input数据

标签 含义 类型
POSITION 顶点位置 float3 、float4
TEXCOORD0 UV通道1 float2、float3、float4
TEXCOORD1 UV通道2 float2、float3、float4
TEXCOORD2 UV通道3 float2、float3、float4
TEXCOORD3 UV通道4 float2、float3、float4
NORMAL 法线方向 float3
TANGENT 切线方向 float4
COLOR 顶点色 float4

💡常用的顶点Output数据

标签 含义 类型
pos 顶点位置CS (ClipSpace) float4
uv0 一般纹理UV float2
uv1 LightmapUV float2
posWS 顶点位置WS(WorldSpace) float3
nDirWS 法线方向WS half3
tDirWS 切线方向WS half3
bDirWS 副切线方向WS half3
color 顶点色 fixed4

📚 光照组成

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牙膏上的小苏打2333

哟,哟,切克闹,煎饼果子来一套

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

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

打赏作者

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

抵扣说明:

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

余额充值