Unity3D之Shader自定义编辑器功能拓展

一、前言
  最近在开发一个关卡类的游戏,在导入一些3D物体的时候,发现很多时候同一个3D物体需要渲染的方式不一样,比如这颗树要双面渲染(Cull Off),但在很多情况下是可以剔除背面(Cull Back)的,之前在写Shader方面找不到什么好方法直接控制,干脆就写了两个Shader,这就造成了无谓的浪费跟资源管理的麻烦了,我们是可以更加方便地控制Shader的某些属性的。

二、正文
  先看看我们最终的效果图:


  这里我只是列了一部分的属性作为例子进行介绍,大家当然是可以拓展到想要控制的另外属性上面的。贴上我们需要的shader代码:

 
  好了,让我们来分析一下具体代码的作用。
1、下拉框:


  这一句简单来说就是定义了一个Float类型名字为_CullMode的变量。
  [Space(10)] : 这个是指在面板上留10单位的空间展示此属性。
  [Enum(CullMode)] : 这里就表明了这个变量是属于CullMode的枚举变量,在最后的默认值为0,就是CullMode.Off这个值。我们就可以根据这个枚举来进行渲染剔除类型的控制。而对应的代码是:。然后如果我们打算用脚本去控制这个值,可以这样做:


  特别要注意的是,有时候我们虽然定义了,发现所可以选择的枚举值并不是我们想要的,那就很可能是有同名的系统枚举类型了,所以我们很多时候都尽量定义全枚举变量的引用,像这样子做:


2、自定义的枚举下拉框
  那我们是否可以使用自定义的枚举类型呢?以下就是例子


  这样我们就定义了包含了{Original,Black,White}的枚举类型了,然后我们还有在CG语言里面定义相关联的关键字,它的形式是“变量名”+“_”+“枚举变量名”:


  当我们要使用这几个关键字的时候,就是这样的:

 

  这里的代码都是为了简单举例进行展示使用方式而已。同时,我们可以用脚本去控制宏,这个跟之前的系统定义的枚举变量控制是不一样的:


  因为在定义这些自定义的枚举的时候,已经生成了Shader内部的一个对应的关键字了,所以我们必须要用EnableKeyWord/DisableKeyWord的方式去启用或者关闭。
3、选择框
  当我们需要定义一个布尔型的属性的时候,我们也是可以用Float去替代的:


  所使用的方式是:


  而平时的常规写法是这样的:

                  

  但我们定义了这个[Toggle]之后,就可以得到一个“变量名”+“_ON”的关键字可以使用了。同样地,我们用脚本控制的时候也是一样的方式:


4、滑动条
  而当我们需要去控制一个值在一个范围内的时候,我们可以使用滑动条的定义:


  其实如果你不用前面的定义也是可以的,只要用Range这个定义就可以了,而脚本控制的方式也是跟SetFloat的方法是一样的。
5、隐藏显示变量
  有时候定义太多东西到面板上反而会造成策划或者别的人看的时候迷糊,所以有些定义的变量,我们不想它显示在面板的时候,可以这样子做:


  但其实[HideInInspector]这个变量属性也可以用在脚本上定义的,这里就不详说了。这里先写这些了,有什么意见或者建议都可以在下面留言,谢谢大家。
  后续:如果大家对这些功能还不满足的话,还可以自己写编辑器,只要继承“ShaderGUI”这个类就好了,具体大家可以在这里查看:http://docs.unity3d.com/ScriptReference/ShaderGUI.html,如果有需要,我也可以继续写这个类详细的扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解依赖注入(IOC)

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调…

局域网win7计算机如何互访,局域网win7电脑的互访步骤

局域网win7电脑的互访步骤Windows7如何实现局域网内的互访?下面是局域网win7电脑互访的步骤,为大家提供参考。步骤一:同步工作组 不管使用的是什么版本的Windows操作系统,第一步,要保证联网的各计算机的工作组名称一致步骤二&…

服务器自动挂载硬盘,Linux硬盘分区及开机自动挂载

本文以CentOS 6.4为例,查看当前linux服务器分区:df -h查看当前linux服务器硬盘:fdisk -l/dev/sda 第一块硬盘/dev/sdb 第二块硬盘依此类推以/dev/sdb为新增硬盘为例,需要进行以下操作方可正常使用1、分区fdisk /dev/sdb依次输入n&…

GPU Pro2 - 1.Terrain and Ocean Rendering with Hardware Tessellation

最近时间多了起来,准备捡起扔下了的渲染部分的知识。想拜读下GPU Pro系列并且做个笔记,不知道自己能否坚持下来,但愿可以吧。自己能力也有限,写的东西也只是自己的理解,肯定有很多理解不到位甚至错误的地方&#xff0c…

GPU Pro2 - 3.Procedural Content Generation on the GPU

