700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【简单易懂的Unity5 Shader着色器入门教程】 笔记

【简单易懂的Unity5 Shader着色器入门教程】 笔记

时间:2019-04-13 13:04:51

相关推荐

【简单易懂的Unity5 Shader着色器入门教程】 笔记

整理自siki学院的“简单易懂的Unity5 Shader着色器入门教程”

链接:/video/BV1kk4y1R7Lc?p=3&spm_id_from=pageDriver

备注:看完视频后发现之前下载笔记的链接失效了,所以自己把笔记敲了一遍,有些地方有略微修改和增添内容。

Unity中3D物理的一些属性:

Mesh Filter 存储一个网格,即模型按照哪些三角面组成,组成什么样的模型,以及三角面的一些顶点信息

Mesh Renderer 用来渲染一个模型的外观,按照mash给它皮肤和颜色

通过材质Material来控制模型渲染的样子

Material:

贴图(可以只是一个单纯的颜色)

Shader

书:

unity shader入门精要(乐乐程序猿)

unity 3d shaderlab开发实战详解(第二版)

unity 5.x shaders and effects cookbook(中文版unity着色器和屏幕持效开发秘籍)

CG语言教程官网

https://developer./CgTutorial/cg_tutorial_frontmatter.html

一些网站

//着色器分享网站

http://poem_qianmo?viewmode=contents

数学函数在线演示

/graphingcalculator.php

UnityCG.cginc中一些常用的函数

//摄像机方向(视角方向)

float3 WorldSpaceViewDir(float4 V) 根据模型空间中的顶点坐标得到( 世界空间)从这个点到摄像机的观察方向

float3 UnityWorldSpaceViewDir(float4 V) 世界空间中的顶点坐标==》世界空间中从这个点到摄像机的观察方向

float3 ObjSpaceViewDir(float4 V) 模型空间中的顶点坐标==》模型空间中从这个点到摄像机的观察方向

//光源方向

float3 WorldSpaceLightDir(foat4 v) 模型空间中的顶点坐标==》 世界空间中从这个点到光源的方向

float3 UnityWorldSpaceLightDir(float4 v) 世界空间中的顶点坐标==》世界空间中从这个点到光源的方向

float3 ObjSpaceLightDir(float4 v) 模型空间中的顶点坐标==》模型空间中从这个点到光源的方向

//方向转换

float3 UnityObjectToWorldNormal (float3 norm) 把法线方向从模型空间==》世界空间

float3 UnityObjectToWorldDir (float3 dir) 把法线方向从模型空间=》世界空间

float3 UnityWorldToObjectDir (float3 dir) 把法线方向从世界空间=》模型空间

什么是OpenGL,DirectX

shader可以认为是一种渲染命令 ,由OpenGL或者dx进行解析,来控制渲染丰富多彩的图形

openGL使用GLSL编写shader

DirectX使用HSSL编写shader

英伟达 CG编写shader (跨平台)

Unity Shader的分类

使用的是ShaderLab编写Unity中的Shader

表面着色器Surface Shader顶点/片元着色器 Vertex/Fragment Shader固定函数着色器 Fixed Function Shader

UnityShader中属性的类型有哪些

_Color(“Color”,Color)=(1,1,1,1)

_Vector(“Vector”,Vector)=(1,2,3,4)

_Int(“Int”,Int) = 34234

_Float(“Float”,Float) = 4.5

_2D(“Texture”,2D) = “red”{}

_Cube(“Cube”,Cube) = “White”{}

_3D(“Texture”,3D) = “Black”{}

属性中使用的需要在CGPROGRAM中重新定义申明

Float 32位

Half 16位 -6万~6万

Fixed 11位 -2~2

fixed4 _Color

float4 _Vector

float _Int

float _Float

sampler2D _2D

samplerCube _Cube

sampler3D _3D

从顶点函数传递给片元函数的时候可以使用的语义

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)

COLOR0 可以传递一组值 4个

COLOR1 可以传递一组值 4个

TEXCOORD0~7 传递纹理坐标

片元函数传递给系统

SV_Target 颜色值,显示到屏幕上的颜色

什么是光照模型

光照模型就是一个公式,使用这个公式来计算在某个点的光照效果

标准光照模型

在标准光照模型里面,我们把进入摄像机的光分为下面四个部分:

1自发光

2高光反射

2.1 Blinn光照模型

specular=直射光* pow(max(cosθ,0),10) θ:是反射光方向和视野方向的夹角

2.2 BIinn-Phong光照模型

specular=直射光* pow(max(cosθ,0),10) θ:是法线和x的夹角,x是平行光(点到光源方向)和视野方向(点到摄像机)的平分线

另外,10是可以调整的参数

3 漫反射

3.1兰伯特光照模型

Diffuse =直射光颜色* max(0,cos(θ) ) cosθ =光方向法线方向

3.2 半兰伯特光照模型

Diffuse =直射光颜色(cos(θ) * 0.5 + 0.5)

Tags{ “LightMode”=" ForwardBase" }

只有定义了正确的LightMode才能得到一些Unity的内置光照变量

#include “Lighting.cginc”

包含unity的内置的文件,才可以使用相关unity内置的变量

normalize()用来把一个向量,单位化(原来方向保持不变,长度变为1)

dot用来取得两个向量的点积

_WorldSpaceLightPos0 取得平行光的位置

UNITY_MATRIX_MVP这个矩阵用来把一个坐标从模型空间转换到剪裁空间

World2bject这个矩阵用来把一个方向从世界空间转换到模型空间

UNITY_LIGHTMODELAMBIENT 用来获取环境光

shader中的各种空间坐标

/1yh916/article/details/50906272

什么是切线空间

/bonchoix/article/details/8619624

贴图的属性:

Texture Type 纹理类型,选对后unity才知道我们使用这张图片干什么,不同的类型优化方式不一样

Texture/Defualt 贴图

Normal Map法线贴图

Editor GUI and Legacy GUI 编辑器模式下创建的图片/图标

Sprite 2D和UI

Cursor 鼠标

Cubemap立方体纹理(环境盒子)

Cookie灯光(通过灯光生成的图案,用来做影子的类型)

Lightmap 光照贴图(烘培后不用实时计算)

Advanced 高级的(可以很高程度的自定义)

Wrap Mode 纹理坐标超过1时怎么处理

Repeat 重复

Clamp 剪切,超过部分全为1边界的颜色

Filter Mode 决定纹理拉伸时填充的方式

法线贴图取到的颜色值pixel实际上是(normal+1)/2,因为法线范围时-1到1,而颜色是0-1

所以使用法线贴图的时候,想获得的normal = pixel * 2 – 1

如果法线贴图使用某个模型的贴图,这个法线贴图只能在这个模型下使用,不方便通用,所以使用切线空间(和模型空间无关)

切线空间是通过(存储在模型中的)法线和切线确定的

切线空间的贴图呈现蓝色

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。