UnityShader之建立高光效果

Unity灯光闪烁 using System.Collections; using System.Collections.Generic; using UnityEngine; public class AlarmLight : MonoBehaviour { public bool alarmOn; public float turnSpeed; private float highIntensity = 2f; private float lowIntensity = 0; pri 阅读详情

本来特效插件都找好了,结果看到youtube上有个大神做的塔防游戏,很好的idea

而且看了他的代码,感觉挺好的,,比原先自己写塔防的时候要强的多, 面向对象的三大特性基本都涉及了,代码的扩展性也很强,这两天看完了他的全部源码,收获很大,但是整体讲,这个前辈做的是有小小缺陷的(在我看来),代码一定会参考的,因为确实是值得学习的好代码

OK,言归正传,本节将要实现的是

介绍unity内置的blinnPhong镜面反射高光模型
创建自定义Phong光照

step1

Shader "CookbookShaders/Chapter03/BlinnPhong" 
{
    Properties 
    {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _MainTint ("Diffuse Tint", Color) = (1,1,1,1)
        //_SpecColor ("Specular Color", Color) = (1,1,1,1)
        _SpecPower ("Specular Power", Range(0,1)) = 0.5
    }

    SubShader 
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        //unity内置的BlinnPhong高光模型,现在我们告诉着色器使用BlinnPhong光照模型
        #pragma surface surf BlinnPhong

        sampler2D _MainTex;
        float _SpecPower;
        float4 _MainTint;

        struct Input 
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) 
        {
            half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint;

            //镜面反射度 ,跟Inspector面板关联,可以滑动条进行测试
            o.Specular = _SpecPower;

            //光泽度
            o.Gloss = c.r;

            //Albedo: 反射的颜色值,这里接受的就是tex2D经过采样后发射的值
            o.Albedo = c.rgb;

            //透明度
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

这里写图片描述

没什么特殊的?

接着看

step2 : 创建Phong高光模型

1.如何对Phong高光类型进行逐顶点操作,
2.在表面着色器中使用输入结构体的新参数进行逐像素操作

Shader "CookbookShaders/Chapter03/Phong" 
{
    Properties 
    {
        _MainTint ("Diffuse Tint", Color) = (1,1,1,1)
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _SpecularColor ("Specular Color", Color) = (1,1,1,1)

        //高光强度
        _SpecPower ("Specular Power", Range(0.1,30)) = 1
        _SpecHardness ("Specular Hardness", Range(0.1, 10)) = 2

    }

    SubShader 
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        //自定义Phong光照
        #pragma surface surf Phong

        //添加对应的属性变量
        float4 _SpecularColor;
        sampler2D _MainTex;
        float4 _MainTint;
        float _SpecPower;
        float _SpecHardness;

        //实现光照函数,必要的参数可以参考Lighting.cginc
        //除了输出结构,这里需要有光照方向,视点方向,衰减系数
        //这里我们要创建的是高光着色器,所以我们需要加上视点
        inline fixed4 LightingPhong (SurfaceOutput s, fixed3 lightDir, half3 viewDir, fixed atten)
        {
            //计算漫反射矢量,声明漫反射组件
            //做顶点法线和光源方向的点积运算,将返回(-1,1)
            //当返回1时,表明物体整对着光源,反之同理
            float diff = dot(s.Normal, lightDir);

            //计算反射向量,实现法线朝向光源弯曲的效果
            float3 reflectionVector = normalize((2.0 * s.Normal * diff) - lightDir);

            //计算最终的高光
            float spec = pow(max(0,dot(reflectionVector, viewDir)), _SpecPower);
            float3 finalSpec = _SpecularColor.rgb * spec;

            //得到最后的颜色值
            fixed4 c;
            c.rgb = (s.Albedo * _LightColor0.rgb * diff) + (_LightColor0.rgb * finalSpec);
            c.a = 1.0;
            return c;
        }

        struct Input 
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) 
        {
            half4 c = tex2D (_MainTex, IN.uv_MainTex) * _MainTint;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

这里写图片描述

高光的就先写到这,本节会持续更新

UnityShader学习——非真实感渲染 文章目录什么是非真实感渲染卡通风格1.渲染轮廓线2.添加高光素描风格 什么是非真实感渲染 尽管游戏渲染一般都是以照相写实主义(photorealism)作为主要目标,但也有许多游戏使用了非真实感渲染(Non-PhotorealisticRendering , NPR)的方法来渲染游戏画面。非真实感渲染的一个主要目标是,使用一些渲染方法使得画面达到和某些特殊的绘画风格相似的效果,例如卡通、水彩风格等... 阅读详情

相关推荐

unityShader笔记 1 之 边缘色

前言最近开始学shader了,网上发现了不少教程。准备一一记录我的理解和实验。准备先从浅墨的unity shader教程开始。除了因为他的教程比较清楚外,另外主要是他配备了一些资源等方便实验,看着也赏心悦目些。因为刚开始学shader,所以很多网上教程认为大家可能知道的知识但是对于新手并不明白。又或者作者讲的很清楚但是却没有reference让大家可以去看手册。所以本博客主要是填补“理所当然”与“新

lexezreal的博客 690

UnityShader(十二)实现标准光照模型中的高光反射

从公式可以看出 要计算高光反射需要知道四个参数:入射光线的颜色和强度,材质的高光反射系数,视角方向以及反射方向。其中,反射方向r可以由表面法线和光源方向计算得到即:上述公式很简单,Cg也提供了计算反射方向的函数reflecti:入射方向;n:法线方向。可以是float,float2,float3等类型。当给定入射方向i和法线方向n时,reflect函数可以返回反射方向。

米芝鱼的博客 988

学习海康VisionMaster之圆查找

(1):ROI选中位置修正,并且修正信息需要选择刚刚创建的位置修正组件输出信息,这里的话后续的检测窗口一般都需要做这一步,因为大部分的应用场景都是需要用到实时跟踪的。圆查找模块是用于查找指定区域的圆,并且会输出该圆的相关参数信息,比如圆中心点,圆半径,圆是否存在等信息。7):剔除点数:和高级参数里面的剔除距离搭配使用的,就是过滤较远的边缘点,让拟合圆心出来的轮廓更加接近。中的圆查找,相当于就是拟合圆心,这个在视觉软件中的应用也是非常广泛的,通常用于定位,测量项目。

yuhouxiyang的专栏 2104

Unity中URP下的 额外灯 逐像素光 和 逐顶点光

在之前的文章中,我们了解了 主光相关的反射计算。在这篇文章中,我们来了解一下额外灯的 逐像素光 和 逐顶点光。

楠溪泽岸的博客 1164

Qt6安装保姆级教程:从国内镜像下载到配置避坑指南(附清华/中科大源)

本文提供详细的Qt6安装与配置指南,重点介绍如何利用清华大学、中国科学技术大学等国内镜像源解决下载速度慢的问题。内容涵盖在线安装器获取、组件选择策略、环境变量配置以及常见编译与部署问题的排查方法,旨在帮助国内开发者高效、顺畅地完成Qt6开发环境搭建。

weixin_29281915的博客 633

ArcGIS Pro中协同区位熵方法在商业选址分析中的应用

本文详细介绍了如何利用ArcGIS Pro中的协同区位熵方法进行科学的商业选址分析。该方法通过量化目标客户与竞争对手在空间上的关联程度,精准识别市场空白区与竞争红海,帮助决策者从“凭感觉”转向“用数据说话”,有效提升选址成功率和投资回报。

weixin_29214559的博客 360

【Unity】在多个物体中选中一个,并高亮

效果如图 如何实现高亮? 我最开始脑子里想到的解决办法是:替换普通材质和边缘发光的材质,但是这样每个物体都有两个材质,太麻烦。 最后使用了HighlightingSystemDemo插件,这个网上资源很多的,大家随便下一下。人家是用屏幕特效的方式制作的,就可以很轻易地增加或删除,也不用对模型材质做任何改动! 具体使用方法,我直接翻译插件中PDF的教程了: 1. 把插件导入工程 2. ...

方寸想法,编码宇宙 8869

30秒精准解析论文PDF:PyMuPDF4LLM+Qwen2本地Agent实战指南

PDF文献解析是科研信息处理的基础能力,其本质是将非结构化文档转化为可计算的语义结构。传统OCR方案在原生PDF(如LaTeX导出)上精度低、容错差;而基于PDF对象树的解析技术,能精准定位文本、公式、图表锚点与参考文献区块,为后续结构化提取提供高质量输入。结合轻量级领域微调模型(如Qwen2-1.5B-Instruct)与强约束提示词工程,可实现研究目标、方法框架、核心结果等五大要素的高保真蒸馏。该技术路径兼顾隐私安全、零成本复现与离线鲁棒性,特别适用于高校实验室、研究生课题组及AI初学者构建个人文献处理

weixin_33509203的博客 286

Unity 基于URP使用Highlight Plus实现物体高亮

Unity 基于URP使用Highlight Plus实现物体高亮

我是一个热爱游戏开发的Unity程序员,专注于使用Unity引擎创建创新和高效的游戏项目。在我的博客中,我分享Unity开发中的实用技巧、解决方案和优化方法,涵盖从基础入门到高级技术的各个方面。我喜欢探索新技术,持续学习,并与大家一起成长。希望我的分享能帮 5160

h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案

本文前大段在讲楼主是如何解决这个问题的,以及中间遇到的麻烦。赶时间的同学可以直接看最后的 最终解决方案。在讨论之前,我们先看看官方文档上的一句话:注意:在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户APP。用户可手工切回到浏览器或商户APP;支付宝H5收银台会自动跳转回商户return_url指定的页面。what? 官方直接跟我们说GG了?楼主不甘心,还是想尝试一下。借鉴之前...

weixin_39864101的博客 854

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 617

UnityShader学习之旅 --渲染

卡通风格 特点:物体都被黑色的线条描边,以及分明的明暗变化等。 –卡通渲染方法 技术 方法 基于色调的着色技术 使用漫反射系数对一张一维纹理进行采样,以控制漫反射的色调 光照模型 – 高光效果 一块块分界明显的纯色区域 物体边缘部分绘制轮廓 基于模型的描边方法 适用屏幕后处理技术对屏幕图像进行描边 绘制模型轮廓线《Real Time Rendering, third edition》 类型 方法 优点 局限 基于观察角度和表面法.

laz0807的博客 311

YOLOv5改进之---EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

本文主要针对yolov5的iou损失函数进行改进,主要涵盖EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU这几种损失

qq_41920323的博客 1465

[UnityShader]多光源

Shader "Scene/BumpSpecAddLight" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} ...

qq_39773344的博客 901

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2347

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【UnityShader】高光反射光照模型

光照模型 基本光照模型中高光反射部分的计算公式 Cspecular = (Clight * Mspecular)max(0, v*r)Mgloss 参数:   Mgloss 光泽度,反光度,控制高光区域的大小,值越大,亮点越小   Mspecular 材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色   Clight 光源颜色和强度   v 是视角方向   r 是反射方向,可以通过计算反射方向的函数     r = reflect(I,n)       I,入射方向(要求由光源指向交点处)

小蜗牛 540

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Unity中Shader光照模型Phong的实现

Unity中Shader光照模型Phong的实现。

楠溪泽岸的博客 457

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

UnityShader应用——卡通渲染

1.描边 外描边之前记过。 内描边的实现:ILM的a通道控制内描边的范围。 也就是黑色区域对应uv上的地方进行需要内描边。在最后与光照模型算出的颜色相乘就行。 2.光照模型 diffuse部分: ILM的g通道控制漫反射阴影的阈值。 shadowRange = g值 * 顶点颜色(平时没有的数据) 共同决定受光范围。也就是说黑色的区域,是不想受到阴影的。 diffuse = max( 0 ...

Jeff的博客 1133

UnityShader高光反射及简单实现

Phong的定义: Blinn-Phong的定义: Shader "ShaderPath/SpecularShader"//shader的选择路径 { Properties//该Shader可控的属性 { _DiffuseColor ("DiffuseColor",Color) = (1,1,1,1)//漫反射的主色调 _SpecularColor ("SpecularColor"...

weixin_40301728的博客 410

Unityshader物体被遮挡显示轮廓

Shader "Custom/FG" { Properties { _MainTex("Base (RGB)", 2D) = "white" {} _RimColor("RimColor",Color) = (0,1,1,1) _RimPower("Rim Power", Range(0.1,8.0)) = 1.0 } SubShader { LOD 300 .

龙胖胖的博客 1020

UnityShader--高光反射

逐顶点 Shader "Custom/Specular/SpecularVertexLevel" { Properties{ _Diffuse("Diffuse", Color) = (1, 1, 1, 1) _Specular("Specular", Color) = (1, 1, 1, 1) _Gloss("Gloss", Range(8.0, 256)) = 20 ...

chenxl2441的博客 245

UnityShader学习笔记(八)利用镜面反射让游戏闪耀起来

大家好,我是Zander。 今天来说一下在游戏中如何使用镜面反射来给玩家制造出强烈的视觉冲击和超现实感。        在Unity中,已经为我们提供了一个高光函数,我们可以在自己的着色器中使用。这个函数也就是BlinnPhong镜面反射光照模型,它是高光类型中的俄译中更加基础且高效的形式。由于它已经集成到Unity着色器语言挡住,所以我们可以在Unity着色器中建立高光效果:     首先创

zjw1349547081的专栏 5757

[UnityShader]边缘光

学习shader有一段时间 终于有勇气写点笔记 先来一个 简单例子分析  用表面着色器写的   Shader "Custom/RimColorSurfaceShader" { Properties { // 属性 _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _...

qq_39773344的博客 665

unityshader遮挡轮廓高亮显示效果

PropertiesSubShaderpassCGPROGRAMstruct v2fv2f f;return f;ENDCGpassCGPROGRAMstruct v2fv2f f;return f;ENDCG。

qq_51416423的博客 587

unityshader中高光反射--像素光照

Shader "JK/SpecularPexelLevel" { Properties { _Color ("Color", Color) = (1,1,1,1) _Specular("Specular", Color) = (1, 1, 1, 1) _Gloss("Gloss", Range(8.0, 256)) = 20 } SubShader{ Pass{ Tags { "L

浪里独行的博客 546

[UnityShader入门精要读书笔记]34.卡通风格渲染

卡通风格是游戏中常见的的一种渲染风格。使用这种风格的游戏画面通常有一些共有的特点,例如物体都被黑色的线条描边,已经分明的明暗变化等。 要实现卡通渲染的方法有很多,其中之一就是使用基于色调的着色技术。在实现中,我们往往会使用漫反射系数对一张一堆纹理进行采样,以控制漫反射的色调。 在实时渲染中,轮廓线的渲染是应用非常广泛的一种效果。近20年来,有许多绘制模型...

songtianqi123的专栏 435
上一篇: UnityShader之创建动态纹理
下一篇: Unity游戏设计模式之状态模式实现
测试账号0001
博客等级 码龄10年 13粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值