查看: 2817|回复: 1
打印 上一主题 下一主题

[经验分享] Unity shader再次学习 记录 一

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2019-2-27 20:44:50 |只看该作者 |倒序浏览

來自:zzzsss 分享

UnityShader来来回回学习很多次,也放弃很多次了。这次又想学一下,之前没有记录,所以这次想记一下重点。
一、Unity中的模型数据
SkinMeshRenderer 或者 MeshRenderer + MeshFilter 在读取了读本模型数据后,将顶点信息,三角面信息,法线,切线之类的传递给GPU。
SkinMeshRenderer包含骨骼蒙皮信息。

二、渲染管线
GPU接收到数据  
1.顶点着色器     将顶点从模型坐标转换到相机坐标 (有多少顶点就会执行多少次)
2.光栅化     将顶点信息转换为像素,每个顶点对应一个像素点,颜色为顶点颜色,中间部分进行插值处理
3.片段着色器      对每个像素点进行处理,增加光照之类的(有多少像素点,执行多少次),贴图颜色
4.alpha测试    对每个像素进行alpha比对,去掉不符合要求的像素
5.模板测试     对每个像素进行模板比对,去掉不符合要求的像素
6.深度测试     对每个像素进行深度比对,去掉不符合要求的像素
7.深度测试     对每个像素进行深度比对,去掉不符合要求的像素
8.blend   混合同一个像素点的颜色
9.Gbuffer   每个像素点的缓存,除了颜色,还有模板信息、深度之类的
10.FrontBuffer/FrameBuffer   两个缓冲区,存储当前需要显示和下一帧需要显示的像素颜色数据

三、Shader基本结构
Shader “name”    //Shader名字
{
    propertise{    //属性  
    }

  SubShader  //可以有多个,按顺序寻找符合当前显卡的subshader  只会执行一个subshader
  {
       Cull Off   //每个Pass都遵循这个定义 公共区域
        Pass  //可以有多个Pass,每一个pass都会渲染一次,每个pass都会执行
        {
               CGPROGRAM   //和ENDCG成对使用,表示中间属于CG语言

               ENDCG
        }

  }
  FallBack "diffuse"   //所有subshader都不符合,就寻找自带的shader
}


四、Propertise  结构
name("_name",int) = 1
name: 变量的名字,代码中使用时的名字
_name: 面板中显示的名字 ,供外界参考
int : 变量的类型
1 :初始值

变量类型:
int :整数   1
float :浮点型   1.0
range :范围   range(2,8) =5
color:颜色  (1,1,1,1)
vector: 四维数组 (1,1,1,1)
2D: 图片 ”white“{}   
cube:六面的纹理   ”“{}
3D:3D的纹理 ”“{}  不常用  只能在脚本中创建 openGl3.0及以上支持


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

0

主题

0

听众

86

积分

设计初学者

Rank: 1

纳金币
2
精华
0
沙发
发表于 2019-3-29 12:41:26 |只看该作者
hdfghjkldfghj
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-23 10:00 , Processed in 0.088289 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部