双拋面反射---一个听说比cubemap更省的方式?!+++++矫正的matcap的思路

2024-08-20 15:58

本文主要是介绍双拋面反射---一个听说比cubemap更省的方式?!+++++矫正的matcap的思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当不要脸已成习惯,当山峰也没有了棱角,当招人这么困难的时候,我还是在篇头植入的招聘。

坐标山东青岛市北,招聘日系画师,其他岗位目前公司没有说,有意思的可以入群私聊。


然后再说一下QQ群,山东手游研发聚集地335772557,进群先看公告,要是抱着我要学习的心态进群的话,那你就失望了,因为是个死群。

偶尔心情好的是时候会发个技术链接。

接下来进入正题!!

这篇文章我只是写个想法,如果想360度的立体,自己根据思路自己实现一下吧,可以跟帖讨论,反正我的博客也是个坟。


原理在下面的链接里,老外在08年就出paper了。。。这么久了。。

Shader "ShaderStore/LUT/DualParaboloidMapping1_ForReflect"
{Properties{_FrontTex ("Front Texture", 2D) = "white" {}_BackTex ("Back Texture", 2D) = "white" {}_Bias("Bias Offset",Range(0,1)) = 0.0}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 R : TEXCOORD1;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);float4 worldPos = mul(unity_ObjectToWorld,v.vertex);float3 worldNorm = mul(v.normal,unity_WorldToObject);float3 worldView = normalize(worldPos.xyz - _WorldSpaceCameraPos.xyz);o.R = reflect(worldView,worldNorm);return o;}sampler2D _FrontTex,_BackTex;fixed _Bias;fixed4 frag (v2f i) : SV_Target{float3 vR = normalize(i.R);if(vR.z > 0.0){float2 frontUV;frontUV = (vR.xy / (2.0*(1.0+_Bias+vR.z))) +0.5;frontUV.y = 1- frontUV.y;return tex2D(_FrontTex,frontUV);}else {float2 backUV;backUV = (vR.xy / (2.0*(1.0+_Bias-vR.z))) +0.5;backUV.x = 1- backUV.x;backUV.y = 1- backUV.y;return tex2D(_BackTex,backUV);}}ENDCG}}
}

这是篇老外的paper,本来不想收积分的,但是最低也得2分,没有积分的百度谷歌搜一下吧,一把一把的

https://download.csdn.net/download/u012871784/10319252


接下来说一下矫正的matcap的实现思路这里就不着手实现了

思路1:

弄一个球,贴上一个贴图,找个相机单独看它出个rt就是个matcap。然后常规matcap采样就可以了,这样就是实时光照的感觉。

思路2:

弄一张贴图

红框部分spherize一下然后采样。然后滚动uv,相当于思路1转球,这样就省去了rt

要是懒,spherize部分也可以不做,就直接滚动uv就可以了

目前就这么两种思路。

这篇关于双拋面反射---一个听说比cubemap更省的方式?!+++++矫正的matcap的思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代