热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity卡通动物shader包含边缘光,ramp,描边

unity卡通动物shader包含边缘光,ramp,描边上shaderShaderUnlitTestShader{Properties{_Dif

unity 卡通动物 shader 包含边缘光,ramp,描边
在这里插入图片描述
在这里插入图片描述
上shader

Shader "Unlit/TestShader"
{Properties {_Diff ("Diff", 2D) = "white" {}_MainColor ("MainColor", Color) = (0,0,0,1) //模型主颜色_RAMP ("RAMP", 2D) = "white" {}_Light ("Light", Vector) = (0,0,0,0)_InSideRimColor ("InSideRimColor", Color) = (1,1,1,1)//内边缘光颜色_InSideRimPower("InSideRimPower", Range(0.0,5)) = 0 //边缘光强度 ,这个值可以控制菲涅尔影响范围的大小,这个值越大,效果上越边缘化_InSideRimIntensity("InSideRimIntensity", Range(0.0, 10)) = 0 //边缘光强度系数 这个值是反射的强度, 值越大,返回的强度越大,导致边缘的颜色不那么明显 //描边_Outline_Width ("Outline_Width", Float ) = 1_Outline_Color ("Outline_Color", Color) = (0.5,0.5,0.5,1)_Outline_Offset_X ("Outline_Offset_X", Float) = 0_Outline_Offset_Y ("Outline_Offset_Y", Float) = 0_GradHeight ("GradHeight",float) =1_GradColor ("GradColor", Color) = (0.125,0.125,0.125,1)}SubShader {Tags {"RenderType"="Opaque"}LOD 100Pass {Name "ForwardBase"Tags {"LightMode"="ForwardBase" "Queue" = "Geometry"}Fog {Mode Off}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"//#include "AutoLight.cginc"//#include "Lighting.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma exclude_renderers xbox360 ps3 flash d3d11_9x #pragma target 2.0uniform sampler2D _Diff; uniform float4 _Diff_ST;uniform float4 _MainColor;uniform sampler2D _RAMP; uniform float4 _RAMP_ST;uniform float4 _Light;uniform float4 _InSideRimColor;uniform float _InSideRimPower;uniform float _InSideRimIntensity; uniform fixed4 _GradColor;uniform half _GradHeight;uniform float _Outline_Offset_X;uniform float _Outline_Offset_Y;struct VertexInput {float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct VertexOutput {float2 uv : TEXCOORD0;float3 normal : TEXCOORD1;float4 vertex : SV_POSITION;float4 vertexWorld : TEXCOORD2;half grad:TEXCOORD3;};VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.normal = mul(unity_ObjectToWorld, float4(v.normal,0)).xyz;o.vertex = UnityObjectToClipPos(v.vertex);o.vertexWorld = mul(unity_ObjectToWorld, v.vertex);o.uv = v.uv;o.grad = mul(unity_ObjectToWorld, v.vertex).y;return o;}fixed4 frag(VertexOutput i) : COLOR {i.normal = normalize(i.normal);//下面计算方式套用菲涅尔计算float3 worldViewDir = normalize(_WorldSpaceCameraPos.xyz - i.vertexWorld.xyz);//获取单位视角方向 相机世界空间位置减去顶点世界空间位置half NdotV = max(0, dot(i.normal, worldViewDir));//计算法线方向和视角方向点积,约靠近边缘夹角越大,值约小,那就是会越在圆球中间约亮,越边缘约暗NdotV = 1.0-NdotV;//这里需求是越边缘约亮,所以需要反一下,这里用1 减下float fresnel =pow(NdotV,_InSideRimPower)*_InSideRimIntensity;//使用上面的属性参数,这里不多说float3 Emissive=_InSideRimColor.rgb*fresnel; //配置上属性里面的内边缘光颜色float4 _Diff_var = tex2D(_Diff,TRANSFORM_TEX(i.uv, _Diff)); float4 FinalCompOut = _Diff_var*_MainColor;//float RampUV_var = max(0,dot(_Light.rgb,i.normal));float RampUV_var = max(0,dot(mul( unity_WorldToObject, float4(_Light.rgb,0) ).xyz,i.normal));float2 RampUV = float2(RampUV_var,RampUV_var);float4 _RAMP_var = tex2D(_RAMP,TRANSFORM_TEX(RampUV, _RAMP));FinalCompOut.rgb*=_RAMP_var.rgb;FinalCompOut.rgb = FinalCompOut.rgb+Emissive;//最后加在本体主颜色就即可FinalCompOut.xyz = lerp(_GradColor.xyz*FinalCompOut.xyz,FinalCompOut.xyz,clamp(i.grad,0,_GradHeight)/_GradHeight);return FinalCompOut;}ENDCG}Pass {Name "Outline"Tags {"Queue" = "Transparent"}Cull FrontZWrite OffOffset [_Outline_Offset_X], [_Outline_Offset_Y]CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma exclude_renderers xbox360 ps3 flash d3d11_9x #pragma target 3.0//描边uniform float _Outline_Width;uniform float4 _Outline_Color;struct VertexInput {float4 vertex : POSITION;float3 normal : NORMAL;};struct VertexOutput {float4 pos : SV_POSITION;};VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos(v.vertex);float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);float2 offset = TransformViewToProjection(norm.xy);o.pos.xy += offset * o.pos.z * _Outline_Width;return o;}float4 frag(VertexOutput i, float facing : VFACE) : SV_Target{return _Outline_Color;}ENDCG}}FallBack "Diffuse"
}

推荐阅读
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • Prim算法在处理稠密图时表现出色,尤其适用于边数远多于顶点数的情形。传统实现的时间复杂度为 \(O(n^2)\),但通过引入优先队列进行优化,可以在点数为 \(m\)、边数为 \(n\) 的情况下显著降低时间复杂度,提高算法效率。这种优化方法不仅能够加速最小生成树的构建过程,还能在大规模数据集上保持良好的性能表现。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在Unity中进行3D建模的全面指南,详细介绍了市场上三种主要的3D建模工具:Blender 3D、Maya和3ds Max。每种工具的特点、优势及其在Unity开发中的应用将被深入探讨,帮助开发者选择最适合自己的建模软件。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 探讨String参数作为锁对象时,实际锁定的是哪个具体实例? ... [详细]
  • 本文深入探讨了 HTML 中的 `margin` 属性,详细解析了其基本特性和应用场景。文章不仅介绍了 `margin` 的基本概念,还重点讨论了垂直外边距合并现象,并分析了 `margin` 在块级元素与内联元素中的不同表现。通过实例和代码示例,帮助读者全面理解 `margin` 的使用技巧和常见问题。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • POJ 1696: 空间蚂蚁算法优化与分析
    针对 POJ 1696 的空间蚂蚁算法进行了深入的优化与分析。本研究通过改进算法的时间复杂度和空间复杂度,显著提升了算法的效率。实验结果表明,优化后的算法在处理大规模数据时表现优异,能够有效减少计算时间和内存消耗。此外,我们还对算法的收敛性和稳定性进行了详细探讨,为实际应用提供了可靠的理论支持。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
author-avatar
Amyjionydp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有