Texture3D

Texture3D需要先在脚本中创建3D材质,然后赋予shader。

需要DX11支持,和材质采样一样,3D维度上可以被repleat和插值

参考文章:http://blog.csdn.net/wolf96/article/details/46239557

脚本:

using UnityEngine;

public class Texture3DTest : MonoBehaviour
{
public Renderer target;
public int size = ; void Start()
{
var tex = new Texture3D(size, size, size, TextureFormat.RGBA32, false);
var colors = new Color[size * size * size];
var k = ; for (int z = ; z < size; z++)
{
for (int y = ; y < size; y++)
{
for (int x = ; x < size; x++, k++)
{
if (z == )
colors[k] = Color.blue;
else
colors[k] = Color.red;
}
}
}
tex.wrapMode = TextureWrapMode.Repeat;
tex.SetPixels(colors);
tex.Apply();
target.material.SetTexture("_MainTexture", tex);
}
}

shader:

Shader "Test/Texture3D"
{
Properties
{
_MainTexture("Texture", 3D) = "" {}
_Z("Z",float)=
} SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc" struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
}; v2f vert(appdata_tan v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
return o;
} sampler3D _MainTexture;
float _Z; float4 frag(v2f i) : COLOR
{
return tex3D(_MainTexture, fixed3(i.uv.x, i.uv.y, _Z));
} ENDCG
}
}
}

shader中类型声明为'3D'

这里只绘制了蓝色和红色两种颜色,最后会被插值:

Texture2DArray

最早在Adam的demo里,地形中用到了这个东西。需要DX10支持

顾名思义,这个可以存放Texture2D的数组

参考:

https://docs.unity3d.com/Manual/SL-TextureArrays.html

https://github.com/keijiro/Texture2DArrayTest

脚本:

using UnityEngine;

public class Texture2DArrayTest : MonoBehaviour
{
public Material material;
Texture2DArray mTexture; void Start()
{
mTexture = new Texture2DArray(, , , TextureFormat.RGBA32, false, true); var temp = new Texture2D(, , TextureFormat.RGBA32, false);
for (int x = ; x < temp.width; x++)
for (int y = ; y < temp.height; y++)
temp.SetPixel(x, y, Color.red); mTexture.SetPixels(temp.GetPixels(), ); for (int x = ; x < temp.width; x++)
for (int y = ; y < temp.height; y++)
temp.SetPixel(x, y, Color.blue); mTexture.SetPixels(temp.GetPixels(), ); mTexture.Apply(); material.SetTexture("_TextureArray", mTexture);
}
}

Shader:

Shader "Unlit/NewUnlitShader"
{
Properties
{
_TextureArray("TexArray", 2DArray) = "" {}
_Index("Index",float)=
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#pragma target 3.5 #include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
}; struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
}; sampler2D _MainTex;
float4 _MainTex_ST;
float _Index; UNITY_DECLARE_TEX2DARRAY(_TextureArray); v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
} fixed4 frag (v2f i) : SV_Target
{
fixed4 r = UNITY_SAMPLE_TEX2DARRAY(_TextureArray, float3(i.uv.x, i.uv.y, _Index));
return r;
}
ENDCG
}
}
}

shader中类型声明为2DArray

这里也是放了红蓝两种颜色的图片,分别放在两个索引当中

最终效果:

一些新东西学习 - Texture3D,Texture2DArray的更多相关文章

  1. ES6 有什么新东西

    ES6 有什么新东西? 你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本 ...

  2. 新Android学习计划

    最近,在学习Android Design Support Library提供的新控件过程中,我感受到了原来的学习方式的缺点: 学习内容过于随意,在工作过程中碰到的新问题都想去掌握,心血来潮就想写一篇相 ...

  3. 微软Ignite2018——微软宣布新的学习平台:Microsoft Learn

    Ignite 2018 首日感受 头一次参加美国的微软 Ignite 大会,确实规模比国内的大不少.23日是 MVP & RD 的 Pre Day(MVP即Most Valuable Prof ...

  4. 什么新东西值得学「GitHub 热点速览 v.22.29」

    上周 18k+ 的项目 bun 这周又获得 7k+ star,是时候了解下它背后的编程语言 zig 了,它并不是一门新的语言,伴随着 bun 的风靡,zig 本周也上了 GitHub 热榜.同样,可以 ...

  5. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  6. 《新年Flag》2019年“新年Flag” - 新目标 学习计划

    <新年Flag>2019年"新年Flag" - 新学期 新目标 学习计划 达叔终于等到你了~ 先做个自我介绍: [达叔小生:往后余生,唯独有你]小程序 -> 后端 ...

  7. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  8. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

  9. [翻译] 预览 C# 10 的新东西

    原文: [Introducing C# 10] 作者: Ken Bonny ​ 本周早些时候(译注:原文发表于5月1日),我关注了 Mads Torgersen 在 DotNet SouthWest ...

随机推荐

  1. SWF运行时判断两个DisplayObject是否同个类型,属于flash professional库中的同一个元件

    一般我们判断两个实例对象是否同样的类型,可以用typeof得到对象类型,然后用==号比较. typeof适用于原生类型. 而对于自定义类型,虽然typeof得到的都是Object,但还有更强的招数:g ...

  2. BI Admin Tools和目录管理器的连接配置

    BI管理(Admin Tools): BI Server 的管理工具,用来创建维护模型,并且能够管理安全,会话,变量等等.是用的最多的一个管理工具:这个工具可以编辑 rpd 文件也可以在线通过 ODB ...

  3. .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载

    223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...

  4. mybatis-generator生成逆向工程两种方式

    本文博客地址:http://blog.csdn.net/soonfly/article/details/64499423 逆向工程下载 链接:https://pan.baidu.com/s/1YOAq ...

  5. find -size 查出指定文件大小的命令

    find -size n [c] 查找n值大小的文件,默认单位是块(1块=512字节) 1. 查找大于1500字节的文件 find ~ -size +1500c 2. 查找等于1500字节的文件 fi ...

  6. highstock禁用UTC

    xAxis: { labels: { format: '{value:%Y-%m-%d}', /* * 也可以用 formatter 格式化函数,时间格式化说明如下: * %Y 年 * %m 月 * ...

  7. 使用PHP打造QQ空间神奇图片

    说明 你一定在qq空间遇到过这样的东西:打开一张图片,上面有你的QQ号和昵称,你觉得很神奇,是不是? 其实原理很简单,那张图片是动态生成的,上面显示的信息是根据你访问的Url获得的,然后用程序动态的画 ...

  8. 【MySQL】局域网内:在一台电脑访问另一台电脑的mysql数据库

    1. 假设192.168.1.3为服务器2. 首先在ip为192.168.1.103的机子上能够ping 通运行->cmd>ping 192.168.1.3检查是否能ping通3. 把两台 ...

  9. List集合去重的一些方法(常规遍历、Set去重、java8 stream去重、重写equals和hashCode方法)

    1. 常规元素去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素. // 遍历后判断赋给另一个list集合,保持原来顺 ...

  10. IDEA导入项目jar包红线, cannot resolve symbol xxxx问题

    简单来说遇到的这种情况2种方式解决了, 不知道还有没有其他原因的. 1.reimport包 2.清缓存重启 针对1方法: a.确实不缺包: 可以先注释掉pom文件中的jar包, 此时idea会提示im ...