位置: 编程技术 - 正文

【Unity Shaders】Reflecting Your World —— Unity3D中简单的Cubemap反射(unity shaderlab)

编辑:rootadmin
在Project中可以创建我们自己的Cubemaps,现在,我们可以来看一下如何使用这种新的贴图类型来在Shaders中模拟反射效果。使用Cubemaps进行反射的原理实际上非常简单,但是这将给你的Shader效果带来翻天覆地的变化。它的原理主要是通过模型表面的每个顶点的法向量,去查找Cubemap贴图上的某一个位置。这种查找将会返回一个颜色&#;,来模拟这个Cubemap反射到你的对象上的这种效果。这篇教程将会教给你用Cubemaps来进行反射的第一步!Unity实际上给我们提供了自动得到反射向量的方法,所以我们不需要自己去计算它了。这是在Input结构体中的内置的worldRefl向量中实现的。这会帮助我们去查找对应的Cubemap贴图中的位置。因此,第一步的内容将非常简单!准备工作在我们开始写Shader代码之前,我们需要搭建一个简单的场景。创建一个新的scene,Material,和Shader,可以取名为SimpleReflection。附着新的Shader到新的Material上,然后创建一个物体,并把Material赋&#;给它。最后,创建或者找到一个Cubemap,之后将用于我们的Shader。下面的截图显示了我们这节中将要使用的Cubemap实现下面,让我们来实现真正的Shader代码吧!首先在Properties块中创建新的properties。我们需要一个位置来得到我们的Cubemap贴图对象以及来控制反射的程度:Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _MainTint ("Diffuse Tint", Color) = (1,1,1,1) _Cubemap ("CubeMap", CUBE) = ""{} _ReflAmount ("Reflection Amount", Range(0., 1)) = 0.5 } 同样,我们还需要在SubShader块中创建和properties中各变量的联系。这将允许我们从Properties块中访问这些数据。CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; samplerCUBE _Cubemap; float4 _MainTint; float _ReflAmount 为了让我们能够模拟正确的反射角度,我们需要得到一个向量来提供给我们合适的世界反射方向。因此,我们可以使用上面提到的Unity的Surface Shaders内置的变量。在Input结构体中,下面的代码将提供给我们一个世界反射向量,来用于接下来的Shader中:struct Input { float2 uv_MainTex; float3 worldRefl }; 最后,我们仅仅需要从Cubemap中得到贴图信息,即使用texCUBE函数和Input提供给我们的新的世界反射向量。添加下面的代码到你的surf函数中:void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint; o.Emission = texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflAmount;; o.Albedo = c.rgb; o.Alpha = c.a; 整体代码如下:Shader "Custom/SimpleReflection" { Properties { _MainTint ("Diffuse Tint", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Cubemap ("CubeMap", CUBE) = ""{} _ReflAmount ("Reflection Amount", Range(0., 1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" } LOD CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; samplerCUBE _Cubemap; float4 _MainTint; float _ReflAmount; struct Input { float2 uv_MainTex; float3 worldRefl; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint; o.Emission = texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflAmount;; o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } 最后,当我们和上一篇中创建的Cubemap结合起来后,就可以得到下面的效果。可以看到其中的球有反射的效果。解释上面代码能够成功的主要原因就是Unity3D提供的Surface Shader的Input结构的内置属性。worldRefl变量给我们需要的反射向量来正确的采样我们的Cubemap。我们仅需要在函数中使用worldRefl属性,就可以很方便地得到正确的反射视角。下面的截图展示了一个什么是传递给Shader的反射数据的例子。

推荐整理分享【Unity Shaders】Reflecting Your World —— Unity3D中简单的Cubemap反射(unity shaderlab),希望有所帮助,仅作参考,欢迎阅读内容。

【Unity Shaders】Reflecting Your World —— Unity3D中简单的Cubemap反射(unity shaderlab)

文章相关热门搜索词:unity shader saturate,unity shader 教程,unity shader saturate,unity shader视频教程,unity shader saturate,unity shader 教程,unity shader lerp,unity shader saturate,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity协同程序 1.什么是协同程序在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。2.协同程序的开启与

