Shader的纹理

2024-06-13 03:58
文章标签 shader 纹理

本文主要是介绍Shader的纹理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一直在看《Unity shader入门精要》,纹理这章的划线重点部分笔记,关于纹理采样的内容。

  • 纹理是使用一张图片来控制模型的外观。纹理映射技术,把一张图“黏”在模型表面,逐纹素地控制模型的颜色。
  • 在OpenGL中纹理空间的原点位在左下角,在DirectX中,原点位于左上角。Unity做了在DirectX平台上翻转屏幕图像纹理

  • 第一个属性是纹理类型,选择合适的类型,让Unity知道我们的意图
  • texture Shape可以选择2d或者cube,cube是高级纹理类型
  • Alpha Source 可以选择Alpha from Grayscale,透明通道的值将会由每个像素的灰度值生成
  • Wrop Mode.决定当纹理坐标超过[0,1]范围后将会如何被平铺。
    ​* Repeat,整数部分被舍弃,用小数部分进行采样,纹理不断重复
    ​* Clamp,纹理坐标大于1,截取到1。小于0,截取到0.
  • Filter Model有3种模式:Point,Bilinear以及Trilinear。图片滤波效果依次提升,消耗性能依次增大。
    ​* 纹理滤波会影响放大或者缩小纹理时得到的图片质量。

  • 抗锯齿问题,是用多级渐远纹理(mipmapping)。原理是提前用滤波处理来得到很多更小的图像,形成一个图像金字塔,每一层都是对上一层图像采样的结果。在实时运行时候,就可以快速得到结果像素。

  • 当物体远离摄像机时,可以直接使用较小的纹理。缺点是需要使用一点空间存储这些多级渐远纹理。多占用33%内存空间
    用空间换取时间的方法
  • 在Advanced中,在勾选Generate Mip Maps,即可开启多级渐远纹理技术。

  • Point模式使用近邻滤波,在放大或者缩小时,它的采样像素数目通常只有一个,有像素风格的效果

  • Bilinear 滤波使用线性滤波,每个像素点,找到4个邻近像素,进行线性差值混合得到最终的像素,图像看起来被模糊了。
  • Trilinear 在Bilinear的基础上做了和多级渐远纹理之间的混合。

  • Non Power of Two,非2的幂大小纹理,这些纹理往往会占用更多的内存空间,GPU的读取纹理的速度也会下降。iOS平台会把图缩成最近的2的幂次大小

这篇关于Shader的纹理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056219

相关文章

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们可以将像素数据按照矩形进行缩小和放大,但是还不足以满足我们的要求。例如要将一幅世界地图绘制到一个球体表面,只使用glPixelZoom这样的函数来进行缩放显然是不够的。OpenGL纹理映射功能支持将

Unity3D Shader详解:只画顶点或只画线框

在Unity3D开发中,Shader是控制渲染过程的关键组件,它允许开发者自定义物体的渲染方式。有时,为了特定的视觉效果,我们可能需要只渲染模型的顶点或者只显示其线框。下面,我们将详细探讨这两种效果的技术实现,并给出相应的代码示例。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 只画顶点 在Unity中直接“只画顶点”的概念可能不是非常直观,因为顶点本身只是模型

试用UE4的纹理数组(UTexture2DArray)

UTexture2DArray 我发现在我目前使用的版本(4.25)中,官方已经实现了纹理数组(可能在4.24或更早版本就已经实现了)。 纹理数组,其含义不言而喻。一个重要作用是可以使用更多的纹理而不受制于sampler数目限制。 这一篇里我想对官方的纹理数组进行一下简单的试用。 试用 0. 启用纹理数组 虽然我看到了代码中有UTexture2DArray这个类,不过一开始并没有在编辑器

研究纹理采样器在像素级别的采样位置

问题 【纹理采样器】是一个基础的概念。假设有一个正方形面片,顶点的UV范围是0.0~1.0,那么在这个正方形面片上采样一张纹理时,会呈现出完整的纹理。 但我现在关注的问题是,在像素级别上,采样的位置是怎样的。具体来讲:对于UV值是(0.0,0.0)的点,它对应的采样位置是纹理最左上角像素的中心?还是纹理最左上角像素的左上角?即,下面左右哪个是正确的情况? 在宏观上,尤其是像素较多的时候,二者

图形API学习工程(11):使用纹理

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 目标 实现纹理采样。 参考教程/代码范例: OpenGL: 纹理 - LearnOpenGL CN Vulkan: Images - Vulkan Tutorial D3D11: DirectX11官方SDK范例【Tutorial 7: Texture Mapping and Constant

翻译 Albert Julian Mayer 关于虚拟纹理的论文(3. 概述)

第3章:概述 本章介绍了整篇论文中使用的术语,并简要介绍了“虚拟纹理”及其挑战。 3.1 术语 目前,在纹理缓存领域存在术语不匹配的情况。一些论文将术语 “虚拟纹理” 应用于所有 “使用部分驻留在内存中的纹理的系统”,特别是类似 Clipmapping 的系统 [TSH09]、 [EC06]、 [Wei04]、 [SLT+07]。而其他论文和资源将这个术语应用于一种更新的、截然不同的大纹理支

翻译 Albert Julian Mayer 关于虚拟纹理的论文(1. 介绍)

译者前言 在搜寻关于虚拟纹理相关资料的时候,我发现了这篇论文: 这似乎是 维也纳科技大学计算机科学系 的学生 Albert Julian Mayer 的研究生学位论文。 这篇论文也出现在了 2014 GDC Adaptive Virtual Texture Rendering in Far Cry 4 的参考文献之中。 我希望通过翻译这篇论文来学习虚拟纹理的基础概念等知识。 摘要 在实时

Three.js new THREE.TextureLoader()纹理贴图使用png图片显示为黑色

问题代码如下: const texture = new THREE.TextureLoader().load('./image.png');droneGeometry = new THREE.PlaneGeometry(1, 1);droneMaterial = new THREE.MeshBasicMaterial({ map: texture});droneMesh = new THRE

unity shader实现一个移动的箭头

Shader "Unlit/LT_Arrow" {     Properties     {         _MainTex ("Texture", 2D) = "white" {}         _MSpeed("MoveSpeed", Range(1, 3)) = 2 //移动速度     }     SubShader     {         //贴图带透明通道 ,半透明效果设置如下

OpenGL/GLUT实践:粒子系统,并添加纹理、动态模糊、边界碰撞(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 运行效果2 实验过程2.1 基本粒子系统2.1.1 定义粒子结构2.1.2 创建粒子并初始化2.1.2.1 创建粒子2.1.2.2 初始化 2.1.3 粒子状态更新与绘制2.1.3.1 绘制2.1.3.2 更新 2.1.4 实现效果 2.2 添加纹理2.2.1 纹理添加2.2.2 渲染粒子2.2.3 实现效果 2.3 运动