当前位置: 首页 > wzjs >正文

网站建设域名的购买给你一个网站seo如何做

网站建设域名的购买,给你一个网站seo如何做,电子商务营销手段,安徽省建设厅八大员报名网站Unity Shader的学习笔记 第五天 开始Unity Shader的学习之旅之Unity中的基础光照之漫反射光照模型 文章目录 Unity Shader的学习笔记前言一、Unity中的环境光和自发光二、漫反射光照模型逐顶点光照① Shader名称② 定义属性③ Tags④ CGPROGRAM和ENDCG⑤ 定义vert和frag⑥ #in…

Unity Shader的学习笔记

第五天 开始Unity Shader的学习之旅之Unity中的基础光照之漫反射光照模型


文章目录

  • Unity Shader的学习笔记
  • 前言
  • 一、Unity中的环境光和自发光
  • 二、漫反射光照模型
    • 逐顶点光照
    • ① Shader名称
    • ② 定义属性
    • ③ Tags
    • ④ CGPROGRAM和ENDCG
    • ⑤ 定义vert和frag
    • ⑥ #include "Lighting.cginc"
    • ⑦ fixed4 _Diffuse
    • ⑧ a2v和v2f
    • ⑨ 关键的顶点着色器vert
    • ⑩ 片元着色器frag
    • 11 Fallback "Diffuse"
  • 总结


前言

今天来介绍一下Unity Shader中的漫反射光照模型中的逐顶点光照,同时大致说一下环境光和自发光部分的计算.


一、Unity中的环境光和自发光

在标准光照模型中,环境光和自发光的计算是最简单的.
在Shader中,我们只需要通过Unity的内置变量UNITY_LIGHTMODEL_AMBIENT,得到环境光的颜色和强度信息.
计算自发光也很简单,我们只需要在片元着色器输出最后的颜色之前,将材质的自发光颜色添加到输出颜色上即可.

二、漫反射光照模型

逐顶点光照

逐顶点的漫反射光照效果
上图为逐顶点光照效果,代码如下:

Shader "Unity Shaders Book/Chapter 6/Diffuse Vertex-Level"{Properties{_Diffuse ("Diffuse", Color) = (1.0, 1.0, 1.0, 1.0)}SubShader{pass{Tags {"LightMode" = "ForwardBase"}						③CGPROGRAM												④#pragma vertex vert;									⑤#pragma fragment frag;#include "Lighting.cginc"fixed4 _Diffuse;struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f												{float4 pos : SV_POSITION;fixed3 color : COLOR;};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight));o.color = ambient + diffuse;return o;}fixed4 frag(v2f i) : SV_Target							⑩{return fixed4(i.color, 1.0);}ENDCG}}Fallback "Diffuse"												11
}

这是我们第一段正经的Unity Shader的代码,我们从头开始分析:

① Shader名称

首先为了方便找到我们编写的Shader,我们需要定义Shader的名称,以及所在的位置,例如我们在给Material找Shader的话,我们首先选择Unity Shaders Book,然后选择Chapter6,找到Diffuse Vertex_Level,选择即可.

② 定义属性

在昨天我们讲述了漫反射的兰伯特模型,它需要材质的漫反射颜色,所以我们需要在Properties语义块中声明了一个Color类型的属性,并将其颜色设置为白色(白色的rbg均为1).

③ Tags

LightMode也是Pass标签的一种,在这里,我们只需要知道,只有定义了正确的LightMode,我们才能得到一些Unity的内置光照变量,例如下面使用的_LightColor0.

④ CGPROGRAM和ENDCG

我们使用CGPROGRAM和ENDCG来包含cg代码片.

⑤ 定义vert和frag

我们使用#pragma来定义顶点着色器和片元着色器的名称,在这段代码中,顶点着色器和片元着色器的名称分别为vert和frag.

⑥ #include “Lighting.cginc”

为了使用Unity的一些内置变量,例如上面所说的_LightColor0,我们必须包含Unity的内置头文件:#include “Lighting.cginc”.

⑦ fixed4 _Diffuse

为了在Shader中使用Properties中声明的属性,我们需要定义一个和该属性类型相匹配的变量,(怎么相互匹配我们已经在之前的帖子里面说过了,可以去翻一下).由于该属性是材质的漫反射属性,由于颜色属性的范围是0~1,所以我们使用fixed来存储.

⑧ a2v和v2f

我们定义了顶点着色器的输入输出结构体,因为我们计算漫反射时需要模型的法线信息,所以a2v中定义了normal变量,存储需要的法线信息;
同时为了将顶点着色器中计算的颜色传递给片元着色器,需要在v2f中定义color变量,此处的Color语义不是必须的,也可以使用TEXCOORD0.

⑨ 关键的顶点着色器vert

因为我们采用逐顶点光照,所以计算过程中存在于顶点着色器中.
首先我们定义返回值o,顶点着色器的任务就是将顶点位置从模型空间转换到裁剪空间中,因此我们使用UNITY_MATRIX_MVP来完成这样的坐标变换(现在直接使用UnityObjectToClipPos来完成),接着我们通过UNITY_LIGHTMODEL_AMBIENT来得到环境光的部分.
接着就是计算漫反射光照的部分了:
计算法线和光源方向的点积必须两个向量在同一个空间内才有意义,所以我们选择在世界空间内计算,由于通过v.normal得到的法线时位于模型空间下的,(我们已知可以使用顶点变换矩阵的逆矩阵来对法线进行相同的变换,因此我们首先得到模型空间到世界空间的变换矩阵的逆矩阵unity_World2Object,再通过调换他们在mul中的位置,由于法线是一个三维矢量,所以我们只需要unity_World2Object的前三行前三列就够了),这样我们就可以得到世界空间下的法线方向了,然后我们通过_WorldSpaceLightPos0来得到(因为环境中只有一个光源且为平行光,但是如果环境中存在多个光源时,这种方法可能无法得到正确的结果),光源的颜色和强度信息可以通过_WorldSpaceLightPos0来得到,接着按照公式对这些变量计算得到漫反射的颜色,在与环境光相加,对o.color进行赋值.

⑩ 片元着色器frag

在片元着色器中我们只需要将顶点颜色输出即可.

11 Fallback “Diffuse”

我们需要将这个Unity Shader的回调Shader设置为内置的Diffuse.

这样我们的逐顶点的漫反射光照模型就已经实现了,你可以将它所在的材质拖到物体上看看效果.但是根据我给出的图可以看出胶囊体的背光面和向光面交界处有一些锯齿,在原书上时这么说的:逐顶点光照对于一些细分度较高的模型,可以得到比较好的光照效果,但是对于细分度较低的模型,逐顶点光照就会出现一些视觉问题,为了解决这些问题,我们使用逐像素的漫反射光照


总结

今天我们只是对逐顶点光照进行一个总结,因为是我们的第一段Unity Shader代码,需要花一段时间去理解,所以明天我们再去解释逐像素光照.

http://www.dtcms.com/wzjs/23114.html

相关文章:

  • 开网站需要租用机房服务器价格西安百度推广运营
  • 个人做负面网站犯法不seo关键词优化外包
  • 怎么样建设网站青岛网站建设
  • 做音乐网站的条件长沙靠谱seo优化
  • iis 配置网站 404页面上海网站seoseodian
  • 寿光专业做网站今日时政新闻
  • 关于集团网站建设的网络营销做的比较好的企业
  • 微页制作网站模板下载永久不收费免费的软件
  • 做网站收入怎样公司个人怎么做网络推广
  • 常平网站建设比百度好用的搜索软件手机版
  • 网站开发公司郑州真正免费的网站建站平台运营
  • 可以做游戏的网站有哪些方面天津网站制作系统
  • 国税局网站里打印设置如何做上海百度提升优化
  • 查网站独立ip十大微商推广平台
  • 做纯净系统的网站广州关键词优化外包
  • 做网站找云无限高中同步测控优化设计答案
  • 南京专业网站开发团队宁德seo优化
  • 多语言建站系统百度官方电话
  • 茶企业网站学生个人网页制作html代码
  • 网站开发多少工资如何做营销推广
  • 深圳罗湖网站建设超级外链自动发布工具
  • seo怎么给网站做外链龙岗百度快速排名
  • 网站打模块百度推广和优化有什么区别
  • 韩语淘宝代购网站建设搜索引擎seo排名优化
  • 最权威的做网站设计哪家好如何推广引流
  • wordpress免费企业主题网站宁波seo外包推广软件
  • 工程建筑模板价格seo入门教学
  • 益阳网站建设公司电话杭州优化外包
  • 高安网站设计搜狗seo软件
  • 重庆忠县网站建设报价淘宝seo是什么意思