RenderTexture with SteamVR differs from standard Unity camera
I'm currently working on a project, where I'm coloring 3d objects. The code is similar to here. Basically, I use an orthogonal camera that renders to a rendertexture, which is used as UV image in my material. In the beginning, it only "sees" a plane with a base image on it.
On painting, I create a 2d sprite at the correct position, in front of this render cam. This works fine.
Now, as Unity does not run smoothly with a lot of sprites, I try to reduce the load by combining the sprites into the base image with the Texture2D.ReadPixels()
command. This new texture is then set as the new base texture. Rinse and repeat.
This approach works flawlessly if I'm using the build-in Unity camera settings. As the project is intended for VR, I ported everything into a SteamVR project.
The runtime rendering is fine as well, only the save-as-png texture function starts to break. I included the links to the different images. The first is the Base Image, second the saved with "Unity only", last the saved with SteamVR textures. I only paint green circles as sprites upon them.
As you can see, the SteamVR has several problems in comparison with the unity only version:
- The alpha channel is detected as black, there is no fading
- The overall resolution becomes.. unstable? (see the numbers, they are getting blockier)
- The colors from block 1, 5 and 6 are wrong
I tried different formats for the renderTexture, UV texture (RGBA, ARGB, RGB). Apart from importing the SteamVR, nothing else has changed. What am I missing?
The rendering code is as follow:
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
plane.GetComponent<MeshRenderer>().material.mainTexture = tex;
Saving with
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath + fileName, bytes);
If necessary, I can upload the complete project.
Thanks for your help
Thomas
c# unity3d steamvr
add a comment |
I'm currently working on a project, where I'm coloring 3d objects. The code is similar to here. Basically, I use an orthogonal camera that renders to a rendertexture, which is used as UV image in my material. In the beginning, it only "sees" a plane with a base image on it.
On painting, I create a 2d sprite at the correct position, in front of this render cam. This works fine.
Now, as Unity does not run smoothly with a lot of sprites, I try to reduce the load by combining the sprites into the base image with the Texture2D.ReadPixels()
command. This new texture is then set as the new base texture. Rinse and repeat.
This approach works flawlessly if I'm using the build-in Unity camera settings. As the project is intended for VR, I ported everything into a SteamVR project.
The runtime rendering is fine as well, only the save-as-png texture function starts to break. I included the links to the different images. The first is the Base Image, second the saved with "Unity only", last the saved with SteamVR textures. I only paint green circles as sprites upon them.
As you can see, the SteamVR has several problems in comparison with the unity only version:
- The alpha channel is detected as black, there is no fading
- The overall resolution becomes.. unstable? (see the numbers, they are getting blockier)
- The colors from block 1, 5 and 6 are wrong
I tried different formats for the renderTexture, UV texture (RGBA, ARGB, RGB). Apart from importing the SteamVR, nothing else has changed. What am I missing?
The rendering code is as follow:
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
plane.GetComponent<MeshRenderer>().material.mainTexture = tex;
Saving with
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath + fileName, bytes);
If necessary, I can upload the complete project.
Thanks for your help
Thomas
c# unity3d steamvr
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01
add a comment |
I'm currently working on a project, where I'm coloring 3d objects. The code is similar to here. Basically, I use an orthogonal camera that renders to a rendertexture, which is used as UV image in my material. In the beginning, it only "sees" a plane with a base image on it.
On painting, I create a 2d sprite at the correct position, in front of this render cam. This works fine.
Now, as Unity does not run smoothly with a lot of sprites, I try to reduce the load by combining the sprites into the base image with the Texture2D.ReadPixels()
command. This new texture is then set as the new base texture. Rinse and repeat.
This approach works flawlessly if I'm using the build-in Unity camera settings. As the project is intended for VR, I ported everything into a SteamVR project.
The runtime rendering is fine as well, only the save-as-png texture function starts to break. I included the links to the different images. The first is the Base Image, second the saved with "Unity only", last the saved with SteamVR textures. I only paint green circles as sprites upon them.
As you can see, the SteamVR has several problems in comparison with the unity only version:
- The alpha channel is detected as black, there is no fading
- The overall resolution becomes.. unstable? (see the numbers, they are getting blockier)
- The colors from block 1, 5 and 6 are wrong
I tried different formats for the renderTexture, UV texture (RGBA, ARGB, RGB). Apart from importing the SteamVR, nothing else has changed. What am I missing?
The rendering code is as follow:
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
plane.GetComponent<MeshRenderer>().material.mainTexture = tex;
Saving with
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath + fileName, bytes);
If necessary, I can upload the complete project.
Thanks for your help
Thomas
c# unity3d steamvr
I'm currently working on a project, where I'm coloring 3d objects. The code is similar to here. Basically, I use an orthogonal camera that renders to a rendertexture, which is used as UV image in my material. In the beginning, it only "sees" a plane with a base image on it.
On painting, I create a 2d sprite at the correct position, in front of this render cam. This works fine.
Now, as Unity does not run smoothly with a lot of sprites, I try to reduce the load by combining the sprites into the base image with the Texture2D.ReadPixels()
command. This new texture is then set as the new base texture. Rinse and repeat.
This approach works flawlessly if I'm using the build-in Unity camera settings. As the project is intended for VR, I ported everything into a SteamVR project.
The runtime rendering is fine as well, only the save-as-png texture function starts to break. I included the links to the different images. The first is the Base Image, second the saved with "Unity only", last the saved with SteamVR textures. I only paint green circles as sprites upon them.
As you can see, the SteamVR has several problems in comparison with the unity only version:
- The alpha channel is detected as black, there is no fading
- The overall resolution becomes.. unstable? (see the numbers, they are getting blockier)
- The colors from block 1, 5 and 6 are wrong
I tried different formats for the renderTexture, UV texture (RGBA, ARGB, RGB). Apart from importing the SteamVR, nothing else has changed. What am I missing?
The rendering code is as follow:
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
plane.GetComponent<MeshRenderer>().material.mainTexture = tex;
Saving with
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath + fileName, bytes);
If necessary, I can upload the complete project.
Thanks for your help
Thomas
c# unity3d steamvr
c# unity3d steamvr
asked Nov 16 '18 at 10:08
TSchemmerTSchemmer
133
133
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01
add a comment |
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01
add a comment |
0
active
oldest
votes
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53335566%2frendertexture-with-steamvr-differs-from-standard-unity-camera%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53335566%2frendertexture-with-steamvr-differs-from-standard-unity-camera%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Show the complete function where you're calling ReadPixels from
– Programmer
Nov 16 '18 at 16:01