位置: 编程技术 - 正文

【猫猫的Unity Shader之旅】之透明材质(猫的喵喵)

编辑:rootadmin

推荐整理分享【猫猫的Unity Shader之旅】之透明材质(猫的喵喵),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:猫的猫的视频,猫的游戏解说,猫的猫的视频,猫的游戏视频,猫的猫的视频,猫的猫的视频,猫的游戏视频,猫猫的游戏,内容如对您有帮助,希望把文章链接给更多的朋友!

  现实生活中有许多半透明的情形:玻璃、饮料瓶、塑料袋等等。半透明一个很重要的特点就是可以显示它后面的物体的部分颜色。这个“部分”具体是多少我们常用透明度来表示。

一个简单的透明例子

  想做出透明效果,第一步需要通知Shader我们要使用透明效果了。最简单的方法是在#pragma后面增加一个alpha参数,例如#pragma surface surf Lambert alpha。

  开启透明后,只要对SurfaceOutput的Alpha分量赋值就可以了,范围是[0,1],下面是一个简单的透明Shader:

  调整Alpha值,可以看到透明的效果:

  

  为了更好地观察透明效果,我们可以在立方体后面添加一个红色的平面。这时候,你可能发现一个奇怪的现象,立方体明明在平面的前面,但是看上去却被平面遮挡了,像这样:

  

  产生这种情况的原因是没有指定渲染顺序。渲染顺序,顾名思义,就是渲染的前后顺序,也可以理解为优先级。可以通过在Tags中指定键值对来指定Shader的渲染顺序。不过,作为一种全局的顺序机制,Unity已经为我们指定好了一些层级,分别是Background、Geometry、AlphaTest、Transparent、Overlay,分别表示, , 、、,顺序越小的越先渲染。默认情况下,Shader的渲染顺序是,也就是Geometry,我们可以手动指定渲染顺序:

  这样就代表我们这个Shader的渲染顺序为。为了解决上面那个奇怪的显示问题,我们可以把我们的Shader的渲染顺序稍微延后一点:

  此时渲染顺序就正确了:

【猫猫的Unity Shader之旅】之透明材质(猫的喵喵)

  

  其实Unity已经给我们定义了专门放置透明材质的层次,我们干嘛不用呢,所以最好的方法是这样写:

使用AlphaTest实现透明效果

  另一种实现透明的方式是利用裁剪。这种方式的基本原理就是利用片段的透明度和我们给定的一个透明度做对比,当片段的透明度大于给定透明度时就表现为不透明,否则就是透明(其实是被丢掉)。因此这种方式作出的效果除了完全透明的部分就是完全不透明的部分。

  要使用AlphaTest,需要在#pragma后面添加alphatest:xxx,这个xxx就是我们给定的透明度。下面是一个简单的AlphaTest的例子:

  为了体现效果我们需要一幅透明度渐变的贴图:

  

  下面是_AlphaTest在不同值下的效果:

    

  这种AlphaTest看上去比半透明的方式更有效率,事实上,大部分情况确实如此。一个例外是在移动设备上,AlphaTest在移动设备上效率非常低,甚至不如第一种半透明的方式。

  本次的工程文件在这里。

结束语

  透明材质有非常好的表现效果,可以说在游戏开发过程中是必不可少的,恰当的使用透明也可以极大地节省模型的面数。但是,使用透明会有一定的性能开销,尤其是在移动设备上。可以说,开发移动平台的游戏,资源和效率都是锱铢必较的,开发一款效果又好效率又高的产品真的不容易。OK,下回再见~

资源加载卸载与内存的关系 关于Resources.load和实例化与内存的关系:1.加载,单纯的Resources.load后消耗的内存很低,可能只是基础的引用预载、当对象被实例化后才会占用大量内存

Kinect结合Unity开发(一) 因为对Unity比较熟悉,所以一开始想着就是用Unity结合Kinect来进行游戏开发,而不是用Kinect的SDK强行撸一个出来,再说我也不会啊。然后就是上网各种找

使用BMFont+NGUI利用图片制作自定义字体 在游戏开发过程中,我们大多数时候都需要显示游戏计时和分数等,而这些数字如果用普通的字体来显示又会显得不太好看,于是我们产生了用图片来

标签: 猫的喵喵

本文链接地址:https://www.jiuchutong.com/biancheng/380151.html 转载请保留说明!

上一篇:Unity蛮牛教程噩梦射手----代码讲解(1)(unity manifest)

下一篇:资源加载卸载与内存的关系(资源加载中是什么原因)

  • 出口退税的条件有哪些
  • 一个工程中可以有多个主函数
  • 增值税专用发票抵扣期限
  • 哪些行业不能开具增值税专用发票
  • 个体户核定双定户是否可以年度汇算清缴
  • 企业基本医疗保险和综合医疗保险
  • 退休人员额外收入的税收标准
  • 税收滞纳金计税吗
  • 金税三期社保费管理客户端v1.0.088(生产环境)
  • 用党委经费买的固定资产如何计提?
  • 挂靠管理费如何入账?
  • 调账以前年度损益调整如何结转
  • 未分配利润转增股本需要交税吗
  • 应付职工薪酬存在的意义
  • 销售货物类型
  • 公司车辆高速费用能开增值税专用发票吗
  • 工会筹备金交给谁
  • 金税盘与税控盘及报税盘怎么区分
  • 企业有哪些o
  • 车辆购置税能抵扣税款吗
  • 运费营改增时间
  • 公司投资理财需要纳税吗
  • 预提保障金和交税的区别
  • 网件R6400路由器怎么样?网件R6400上网与传输评测的教程
  • 销售嵌入式软件产品发票如何开具
  • 编译安装php7
  • win10粘贴复制无效
  • PHP:spl_autoload_unregister()的用法_spl函数
  • 前端页面出现乱码
  • 工资总额包括哪些福利费
  • 在途物资运费会计科目怎么写
  • 佛罗里达naples
  • php图像
  • org.springframework.web.server
  • 腾讯一面问什么
  • php 输出
  • php支付接口开发
  • mysql的存储
  • 暂估入库多了怎么办
  • 购物赠品的处理流程
  • 特殊劳动关系和社会关系
  • 银行存款对账方法
  • 不动产进项税抵扣规定一次性抵扣
  • sqlmap暴力破解
  • 小企业会计准则和一般企业会计准则的区别
  • 增值税纳税申报类型有哪些
  • 企业增值税的征收方式
  • 交易性金融资产的账务处理
  • 子公司与母公司承担连带责任
  • 技术员差旅费计入哪个会计科目
  • 开发票系统税号0和o怎么区别?
  • 款项已支付是什么科目?
  • 苹果电脑定制键盘
  • xp系统怎么把ie浏览器放到桌面
  • weather.exe - weather 进程是什么文件
  • win10快速访问在哪
  • windows7如何启动记事本
  • vim中执行shell命令
  • 在linux系统中,用来存在系统所需
  • win10正式版声音不正常
  • css div布局的基本步骤
  • eslint-plugin
  • javascript操作dom对象
  • cmd命令可以干嘛
  • IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解
  • jQuery formValidator表单验证
  • python pygame模块详解
  • 如何控制孩子的手机使用时间
  • android sdkmanager
  • unity接入安卓sdk
  • javascript中array数组对象的含义及常用方法
  • javascript教程完整版
  • jquery的选择器有哪几种类型
  • 深圳12366怎么转人工
  • 对税务巡视工作的意见
  • 限售股转让如何交税
  • 1973年简并税制
  • 浙江省如何自助缴纳社保
  • 城市维护建设税属于什么科目
  • 增值税专用发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设