Unity中简单的cubecap+fresnel shader的实现
Shader "Unlit/cubecap"
{//cubecapProperties{_NormalMap("法线贴图", 2D) = "bump" {}_Cubemap("环境贴图", Cube) = "_Skybox" {}_MidMapLevel("贴图模糊度", Range(0, 7)) = 1.227742_fresnelpow("菲涅尔强度", Range(0, 1)) = 1_env("env", Range(0, 5)) = 1.93491}SubShader{Tags {"RenderType" = "Opaque"}Pass {Name "FORWARD"Tags {"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0//输入参数uniform samplerCUBE _Cubemap;uniform sampler2D _NormalMap;uniform float _MidMapLevel;uniform float _fresnelpow;uniform float _env;//输入结构struct VertexInput {float4 vertex : POSITION;float3 normal : NORMAL;float4 tangent : TANGENT;float2 uv0 : TEXCOORD0;};//输出结构struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;float3 nDirWS : TEXCOORD1;float3 tDirWS : TEXCOORD2;float3 bDirWS : TEXCOORD3;float3 posWS : TEXCOORD4;};//顶点shaderVertexOutput vert(VertexInput v) {VertexOutput o = (VertexOutput)0;o.uv0 = v.uv0;o.nDirWS = UnityObjectToWorldNormal(v.normal);o.tDirWS = normalize(mul(unity_ObjectToWorld, float4(v.tangent.xyz, 0.0)).xyz);o.bDirWS = normalize(cross(o.nDirWS, o.tDirWS) * v.tangent.w);o.pos = UnityObjectToClipPos(v.vertex);o.posWS = mul(unity_ObjectToWorld,v.vertex);return o;}//像素shaderfloat4 frag(VertexOutput i) : COLOR{//向量准备float3 nDirTS = UnpackNormal(tex2D(_NormalMap, i.uv0)).rgb;float3x3 tbn = float3x3(i.tDirWS, i.bDirWS, i.nDirWS);float3 nDirWS = normalize(mul(nDirTS, tbn));float3 vDirWS = normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);float3 vrDirWS = reflect(-vDirWS, nDirWS);//中间量准备float ndotv = dot(nDirWS,vDirWS);//光照模型float3 cubemap = texCUBElod(_Cubemap,float4(vrDirWS, _MidMapLevel) );float fresnel = pow(1.0 - ndotv, _fresnelpow);float3 envSpcLighting = cubemap * fresnel * _env;//返回值return fixed4(envSpcLighting,1);}ENDCG}}FallBack "Diffuse"
}
效果实现:
Unity中简单的cubecap+fresnel shader的实现相关推荐
- Unity中简单的matcap+fresnel shader的实现
Shader "Unlit/matcap"{//matcapProperties{_NormalMap("法线贴图", 2D) = "bump&quo ...
- unity中简单的血条自作
unity中制作血条有很多方法,多数用NGUI:这里我就说说一个简单的血条制作方法吧: 这个血条制作不像NGUI一样,它是靠一段代码就可以实现的,但看起来比较效果比较差,还是看代码吧: public ...
- 在Unity中简单地制作一张2D地图并随机生成资源
这个作业属于哪个课程 软件工程2022年春-F班 这个作业要求在哪里 软件工程实践总结&个人技术博客 这个作业的目标 课程回顾.个人技术总结 其他参考文献 <构建之法> 目录 一. ...
- 【unity游戏开发教程】Unity+Umotion Pro+VRoid+Blender制作人物模型和动画,在unity中简单制作二次元人物动画
前言 大家好!本期教程教大家在unity中制作二次元人物模型和动画 文章目录 前言 0.环境准备 1.下载VRoid Studio 2.Umotion Pro下载 3.Mixamo网站 4.blend ...
- Unity中简单粗暴的消息机制(可限制消息调用次数)
上代码 /********************************************************文件: EasyMsg.cs作者: 阿飞日期: 2022年02月15日_09: ...
- Unity中简单冲刺技能,加技能图标倒计时UI制作
首先,在Canvas下创建一个image1,改名 然后把image1的source image换成技能图片,或者随便一张图片都行 接着,在image1下创建子类image2 接着,按照下面图片调整 s ...
- [Unity] Unity中实现羽化功能的shader
GLSL->ShaderLab,原GLSL代码来自http://blog.csdn.net/panda1234lee/article/details/52199296, 由于shaderLab的 ...
- 【Unity3D Shader编程】之五 圣诞夜篇 Unity中Shader的三种形态对比 混合操作合辑
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...
最新文章
- 【新周报(051)】Datawhale组队学习
- 敏捷开发和测试中重现缺陷和验证缺陷的解决方案(2)
- 电压放大倍数公式运放_运放电路:同相放大还是反相放大?
- 【linux】kill命令模板
- k8s资源控制(污点和容忍)
- sleep 与 wait 区别
- 网易2016年研发project师编程题(2)
- 如果人民币贬值,对股市会有什么影响?
- 设计模式笔录(一),什么是设计模式
- 车牌识别用php算法,车牌识别算法实现及其代码实现之一:车牌区域检测
- 清明上河图30亿像素_清明上河图高清下载|
- 使用webpack搭建vue项目;webpack+vue
- android_5.0简介
- 德拜方程及matlab实现
- 计算机视觉的终极目标
- Win10-更改c盘下的用户文件夹名
- 使用JNI造成安卓应用闪退
- SQL Server-设置局域网内访问
- python数据分析(三)——pandas缺失值处理
- wcf 基础知识 之 消息交换模式 response/reply oneway deplex
热门文章
- 交换机连接两个网段进行通信
- 国庆看了长津湖 | 坚韧的毅力让我拿到了薪资18.5K,人生就像马拉松,坚持到最后,就是胜利者
- sleep()和wait()方法有什么区别
- 回溯算法模板之:332. 重新安排行程
- OracleRMAN备份与恢复之二:数据恢复
- BeeWare开发安卓app科目三灯光模拟器
- 直布罗陀将制定全球首个ICO监管法案
- 【算法与数据结构】—— 博弈论(初级篇之巴什博弈)
- 直线回归和相关------(一)回归和相关的概念与直线回归(含最小二乘推导)
- BrainNet Viewer 索引超出矩阵维度