高光是一种美术用语,指光源照射到物体然后反射到人的眼睛里时,物体上最亮的那个点就是高光,高光不是光,而是物体上最亮的部分——百度百科

在光学模型中,高光是属于反射的一种,故又称为高光反射,受观察方向和光源方向影响。

根据Blinn模型,引入h矢量,并根据下面的公式实现高光效果。

Shader "MyShader/SS_24"
{Properties{_MainTex("Texture", 2D) = ""{}  _Normal("Normal", 2D) = ""{}  _Emission("Emission",Range(0,1))=0.5_Wrap("Wrap",Range(0,1))=0.5        _Color("Color", Color) = (1,1,1,1)         [HDR]_AmbientColor("Ambient Color", Color) = (0.4,0.4,0.4,1)[HDR]_SpecularColor("Specular Color", Color) = (0.9,0.9,0.9,1)        _Glossiness("Glossiness", Float) = 20[HDR]_RimColor("Rim Color", Color) = (1,1,1,1)_RimAmount("Rim Amount", Range(0, 1)) = 0.6 _RimThreshold("Rim Threshold", Range(0, 1)) = 0.5    } SubShader{CGINCLUDE #include "Lighting.cginc"#include "AutoLight.cginc"sampler2D _MainTex;fixed4 _MainTex_ST;sampler2D _Normal; fixed4 _Normal_ST;fixed _Emission;        fixed _Wrap;fixed _Glossiness;fixed4 _Color;fixed4 _AmbientColor;fixed4 _SpecularColor;     fixed4 _RimColor;fixed _RimAmount;fixed _RimThreshold;  struct appdata{fixed4 vertex:POSITION;fixed4 tangent : TANGENT;fixed3 normal:NORMAL;fixed4 uv : TEXCOORD0;};struct v2f{fixed4 pos:SV_POSITION;fixed2 uv : TEXCOORD0;  fixed3 lightDir : TEXCOORD1;  fixed3 worldNormal:TEXCOORD2;fixed3 worldPos:TEXCOORD3;fixed3 viewDir : TEXCOORD4;  SHADOW_COORDS(2)};v2f vert(appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);        o.viewDir = WorldSpaceViewDir(v.vertex);        o.uv = TRANSFORM_TEX(v.uv, _MainTex);     TRANSFER_SHADOW(o)return o;}fixed4 frag(v2f i):SV_Target{            fixed3 normal = normalize(i.worldNormal);//或用法线贴图fixed3 viewDir = normalize(i.viewDir);fixed NdotL = dot(_WorldSpaceLightPos0, normal);fixed shadow = SHADOW_ATTENUATION(i);           fixed lightIntensity = smoothstep(0, 0.01, NdotL * shadow);    fixed4 light = lightIntensity * _LightColor0;fixed3 halfVector = normalize(_WorldSpaceLightPos0 + viewDir);fixed NdotH = dot(normal, halfVector);fixed specularIntensity = pow(NdotH * lightIntensity, _Glossiness * _Glossiness);//镜面反射强度fixed specularIntensitySmooth = smoothstep(0.005, 0.01, specularIntensity);//实现色阶fixed4 specular = specularIntensitySmooth * _SpecularColor;   fixed rimDot = 1 - dot(viewDir, normal);       //边缘    fixed rimIntensity = rimDot * pow(NdotL, _RimThreshold);rimIntensity = smoothstep(_RimAmount - 0.01, _RimAmount + 0.01, rimIntensity);fixed4 rim = rimIntensity * _RimColor;fixed4 sample = tex2D(_MainTex, i.uv);return (light + _AmbientColor + specular + rim) * _Color * sample;}             ENDCG  Pass{Tags{"LightMode"="UniversalForward"} CGPROGRAM#pragma vertex vert#pragma fragment fragENDCG  }}
}

参考:https://roystan.net/articles/toon-shader.html

返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451

一日一Shader·卡通高光【SS_24】相关推荐

  1. Unity Shader卡通渲染 · 高清渲染管线·HDRP

    Unity Shader卡通渲染 · 高清渲染管线·HDRP 前言 最近在研究HDRP管线中的卡通渲染,就想着能不能把官方的UCTS移植到HDRP管线里面去,说干就干,到昨天晚上上传了github,今 ...

  2. Unity Shader学习-高光反射

    Unity Shader学习-高光反射 高光反射计算公式 高光反射 = 光源的色彩和强度 * 材质的高光反射系数 * pow(max(0,视角方向 · 反射方向),_Gloss) 视角方向 = ref ...

  3. Unity Shader 卡通渲染 模型描边之退化四边形

    目录 前言 一.基于空间的边缘检测算法 二.退化四边形 三.Unity中的CommandBuffer和ComputeBuffer 四.构成描边的简单实例 五.模型描边的实现 前言 之前写了一篇< ...

  4. Unity Shader 卡通渲染 实时模型动画描边的研究

    前言 卡通渲染也叫非真实感渲染(英文简写:NPR),"描边"在图形学和数字图像里都叫边缘检测.因此你可以在很多文献网站上面找到很多这类文献,但最后我发现基于图形学使用的方式基本都是 ...

  5. Unity Shader 卡通渲染 (三):仿塞尔达荒野之息 Shader(顶点色控制细节)

    上一篇传送门: https://blog.csdn.net/qq_27534999/article/details/100925621 顶点色在卡通渲染中有挺多应用,本篇会在上一篇的基础上,运用模型顶 ...

  6. Unity Toon Shader 卡通着色器(一):卡通着色

    一直对非真实感渲染 (Non-Photorealistic Rendering) 很感兴趣,正好发现某社出的新游戏中可以选择真实质感或卡通质感,所以想试试在 Unity 里实现一下卡通着色器. 卡通渲 ...

  7. Unity Shader 卡通水效果(不用深度信息)

    文章目录 效果预览 具体实现 采样贴图替换的深度信息 效果预览 公司需要一个不使用深度信息,不用光照模型的水效果.具体实现参照了:卡通风格的水面效果-ToonWater https://zhuanla ...

  8. Unity Shader 卡通渲染 (一):仿塞尔达荒野之息 Shader(简易版)

    温馨提示: 本系列文章面向那些 Shader 刚刚入门,想寻求进一步提升的群体,如果对 Shader 一无所知的话,建议自行搜索其他 Shader入门教程观看学习,再食用本系列文章. 前言: 说起卡通 ...

  9. unity shader卡通渲染(描边)+阴影+多光源处理

    说道卡通渲染,应该都会想到描边: 我所学的描边有三种: 一种是计算边缘深度检测描边 一种是色差检测描边 一种是利用顶点法线向外扩展返回单色pass,使用正面裁剪 我用的第三种: pass {//剔除前 ...

最新文章

  1. Docker(十):Docker实战 Docker 安装 Nginx
  2. Python正在勒死R吗?
  3. Stanford UFLDL教程 主成分分析(PCA)
  4. html用bmob做留言,bmob js-sdk 在vue中的使用教程
  5. 从零开始学视觉Transformer (10):目标检测DETR-1
  6. 【思科百难】RIP两个版本之间能够相互通信?
  7. 提示microsoft incremental linker已停止工作解决方法
  8. /dev/shm目录下产生大量的ora_$ORACLE_SID的二进制文件
  9. MySQL学习(二、简单查询和多行、单行函数)
  10. 微信防封域名处理 淘客类 检测域名是否被封
  11. linux内核空间和用户空间认识和区别
  12. 箴言:统计学的智慧七柱
  13. 一个web前端专科生面试后的感概
  14. 重磅消息:微信支付分最新开通方法!
  15. android系统GUI设计师必会资源图制作工具
  16. python爬wos数据库,用Python爬行WoS
  17. 常用的conda命令
  18. nginx配置缓存时间为不缓存.
  19. 《观音山》的文艺范儿
  20. 英语口语智能测试软件,口语易英语口语智能评测训系统

热门文章

  1. 腾讯云新用户怎么配置服务器的方法教程
  2. 我的第一个Android应用
  3. Python办公自动化之Word文档自动化:全网最全,看这一篇就够了
  4. XRecyclerView、Okhttp
  5. 计算机外设分为三类,电脑外设有哪些
  6. [面试题]为什么要用vue?
  7. 谭浩强c语言第三章,谭浩强C语言第三章数据类型.ppt
  8. 【JY】有限元分析如何做到心裏有数?
  9. PBO是OpenGL最高效的像素拷贝方式吗?那你就大错特错了
  10. 微信小程序充值及充值回调后的处理