CocosCreator v2.1.1에서 셰이더 사용
10682 단어 CocosCreator자바스크립트ShaderTypeScript
처음에
여러가지로 CocosCreator를 만지게 되었습니다만,
일본어 문서가 압도적으로 적다!
참고서가 압도적으로 적다!
그래서 구현 이전의 문제로 빠지는 일이 많은 상황입니다.
거기서, 같은 습관을 밟는 사람이 조금이라도 줄이면 하고 생각 기사를 썼습니다.
v2.1.1 버전에서 셰이더가 움직이지 않음
CocosCreator를 만지고 있는 분이라면 이해 받을 수 있다고 생각합니다만,
버전에 따라 메소드가 사라지거나 거동이 크게 바뀌거나 꽤 어려운 아이입니다.
셰이더에 대해서도 v2.0에서 대폭적인 변경이 걸렸다고 합니다.
htps : // ぢs 쿳 s. 여기 s2dx. rg / t / u-t-hapene d-u-th-c glp 로그 등 m / 44539
그 때의 해결책에 대해서도 v2.1.1판에서는 프로젝트의 실행조차 할 수 없는 상태.
과거는 되돌아 보지 않는 그 모습, 멋집니다. 현장은 아비규환입니다.
대답은 의외로 가까이 있었다
결론부터 말하면, 셰이더는 "Effect"라는 파일에 프로그램을 기재하는 형태가 된 것 같습니다.
오른쪽 클릭 → 「Create」의 일람에 확실히 존재하고 있었습니다.
CocosCreator를 만지고 있는 분이라면 이해 받을 수 있다고 생각합니다만,
버전에 따라 메소드가 사라지거나 거동이 크게 바뀌거나 꽤 어려운 아이입니다.
셰이더에 대해서도 v2.0에서 대폭적인 변경이 걸렸다고 합니다.
htps : // ぢs 쿳 s. 여기 s2dx. rg / t / u-t-hapene d-u-th-c glp 로그 등 m / 44539
그 때의 해결책에 대해서도 v2.1.1판에서는 프로젝트의 실행조차 할 수 없는 상태.
과거는 되돌아 보지 않는 그 모습, 멋집니다. 현장은 아비규환입니다.
대답은 의외로 가까이 있었다
결론부터 말하면, 셰이더는 "Effect"라는 파일에 프로그램을 기재하는 형태가 된 것 같습니다.
오른쪽 클릭 → 「Create」의 일람에 확실히 존재하고 있었습니다.
이상으로 셰이더를 반영할 수 있습니다.
실제로 해보자
이미지 준비
알기 쉽게 RGB 각각 255의 3색 화상을 작성
Effect 파일 만들기
이번은 자주(잘) 회색으로 하는 쉐이더를 작성하기 때문에, 「Gray」라고 하는 파일명으로 했습니다.
작성한 파일은 텍스트 형식이지만,
JS나 TS 파일과 같이 자동으로 에디터가 기동하지 않기 때문에, 수동으로 파일을 열어 주세요.
Gray.effect/**
* 灰色シェーダー
*/
%{
techniques : [
{
passes : [
{
vert : vs
frag : fs
cullMode : none
blend : true
}
]
layer : 0
}
]
properties : {
texture : {
type : sampler2D
value : null
}
}
%}
%% vs {
uniform mat4 cc_matViewProj;
attribute vec4 a_position;
attribute vec2 a_uv0;
attribute vec4 a_color;
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
void main() {
gl_Position = cc_matViewProj * a_position;
v_fragmentColor = a_color;
v_texCoord = a_uv0;
}
}
%% fs {
precision lowp float;
uniform sampler2D texture;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
const vec3 grayScale = vec3(0.298912, 0.586611, 0.114478);
void main() {
vec4 color = v_fragmentColor * texture2D(texture, v_texCoord);
float grayScaleColor = dot(color.rgb, grayScale);
gl_FragColor = vec4(vec3(grayScaleColor), color.a);
}
}
RGB 값의 가중치가 다른 것은 NTSC 가중 평균법이라고 하며, 흑백 TV에서 사용되고 있던 규격에 의한 것 같습니다.
만약 RGB값을 같은 가중치로 했을 경우, 이번 사용한 화상은 3색과도 같은 농도가 되어 버리기 때문에,
사람의 밝기의 느낌을 고려한 배분입니다.
Material 제작
Material을 새로 만들고 이름을 "Gray"로
방금 만든 Gray.effect 설정
texture는 아무것도 넣지 않아도 괜찮습니다.
스크립트 작성
제대로 확인할 수 있도록 간이적인 Script를 짜
Gray.tsconst {ccclass, property} = cc._decorator;
@ccclass
export default class Gray extends cc.Component {
@property({
// @ts-ignore
type: cc.Material,
displayName: "Material",
tooltip: "マテリアル"
})
material = null;
start () {
let sprite = this.node.getComponent(cc.Sprite);
sprite.setMaterial(0, this.material);
}
}
실행 결과
회색이 되었습니다!
RGB도 그렇게 되어 있네요.
보충
effect 파일의 내용에 대해서입니다만, uniform, attribute로 사용할 수 있는 변수명으로 조금 빠졌습니다.
이쪽은 CocosCreator 본체측에 있다
enums.js
forward-renderer.js
에 기재되어 있습니다.
마지막으로
Cocos는 버릇이 강합니다만, Unity에 비해 Web판에서의 기동이 빠르고, 메모리 소비가 적다고 하는 장점이 있는 일과
최근에는 HTML5 게임도 늘어나고 있으므로,
웹 브라우저를 메인으로 하는 게임 등에서는 선택지로서 개미라고 생각합니다.
후에는 VFX 툴이 충실하면 좋지만 ....
Reference
이 문제에 관하여(CocosCreator v2.1.1에서 셰이더 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Omega/items/2ee83efc9df44dee78e8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* 灰色シェーダー
*/
%{
techniques : [
{
passes : [
{
vert : vs
frag : fs
cullMode : none
blend : true
}
]
layer : 0
}
]
properties : {
texture : {
type : sampler2D
value : null
}
}
%}
%% vs {
uniform mat4 cc_matViewProj;
attribute vec4 a_position;
attribute vec2 a_uv0;
attribute vec4 a_color;
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
void main() {
gl_Position = cc_matViewProj * a_position;
v_fragmentColor = a_color;
v_texCoord = a_uv0;
}
}
%% fs {
precision lowp float;
uniform sampler2D texture;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
const vec3 grayScale = vec3(0.298912, 0.586611, 0.114478);
void main() {
vec4 color = v_fragmentColor * texture2D(texture, v_texCoord);
float grayScaleColor = dot(color.rgb, grayScale);
gl_FragColor = vec4(vec3(grayScaleColor), color.a);
}
}
const {ccclass, property} = cc._decorator;
@ccclass
export default class Gray extends cc.Component {
@property({
// @ts-ignore
type: cc.Material,
displayName: "Material",
tooltip: "マテリアル"
})
material = null;
start () {
let sprite = this.node.getComponent(cc.Sprite);
sprite.setMaterial(0, this.material);
}
}
effect 파일의 내용에 대해서입니다만, uniform, attribute로 사용할 수 있는 변수명으로 조금 빠졌습니다.
이쪽은 CocosCreator 본체측에 있다
enums.js
forward-renderer.js
에 기재되어 있습니다.
마지막으로
Cocos는 버릇이 강합니다만, Unity에 비해 Web판에서의 기동이 빠르고, 메모리 소비가 적다고 하는 장점이 있는 일과
최근에는 HTML5 게임도 늘어나고 있으므로,
웹 브라우저를 메인으로 하는 게임 등에서는 선택지로서 개미라고 생각합니다.
후에는 VFX 툴이 충실하면 좋지만 ....
Reference
이 문제에 관하여(CocosCreator v2.1.1에서 셰이더 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Omega/items/2ee83efc9df44dee78e8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CocosCreator v2.1.1에서 셰이더 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Omega/items/2ee83efc9df44dee78e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)