当前位置:网站首页>Alpha conversion from gamma space to linner space under URP (II) -- multi alpha map superposition
Alpha conversion from gamma space to linner space under URP (II) -- multi alpha map superposition
2022-07-05 17:23:00 【euphorias】
List of articles
Conduct post-treatment once GammaToLinner Transformation , Can achieve the correct effect
URP Next, uncheck the map SRGB,
Post processing script
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class CameraFeature : ScriptableRendererFeature
{
public Material Material; //UniversalRenderPipelineAsset_Renderer panel , Set the material
private MyVolumeFeaturePass myPass;
public override void Create()
{
myPass = new MyVolumeFeaturePass();
myPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(myPass);
myPass.SetValue(renderer.cameraColorTarget, Material); // Transfer camera images , And materials , to Pass Handle
}
public class MyVolumeFeaturePass : ScriptableRenderPass
{
// This method is called before executing the render pass.
// It can be used to configure render targets and their clear state. Also to create temporary render target textures.
// When empty this render pass will render to the active camera render target.
// You should never call CommandBuffer.SetRenderTarget. Instead call <c>ConfigureTarget</c> and <c>ConfigureClear</c>.
// The render pipeline will ensure target setup and clearing happens in a performant manner.
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
}
private Material Material;// Accept from Feature Material of panel settings
private RenderTargetIdentifier source;// Accept camera images
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
//if (renderingData.cameraData.camera.name != "UIMainCamera")
//{
// return;
//}
// Post execution processing
if (Material == null)
{
return;
}
CommandBuffer cmd = CommandBufferPool.Get();
//source // The source image
var dec = renderingData.cameraData.cameraTargetDescriptor; // Target image
RenderTargetHandle tempTargetHandle = new RenderTargetHandle();
cmd.GetTemporaryRT(tempTargetHandle.id, dec);
cmd.Blit(source, tempTargetHandle.Identifier(), Material);
// Core command CommandBuffer
cmd.Blit(tempTargetHandle.Identifier(), source); // amount to Graphics.Blit
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public void SetValue(RenderTargetIdentifier source, Material material)
{
Material = material; // Accept panel material
this.source = source;
}
}
}
Multiple post-processing problems
Because it is not specified UI The camera , Cause all camera pictures to be converted repeatedly , Need to specify only UI The camera performs GammaToLinner transformation ( The image can also be rendered once after all GammaToLinner transformation )
stay Execute The camera name exposed in the function is filled in on the panel , Determine whether it is the designated camera , Not a designated camera , No post-treatment
// Determine whether it is the designated camera
if (renderingData.cameraData.camera.name != cameraName)
{
return;
}
stay Redner Feature Fill in the camera name on the panel
Effect comparison
Complete reference code
CameraFeature
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class CameraFeature : ScriptableRendererFeature
{
public Material Material; //UniversalRenderPipelineAsset_Renderer panel , Set the material
private MyVolumeFeaturePass myPass;
public string CameraName="";
public override void Create()
{
myPass = new MyVolumeFeaturePass();
myPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(myPass);
myPass.SetValue(renderer.cameraColorTarget, Material, CameraName); // Transfer camera images , And materials , to Pass Handle
}
public class MyVolumeFeaturePass : ScriptableRenderPass
{
// This method is called before executing the render pass.
// It can be used to configure render targets and their clear state. Also to create temporary render target textures.
// When empty this render pass will render to the active camera render target.
// You should never call CommandBuffer.SetRenderTarget. Instead call <c>ConfigureTarget</c> and <c>ConfigureClear</c>.
// The render pipeline will ensure target setup and clearing happens in a performant manner.
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
}
private Material material;// Accept from Feature Material of panel settings
private RenderTargetIdentifier source;// Accept camera images
private string cameraName;
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
// Determine whether it is the designated camera
if (renderingData.cameraData.camera.name != cameraName)
{
return;
}
// Post execution processing
if (material == null)
{
return;
}
CommandBuffer cmd = CommandBufferPool.Get();
//source // The source image
var dec = renderingData.cameraData.cameraTargetDescriptor; // Target image
RenderTargetHandle tempTargetHandle = new RenderTargetHandle();
cmd.GetTemporaryRT(tempTargetHandle.id, dec);
cmd.Blit(source, tempTargetHandle.Identifier(), material);
// Core command CommandBuffer
cmd.Blit(tempTargetHandle.Identifier(), source); // amount to Graphics.Blit
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public void SetValue(RenderTargetIdentifier source, Material material, string cameraName)
{
this.material = material; // Accept panel material
this.source = source;
this.cameraName = cameraName;
}
}
}
PostGammaToLinner Shader
Use Amplify Even one , among _MainTex Is a must
边栏推荐
- 高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
- Is it safe to open an account for digging wealth stocks? How is it safe to open a stock account?
- thinkphp3.2.3
- 【beanshell】数据写入本地多种方法
- goto Statement
- 【机器人坐标系第一讲】
- American chips are no longer proud, and Chinese chips have successfully won the first place in emerging fields
- The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale
- ECU introduction
- What are the precautions for MySQL group by
猜你喜欢
dried food! Semi supervised pre training dialogue model space
项目引入jar从私服Nexus 拉去遇到的一个问题
【性能测试】jmeter+Grafana+influxdb部署实战
Rider 设置选中单词侧边高亮,去除警告建议高亮
Judge whether a number is a prime number (prime number)
composer安装报错:No composer.lock file present.
机器学习02:模型评估
stirring! 2022 open atom global open source summit registration is hot!
Etcd 构建高可用Etcd集群
SQL删除重复数据的实例教程
随机推荐
Browser rendering principle and rearrangement and redrawing
菜刀,蚁剑,冰蝎,哥斯拉的流量特征
Use byte stream to read Chinese from file to console display
SQL删除重复数据的实例教程
叩富网开期货账户安全可靠吗?怎么分辨平台是否安全?
齐宣王典故
一个满分的项目文档是如何书写的|得物技术
33:第三章:开发通行证服务:16:使用Redis缓存用户信息;(以减轻数据库的压力)
Embedded-c Language-3
ClickHouse(03)ClickHouse怎么安装和部署
项目引入jar从私服Nexus 拉去遇到的一个问题
Embedded UC (UNIX System Advanced Programming) -3
Embedded -arm (bare board development) -2
【剑指 Offer】63. 股票的最大利润
Rider 设置选中单词侧边高亮,去除警告建议高亮
【性能测试】jmeter+Grafana+influxdb部署实战
Application of threshold homomorphic encryption in privacy Computing: Interpretation
【testlink】TestLink1.9.18常见问题解决方法
Embedded-c language-6
[Jianzhi offer] 66 Build product array