GPU Pro2 - 3.Procedural Content Generation on the GPU 这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。 Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用,从简单的随机物体摆放,到全…

GPU Gems1 - 1 用物理模型进行高效的水模拟(Effective Water Simulation from Physical Models)

该读书笔记大多内容参照了大神浅墨的该篇文章https://zhuanlan.zhihu.com/p/35974789 本章介绍了一种在GPU中模拟和渲染大的水体的系统。它把基本网格的集合波动于动态发现贴图的生成结合起来。 1.1 目标和范围 这章里,我们将由计算简单正弦函数之和开始&#xf…

GPU Gems1 - 2 水刻蚀的渲染

2.1 引言 光线从弯曲的表面反射或折射,因此只聚焦在受光面上的某些区域,于是就产生了刻蚀现象。本文从美学角度出发,不以纯物理的方式计算,使其很容易在大多数图形硬件上实现,效果又十分逼真。 2.2 刻蚀的计算 如果想…

邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单

8月3日消息 在申请SSL证书时,由于您的邮箱可能默认设置或自定义设置了拦截国外邮件,可能会导致您接收不到CA的邮件,给验证、收取证书带来了不便;如果服务器,防火墙也设置了拦截操作,那么即使您按CA要求完成…

GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)

该篇文章参照浅墨的这篇文章:https://zhuanlan.zhihu.com/p/35974789 Dawn是由NVIDIA创建的,用来介绍GeForce FX产品线的演示程序,它说明如何使用可编程的着色技术创建出逼真的人类角色。 最初的Dawn Demo由NVIDIA于2002年发布,…

GPU Gems1 - 5 改良的Perlin噪声的实现

Perlin 噪声 KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数,称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00,变化源自各顶点间的梯度向量,然后再进行平滑插值。 计算…

GPU Gems1 - 7 无数波动草叶的渲染

本文部分参照该文章https://zhuanlan.zhihu.com/p/35974789 1.引言 本章介绍了一种灵活的,广泛应用的草模拟。该方案渲染的草不仅生长得自然,也能够逼真地在风中舞动,而且性能很高。 2.概述 首先,需要意识到,对单个…

2003文件服务器迁移2016,服务器2016设置文件共享

服务器2016设置文件共享 内容精选换一换为了保证使用生成的镜像创建的新云服务器可以实现一键式重置密码功能,建议您安装密码重置插件CloudResetPwdAgent,可以应用一键式重置密码功能,给云服务器设置新密码。下载一键式重置密码插件CloudRese…

GPU Gems1 - 8 衍射的模拟

1.什么是衍射 小尺度的表面细节引起反射波彼此干扰,这个现象就是衍射。首先,计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长(约1um)大许多时,不存在问题。但对于小尺寸的细节&#x…

GPU Gems1 - 9 有效的阴影体渲染

这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗。 简单谈谈阴影…

GPU Gems1 - 10 电影级的光照

本章中介绍了一个的简化的uberlight(可理解为“全能光照”)实现,此光照shader根据Ronen Barzel(1997,1999)提出的照明模型编写而成。而该模型的超集已由Pixar动画开发,并应用于《玩具总动员》、《怪物公司》、《海底总动员》等一系…

GPU Gems1 - 11 阴影贴图反走样

这章介绍了如何通过邻近百分比过滤方法(Percentage-Closer Filtering , PCF)有效减少阴影贴图的反走样,并描述了如何实现一个简化版本,并对PCF方法进行了一定改进。关于阴影贴图和PCF技术的一些链接 https://pubweb.eng.utah.edu…

GPU Gems1 - 12 全方位的阴影映射

在这章中,把阴影贴图的思路扩展到正确处理全方位的(点)光源中,其中包括了实现细节,也涉及到基本硬件能力不足时的低效运行策略。 首先,这篇文章也谈到了在实时计算机图形学中产生可见阴影的两个流行方法是…

GPU Gems1 - 13 使用遮挡区间映射产生模糊的阴影(Generating Soft Shadows Using Occlusion Interval Maps)

这章介绍了一种渲染软阴影的技术,称为遮挡区间映射(Occlusion Interval Maps),能够正确地在静态场景中渲染出光源沿着预定路径移动时产生的模糊阴影。之所以叫遮挡区间映射,是因为此算法使用纹理贴图来存储这种光源可见…

粗糙表面的微表面模型——Physically Based Material

关于文章 Microfacet Models for Refraction through Rough Sufaces的一点笔记,欢迎指正。 BSDF BSDF(Bidirectional Sacttering Distribution Function) 描述了光如何在物体表面散射。如果仅仅限制反射或者透射,BSDF经常被称作BRDF或者BTDF,然而BSDF将…

GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点。这篇大体意思是对Perspective Shadow Maps进行部分优化。GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化,那先介绍介绍原来技术嘛&#xff…