(1)效果图如下:
(2)效果分析:
1.边缘 :”高亮“ "通透"效果 。
2.非边缘的"厚重"效果
3.光滑的反射"环境"信息

看到有的博客里 是使用 “深度差” 来控制效果分析中 1和2 的实现
思路链接
思路如图:
(3)本文的思路和上图不同:

hua 不多说,直接上源码 代码有注释

Shader "Unlit/Dragon_01"
{Properties{_DiffuseColor("Diffuse Color",Color) = (0,0.352,0.219,1)_BasePassDistortion("Bass Pass Distortion", Range(0,1)) = 0.2_CubeMap("Env Map", Cube) = "white" {}_EnvRotate("Env Rotate",Range(0,360)) = 0_BasePassPower("_BasePassPower",Range(0,50)) = 5_BasePassScale("_BasePassScale",Range(0,50)) = 1_ThicknessMap("Thickness Map",2D) = "black"{}}SubShader{Tags { "LightMode" = "ForwardBase" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "AutoLight.cginc"struct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;float4 pos_World : TEXCOORD1;float3 normal_world : TEXCOORD2;};sampler2D _MainTex;float4 _MainTex_ST;float4 _LightColor0;float _BasePassDistortion;float4 _DiffuseColor;samplerCUBE _CubeMap;float4 _CubeMap_HDR;sampler2D _ThicknessMap;float _EnvRotate;float _BasePassPower;float _BasePassScale;v2f vert (appdata v){v2f o;o.normal_world = UnityObjectToWorldNormal(v.normal);o.pos_World = mul(unity_ObjectToWorld, v.vertex);o.uv = v.texcoord;o.pos = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{float3 normal_dir = normalize(i.normal_world);float3 view_dir = normalize(_WorldSpaceCameraPos - i.pos_World.xyz);float3 light_dir = normalize(_WorldSpaceLightPos0.xyz);/// diffusefloat diff_term = max(0.0, dot(normal_dir, light_dir));float3 diffuseColor = _DiffuseColor * diff_term * _LightColor0.rgb;/ 此处模拟 skybox的天光效果:  在Y轴上的强度 影响漫反射的强度// float sky_sphere = (dot(normalDir,float3(0,1,0)) + 1.0) * 0.5;// float3 sky_light = sky_sphere * diffuse_color;// float3 final_diffuse = diffuselight_color + sky_light * _Opacity + _AddColor.xyz;/ 透射光//  加了参数扰乱一下float3 back_dir = normalize(light_dir + normal_dir * _BasePassDistortion);// view  和 light 的夹角float VdotB = max(0,dot(view_dir,back_dir));// 控制一下强度: pow函数使效果更加显著!!!!!float backlight_term = max(0.0,pow(VdotB, _BasePassPower)) * _BasePassScale;// 对厚度图采样float thickness = 1.0 - tex2D(_ThicknessMap, i.uv).r;// 透视光的效果float3 backlight = backlight_term * thickness *   _LightColor0.xyz;/ 环境光的反射float3 reflect_dir = reflect(-view_dir,normal_dir);//控制反射方向(绕Y轴旋转),将角度 转化为弧度float theta = _EnvRotate *  UNITY_PI / 180.0f;float2x2 m_rot = float2x2(cos(theta), -sin(theta), sin(theta),cos(theta));float2 v_rot = mul(m_rot, reflect_dir.xz);reflect_dir = half3(v_rot.x, reflect_dir.y, v_rot.y);// 采样环境反射float4 hdrColor = texCUBE(_CubeMap,reflect_dir);//菲涅尔float fresnel = 1 - max(0,dot(normal_dir,view_dir));//解码HDR 确保在移动端也能显示正常half3 env_color = DecodeHDR(hdrColor, _CubeMap_HDR);float3 final_env = env_color * fresnel;float3 final_color =diffuseColor + backlight + final_env;return float4(final_color,1);}ENDCG}}
}

Shader玉石效果相关推荐

  1. Jade ( Translucency / Subsurface Scattering ) Shader——玉石效果——SSS深度图实现

    试验效果1: 下面是最简化的shader: Shader "RE/Jade" {Properties {_MainColor( "MainColor", Col ...

  2. Android关于绘图中Shader 的效果(中级)

    Android关于绘图中Shader 的效果(中级) 关于绘图中Shader 的效果 本人对API中Shaser的参数理解不够深刻 所以只能测试来看 效果一下就看出来了 Shader mShade=n ...

  3. shader镜子效果错误

    shader镜子效果错误 今天实现了下Unity shader的镜子效果,但是离谱的是跟着书上敲出来的代码,放在书上提供的场景中效果是正常的,我自己搭的场景就出现了左右都会映射,而且一层接一层.可能解 ...

  4. [Unity Shader]凌波微步效果

    [Unity Shader]凌波微步效果 相信很多人都看过天龙八部,里面的段誉有一个技能就是凌波微步:移动的时候人先到,衣角跟随其后.说白了就是移动时有一个残影跟着他.下面先看下最终效果 下面我们看如 ...

  5. 【Unity Shader 消融效果_案例分享】

    1.实现逻辑 消融效果主要是利用了Shader中的clip()函数,也就是透明测试功能,在ASE中叫"Opacity Mask". 消融效果是基于一张"Noise&quo ...

  6. 【Unity Shader 描边效果_案例分享】

    1.实现逻辑 描边效果Shader有多种实现方式,可以通过后处理和MatCap实现. 这次主要想展示的是通过两个Pass实现. 当Shader中有多个Pass时,渲染流程会安装顺序依次执行,于是后面的 ...

  7. Shader——自发光效果

    Shader "Custom/OutLightting" {// 属性Properties{_MainTex("Texture(RGB)", 2D) = &qu ...

  8. unity shader景深效果

    实现效果 景深效果 实现思路 由两张图组成,分别是远处的模糊状态和近处的清晰状态,根据物体的深度判断物体离摄像机的距离确定物体的状态.两个图进行插值,越近越靠近清晰的图像. 代码 脚本代码: usin ...

  9. Shader——漩涡效果

    一:效果演示 二:实现 Shader:漩涡着色器 //漩涡着色器Shader "Custom/Swirl" {Properties{_MainTex ("Texture& ...

最新文章

  1. Navicat Premium使用教程【比较详细】
  2. 磁盘驱动读取系统MATLAB仿真,matlab读写..doc
  3. 牛顿:伸向未知量的利爪
  4. 美学心得(第一百九十四集)罗国正
  5. javascript 忽略 报错_.babelrc ignore忽略js无效
  6. 初识Jasima-Jasima中的事件和消息
  7. 《遥感原理与应用》第三版——思维导图
  8. ROS Bridge 笔记(02)— carla_ros_bridge 功能包(准备 ROS环境、运行 ROS Bridge、配置 CARLA 参数、同步模式下使用 ROS Bridge、主车辆控制)
  9. D3D9学习笔记之初始化Derect3D
  10. 免费网站流量统计服务汇总
  11. 自下而上分析方法-算符优先,LR(0),SLR,LR(1),LALR大全
  12. 几大原型开发软件对比[转]
  13. bzoj1778 驱赶猪猡/luogu2937 赶小猪
  14. 论文笔记:Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy Visual Tracking...
  15. 2020互联网大厂职级对应薪资一览表。
  16. Oracle报错宗介
  17. 配置同时使用内网和外网
  18. 将两个有序顺序表合并为一个新的有序顺序表MergeList_Sq
  19. c35是什么意思_混凝土c25、c30、c35分别代表什么意思?
  20. 对抗海量表格数据,【华为2012实验室】没有选择复仇者联盟

热门文章

  1. FACEGOOD-Audio2Face(个人学习)
  2. excel冻结窗格--冻结行列标题
  3. 广东专升本C语言程序设计(完结)
  4. 魔王语言解释 C++
  5. 微信读书vscode插件_曾经我以为 VSCode 是程序员专属的工具,直到发现了这些……...
  6. 麻省理工学院计算机研究生读几年,2020年麻省理工学院一年制硕士含金量
  7. 系统时钟的时钟源选择
  8. mysql--大于小于等于
  9. 本地测试dubbo远程调用找不到provider
  10. 树莓派使用排线摄像头和远程视频监控