目录
昨天出差了...,早起,坐出租车头晕,火车上睡觉,也没精神看教程....
www.unitytrain.cn蛮牛教育,这个视频教程是199的会员免费教程https://edu.manew.com/course/96,还有个599的进阶教程https://edu.manew.com/course/198,假如我坚持学完了这些78个课程,可以考虑购买收费的。
现在我觉得与其找各种免费课程,不如看一个系统的收费课程。
还有个200的ShaderGraph教程,https://edu.manew.com/course/773/tasks
----------------------------------------------------------------------------------------
课时07:Surface Shader1
视频地址:https://www.bilibili.com/video/BV1YK41157AC?p=7
大概了解SerfaceShader
官方文档:https://docs.unity3d.com/2019.4/Documentation/Manual/SL-SurfaceShaders.html
生成底层vertex/fragmentShader代码
没有pass,
加pass会导致错误
Tags {"RenderType"="Opaque"}
LOD 200 //层级细节
CGPROGRAM ENDCG
哪些结构可以定制,哪些内容
#pragma #pragma
#pragma surface surfaceFunction lightModel [optionalparams]
surfaceFunction可以随意取名,也就是默认的 surf可以改成任何名称
lightModel:光照模型,Standard,实际上也是一个函数。
文件位置Unity/Editor/Data/CGIncludes/UnityPBSLighting.cginc
Standard就是LightingStandard光照函数
[optionalParams]:其他选项,fullforwardshadows:在默认的平行光的阴影基础上支持点光源和范围光源的阴影。addshadow,
#pragma target 3.0 //使用硬件的ShaderModel 3.0版本,指令范围和能力,值越高能使用更高级的硬件功能,没有这句话默认2.0
sampler2D _MainTex; 二维纹理声明
纹理坐标必须以uv或者uv2开头,
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
1.有;结尾,2.将Properties中的属性声明一遍,对应起来,名称类型必须一致,纹理贴图必须有uv_的Input结构
除了struct Input { };外,其他都是对应声明。
2D->simpler2D 二维纹理
Color->fixed4 颜色 4维数吧
Range->half 浮点值
又入门了一点点
-------------------------------
课时08:Surface Shader2
Input结构,还可以放入其他变量
具体要到后面学习cg,计算机图形学,光照算法。
现在就是包装纹理,uv_MainTex
void surf(Input IN,inout SurfaceOutputStandard o){}
这里的Input就是 struct Input { float2 uv_MainTex;};
发现这个Input不能改名 不能改成Input2,InputE。必须是Input。那这样的话struct Input看成是一个整个,而不是顶一个一个结构体struct,结构体名称叫Input
SurfaceOutputStandard
SurfaceOutput是Unity4.X的结构体,就不管了
5.X的新的结构图,使用physically based lighting models,PBS,PBR
基于物理的着色,真实模拟光线跟踪。
真实,漂亮。
Albedo;Normal,Emission;Metallic,Smoothness;Occlusion;Alpha
改造成以前版本的Shader。
Lighting.cginc LightingLambert LightingLamber_Deferred,延迟渲染路径
fixed4 c= tex2D(_MainTex,IN.uv_MainTex),
//tex2D:cg函数,采样函数。使用纹理坐标(uv)对纹理进行采样。得到一个颜色
o.Albedo=c.rgb
o.Alpha=c.a
透明方案
alpha ,alpha:auto,alpha:fade,alha:premul,keepalpha,decal:add,decal:blend
"queue"="transparent"
//FallBack "Diffuse",阴影投射器
addshadow,alpha。
编写光照函数和算法,自定义光照效果。
UNITY_BRDF_PBS UNITY_BRDF_GI
UnityGlobalIllumination.cginc->UnityStandardBRDF.cginc
-------------------------------------------------------------------------------
课时09:Cg语言入门1 输入输出和语义
#pragma vertex vert
#pragma fragment frag
#pragma vertex和#pragma fragment都是定位两个函数,函数名可自定义。
片段程序是拿到片段程序的数据再处理。
in float2 objPos:POSITION,out float4 pos:POSITION
:POSITION,定义"语义信息"
out float4 col:COLOR
COLOR0和COLOR是等价的
Shader "CustomVF/vf1"
{
SubShader
{
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
void vert(in float2 objPos:POSITION,out float4 pos:POSITION)
{
pos=float4(objPos,0,1);
}
void frag(out float4 col:COLOR)
{
col=float4(1,0,0,1);
}
ENDCG
}
}
}
Shader "CustomVF/vf1"
{
SubShader
{
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
void vert(in float2 objPos:POSITION,out float4 pos:POSITION,out float4 col:COLOR)
{
pos=float4(objPos,0,1);
col=float4(1,0,0,1);
}
void frag(inout float4 col:COLOR)
{
//col=float4(1,0,0,1);
}
ENDCG
}
}
}
我的效果是黑色的,另外vert()和frag()时,我这不会有语法错误,另外就是Game里面没有绘制出模型。
坐标系变化,物体坐标系->世界坐标系,摄像机
cvv裁剪立方体
-1到+1
col=pos;数据类型相同可以赋值
负数作为0处理,0,0.5时绿色,0.5,0时红色,0.5,0.5是黄色。
其实我好奇-0.5,0.5和0,1的区别,打算我这里没有效果
-------------------------------------------------------------------------------------------------------------------
课时10:Cg语言入门2 profile和基本数据类型
复习
in out inout,POSITION 引进自动处理
新知识
float,float4
组合,构造器
half,half4
fixed,fixed4 1234
fixed=fixed1
bool b=true/false
//bool b=1/0
int
fixed4 真彩色 color
现在是:https://developer.download.nvidia.com/cg/Cg_language.html
Cg是基于c语言,改造的