Ventuz目前主要用于一些大型展会,三维实时交互,工业流程以及数据的可视化展示。

Shader在Ventuz中的使用可以使得效果变得更加炫酷。

1.搬运shadertoy中的效果

首先按照网上已有的词语替换规则修改代码

替换规则很容易查到

- 将 fragCoord.xy 转换为 screenSpace.xy
- 将 iResolution.xy   转换为 res.xy
- 将元素为float2, mat2的向量 vec2 类型转换为float2x2 等. 
- 将 vec3(1) 简写的构造器改写为所有分量都为1的 float3(1,1,1) 
- 将 Texture2D 改写为 Tex2D 
- 将 atan(x,y) 改写为 atan2(y,x) <- 注意参数的顺序! 
- 将 mix() 改写为 lerp() 
- 将纹理Texture2D查找函数的第三个参数(偏移量bias)移除 
- GLSL中纹理坐标Y方向的原点在顶部,而HLSL中纹理坐标Y方向的原点在底部,所以你需要使用这个公式uv.y = 1 – uv.y 对每个点重新定义纹理坐标
结束

第二步 将渲染的效果固定到rect上

直接搬运的效果的uv坐标是通过:vec2 uv = fragCoord.xy / iResolution.xy;计算而来的(iResolution.xy/res.xy是固定值,按照工程的实际分辨率设定)

这个计算式是将rect中的每一点的uv值放入全屏幕空间,判断了该点在全屏幕空间的相对位置,这使得渲染的图案并不会跟从rect移动,形成一种shader在全屏渲染但是只能看到rect存在的部分的图案的错觉。

解决方法,更改与uv相关的计算公式,全部使用Input.uv进行计算

三、一个从shadertoy上面扒下来的火焰效果小例子


uniform float time;
#define MAX_ITER 22
float2 res;
float velocity=1.5 ;
#define detail_steps_ 26
#define mod3_      float3(.1031, .11369, .13787)
float offScale=0.5;float3  hash3_3(float3 p3);
float perlin_noise3(float3 p);
float noise_sum_abs3(float3 p);
float2  domain(float2 uv, float s);float4 Color
<string SasUiControl = "ColorPicker"; string SasUiLabel = "Color";
> = { 1.0f, 1.0f, 1.0f, 1.0f };float4x4 WorldViewProjection  : WORLDVIEWPROJECTION;struct VS_INPUT
{float4 Position : POSITION;float2 uv    : TEXCOORD0;
};
//飘动的参数
float _Magnitude;
float _Frequency;
float _InvWaveLength;
float _Speed;
//火焰参数
float2 moveUV(float2 vertUV)
{  float textureNum = 12.0;  float timePerFrame = 100;  float index = frac(time%(textureNum * timePerFrame));  float2 uvScale = float2(1 / textureNum*10, 1);  if(index <= uvScale.x)  return vertUV * uvScale;  else if(index <= 2 * uvScale.x)    return vertUV * uvScale + float2(uvScale.x, 0.0);  else if(index <= 3 * uvScale.x)  return vertUV * uvScale + float2(2 * uvScale.x, 0.0);  else if(index <= 4 * uvScale.x)    return vertUV * uvScale + float2(3 * uvScale.x, 0.0);  else if(index <= 5 * uvScale.x)  return vertUV * uvScale + float2(4 * uvScale.x, 0.0);  else if(index <= 6 * uvScale.x)  return vertUV * uvScale + float2(5 * uvScale.x, 0.0);  else if(index <= 7 * uvScale.x)    return vertUV * uvScale + float2(6 * uvScale.x, 0.0);  else if(index <= 8 * uvScale.x)  return vertUV * uvScale + float2(7 * uvScale.x, 0.0);  else if(index <= 9 * uvScale.x)    return vertUV * uvScale + float2(8 * uvScale.x, 0.0);  else if(index <= 10 * uvScale.x)  return vertUV * uvScale + float2(9 * uvScale.x, 0.0);  else if(index <= 11 * uvScale.x)  return vertUV * uvScale + float2(10 * uvScale.x, 0.0);  else  return vertUV * uvScale + float2(11 * uvScale.x, 0.0);
}  struct VS_OUTPUT
{float4 Position : POSITION;float2 uv   : TEXCOORD0;
};VS_OUTPUT VS( VS_INPUT Input )
{VS_OUTPUT Output;float4 offset=float4(0,0,0,0);Output.Position = mul(Input.Position, WorldViewProjection);offset.x = sin(3.1416 * time *40* clamp(-Input.uv.y+1, 0, 1))  * offScale;//摆动Output.Position.x+=offset.x;Output.uv=Input.uv;
//  Output.uv=moveUV(Input.uv);return Output;
}float noise(float3 p) //Thx to Las^Mercury
{float3 i = floor(p);float4 a = dot(i, float3(1., 57., 21.)) + float4(0., 57., 21., 78.);float3 f = cos((p-i)*acos(-1.))*(-.5)+.5;a = lerp(sin(cos(a)*a),sin(cos(1.+a)*(1.+a)), f.x);a.xy = lerp(a.xz, a.yw, f.y);return lerp(a.x, a.y, f.z);
}float sphere(float3 p, float4 spr)
{return length(spr.xyz-p) - spr.w;
}float flame(float3 p)
{float d = sphere(p*float3(1.,.5,1.), float4(.0,-1.,.0,1.));return d + (noise(p+float3(.0,time*200.,.0)) + noise(p*3.)*.5)*.25*(p.y) ;
}float scene(float3 p)
{return min(100.-length(p) , abs(flame(p)) );
}float4 raymarch(float3 org, float3 dir)
{float d = 0.0, glow = 0.0, eps = 0.02;float3  p = org;bool glowed = false;for(int i=0; i<64; i++){d = scene(p) + eps;p += d * dir;if( d>eps ){if(flame(p) < .0)glowed=true;if(glowed)glow = float(i)/64.0;}}return float4(p,glow);
}float4 PS(VS_OUTPUT i ) : COLOR
{float2 v = 1.0 - 2.0 *i.uv;v=v*2;v.y+=1;float3 org = float3(0.0, -2.0, 4.0);float3 dir = normalize(float3(v.x*1.6, -v.y, -1.5));float4 p = raymarch(org, dir);float glow = p.w;float4 col = lerp(float4(1.0,0.5,0.1,1.0), float4(0.1,0.5,1.0,1.0), p.y*0.02+.4);float4 screenSpace = lerp(float4(0.0,0.0,0.0,0), col, pow(glow*2.0,4.0));
//  screenSpace.a=0.8;return screenSpace;
}technique Tech1
{pass pass0{vertexshader = compile vs_3_0 VS();pixelshader  = compile ps_3_0 PS();}
}

