当前位置: 首页 > article >正文

Unity图形学之Shader2.0 Blurning

1.屏幕后期特效:场景渲染完以后 在 添加一些特效

(1)引擎 渲染后最终的结构 是一张图片:OnRenderImage是脚本生命周期函数

Graphics.Blit(sourceTexture, desTexture, graphicsMat);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        graphicsMat = new Material(myShader);
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    public Shader myShader;
    private Material graphicsMat;
    //sourceTexture 相机在整个场景渲染完后传递给我们的图片  desTexture 更改以后得图片  存在这里,重新交给引擎重新渲染
    void OnRenderImage(RenderTexture sourceTexture, RenderTexture desTexture) {
        //指定一个Material 去渲染拦截的图片sourceTexture,最终输出新的desTexture
        Graphics.Blit(sourceTexture, desTexture, graphicsMat);
    
    }
}

(2)将图片 传递给 shader 进行 二次计算:

Shader "Hidden/GaoSi"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Ambient("Ambient",float) = 0.001
    }
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };
            float _Ambient;
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }
            sampler2D _MainTex;
            fixed4 frag (v2f i) : SV_Target
            {
                float2 tempUV = i.uv;
                //float ambient = _Ambient;
                fixed4 col = tex2D(_MainTex, tempUV);
                fixed4 col2 = tex2D(_MainTex, tempUV+float2(-_Ambient,0));
                fixed4 col3 = tex2D(_MainTex, tempUV+float2(0,-_Ambient));
                fixed4 col4 = tex2D(_MainTex, tempUV+float2(_Ambient,0));
                fixed4 col5 = tex2D(_MainTex, tempUV+float2(0,_Ambient));
                col = (col+col2+col3+col4+col5) / 5.0;
                // just invert the colors
                //col.rgb = 1 - col.rgb;
                return col;
            }
            ENDCG
        }
    }
}


http://www.kler.cn/a/395087.html

相关文章:

  • V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网
  • 贪心算法求解跳跃游戏
  • Spring(三)-SpringWeb-概述、特点、搭建、运行流程、组件、接受请求、获取请求数据、特殊处理、拦截器
  • XMLHttpRequest的基础知识
  • C++----类与对象(下篇)
  • Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘
  • 《深度学习》VGG网络
  • 【算法】区间DP
  • A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持
  • King3399(ubuntu文件系统)wifi设备树分析
  • 学习日志009--面向对象的编程
  • 前后端、网关、协议方面补充
  • 41页PPT | 华为业务流程架构全景视图:全业务域L1-L3级流程全案
  • python中父类和子类继承学习
  • Django处理前端请求的流程梳理
  • 通过命令学习k8s
  • ABAP开发学习——权限控制 实例1
  • PHP代码审计 - SQL注入
  • LeetCode面试经典150题C++实现,更新中
  • gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
  • Mysql篇-三大日志
  • Linux设置Nginx开机启动
  • http拉取git仓库,每次都要输入帐号密码,Ubuntu上记住帐号密码
  • 微积分复习笔记 Calculus Volume 1 - 5.5 Substitution
  • sqlserver 常用分页函数
  • ssh key的生成密钥