shader实例(二十二)TexGen-球面贴图SphereMap

http://blog.sina.com.cn/s/blog_89d90b7c0102vfqz.html

球面贴图一般用于环境反射,如下图(左边为球面贴图,右边为正常贴图),一个镜面水晶球在这只猫的前方,而这只猫也正看着这个水晶球,效果是这只大头猫的头变的更大了。shader实例(二十二)TexGen-球面贴图SphereMap


原理:

1.将顶点转换到摄像机空间

2.根据该顶点的摄像机【入射向量 I 】和【法线向量N】计算【反射向量R】

3.将【反射向量R】与【摄像机向量(0,0,1)】相加,计算出【过渡向量m】

4.求【过渡向量m】单位向量,再将值映射为uv的值域上,求得纹理坐标

如图:


基础知识:

求反射向量 http://www.cnblogs.com/graphics/archive/2013/02/21/2920627.html

 

代码和详细分析如下:


}

<span style="background-color: rgb(255, 255, 255);">Shader "Custom/球面贴图" {
   Properties {
        _Reflectivity ("Reflectivity", Range (0,1)) = 0.5
        _MainTex("Base", 2D) = "white"
        _Environment ("Environment", 2D) = "white"
    }
    SubShader {
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            sampler2D _MainTex;
            sampler2D _Environment;
            float4 _MainTex_ST;
            float _Reflectivity;
            struct v2f {
                float4  pos : SV_POSITION; // 输出的坐标信息
                float2  uv : TEXCOORD0; // 输出的主材质纹理信息
                float2  uv2:TEXCOORD1; // 输出的球面纹理信息
            } ;
            
            // 求反射向量。这个底层有封装,拆开就是这样的
            float3 reflect(float3 I,float3 N)
            {
                return I - 2.0*N *dot(N,I);
            }
            
            float2 GetUV(float3 r)
            {
                // 开根号对过渡向量m求模(反射向量r+摄像机向量(0,0,1)为过渡向量m)
                float m = sqrt(r.x * r.x + r.y * r.y + (r.z + 1.0) * (r.z + 1.0)); 
                // 求过渡向量m的单位向量
                float3 n = float3(r.x / m, r.y / m, r.z / m);
                // 顶点值域为[-1,1],转为UV的值域[0,1]
                // 在边缘处UV信息也是更靠近图片里面,才形成镜面水晶球的效果吧
                return float2(0.5 * n.x + 0.5,0.5 * n.y + 0.5);
            }
  
            v2f vert (appdata_base v)
            {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
                o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
                
                // 将顶点信息转换到摄像机坐标
                float3 posEyeSpace = mul(UNITY_MATRIX_MV,v.vertex).xyz;
                // 获取摄像机的入射向量
                float3 I = posEyeSpace - float3(0,0,0);
                // 将顶点的法线向量转换到摄像机坐标
                float3 N = mul((float3x3)UNITY_MATRIX_MV,v.normal);
                // 求法线单位向量
                N = normalize(N);
                // 根据入射向量和法线向量求反射向量
                float3 R = reflect(I,N);
                // 根据反射向量获取最终的UV信息
                o.uv2 = GetUV(R);
                return o;
            }
            float4 frag (v2f i) : COLOR
            {
                float4 reflectiveColor = tex2D(_Environment,i.uv2);
                float4 decalColor = tex2D(_MainTex,i.uv);
                float4 outp = lerp(decalColor,reflectiveColor,_Reflectivity);
                return outp;
            }
            ENDCG
        }
    }</span>

转载于:https://www.cnblogs.com/nafio/p/9137319.html

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南) 本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。 阅读详情

相关推荐

C++学习(三三六)球面贴图Sphere mapping 立方体贴图Cube mapping

球面贴图 立方体贴图

hankern的专栏 1428

TexGen-开源

TexGen是一种几何纺织品建模软件包,可用于获取机织纺织品和纺织品复合材料的工程特性。 引用TexGen如果您可以在适当的情况下承认使用TexGen,并建议使用以下参考文献之一,我们将不胜感激:LP Brown和AC Long。 编着“对复合材料的织物增强材料的几何形状进行建模:TexGen”,第8章“为实现最佳性能的复合材料增强材料(第二版)”。 P Boisse,伍德海德出版社,2021年,ISBN:978-0-12-819005-0。 https://doi.org/10.1016/B978-0-12-819005-0.00008-3 Lin,H.,Brown,LP和Long,AC2011。使用TexGen建模和模拟纺织品结构。 先进材料研究,331,44-47。 要引用版本3.12.1,请使用:Louise Brown,mike-matveev和georgespackman。 (2021年2月12日)。 louisepb / TexGenTexGen v3.12.1(版本v3.12.1)。 Zenodo。 http://doi.org/10.5281/zenodo.4537

