一些新东西学习 - Texture3D,Texture2DArray

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 = 16;

    void Start()
    {
        var tex = new Texture3D(size, size, size, TextureFormat.RGBA32, false);
        var colors = new Color[size * size * size];
        var k = 0;

        for (int z = 0; z < size; z++)
        {
            for (int y = 0; y < size; y++)
            {
                for (int x = 0; x < size; x++, k++)
                {
                    if (z == 0)
                        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)=0
    }

    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(256, 256, 2, TextureFormat.RGBA32, false, true);

        var temp = new Texture2D(256, 256, TextureFormat.RGBA32, false);
        for (int x = 0; x < temp.width; x++)
            for (int y = 0; y < temp.height; y++)
                temp.SetPixel(x, y, Color.red);

        mTexture.SetPixels(temp.GetPixels(), 0);

        for (int x = 0; x < temp.width; x++)
            for (int y = 0; y < temp.height; y++)
                temp.SetPixel(x, y, Color.blue);

        mTexture.SetPixels(temp.GetPixels(), 1);

        mTexture.Apply();

        material.SetTexture("_TextureArray", mTexture);
    }
}

Shader:

Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _TextureArray("TexArray", 2DArray) = "" {}
        _Index("Index",float)=0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        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

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

最终效果:

时间: 2024-12-13 23:14:55

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

新领域学习时,高度与视角的选择

读blog 谈谈如何学习Linux内核 (一) -- 选择合理的高度,决定自己的视角 http://blog.csdn.net/minghe_uestc/article/details/18900967 深有同感,摘录如下: 高度决定视角,视角决定行动 在学习内核过程中最容易犯的错误,也是非常难掌握的其实是你站在一个什么样的高度上去学习. 站什么样的高度去学习也与自身的能力相关,所以这个问题其实更多是在新开始学习的学习者感到非常痛苦的一件事.一方面又希望自己能学懂,但是又不知道如何开始入手. 我

如何学一样新东西

虽然我很想激起各位学习的冲动,不过我还是得说,自己在学习的时候,大部分都是痛苦的.特别是要学一样之前从来都没接触过的新东西,从门外到门里,总得过几个坎儿,受几次折磨,停一停,再过几个坎,再受几次折磨,才能有点收获,迈到门里边儿.最近我特别留意了一下这个过程,总结一下,与大伙共勉. 动力 冲动并不都是坏的,DNA 里包含这玩意儿,一定有它的意义.冲动是学习的源动力,你总得有个理由让自己学习,最好你是主动的,比如你想去改变点什么.我记得很早以前,手里拿着一本 Foxpro 的书,看进状态以后,觉得时

从Android Studio 说开去--未来程序员工具的发展方向——版本兼容,以及为什么我们总是要学SB&quot;新&quot;东西

抽时间学习Android. 刚刚下载了 http://developer.android.com/sdk/installing/studio.html#Updating Getting Started with Android Studio 下载安装,很简单. 启动前,先把翻墙的工具准备好,并且开动之. 否则是不行了. 我再牢骚几句啊(我自己要是开公司,门口第一个标语栏就是:大声报怨.一个连抱怨都不会的人,我不信他是一个正常人,更别提创造力了.当然,我招人也只会招参与型的人,只抱怨,但事事弃权,

ES6 有什么新东西

ES6 有什么新东西? 你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本和复杂的应用都很有用.在本文中,我们将讨论一些精心挑选的 ES6 特性,这些特性可以用于你日常的 Javascript 编码中. 请注意,当前浏览器已经全面展开对这些 ES6 新特性的支持,尽管目前的支持程度还有所差异.如果你需要支持一些缺少很多 ES6 特性的旧版浏览器,我将介绍一些当前可以帮助你

究竟哪些人适合学习新媒体?学习后能干什么?

随着社会的发展以及衍生,此生了一批又一批的新兴事物出现,也在众多岗位之中诞生了一个新兴的行业,那就是新媒体运营.新媒体运营是当下非常受欢迎的岗位,那么什么人适合学习新媒体?学习后可以做什么?跟着小编来看看吧. 哪些人适合学习新媒体? 有一定写作功底,有一定的写作爱好,日常比较喜欢写东西,比较说发发心得.感悟之类的,遇到内容可以快速处理. 其次喜欢琢磨,爱琢磨细节.猜测出题人的意思,对于这些人群可以快速入门新媒体课程. 还有动手动脑能力强,具有一定创意性,具有设计方面天赋,都可以去学习新媒体课程,

新的学习路径、学习想法和思路的头脑风暴:基于泰迪云课程,对数据分析和数据建模,机器学习算法进行统筹,接着是基于大数据的数据挖掘、进度、

新的学习路径.学习想法和思路的头脑风暴:基于泰迪云课程,对数据分析和数据建模,机器学习算法进行统筹,接着是基于大数据的数据挖掘.进度. 泰迪云代码已经下载,对相关内容进行应用和学习 想通视频之后对代码进行研究 专家经验.优秀经验工程师经验转化. 从论文中第三四大章,读取 设计和解决问题流程 找论文.使用benchmark 上有收录论文.找到论文.不建议自己先去想. 以后一定 偏分析,偏挖掘.偏决策的.不是执行者,执行者是最low的,最强的解决方案,都按论文来找. 高端会议.每年会出来十多篇研究成

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方

NCWeather还有不少优化的余地,但是也该做个新东西了

度假半个月,复活. 鼠绘了精美小图标一只,风格和以前的保持了统一. 加了个网络状况的检查,不过不怎么完善,今晚困了,当然清醒了也不一定会继续完善. 因为画了图标,所以发个APK. 代码依然见Github. NCWeather还有不少优化的余地,但是也该做个新东西了,布布扣,bubuko.com

ASP.NET5和MVC6新特性学习

ASP.NET5和MVC6新特性学习 ? ? ASP.NET5和MVC6的新特性 在新版ASP.NET5和MVC6中,有很多变化,有些是彻底的变化,比如在最底层支持依赖注入技术,为了方便了解,我们这里列出了最重要的10大变化,以便进行学习,具体如下: ASP.NET 5现在已经是跨平台了,可以在Mac和Linux上运行. 不再有Web Forms框架了. 只支持C#,不在支持VB.NET了.(貌似最近又听说最终版VB.NET又要支持了) 新的Tag语法,@Html.LabelFor或Html.T