Unity实现旋转扭曲图像特效

旋转扭曲特效是指在一个圆形区域内扭曲所渲染的图像,其他像素的旋转程度随着距离的变化而变化。具体可以通过修改Shader来实现。

原始图片

扭曲图片

/*====================================================

        屏幕扭曲特效Shader

======================================================*/
Shader "Hidden/TwirlEffects"
{
  Properties
  {
    _MainTex ("Texture", 2D) = "white" {}

  }
  SubShader
  {
    // No culling or depth
    Cull Off ZWrite Off ZTest Always

    Pass
    {
      CGPROGRAM
      #pragma vertex vert
      #pragma fragment frag

      #include "UnityCG.cginc"

      uniform sampler2D _MainTex;
      uniform float4  _MainTex_TexelSize;
      half4  _MainTex_ST;

      //旋转扭曲的中心
      uniform float4 _CenterRadius;
      //将旋转矩阵传入
      uniform float4x4 _RotationMatrix;

      struct appdata
      {
        float4 vertex : POSITION;
        float2 uv : TEXCOORD0;
      };

      struct v2f
      {
        float2 uv : TEXCOORD0;
        float4 vertex : SV_POSITION;
      };

      v2f vert (appdata v)
      {
        v2f o;
        o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
        //将uv坐标变换到center坐标系中
        o.uv = v.uv - _CenterRadius.xy;
        return o;
      }

      fixed4 frag (v2f i) : SV_Target
      {

        float2 offest = i.uv;
        //利用旋转矩阵旋转uv
        float2 distortedOffset = MultiplyUV(_RotationMatrix,offest.xy);

        //计算uv点在旋转圆中的位置
        float2 tmp = offest / _CenterRadius.zw;
        float t = min(1,length(tmp));

        //根据uv点在圆中的位置插值uv移动的位置
        offest =lerp(distortedOffset,offest,t);

        //将uv坐标返回原坐标系中
        offest += _CenterRadius.xy; 

        fixed4 col = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(offest, _MainTex_ST));

        return col;
      }
      ENDCG
    }
  }
}

此旋转特效主要就是对图像的uv值进行偏移,关键代码

 float2 offest = i.uv;
//利用旋转矩阵旋转uv
 float2 distortedOffset = MultiplyUV(_RotationMatrix,offest.xy);

 //计算uv点在旋转圆中的位置
float2 tmp = offest / _CenterRadius.zw;
float t = min(1,length(tmp));

//根据uv点在圆中的位置插值uv移动的位置
offest =lerp(distortedOffset,offest,t);

//将uv坐标返回原坐标系中
offest += _CenterRadius.xy;

根据uv点的位置,对图像进行扭曲。

