Unity Shader入门精要 第一遍看书总结

Shader是什么?

当你把一个道具放入场景中,那么这个道具就客观存在了。例如,桌子上的键盘,你看与不看,它都在那里。这便是世界空间。在个世界中,你的眼睛就是摄像机,你的大脑就相当于CPU,GPU,最后成像。

而Shader就是大脑中的计算过程,计算过程中的一部分。毕竟大脑先让眼睛看见,将看见的信息收集起来,在经过Shader处理,才能得到最终的结果。前半过程是由CPU处理的,后半过程可由GPU处理。那么它计算了些什么东西呢?比如说颜色,质感,上边的灰尘,反射的灯光,等等。

它所做的还可以超出人真实大脑的控制范围,它可以进行后处理。是否模拟隔着雾看东西,是否产生高斯模糊,把键盘扔起来的时候,是否会有动态模糊,是否让他显示卡通风格,或者是水墨风格,是否让它消融,等吧。这些都是人的大脑做不出来的。但是Shader就能,它可以在渲染的时候就进行 造假,也可以在渲染后 造假。毕竟大脑仅仅需要需要的是一个画面,计算机中仅仅是需要一个二维的图,一个像素图。Shader想怎么改就怎么改,这个权利如今看来很是强大。

Shader怎么改像素图?

Shader主要用到了两个函数,一个是顶点着色器,一个片元着色器。

顶点着色器,主要处理顶点,场景中的东西大部分都是三角面片,顶点指的就是三角面片上的三个点。在顶点着色器的时候返回的值是片元着色器的输入的值。片元着色器是什么?是三角形ABC内部所有的点。每个点都带着顶点着色器返回的值。

顶点着色器 确定的是 模型上的点 投影后的位置,片元着色器确定的最终的每一个像素的颜色。所以顶点着色器处理的数据比片元着色器处理的数据少的多的多。

关于坐标系

坐标系有很多个,看你需要哪个坐标系。坐标系又是参考系。试问,键盘上的F7在哪里?答:在上边靠中间的位置。这就是以键盘作为参考系,原点可能选择了键盘正中心。答:在F6的右边,这既是以F6做为了参考系。答:在桌子的中心点偏左的位置,这就是以桌子作为了参考系。答:在东经xx°,北纬xx°,这是以地球作为参考系。上面的这些答案,除了前两个有点用,其他的作用不大。

在渲染中 常使用的坐标系有 局部坐标系, 世界坐标系,摄像机坐标系,裁剪空间坐标系, 屏幕坐标系。

同理,在渲染中,首要的坐标系就是 局部坐标系,就是物体本身的坐标系,比如在顶点着色器中顶点的位置,法线,切线的数据都是局部坐标系下的数据。我们可以把这些数据放到世界坐标系中,于是就变成了世界坐标系下的位置,法线,切线。也可以放到摄像机坐标系下,还可以放到屏幕坐标系下。当然也可把世界坐标系中的数据转换为局部坐标系下,比如说计算法线贴图的光照时,可以把世界坐标系下的光转为局部坐标系,看你喜欢。

基本流程

在顶点着色器中设置位置,在片元着色器中设置颜色。

加入了光照

环境光A: UNITY_LIGHTMODEL_AMBIENT

漫反射B: diffuse = _LightColor0.rgb * _Color * max(0, dot(normal, lightdir))

镜片反射C: specular = _LightColor0.rgb  * _Specular * pow(max(0, dot(normal, halfDir)), _Gloss),其中halfDir = normalize(viewDir + lightDIr)

加入了纹理

反光率 albedo = tex2D(_MainTex, uv) * _Color

环境光A = A * albedo

漫反射B = _LightColor0.rgb * albedo * max(0, dot(normal, lightdir))

加入了法线纹理

这里记得不是很清楚

需要通过 法线和切线,创造出顶点坐标系,经过等等的操作,获取法线

透明效果

分为透明度测试 和 透明度混合。

透明度测试 检测纹理的a值与设置的阈值大小

透明度混合 需要考虑融合的公式,是否包含自身,是否是双面渲染。需要关闭ZWrith。

光源

前向渲染的base中处理 主要的平行光,主要的逐像素光源所有的逐顶点光源。在add中处理其余的逐像素光源。

有光源就有衰减还有阴影,幸亏Unity通过UNITY_LIGHT_ATTENUATION 将两者统一处理了获取了atten值。

高级纹理CUBE

这个效果类似于在物体表面有一层金属可以反射或折射周围的环境。

主要是通过texCUBE函数对RenderTexture进行采样,采样的另一个参数是入射的方向,这个入射的方向 与 观察方向 关元法线对称。

纹理动画

通过加入_Time 移动顶点,或者纹理的坐标产生动画效果

屏幕后处理

对屏幕生成的图像,再次处理,主要通过 OnRenderImage函数和Graphics.Blit函数进行的。

还可以通过卷积 获取边缘,高斯模糊等

深度纹理和法线纹理,通过对摄像机的设置可以在Shader中获取深度纹理和法线纹理。进行的一些操作更加精确。

渲染风格

完全不记得学了什么

噪声

通过噪声可以表现燃尽,水波效果等。

 

写的很粗糙,这是第一遍,后面还有5章的内容没有看,先不着急。

 

 

 

Unity Shader是一种用于渲染图形的程序,它可以控制对象的表面颜色、纹理、透明度、反射等属性,从而实现特殊的视觉效果。对于游戏开发者来说,掌握Shader编写技巧是非常重要的。 以下是关于Unity Shader入门精要: 1. ShaderLab语言 ShaderLab是Unity中用于编写Shader的语言,它是一种基于标记的语言,类似于HTML。ShaderLab可以用于定义Shader的属性、子着色器、渲染状态等信息。 2. CG语言 CG语言是Unity中用于编写Shader的主要语言,它是一种类似于C语言的语言,可以进行数学运算、向量计算、流程控制等操作。CG语言可以在ShaderLab中嵌入,用于实现Shader的具体逻辑。 3. Unity的渲染管线 Unity的渲染管线包括顶点着色器、片元着色器、几何着色器等组件,每个组件都有不同的作用。顶点着色器用于对对象的顶点进行变换,片元着色器用于计算每个像素的颜色,几何着色器用于处理几何图形的变形和细节等。 4. 模板和纹理 在Shader中,我们可以使用纹理来给对象添加图案或者贴图,也可以使用模板来控制对象的透明度、反射等属性。纹理可以通过内置函数tex2D()来获取,模板可以通过内置函数clip()来实现裁剪。 5. Shader的实现 Shader的实现需要注意以下几点: - 在ShaderLab中定义Shader的属性、子着色器、渲染状态等信息。 - 在CG语言中实现Shader的具体逻辑,包括顶点着色器、片元着色器等内容。 - 使用纹理和模板来实现特定的视觉效果。 - 在对象上应用Shader,通过调整Shader的属性来达到不同的效果。 以上是关于Unity Shader入门精要,希望对你有所帮助。如果你想更深入地了解Shader的编写技巧,可以参考官方文档或者相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值