shader多图叠加变换

中级Shader教程18 层透明叠加渲染 0.说在前面 1.我们通常说起颜色通常说“这个颜色的rgb值是少”,而不是说“这个颜色的rgba值是少”,不说a是因为我们默认改颜色的a = 1.0,即是不透明的 2.所以得提醒:使用rgba表示颜色时,我们最终看到的颜色不是rgb,而是rgb*a。这点对于理解层透明混合很重要。 3.这个代码将会在后面渲染云和狂风中出现,如果想要真正理解并灵活运用该渲染套路,请重视! ... 阅读详情

shader 

Shader "Paint3D/AddTexture"
{
    Properties
	{		
	    _MainTex ("Main Texture", 2D) = "white" {}
        _MainColor("Main Color", Color)=(1,1,1,1) 
        _AddTex0 ("Texture0", 2D) = "white" {}
        _AddTex1 ("Texture1", 2D) = "white" {}
        _offsetX("offsetX",Range(-5,5)) = 0
        _offsetY("offsetY",Range(-5,5)) = 0
        _oftX("oftX",Range(-5,5)) = -0.67
        _deg("scaleZ",Range(-360,360)) = 0
        _Color("AddColor",Color)= (1,1,1,1) 
        _imageSize("ImageSize整体",float)=10
        _expendSize("Expend拖拽拉伸",float)=1
        _size("Size粗细",float)=1
        _isShow("isShow",float)=0
        _height("Screeheight暂时无用",float)=1536
        _Imgwidth("Imgwidth暂时无用",float)=200
        _Imgheight("Imgheight暂时无用",float)=200
	}
	SubShader
	{
		Tags { "Queue"="AlphaTest"  "RenderType"="Transparent" }
		LOD 200
        Cull Off
        Lighting Off
        ZWrite Off
        ZTest [unity_GUIZTestMode]
        Blend SrcAlpha OneMinusSrcAlpha
 
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #pragma multi_compile_fog
           // #pragma surface Surf Standard alphatest:_Cutoff addshadow
            #include "UnityCG.cginc"
 
            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };
 
            struct v2f {
                float4 vertex : SV_POSITION;
                float2 texcoord : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                UNITY_VERTEX_OUTPUT_STEREO
            };
 
            sampler2D _MainTex;
            sampler2D _AddTex0;
            sampler2D _AddTex1;
            float4 _MainTex_ST;
			fixed4 _Color;
            fixed4 _MainColor;
            float _offsetX;
            float _offsetY;
            float _oftX;
            float _deg;
            float _isShow;
            float _height;
            float _Imgwidth;
            float _Imgheight;
            float _imageSize;
            float _expendSize;
            float _size;
 
            v2f vert (appdata_t v)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }
          
            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 texCol ;
                if(_isShow==0){
                      texCol = tex2D(_MainTex, i.texcoord);
                      return texCol*_MainColor;
                }

                float3 uvw0= float3(i.texcoord.x,i.texcoord.y,1);
                float3 uvw1= float3(i.texcoord.x,i.texcoord.y,1);
             
                float3x3 transla0=float3x3(float3(1,0,-_offsetX),float3(0,1,-_offsetY),float3(0,0,1));
                float3x3 transla1=float3x3(float3(1,0,-_offsetX),float3(0,1,-_offsetY),float3(0,0,1));
                
                uvw0 =mul(transla0, uvw0);
                uvw1 =mul(transla1, uvw1);

                float rad=radians(_deg);
                float3x3 rotate=float3x3(float3(cos(rad),-sin(rad),0),float3(sin(rad),cos(rad),0),float3(0,0,1));
                
                uvw0 =mul(rotate, uvw0);
                uvw1 =mul(rotate, uvw1);

                float3x3 scale0=float3x3(float3(_imageSize/_expendSize,0,-0.5),float3(0,_imageSize*_size,0),float3(0,0,1));
                float3x3 scale1=float3x3(float3(_imageSize,0,-_expendSize),float3(0,_imageSize*_size,0),float3(0,0,1));

                //float3x3 scale=float3x3(float3(_width/_imageSize/_expendSize,0,0),float3(0,_height/_imageSize,0),float3(0,0,1));
               
                uvw0 =mul(scale0 ,uvw0);
                uvw1 =mul(scale1 ,uvw1);

               

                float2 uv0=float2(uvw0.x,uvw0.y);
                float2 uv1=float2(uvw1.x,uvw1.y);
                uv0+=0.5;
                uv1+=0.5;
        
                 texCol = tex2D(_MainTex, i.texcoord);
                fixed4 addCol0 = tex2D(_AddTex0, uv0);
                fixed4