Ventuz中的shader 学习笔记(一)相关推荐

  1. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  2. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  3. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  4. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  5. 机器人学中的状态估计——学习笔记

    机器人学中的状态估计--学习笔记 离散时间的批量估计问题 1.最大后验概率法(Maximum A Posteriori, MAP) 2.贝叶斯推断(Bayesian inference) 离散时间的迭 ...

  6. 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计

    机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计 3.1 离散时间的批量估计问题 3.1.1 问题定义 3.1.2 最大后验估计 3.1.3 贝叶斯推断 3.1.4 存在性.唯一性与能观 ...

  7. Shader学习笔记(三)学习Shader所需的数学基础

    感受高数 一.笛卡尔坐标系 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 二.点和矢量 1.矢量和标量的乘法/除法 2.矢量的加法和减法 3.矢量的模 4.单位矢量 5.矢量的点积 6.矢量的叉积(cr ...

  8. 【Unity】Unity Shader学习笔记(二)渲染管线

    文章目录 渲染管线(Randering Pipeline) 渲染流程 可编程渲染管线 应用阶段 把数据加载到显存中 设置渲染状态 调用DrawCall 几何阶段.光栅化阶段 渲染管线(Randerin ...

  9. Java中expecial,RxJava 学习笔记 (一)

    作者: 一字马胡 转载标志 [2017-12-13] 更新日志 日期 更新内容 备注 2017-12-13 RxJava学习笔记系列 系列笔记 (一) 2017-12-15 增加系列笔记(二) 201 ...

最新文章

  1. php取url后的文件名
  2. 0/0型极限等于多少_求极限时是否可以进行代入?
  3. Emgucv粗略抠取车牌
  4. .NET项目迁移到.NET Core操作指南
  5. Atitit.判断元素是否显示隐藏在父元素 overflow
  6. 【CCCC】L3-019 代码排版 (30分),大模拟
  7. C语言:要求输入一个字符,如果这个字符是小写字母,将这个字母转换成大写字母,否则保持不变
  8. ListView若干点
  9. Linux下安装jdk报Permission denied以及chmod详解
  10. contentprovider java_访问不了自己创建的Contentprovider,报错:java.lang.SecurityException: Permission Denial...
  11. 物联网控制的智能LED灯带(1):WS2812灯带控制(WS2812/2811,ESP32,NODE-RED)
  12. Removing a detached instance--删除失败
  13. 矩阵分析与应用-1.7-逆矩阵
  14. 快速开放,推荐一个视频通话sdk agora
  15. 基于springboot+vue+Java线上教学平台( 源码+文档)
  16. WLAN基本知识之无线基本概念
  17. SpO2、SaO2、PaO2、低氧血症概念及标准的总结
  18. 车站计算机系统具有自诊断功能,第五节自动检售票系统.ppt
  19. 使用IDEA远程debug调试(一篇懂所有)
  20. oauth2.0源码分析之oauth/token申请令牌

热门文章

  1. stream流处理List
  2. 数组的下标为什么从0开始
  3. 一个实验,搞懂链路聚合和流量镜像
  4. stm32f103的io口复用_stm32-复用功能和重映射
  5. 小觅相机标准版跑orbslam2
  6. [学习笔记]STM32F1软件SPI读写W25Qx(寄存器、标准库、HAL库)
  7. 【C++】菜鸟教程个人C++学习笔记
  8. Spark MLlib数据类型
  9. strtoul函数使用记录
  10. 戴森即将投资5亿英镑用于推动头发护理品类产品创新