shader整洁之道:规范shader代码、优化shader性能的方法
demi 在 周五, 09/25/2020 - 09:19 提交
本文将给出一些如何规范shader代码的建议。我们一般使用Cg/HLSL来编写shader代码,有三种数据类型,.float、half和fixed。这些精度将决定计算结果的数值范围。
本文将给出一些如何规范shader代码的建议。我们一般使用Cg/HLSL来编写shader代码,有三种数据类型,.float、half和fixed。这些精度将决定计算结果的数值范围。
一开始我们在渲染中使用纹理是为了定义一个物体的颜色,但后来发现纹理可以用于存储任何表面属性。一种常见用法就是使用渐变纹理来控制漫反射光照的结果。在计算漫反射光照时,我们都是使用表面法线和光照方向的点积结果与材质的反射率相乘得到表面的漫反射光照。有时我们需要更加灵活的控制光照结果。
纹理的另一种常见的应用就是凹凸映射。凹凸映射的目的是使用一张纹理来修改模型表面的法线,以便为模型提供更多的细节。这种方法不会真的改变模型的顶点位置,只是让模型看起来好像是“凹凸不平”的,但可以从模型的轮廓看出“破绽”。
纹理最初的目的就是使用一张图片来控制模型的外观。使用纹理映射技术可以把一张图黏在模型表面,逐纹素(名字和像素进行区分)地控制模型的颜色。
光照贴图(Lightmap)是一种效果明显的模拟光照的方法,这种光照贴图需要提前渲染,因此可以应用在静态效果图中,属于全局照明技术。但是这种方法一般只适用于静态物体。当然unity做了很多工作,可以让我们混合使用静态光照贴图和动态实时光源,无缝地照亮场景中静态或动态的物体。
本篇在unity实现高光反射。
游戏制作很复杂,并不是坐在桌前、灵光一现,然后编编代码就行了。本文将介绍游戏开发中最为常见的几个大坑,如果能绕过这些深坑,一定会增大你的游戏在激烈的市场竞争中的胜算。
之前主要讲的是unity中的光照模型及其原理,还有几种光照类型(自发光、环境光、漫反射、高光反射),后面几篇文章就开始在unity中实现这几种光照类型,本篇在unity实现漫反射。
上篇主要讲的是unity中的光照模型及其原理,还有几种光照类型(自发光、环境光、漫反射、高光反射),后面几篇文章就开始在unity中实现这几种光照类型,本篇在unity实现自发光、环境光。
当我们描述一个物体的是红色的时候,实际上是因为这个物体会反射更多的红光波长,而吸收了其他波长。如果一个物体看起来是黑色的,实际上因为吸收了绝大部分的波长,这种物理现象就是本文要讨论的。