Chango的数学Shader世界(五)水波模拟-那平静又汹涌的海面:叠加,Gerstner波 目的: 根据前篇的水波Shader,优化成一个不透明的,适合广阔海域的Shader,以解决前篇Shader的一些缺陷。 参考: 《GPU Gems》 引言: 对于我们之前的初步可用品Shader,可以从不同方面进行改造,适用于不同需求下的水面。接下来几篇着重于造型上的改造,适用于不透明水面,如深邃广阔的大海。 思路: 回想起前篇结尾我们谈论到的当前Shader的不足之处: ... 阅读详情

相关推荐

Unity Shader坐标空间详解:从模型到屏幕的变换原理与实践

在计算机形学与实时渲染中,坐标空间是定义几何体位置、方向和变换的数学框架,是理解3D形渲染管线的基石。其核心原理是通过一系列矩阵变换(如模型矩阵、视矩阵和投影矩阵),将顶点从局部模型空间逐步映射到最终的屏幕像素空间。掌握坐标空间变换对于实现正确光照、纹理映射和后期特效至关重要,直接影响渲染结果的准确性与性能。在游戏开发与Shader编程领域,模型空间、世界空间、观察空间、裁剪空间和屏幕空间构成了标准变换链,而切线空间则是法线贴等高级渲染技术的关键。本文以Unity引擎为例,深入解析这五大核心坐标空间

369

UnityShader使用叠加实现运动模糊

本文实例为大家分享了UnityShader实现运动模糊的具体代码,供大家参考,具体内容如下 1.此代码挂在摄像机上,使摄像机运动起来 using UnityEngine; using System.Collections; public class Translating : MonoBehaviour { public float speed = 10.0f; public Vector3 startPoint = Vector3.zero; public Vector3 endPoint = Vector3.zero; public Vector3 lookAt = Vector

OpenGL 2D贴texture与着色器Shader

OpenGL 2D贴texture与着色器Shader 运行效果 定义纹理ID与绑定纹理 GLfloat vertices2[] = { // 坐标 // 颜色 // 纹理 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, // 右上 黄 0.5f, -0.5f, 0.0f, 1....

可爱的猪窝 4122

AddTexture.shader

shader算法,配合unity 中Graphics.Blit函数,可实现任意叠加无卡顿叠加输出,用来绘制画布箭头,配合下一个unity脚本使用

Shader混合模式--正片叠底、滤色、叠加

叠加在书本168页。 Shader "Custom/BlendMode_Effect" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Blendtex("Blend Texture",2D) = "white"{} _Opacity("Blend Opacity",Range(0,1)) = 1 } Su

u012941657的博客 2万+

UnityShader源码2017---学习笔记与自我拓展051

源自UIshader 这里就不分文章一一记录了,写一起了 stencil不管是google和baidu都有一堆,着重注意一下readmask和writemask就好 1.说一下这个_TextureSampleAdd 这个float4是由引擎去传值的。如果UI的tex是Alpha8 ,那么这个值就是(1,1,1,0),否则就是(0,0,0,0) 测试如下 为啥要这么做,据说是为了f...

C.P.的博客 1761

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

【代码】UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

LST329的博客 2776

Unity | Shader基础知识(第七集:案例<让片和外部颜色叠加显示>)

如何让片和外部颜色叠加显示。

菌菌兹的博客 2035

一日一Shader·层tiling区分【SS_11_1】

叠加时,一般会涉及遮罩,而遮罩位置的变化是依据uv值,但是当片的tiling变化时,遮罩位置也会改变。为了解决这个问题,需要声明个uv,有的会随tiling变化,有的不变。 代码: Shader "MyShader/SS_11_1" { Properties { _Mask ("Mask", 2D) = "white" {} _MainTex ("Texture", 2D) = "white" {} _Size..

座右铭 668

Unity Shader 学习 003-Shader结构体 颜色叠加

1.实现效果 2.代码分析 3.引用参数块中的参数 4.Shader结构体 4.1 a2v结构体 4.1 v2f结构体 5. 颜色叠加效果的实现 5.1 顶点着色器部分 5.2 片元着色器部分

m0_48781656的博客 1422

《Unity Shader入门精要》学习--基础篇--骇人的空间变换

本文总结了《Unity Shader入门精要》中的数学基础与坐标变换知识。主要内容包括:1)笛卡尔坐标系分类(左手/右手系)及矢量运算(点乘叉乘);2)矩阵变换原理(缩放、旋转、平移)及特殊矩阵特性;3)坐标空间转换流程(模型→世界→观察→裁剪→NDC→屏幕空间);4)法线变换的特殊处理(使用逆转置矩阵);5)Unity内置变量使用及屏幕坐标获取方法。文章系统梳理了Shader编程所需的数学基础,重点解析了空间变换矩阵的推导与应用,为后续Shader学习打下理论基础。