下面是脚本的源码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TwirlScripts : MonoBehaviour {

  [ExecuteInEditMode]

  public Vector2 radius = new Vector2(0.3f, 0.3f);

  public Vector2 center = new Vector2(0.5f, 0.5f);

  [Range(0.0f, 360.0f)]
  public float angle = 0.0f;

  public Material material;

  private void OnRenderImage(RenderTexture source, RenderTexture destination)
  {

    Matrix4x4 rotationMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, angle), Vector3.one);

    material.SetMatrix("_RotationMatrix", rotationMatrix);
    material.SetVector("_CenterRadius", new Vector4(center.x, center.y, radius.x, radius.y));

    Graphics.Blit(source, destination, material);

  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D Ui利用shader添加效果

    本文实例为大家分享了Unity3D Ui利用shader添加效果的具体代码,供大家参考,具体内容如下 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "UI/Unlit/Flowlight" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "w

  • Unity3D实现扭动挤压浏览效果

    最近的项目中,想做到一种能够吸引眼球的一种角色选择浏览效果 Demo源码:点击打开链接 最终实现了下按如下图这么一种浏览效果: 效果图一 效果图二 可能要实现这么一种效果用动画插件会很快,但总感觉有点大材小用 这里我向大家分享一个极简方式来实现这么一种效果 目录结构如下 其中Items有4个Image子节点 在父节点Items下添加如下图横向布局组件 在其4个Image子节点下添加如下图布局元素组件 完成这些步骤后接下来就是代码实现了 在Items添加如下脚本组件 using System.Co

  • Unity实现旋转扭曲图像特效

    旋转扭曲特效是指在一个圆形区域内扭曲所渲染的图像,其他像素的旋转程度随着距离的变化而变化.具体可以通过修改Shader来实现. 原始图片 扭曲图片 /*==================================================== 屏幕扭曲特效Shader ======================================================*/ Shader "Hidden/TwirlEffects" { Properties { _M

  • Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!

    大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等. 废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来: 第一步:新建一个Android工程命名为ImageDemo,工程结构如下: 第二步:新建一个.Java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如

  • Python图像特效之模糊玻璃效果

    今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机采样来赋予当前的像素点,这样,生成的图像有有一定的随机扰动和模糊,看起来就像隔着一层毛玻璃在观察图像一样. # -*- coding: utf-8 -*- """ Created on Sun Aug 20 11:03:53 2017 @author: shiyi """ import matplotlib.

  • Python 计算机视觉编程进阶之图像特效处理篇

    前言 图像特效处理一般是对图像的像素点的通道.灰度值值等进行操作,达到想要的结果,下面将会给大家一一呈现一些简单特效的原理以及代码实现,希望能够对大家有一定的帮助. 话不多说,先是本系列文章的经典操作之读取图像信息: """ Author:XiaoMa date:2021/11/16 """ import cv2 import numpy as np import math import matplotlib.pyplot as plt img0

  • Python 实现图像特效中的油画效果

    目录 一 基本原理 二 代码实现 三 总体实现代码以及保存  在前面的文章Python 计算机视觉(十五)-- 图像特效处理中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文章中简单介绍一下油画特效的基本原理以及代码实现,感兴趣的小伙伴可以跟着码一遍代码,或者使用代码直接运行查看一下效果就行. 一 基本原理 如下面的两幅图所示,油画用对了地方会使得图像一下子显得文艺起来了呢! 拍出的图像 转化为油画 那么将一幅图像转化为油画类型的图案是怎么实现的呢?为了将一幅普通的图像转

  • Unity实现识别图像中主体及其位置

    目录 EasyDL图像分割介绍 创建应用 创建模型 EasyDL图像分割介绍 创建应用 1.进入百度AI开放平台打开控制台: 2.在左上角打开产品服务列表,找到EasyDL零门槛AI开放平台: 3.打开EasyDL图像: 4.在公有云部署-应用列表中创建一个应用: 5.创建完成后获取到AppID.API Key.Secret Key: 创建模型 1.进入EasyGL图像分割: 2.创建模型: 3.创建数据集: 4.数据导入: 上传图片,图片的数量尽量多些 导入完成后查看并标注: 框选目标所在范围

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

  • Python+OpenCV实现六种常用图像特效

    目录 图像融合 灰度处理 颜色反转 灰度反转 彩色反转 马赛克效果 毛玻璃效果 浮雕效果 图像融合 按照一定的比例将两张图片融合在一起 addWeighted()方法: 参数1第一张图片矩阵 参数2第一张图片矩阵的权重 参数3第二张图片矩阵 参数4第二张图片矩阵的权重 融合之后的偏移量 进行叠加的两张图片宽高应该相同 叠加之后的像素偏移值如果填的话不要填太大,超过255会导致图像偏白 import cv2 import cv2 as cv img = cv.imread("img/lena.jp

  • ASP.NET 2.0,C#----图像特效处理

    利用.NET 提供的类,如Drawing.Bitmap ,Drawing.Bitmap 等,很容易就可以实现对图片的简单处理.包括打水印,放大缩小,等操作. public partial class WebForm4 : System.Web.UI.Page      {          // 原始图片路径          private string path;          private System.Drawing.Bitmap bitmap;               pri

  • Unity shader实现百叶窗特效

    本文实例为大家分享了Unity shader百叶窗展示的具体代码,供大家参考,具体内容如下 1.将图片划分为水平N栏,代码如下: Shader "Unlit/BYCShader" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _StencilComp

随机推荐