Unity的Shader学习笔记(03)[20/12/18_周五][07-10]

目录

课时07:Surface Shader1

课时08:Surface Shader2

课时09:Cg语言入门1 输入输出和语义

课时10:Cg语言入门2 profile和基本数据类型


昨天出差了...,早起,坐出租车头晕,火车上睡觉,也没精神看教程....

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语言,改造的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值