ABAQUS中TexGen模型材料属性详解:从inp文件看基体与纱线的区别

本文深入解析了ABAQUS中TexGen模型材料属性的关键差异,特别是基体(MAT0)与纱线(MAT1)在inp文件中的定义方式。通过对比各向同性基体材料与正交各向异性纱线材料的参数设置,揭示了复合材料仿真的核心技术要点,并提供了实用的材料属性修改技巧和常见问题解决方案。

git9versioner的博客 687

TexGenTexGen是一种几何纺织品建模软件包,可用于获取机织纺织品和纺织品复合材料的工程特性

TexGen TexGen是一种几何纺织品建模软件包,可用于获取机织纺织品和纺织品复合材料的工程特性。 有关该项目的更多信息,请参见 建筑规范 说明从源代码构建TexGen可以在这里找到 可执行文件 Windows可执行文件和发行版tarball可以在这里找到 引用TexGen 如果您可以通过以下参考资料承认使用TexGen,我们将不胜感激: AC Long和LP Brown。 具有最佳性能的复合材料增强材料:对复合材料的织物增强材料的几何形状进行建模:TexGen,P Boisse编辑,Woodhead Publishing Ltd,2011,ISBN:978-1-84569-965-9 Lin,H.,Brown,LP和Long,AC2011。使用TexGen建模和模拟纺织品结构。 先进材料研究,331,44-47 路易丝·布朗,米哈伊尔·马特维耶夫和乔治·斯派克曼。 (202

TexGen简单模型对应inp文件简单梳理-1

默认最简单的编织复材,编辑材料属性时发现基体属性设置正常,各向同性材料,但是纱线的材料属性却没有弹性性能的设置。导出inp文件后,导入ABAQUS中其实可以看到有两种材料,纱线也是有属性的。ABAQUS中修改属性的话一来手动比较慢,二来每次都要改,所以考虑导出inp后直接先修改inp的材料属性试试。

墨柳烟的博客 917

掌握编织复合材料建模:TexGen源码解析与应用

编织复合材料作为一种先进材料,近年来因其优越的性能而广泛应用于航空航天、汽车制造、体育器材等诸多领域。它们在提供高强度、低重量的同时,还能够通过设计实现特定的机械和热性能。TexGen是一款专业的编织复合材料分析软件,它由多个子系统组成,每个子系统都有明确的功能和任务。整个软件架构基于模块化设计理念,允许用户根据需求选择相应的模块进行操作。TexGen采用分层架构来组织其软件包,主要可以分为三个层次:用户界面层、核心处理层和数据层。

weixin_42573757的博客 1061

球面贴图(Sphere Map)

球面贴图用于环境反射(reflection), 纹理坐标的生成与cube map的reflection mode类似: 推导如下: 顶点处理器: // Sphere Mapping Shader // Vertex Shader // Richard S. Wright Jr. // OpenGL SuperBible #version 130 /

huangzhipeng的专栏 2万+

texgen.js 项目常见问题解决方案

texgen.js 是一个 JavaScript 编写的纹理生成器,旨在通过程序化方法生成各种纹理。该项目由 mrdoob 开发,托管在 GitHub 上。texgen.js 的主要编程语言是 JavaScript,同时也使用了少量的 CSS 和 HTML 来支持项目的展示和运行。 ## 新手使用注意事项及解决方案 ### 1. 环境配置问题 **问题描述**:新手在初次使用 texgen....

gitblog_00493的博客 658

推荐:texgen.js - 精美的程序化纹理生成器

在数字艺术和游戏开发的世界中,细节往往决定了作品的品质。`texgen.js` 是一个强大的 JavaScript 库,专为创建复杂而美丽的**程序化纹理**而设计。通过简单的 API 调用,你可以构建出多样化的纹理图案,这些图案可以用于3D模型、网页背景、图形设计等多个领域,为你的作品增添无尽的创意和个性化。 ## 2、项目技术分析 `texgen.js` 的核心在于它的模块化纹理构造方式。...

gitblog_00074的博客 620

texgen.js 开源项目教程

--- ## 项目介绍 **[texgen.js](https://github.com/mrdoob/texgen.js)** 是一个由 MrDoob 开发的 JavaScript 库,专注于纹理生成。它提供了多种算法来动态创建复杂纹理,这对于实时图形渲染、游戏开发以及任何需要程序化生成图像的Web应用程序而言是极其有用的工具。通过这个库,开发者能够无需预先处理大量的图像资源,而是利用代码在...

gitblog_00240的博客 482

手搓TexGen—机织复合材料参数化建模技术

最终得到的基础轨迹线见下图的红线,这个基础轨迹线十分重要,通过旋转、平移就可以获的更大的尺寸和数量。限于自身当时的技术能力,利用业余时间,我在一年后才勉强实现了一个简单平面机织的的胞元网格,并且可以导入到ABAQUS中使用。尽管那时候代码水平还比较基础,但就是这个执念让我不断研究在数值仿真中网格到底应该如何表达,几何如何转换为网格,有了网格应该如何渲染,如何把复杂的织造参数和网格构建联系起来。如果一切都是参数,那么经纱跨过纬纱的个数、穿越的层数都是参数化的,这就要求基础轨迹线的数学表达非常合理且高效。

jjyxy的博客 966

Oak引擎事件系统完全指南:实现流畅的用户交互体验

Oak引擎是一款纯Go语言开发的游戏引擎,其事件系统是构建流畅用户交互体验的核心组件。本文将详细介绍Oak引擎事件系统的工作原理、核心功能及实战应用,帮助开发者快速掌握事件驱动开发的精髓,轻松实现游戏中的各种交互逻辑。 ## 一、事件系统核心概念解析 事件系统是Oak引擎的神经中枢,它负责协调游戏中的各种交互行为。在Oak引擎中,事件系统主要通过`event.Bus`结构体实现,位于[even

gitblog_00274的博客 562

AI驱动的3D模型纹理生成方案:开启高效创作新时代

TEXGen不仅仅是一个工具;它是连接创意灵感和技术实现之间的桥梁,开启了3D纹理生成的新纪元。对于任何希望简化工作流程、提高效率或探索新的表达形式的人来说,TEXGen都是一个不可忽视的技术进步。如果您对TEXGen感兴趣或想了解更多详情,请访问TEXGen官方网站。通过上述介绍,我们可以看到TEXGen如何革新了3D纹理生成的方式,带来了前所未有的便捷性和创造性。随着这项技术的不断发展和完善,我们期待看到更多令人惊叹的作品诞生,并见证3D世界变得更加丰富多彩。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 532

【OSG学习笔记】Day 29: TexGen(自动纹理坐标)

本文介绍了OSG中的osg::TexGen类,它是一种自动生成纹理坐标的渲染状态工具,适用于模型未指定UV或需要程序化贴图的情况。文章详细讲解了其原理、类继承关系、核心模式(OBJECT_LINEAR)及完整实现代码。osg::TexGen通过平面方程将3D顶点坐标映射为2D纹理坐标,支持四种生成模式。代码示例展示了如何创建纹理状态、设置自动纹理坐标生成器,并将其与纹理绑定到同一单元。关键点包括物体空间线性映射原理、平面设置方法,以及使用OVERRIDE标志确保效果生效。该技术可有效简化纹理映射流程,提升渲

u012739527的博客 478

Sphere mapping 和 Cube mapping

Sphere mapping 和 Cube mapping也是常见的技术。 Sphere map更早,是较早提出的环境映射的方法。  Sphere mapping 是基于这样一个事实:将一个理想高反射的球体置于场景中央,从一个角度无穷远处拍摄此球体,将得到一张全景图。例如:  ---------------      -------------------- 当然说是全景图,但是在

xujiezhige的专栏 6067

3Dshader之球形环境映射(sphere environment mapping)

尼玛等了135天,终于第二个shader出炉了,哥,汗颜啊,真TM扯蛋,不过这几个月都在看一些基础图形的数学知识以及RTR,看了几本过后还是感觉实践才能真正理解所学的东西.好了废话不多说了,这个shader花了我三天的时间(准备的说是三个晚上)国际惯例,先上图:     换个角度

十年磨一剑 6854
上一篇: DirectX实现球面纹理映射
下一篇: 3D max模型导入unity 3D中注意事项
aikb6223
博客等级 码龄11年 17粉丝 193原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值