misco43的博客 1197

Unity ShaderPass机制详解:从原理到实战应用

在计算机形学中,渲染管线是决定三维场景如何转换为二维像的核心流程。其原理基于GPU对顶点和片元的逐层处理,通过深度测试、混合等操作实现复杂视觉效果。这一技术价值在于能够突破单次渲染的限制,实现透明物体、描边、光源等高级渲染特性。在游戏开发与实时形应用场景中,Unity引擎的ShaderLab框架通过SubShader与Pass的层级结构,为开发者提供了灵活的渲染控制能力。其中,Pass机制允许同一物体被次渲染,通过精心设计的渲染状态(如ZWrite、Blend、Cull)与帧缓冲交互,能够高效实

diankui6178的博客 479

shader grahp 下雨制作

shader grahp 下雨水花制作

xiaoweiwei1313的博客 747

形学】你好,uv变换(新手入门向聊天教程)

以贴的(0.3,0.6)为原点进行缩放,怎么实现?

m0_55476160的博客 7823

一日一Shader·进阶版笔刷【SS_18】

进阶版笔刷的原理还是RT叠加,不过用的是GL的方法,用起来更灵活,可以生成一张小号的叠加到大上。 Shader "MyShader/SS_18" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) =(0,0,0,0) _Row ("Row", float) = 0 _Column ("Column",float) = 0 _Size("Size"..

座右铭 557

Flutter 3D翻页动画性能优化:用Fragment Shader替代Canvas矩阵变换的实战指南

本文详细介绍了如何在Flutter中通过Fragment Shader优化3D翻页动画性能,替代传统的Canvas矩阵变换方案。通过GLSL编写的Shader直接在GPU上执行,显著提升帧率至55-60 FPS,同时降低内存占用和绘制耗时。文章包含完整的实现流程、性能优化技巧及实战应用建议,特别适合需要高性能3D动画的移动应用开发。

zz67890的博客 659

Unity Shader纹理变换:Tiling与Offset在材质动画中的实战应用

本文深入探讨了Unity Shader中Tiling与Offset参数在材质动画中的实战应用。通过基础原理解析和四种实战模式(水平流动水面、呼吸灯效果、无限滚动星空、动态融解特效)的详细案例,展示了如何高效实现动态纹理效果。文章特别强调Shader Graph可视化开发技巧和性能优化策略,帮助开发者提升渲染效率与视觉效果。

weixin_30642561的博客 496

FishManShaderTutorial:窗前雨滴效果的Shader实现技巧与实战指南

想要为你的Unity游戏或应用添加逼真的窗前雨滴效果吗?FishManShaderTutorial提供了完整的Shader中级教程,教你如何通过Shader编程实现令人惊艳的雨滴视觉效果。本文将为你详细解析窗前雨滴效果的Shader实现技巧,帮助初学者快速掌握这一实用的形渲染技术。😊 ## 📝 什么是窗前雨滴Shader效果? 窗前雨滴效果是一种模拟雨水在玻璃窗上流动的视觉特效。在游戏开

gitblog_00115的博客 787
上一篇: unity + shader 实现高性能多图片叠加输出
下一篇: 好用的的Gifshader
李一民001
博客等级 码龄10年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李一民001

创作不易,如有帮助,不胜荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值