unity3d shader 自定义光照函数
希望实现一个根据摄像机朝向与网格法向关系控制光照亮度的双面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 自定义光照函数相关推荐
- 【Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...
- 【Unity3D Shader编程】之七 静谧之秋篇 表面着色器的写法 二 —— 自定义光照模式
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...
- 【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42611531 作者:毛星云(浅墨) ...
- 【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)——自定义光照模式
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=183 作者:毛星云(浅墨) 微博:http://weibo ...
- Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- 猫都能学会的Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- 【Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)屏幕水幕特效的实现
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅 ...
- Unity3D Shader 入门
什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...
最新文章
- PowerBI随笔(7)-lookupvalue、divide
- Scala方法定义,方法和函数的区别,将方法转换成函数
- 前端学习(1867)vue之电商管理系统电商系统之登录退出实现表单的重置
- windows7系统电脑管理员权限的更改方法
- rfc方式的集成 sap_转载: 与SAP集成的接口方式比较:IDOC BAPI RFC 之间的区别
- Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
- H5自带的type=date或者month等日期控件移动端显示placeholder
- 第三步_安装jdk环境
- Xen虚拟机加入Puppet环境如何解决时间同步问题
- @param注解什么意思_你对Java注解真的理解吗?
- visio业务流程图教学_用visio软件怎样画数据流程图和业务流程图?
- 制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现
- B站视频下载器,可以下载到电脑后保存,畅享视频下载
- android studio白屏,首次集成到Android studio的工程运行起来就是白屏
- 设置电脑保护视力的颜色
- nginx + ftp搭建文件服务器
- 人人开源 / renren-security/小记(二)
- Tcp TimeWait处理流程
- UVa12325 宝藏
- 【知识建设】信息熵、条件熵、互信息、交叉熵及相对熵(KL散度)
热门文章
- Atitti cto的日常流程与职责attilax总结
- Atitit 文档资料管理同步解决方案
- Atitit。 工作流引擎的发展趋势
- Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
- atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
- paip.输入法编程---输入法ATIaN历史记录 c823
- paip.银行卡号的发卡行归属地查询
- Gartner数据:RPA以75.6%增长率成2019年Q1增速最快的企业级软件(附全球十大RPA市场数据)
- Rust : CTP 中异步处理