今天看了 AMD_GpuAddress 模块文档,以前一直没有理解它的功能和原理。今天在网上一篇博客的指导下,终于明白了大概。

所以记录下来,以供日后参考。

  通常纹理贴图数据按照线性方式排列,就如二维数组的样子。如果要访问纹理的某个元素,可以使用下面的公式。

  Z = Y * stride + X

这里 Z 代表访问的结果,Y 代表行坐标,X 代表列坐标,stride 代表每行的固定跨度值。也就是说通过行,列的值可查找

所需的元素。但是因为GPU处理纹理时经常需要读取4x4, 8x8邻近元素的纹理值, 而以线性方式存储的大尺寸贴图,邻近

元素往往相距成千字节,所以很容易造成读取时的CacheMissing,以致执行效率低下。

如果数据以4x4, 8x8邻近元素块进行存贮,这样读取临近元素,就可以避免部分的CacheMissing,提高执行效率。当

然就不能以原来的线性方式进行元素访问了(它们是以非线性(non-linear)方式存放的)。如果还需要以X,Y的方式访问元素,

必须以对应的方式解算地址才行。(所以就会有GpuAddress这类的模块)例如下面代码表示的4X4Tile,

  // per-texture constantsuint tileW = 4;uint tileH = 4;uint widthInTiles = (width + tileW-1) / tileW;// actual addressinguint tileX = x / tileW;uint tileY = y / tileH;uint inTileX = x % tileW;uint inTileY = y % tileH;pixel = image[(tileY * widthInTiles + tileX) * (tileW * tileH)+ inTileY * tileW+ inTileX];

注意上面代码中,可以看到解算地址的代码不是很复杂的。

https://fgiesen.wordpress.com/2011/01/17/texture-tiling-and-swizzling/

转载于:https://www.cnblogs.com/hzzhouqq/p/8550306.html

Texture tiling相关推荐

  1. GPU Gems2 - 12 基于贴面的纹理映射(Tile-Based Texture Mapping)

    本文内容摘自https://zhuanlan.zhihu.com/p/38411575 [章节概览] 这章介绍了一个基于贴面的纹理映射(Tile-Based Texture Mapping)系统,用来 ...

  2. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP | ShaderGraph | Decal)

    本文最终效果 文章目录 一.前言 二.环境准备 1.URP环境准备 2.技能范围图案 二.方案一:写Shader实现 1.Shader脚本:UrpDecal.shader 2.材质球 3.创建Cube ...

  3. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP ShaderGraph Decal)

    本文最终效果 文章目录 一.前言 二.环境准备 1.URP环境准备 2.技能范围图案 二.方案一:写Shader实现 1.Shader脚本:UrpDecal.shader 2.材质球 3.创建Cube ...

  4. 【GPU精粹与Shader编程】(四) 《GPU Gems 2》全书核心内容提炼总结 · 上篇

    本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处 文章链接: https://zhuanlan.zhihu.com/p/38411575 <GPU Gems 2>这本书除了丰富的 ...

  5. UGUI优化:使用镜像图片

    ui中使用好多像按钮等对称的图片,如果使用1/2.1/4图片将大量的节省内存,这里详细说下这个解决方案: unity版本:2018.2.13f1 ugui源码版本2018.2(这里在这个版本基础上修改 ...

  6. 3D渲染技术分享:3D游戏开发渲染调试高级技巧

    零.本文主要知识点 友情劝退:全文7400+字 如果知识点里没有你想要的,那可以直接拉到底,与评论区大神一战. 最初的计划是想写一篇关于KylinsGraphicsDebugger实现原理的文章,但感 ...

  7. linux下定时备份文件,Linux下定时备份文件

    一. 编写脚本 编写一个脚本文件,使脚本可以执行备份命令. 例如,将文件目录 /home/backups/balalala 备份到/home目录下,并压缩. 1. 创建脚本 命令格式: touch 路 ...

  8. photon多人在线_Photon Cloud网络多人游戏开发简介

    photon多人在线 Exit Games is a well-known provider of high-performance network multiplayer server and ho ...

  9. 【Shader】热扭曲实现刀光特效

    第一种方式: // 用于刀光的空气扭曲特效 Shader "Custom/SimpleHeatDistortion" {Properties {_NoiseTex ("N ...

最新文章

  1. 【深度学习】讲一个深度分离卷积结构和空洞卷积的应用
  2. 一个edit的学习笔记
  3. 数据结构(十五)dijkstra单源最短路径
  4. php学习之----采集新浪头条新闻
  5. MySQL的主从复制详解
  6. zk和redis分布式锁比较
  7. 京东方班单片机和c语言,pic单片机c语言程序设计14.pdf
  8. 魔鬼数学——大数据时代,数学思维的力量
  9. 微信小程序button修改边框样式after
  10. 补阳气吃什么 补阳气的食物
  11. Python-伪数据构造神库Faker
  12. 罗永浩和锤子手机:对不起,我被你打动了
  13. centos 7 iso u盘安装_服务器系统CentOS安装教程
  14. CCF认证201403-1相反数
  15. 什么是cve什么是cwe_什么是CVE 2020 0601又名Curveball,为何如此危险
  16. IDEA tomcat 发布时出现Error running 'Tomcat 7.0' Can't set permissions for file ***\jmxremote.access
  17. Auto.js 9版本 OCR 文字识别
  18. 无法打开网页版晓木虫怎么办?
  19. mysql科学计数法问题
  20. 体系的建模与仿真软件系统价格

热门文章

  1. You have to use a classifier to attach supplemental artifacts to the project instead of replacing th
  2. 阿里 卫哲谈阿里人力招聘价值观
  3. Unity3d+GameFramework:资源分析,资源依赖,循环依赖检测
  4. c语言5个同学三门成绩,求助:c语言 求5个同学语数外三门功课的总分与均分。大家看我错在哪了...
  5. CentOS 7 添加新硬盘
  6. 【RabbitMQ】java.lang.NoClassDefFoundError: org/springframework/util/backoff/BackOff
  7. 自动化测试工具 Selenium WebDriver 入门教程
  8. Java中,如何把ascii码转换成字符?
  9. android软件开发
  10. deepin恢复出厂_初始化 - deepin Wiki