rotation 与vector3乘积关系 1.已知3D坐标,和一个旋转角度,以及一段距离,求目标点的3D坐标。已知当前点为Target,目标点沿着Target的Y轴旋转度,沿着Target的X轴延伸米求目标

Unity3D 获取控件四个角在屏幕上的坐标 Vector3[]corners=newVector3[4];gameObject.GetComponentRectTransform().GetWorldCorners(corners);foreach(varitemincorners){Debug.Log(item);}出来的坐标的顺序是左下、左上、右上、右下

标签: unity shaderlab

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

上一篇:使用NGUI发布报错的解决方案

下一篇:Unity协同程序(unity协程yield)

  • 建筑业小规模纳税人 扣除分包款 开票
  • 销项税额是指
  • 待认证进项税额认证以后怎么做分录
  • 费用怎么分析
  • 税务申报有什么技巧
  • 增值税需要计入入账价值吗
  • 人员工资薪金所得税计算税款
  • 纳税人经营所得预缴申报表怎么填
  • 法人变更注册资金降低以前的债务怎么处理
  • 代理服务费收取标准
  • 增值税预缴税金交错了怎么办
  • 存货进口关税会计处理怎么做?
  • 超过诉讼时效的答辩状怎么写
  • 往来核算在会计哪个科目
  • 装饰设计费计入什么科目
  • 应交增值税账面数
  • 基金公司管理费收入怎么入账
  • 增值税专用发票可以开电子发票吗
  • 增值税缴纳地方怎么填
  • 6%税率的项目(不含金融商品转让)免税么
  • 小规模纳税人日用品增值税税率
  • 广西电子税务局申报
  • 移动网络的费用有哪些
  • 收到未到期的银行承兑汇票会计分录
  • 本月无票收入到下月开具如何申报
  • 转账支票用途可以写劳务费吗
  • 增值税差旅费可以扣除吗
  • Mac怎么用有线网络
  • 个人独资企业每月开票金额
  • 企业年报系统怎么进
  • win10系统白名单怎么设置
  • 家庭承包发包方的权利和义务
  • 社保缴纳基数相差多少
  • php中implode
  • 企业预付工程车租赁费
  • 购买办公用品没收到发票怎么做账
  • 挂在树上的小鸟怎么画
  • 利用php实现一个数组
  • 帮人开票怎么计算税点金额
  • 深度卷积神经网络基本结构
  • elm命令 纯文本邮件客户端程序
  • php原生导出excel表单元格格式
  • 报税系统清卡成功状态
  • 税控盘减免税款会计分录
  • 利息收入可以冲减开发成本的法律依据
  • 非独立核算的分公司如何报税
  • 如何隐藏应用软件华为
  • php fgetc
  • 小型微利企业是小微企业吗
  • 原始凭证的基本内容有会计分录吗
  • 专利年费计入哪里
  • 工程异地施工缴什么税
  • 职工薪酬包括哪些应如何计算
  • 主营业务成本工资写什么部门
  • 事业单位的职工可以办营业执照吗
  • 非税收入一般缴款书查询
  • 收购溢价会计处理
  • 洗车发票税目
  • 暂估入库做账
  • 信托保障基金会返还吗
  • 分配利润给股东公司需要交税吗
  • 银行存款日记账与银行对账单之间的核对属于
  • 使用灭火器人要站在上风口还是下风口
  • win8.1退回win8
  • mac怎么复制文件路径地址
  • xp系统禁止程序联网
  • vsftpd配置用户登录目录
  • Win RT 8.1 Update 3怎么提前更新安装使用?
  • window8系统好用吗
  • win8.1屏幕键盘
  • 防止非法使用计算机,可口令
  • cocos2dx 教程
  • linux shell执行命令
  • html中滚动条
  • vue路由跳转的钩子函数什么时候会用到
  • android布局教程
  • 季度税额怎么算
  • 南京市国家税务局官网
  • 养老专业在职研究生好吗
  • 个人股权转让是否增值了怎么判断
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设