【Unity Shader编程】之顶点着色器

来一张AI提供的资料在这里插入图片描述
一,坐标空间转换
空间转换中,一般有五个空间转换,模型空间→世界空间→视图空间→裁剪空间→NDC空间(其次坐标空间,执行其次坐标后的空间)→屏幕空间
在这里插入图片描述

核心原则

1,数据依赖原则

当逻辑需要相对坐标系属性(如模型UV、顶点色)时,优先在模型空间处理(如gl_Vertex变换前)
当逻辑依赖全局交互状态(如光照方向、物理碰撞)时,必须转换到世界空间后处理

2,性能优化准则

在顶点着色器阶段处理空间转换(如UNITY_MATRIX_MVP),利用GPU并行性在片段着色器中避免重复坐标转换,通过TEXCOORD传递预处理数据

3,精度控制策略

高精度计算(如物理模拟)应在世界空间使用double类型
视觉效果类计算(如雾效)可在视图空间使用float类型

空间转换代码

Shader "SpaceTransform/BasicChain"
 {
  SubShader { 
  Pass { 
  CGPROGRAM
   #pragma vertex vert 
   #pragma fragment frag
    #include "UnityCG.cginc"

        struct appdata {
            float4 vertex : POSITION;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 worldPos : TEXCOORD0;
            float4 viewPos : TEXCOORD1;
        };

        v2f vert (appdata v) {
            v2f o;
            
            // 模型空间 → 世界空间 
            o.worldPos  = mul(unity_ObjectToWorld, v.vertex); 
            
            // 世界空间 → 视图空间 
            o.viewPos  = mul(UNITY_MATRIX_V, o.worldPos); 
            
            // 视图空间 → 裁剪空间 
            o.pos  = mul(UNITY_MATRIX_P, o.viewPos); 
            
            return o;
        }

        fixed4 frag (v2f i) : SV_Target {
            return fixed4(1,1,1,1); // 纯白输出 
        }
        ENDCG 
    }
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969004.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

咸鱼换绑手机号能换ip属地吗?深入探讨

随着移动互联网的普及,手机已经成为我们日常生活中不可或缺的一部分。而在各种网络应用中,手机号码往往扮演着重要的角色,它不仅是身份验证的关键,还关联着用户的地理位置信息。在二手交易平台如闲鱼上,用户的手机号和…

历史性突破!DeepSeek双模型GitHub热度超OpenAI,展现中国AI力量

在2025年2月7日,中国AI领域传来了一则振奋人心的消息:DeepSeek旗下的两大开源项目在GitHub平台上实现了历史性突破,其Star数成功超越了OpenAI的明星项目。这一成就不仅标志着DeepSeek在技术研发和市场影响力上的重大飞跃,也为中国…

【论文笔记】ZeroGS:扩展Spann3R+GS+pose估计

spann3r是利用dust3r做了增量式的点云重建,这里zeroGS在前者的基础上,进行了增量式的GS重建以及进行了pose的联合优化,这是一篇dust3r与GS结合的具有启发意义的工作。 abstract NeRF和3DGS是重建和渲染逼真图像的流行技术。然而,…

【CLIP系列】4:目标检测(ViLD、GLIP)

目录 1 ViLD2 GLIP2.1 前言2.2 损失计算2.3 模型框架 1 ViLD OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION 从标题就能看出来,作者是把CLIP模型当成一个Teacher,去蒸馏他自己的网络,从而能Zero Shot去…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南 禅道镜像版本:easysoft/zentao:21.4 Redis版本:redis:6.2.0 Mysql版本:mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践:自建MySQL与…

Elasticsearch:同义词在 RAG 中重要吗?

作者:来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索,以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为,由于…

0基础学LabVIEW

对于零基础的朋友来说,学习LabVIEW需要一个科学的学习路径和方法。通过观看优质的B站教程打好基础,再结合实际项目进行实践操作,能够快速提升LabVIEW的应用能力。以下是从入门到进阶的学习建议。 ​ 一、利用B站入门教程打基础 筛选优质教程…

7. Docker 容器数据卷的使用(超详细的讲解说明)

7. Docker 容器数据卷的使用(超详细的讲解说明) 文章目录 7. Docker 容器数据卷的使用(超详细的讲解说明)1. Docker容器数据卷概述2. Docker 容器数据卷的使用演示:2.1 宿主 和 容器之间映射添加容器卷2.2 容器数据卷 读写规则映射添加说明2.3 容器数据卷的继承和共…

零售行业线下门店的AI知识库应用实践

在竞争激烈的零售行业,线下门店的运营效率和服务质量是企业成功的关键因素之一。随着AI技术的不断发展,越来越多的零售企业开始探索如何利用AI知识库提升线下门店的运营效率和员工服务水平。 1. AI知识库在零售行业的应用背景 零售行业面临着诸多挑战&…

Unity Behavior Designer - Behavior Trees for Everyone(行为树)为什么称作AI 的“基石”之一

Behavior Designer 是 Unity 中一个用于创建行为树的插件,主要用于 AI 和 NPC(非玩家角色)的行为管理。行为树(Behavior Trees)是一种基于树形结构的决策树模型,广泛应用于游戏开发中,特别是在控…

八大排序——简单选择排序

目录 1.1基本操作: 1.2动态图: 1.3代码: 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作: 选择排序(select sorting)也…

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description:任务描述 勾选 Discard old builds Discard old builds:控制何时…

使用 Dockerfile 构建自定义 Nginx 镜像并集成 nginx_upstream_check_module

目录 1. 为什么需要自定义 Nginx 镜像? 2. Dockerfile 解析 2.1 基础镜像选择 2.2 安装依赖 2.3 下载并解压 Nginx 源码 2.4 应用补丁并编译 Nginx 2.5 暴露端口并设置启动命令 3. 构建并运行自定义 Nginx 镜像 3.1 构建镜像 3.2 运行容器 3.3 健康检测配…

【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)

官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键,Transformer 虽推进了该领域发展,但有效性尚存争议,有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用,提…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构,分布式架构的同步调用里,无论是方法调用,还是 OpenFeign 难免会有以下问题: 扩展性差(高耦合,需要依赖对应的服务,同样的事件,不断有新需求&#xff0…

LabVIEW与USB设备开发

开发一台USB设备并使用LabVIEW进行上位机开发,涉及底层驱动的编写、USB通信协议的实现以及LabVIEW与设备的接口设计。本文将详细介绍如何开发USB设备驱动、实现LabVIEW与USB设备的通信以及优化数据传输,帮助用户顺利完成项目开发。下面是一个详细的说明&…

kali连接xshell

1.先保证宿主机:以太网适配器 VMware Network Adapter VMnet8 和kali(net 模式)在同一个网段 windows VMnet8开启 查看是否是自动获取ip ipv4 和ipv6一样的 查看 windows VMnet8的IPv4的地址 查看 kali 的IP地址 window ping的结果&#xf…

557. 反转字符串中的单词 III 简单

557. 反转字符串中的单词 IIIhttps://leetcode.cn/problems/reverse-words-in-a-string-iii/ 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入:s "Lets take LeetC…

多语言订货系统的语言适配与本地化开发策略

在全球化浪潮的席卷下,商业世界的边界日益模糊,企业纷纷踏上国际化征程,与世界各地的客户展开紧密合作。在这一背景下,多语言订货系统成为企业开拓全球市场的关键基础设施,其语言适配能力与本地化开发策略,…

OpenWRT中常说的LuCI是什么——LuCI介绍(一)

我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西,但luci到底是什么东西,可能还不够清楚,今天就趁机来介绍下,openwrt中的luci,到底是个什么东西。 什么是LuCI? 首先,LuCI是OpenWRT中…