希望实现一个根据摄像机朝向与网格法向关系控制光照亮度的双面shader。

代码如下

Shader "Custom/UnlitOP" {Properties{ _Color("Main Color", Color) = (1,1,1,1)                  //渲染需要外部设置的颜色_MainTex("Base (RGB)", 2D) = "white" {}                  //材质_CamDir("Camera Dirction",Vector) = (0.1,0.2,0.3,0.4)          //摄像机的朝向}SubShader{Tags{ "RenderType" = "Opaque" "Queue" = "Geometry"}ZWrite On  LOD 200Cull Off            //双面shaderCGPROGRAM
#pragma surface surf myLightModel    //用了自定义的光照模型sampler2D _MainTex;          float4 _Color;float4 _CamDir;            //摄像机朝向变量//命名规则:Lighting接#pragma suface之后起的名字   //lightDir :点到光源的单位向量   viewDir:点到摄像机的单位向量   atten:衰减系数
    float4 LightingmyLightModel(SurfaceOutput s, float3 lightDir, half3 viewDir, half atten){float4 c;float3 cr;cr = _CamDir.xyz;float diffuseF = max(0, abs(dot(s.Normal, cr)/2.0));    //由于是双面shader,所以正反面的颜色应该一样,否则会不同,/2是让dot结果在0-1之间。c.rgb = s.Albedo*_LightColor0.rgb*(diffuseF);        //_LightColor0是内置的属性,应该跟当前光照有关。c.a = s.Alpha;return c;}struct Input {float2 uv_MainTex;float4 _Color;};void surf(Input IN, inout SurfaceOutput o) {//half4 c = tex2D(_MainTex, IN.uv_MainTex)*_Color;o.Albedo = _Color.rgb;o.Alpha = _Color.a;}ENDCG}FallBack "Diffuse"
}

下面是有透明效果的版本,基本一样,就是要注意Tags的写法,以及关闭ZWrite,开启Ztest,使用Blend。另外在调试中发生了一点意外,完全一样的代码,开始时始终透明物体被渲在了所有不透明物体后面,怎么改代码都没用,后来将材质的shader都改成standard试试好用,再改回来就正常了。这点事弄了半下午......

Shader "Custom/UnlitTR" {Properties{_Color("Main Color", Color) = (1,1,1,1)_MainTex("Base (RGB)", 2D) = "white" {}_CamDir("Camera Dirction",Vector) = (0.1,0.2,0.3,0.4)}SubShader{Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" }ZWrite OffZTest OnLOD 200Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM
#pragma surface surf myLightModel alpha  sampler2D _MainTex;float4 _Color;float4 _CamDir;//命名规则:Lighting接#pragma suface之后起的名字   //lightDir :点到光源的单位向量   viewDir:点到摄像机的单位向量   atten:衰减系数
    float4 LightingmyLightModel(SurfaceOutput s, float3 lightDir, half3 viewDir, half atten){float4 c;float3 cr;cr = _CamDir.xyz;float diffuseF = max(0, abs(dot(s.Normal, cr) / 2.0));c.rgb = s.Albedo*_LightColor0.rgb*(diffuseF);c.a = s.Alpha;return c;}struct Input {float2 uv_MainTex;float4 _Color;};void surf(Input IN, inout SurfaceOutput o) {//half4 c = tex2D(_MainTex, IN.uv_MainTex)*_Color;o.Albedo = _Color.rgb;o.Alpha = _Color.a;}ENDCG}FallBack "Diffuse"
}

转载于:https://www.cnblogs.com/bwzydr/p/7128846.html

unity3d shader 自定义光照函数相关推荐

  1. 【Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

  2. 【Unity3D Shader编程】之七 静谧之秋篇 表面着色器的写法 二 —— 自定义光照模式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  3. Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

  4. 【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...

  5. 【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)——自定义光照模式

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=183 作者:毛星云(浅墨)    微博:http://weibo ...

  6. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  7. Unity3D Shader入门指南(二)

    关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...

  8. 猫都能学会的Unity3D Shader入门指南(二)

    关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...

  9. 【Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)屏幕水幕特效的实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅 ...

  10. Unity3D Shader 入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

最新文章

  1. PowerBI随笔(7)-lookupvalue、divide
  2. Scala方法定义,方法和函数的区别,将方法转换成函数
  3. 前端学习(1867)vue之电商管理系统电商系统之登录退出实现表单的重置
  4. windows7系统电脑管理员权限的更改方法
  5. rfc方式的集成 sap_转载: 与SAP集成的接口方式比较:IDOC BAPI RFC 之间的区别
  6. Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
  7. H5自带的type=date或者month等日期控件移动端显示placeholder
  8. 第三步_安装jdk环境
  9. Xen虚拟机加入Puppet环境如何解决时间同步问题
  10. @param注解什么意思_你对Java注解真的理解吗?
  11. visio业务流程图教学_用visio软件怎样画数据流程图和业务流程图?
  12. 制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现
  13. B站视频下载器,可以下载到电脑后保存,畅享视频下载
  14. android studio白屏,首次集成到Android studio的工程运行起来就是白屏
  15. 设置电脑保护视力的颜色
  16. nginx + ftp搭建文件服务器
  17. 人人开源 / renren-security/小记(二)
  18. Tcp TimeWait处理流程
  19. UVa12325 宝藏
  20. 【知识建设】信息熵、条件熵、互信息、交叉熵及相对熵(KL散度)

热门文章

  1. Atitti cto的日常流程与职责attilax总结
  2. Atitit 文档资料管理同步解决方案
  3. Atitit。  工作流引擎的发展趋势
  4. Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
  5. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
  6. atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
  7. paip.输入法编程---输入法ATIaN历史记录 c823
  8. paip.银行卡号的发卡行归属地查询
  9. Gartner数据:RPA以75.6%增长率成2019年Q1增速最快的企业级软件(附全球十大RPA市场数据)
  10. Rust : CTP 中异步处理